미소를뿌리는감자의 코딩

ORM과 Spring 탄생 배경 본문

코딩 이야기

ORM과 Spring 탄생 배경

미뿌감 2024. 2. 21. 18:28
728x90

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, 스프링 배치, 스프링 클라우드

 

스프링 부트는 스프링 프레임워크를 편리하게 사용할 수 있도록 도와주는 아이이다.

- 초기 설정에 많은 도움을 준다.

 

스프링을 왜 만들었는가? - 핵심 개념

- 자바 언어 기반의 프레임 워크 -> 객체 지향의 언어가 가진 강력한 특징을 살려내도록 도와주는 프레임 워크

- 제대로된 객체 지향 프로그래밍을 할 수 있도록 도와주는 '도구'

 

 

728x90