미소를뿌리는감자의 코딩
ORM과 Spring 탄생 배경 본문
1. ORM
ORM stands for... Object-Relational Mapping 이다.
객체 지향 프로그래밍 언어를 사용하여 호환되지 않는 유형의 시스템 간에 데이터를 변환하는 프로그래밍 기술이다.
즉, 간단히 말하면 객지프 언어를 사용, 호환되지 않는 것을 가져와서 이용하기 위함. 이라고 할 수 있을 것 같다.
구체적으로 이야기 해보면, ORM은 DB의 table을 object로 mapping하여 DB의 record에 대한 작업을 객체 지향적으로 수행할 수 있도록 해준다.
-> 이를 통해서 ... SQL 쿼리를 직접 작성하는 대신, 객체의 속성과 메서드를 사용하여 데이터를 조작할 수 있다.
장점 vs. 단점
1) 장점
- 생산성과 유지보수성 향상: ORM을 사용하면 반복적인 CRUD(Create, Read, Update, Delete) 작업을 위한 SQL 쿼리를 직접 작성하지 않아도 된다. -> 개발 시간 단축, 코드 가독성 + 유지보수성 향상.
- 데이터베이스 독립성: ORM 사용시, application 코드를 변경하지 않고도 다른 종류의 데이터베이스 시스템으로 쉽게 전환할 수 있음.
how? ORM 라이브러리가 제공하는 추상화 레이어 덕분.
즉, 데이터 베이스 시스템 전환이 용이하다. 왜냐? ORM 라이브러리가 추상화 레이어 제공.
- 객체 지향적 접근: DB' table을 객체로 mapping. OOP의 장점을 데이터베이스 작업에 적용 가능.
- 트랜잭션 관리, 캐싱 같은 고급 데이터베이스 관리 기능 제공. -> applicaiton의 성능과 안정성을 향상시킬 수 있다.
* 트랜잭션: 하나 이상의 데이터베이스 작업을 묶어서 하나의 작업으로 처리. 즉, 삽입, 갱신, 삭제 등을 묶어서 하나의 작업으로 처리
2) 단점
- 성능 저하: ORM < 직접 작성한 SQL쿼리;
why? ORM의 추상화 레이어 때문에 발생하는 추가적인 계산이 원인일 수 있음.
- 복잡한 쿼리의 어려움: 매우 복잡한 쿼리 or 최적화가 필요한 경우, ORM을 사용하여 표현하기 어렵거나 비효율적일 수 있음.
how? 이럴 때는 ORM과 함께 원시 SQL 쿼리를 사용할 필요가 있을 수 있음.
대표적인 ORM 라이브러리
- Python: Django의 ORM, SQLAlchemy
- Java: Hibernate
- Ruby: ActivateRecord (Ruby on Rails)
- PHP: Doctrine, Eloquent (Laravel)
총평:
ORM은 DB 작업을 객체 지향적 방식으로 쉽게 처리할 수 있게 해주는 강력한 도구 but, application의 요구 사항과 성능 목표를 고려하여 적절히 사용해야 함.
2. Spring
1) 스프링이 나오게 된 사회적 배경
Spring이 나오기 전, EJB가 있었다.
EJB stands for... Enterprise Java Beans -> 자바 진영의 표준 기술
자바에서 표준으로 만든 것이기 때문에, 많이 이용이 되었다. 오픈 소스에 대한 신뢰 보다는, 자바라는 정석인 곳에서 내놓은 것이기 때문에 많이 사용됨.
장점:
- 트랜잭션, 분산 기술...과 같은 고급 기술들이 편하게 지원됨
- EJB: Entity Beans라는 ORM 기술도 가지고 있었음.
단점:
- 비쌌었음. (2000년대 초반)
- 어렵고, 복잡하고, 느림. -> 개발하기 어려움. 코드가 지저분해 짐.
- test code, container를 띄우는 데 오래 걸림.
- Entity Beans : 기술 수준이 낮았음.
POJO 까지 나오게 됨. [ Plain Old Java Object ] "순수한 구식 자바 객체"
- Java에서 특정 규약이나 프레임워크, 클래스를 상속받지 않는 간단하고 정통적인 자바 객체.
- EJB와 같은 복잡한 자바 엔터프라이즈 규격에 대한 반응으로 등장.
2명의 개발자: Gavin King, Rod Johnson -> EJB보다 사용하기 편한 오픈소스를 만듦.
Spring: Rod Johnson이 spring이라는 오픈 소스를 만듦.
Hibernate : Gavin King이 Hibernate라는 EJB entity Beans를 대체하는 기술을 만듦. [Hibernate 도 ORM]
사람들이 점차, Entity Beans를 사용하지 않고 Hibernate를 더 사용하기 시작하였다. 이에 자바의 표준을 만드는 곳에서, Hibernate를 만든 Gavin King을 데리고 와서, Hibernate와 거의 유사 (똑같이) JPA 를 만들었다. 이후 이를 자바 표준으로 사용하였다.
JPA[표준 인터페이스] = JPA 구현체들이 합해진 것
= 하이버네이트 + EclipseLink + 기타 ... (하이버네이트 90% 이상 사용 차지)
하이버네이트: 실제 개발진들이 사용하던 기술이었지만, 표준이 아니었기 때문에 용어 정리나 정제와 같은 부분에서 조금 부족했었다.
하지만, JPA로 들어오게 되면서 실제 개발진들이 사용하던 기술 + 용어 정리 + 정제가 되니 실용성 + 안정성이 합쳐져서 성공적으로 사용되고 있다.
<스프링의 역사>
- 2002년 Rod Johnson 책 출판
- 유겐 휠러[Juergen Hoeller], Yann Caroff[얀 카로프] -> 오픈 소스 프로젝트 제안
이후 ... 많은 출시 ~
* 2014년 스프링 부트 출시 -> 설정하는 것에 도움을 줌.
2) 스프링이란
스프링 : 여러가지 기술들의 모음
필수: 스프링 프레임워크, 스프링 부트
선택: 스프링 데이터, 스프링 세션, 스프링 시큐리티, 스프링 Rest Docs, 스프링 배치, 스프링 클라우드
스프링 부트는 스프링 프레임워크를 편리하게 사용할 수 있도록 도와주는 아이이다.
- 초기 설정에 많은 도움을 준다.
스프링을 왜 만들었는가? - 핵심 개념
- 자바 언어 기반의 프레임 워크 -> 객체 지향의 언어가 가진 강력한 특징을 살려내도록 도와주는 프레임 워크
- 제대로된 객체 지향 프로그래밍을 할 수 있도록 도와주는 '도구'
'코딩 이야기' 카테고리의 다른 글
[Intellij] How to change project name (0) | 2024.03.02 |
---|---|
[github] private repository에 project 올리기 (0) | 2024.03.02 |
python의 sort()의 시간 복잡도 (0) | 2024.02.21 |
Counter, hash table, 그리고 python에서는 조금 다른 시간 복잡도 (1) | 2024.02.07 |
map, lambda와 enumerate - python (0) | 2024.02.06 |