데이터 저장의 역사
![](https://velog.velcdn.com/images/ilov-/post/4ec72e34-3865-45b5-8f68-3dfa0cddbeb1/image.png)
90년대 이전 계층 구조 , 90년대 이후 계층 구조
- 온라인을 활용한 비즈니스가 증가하면서 데이터의 영속성은 반드시 필요했고 데이터베이스를 활용해 데이터들이 지워지지 않도록 하였다.
- 단순했던 Layerd Architecture는 클라우드 환경의 발달로 역할과 관심사를 세분화하여 위와 같이 계층을 나눔
- 브라우저를 통해 요청이 들어오면 Domain Model에서 가공을 통해 Persistence layer(JDBC, SQL Mapper, ORM)를 거쳐 영속성을 부여
한눈에 보기
![](https://velog.velcdn.com/images/ilov-/post/72547177-12e2-4437-b057-340bdd09386f/image.png)
01. JDBC(Java Database Connectivity)
- Java에서 DB에 접근하기위해 만든 API
- 여러 DB Driver를 제공하기 때문에 사용자는 어떠한 데이터베이스를 쓰든 동일한 접근 로직으로 접속 가능
![](https://velog.velcdn.com/images/ilov-/post/ee93d028-38a1-49f6-baad-667463248890/image.png)
동작순서
JDBC Driver 로드 -> DB 연결 -> Statement 생성 -> SQL문 전송 -> 결과 리턴 -> 연결 종료
1. DriverManage로 Connection 인스턴스를 받아옴
2. Statement를 이용하여 쿼리 실행
3. DB로부터 데이터 GET
단점
- 직접 작성해야 하는 코드 많음 -> 중복 코드 발생
- 커넥션을 관리해주어야 함
- DB별로 적절한 예외처리 필요 -> 이러한 불편함 해결을 위해 SQL Mapper 등장!
02. SQL Mapper
- 개발자가 직접 작성한 SQL문과 객체의 필드를 매핑하여 데이터를 객체화 해주는 프레임 워크
- DBMS에 따라 문법이 다르기 때문에 DBMS에 종속적
Spring JDBC(JDBC Template)
- JDBC에서 반복되는 작업들을 개발자가 하지 않아도 됨
MyBatis
- SQL을 xml파일에 작성해놓고 코드와 SQL을 분리하여 사용하는 방식
- 테이블의 필드가 추가되거나 삭제될 경우 이와 관련된 코드 수정 필요
- 여전히 SQL 의존적인 개발이라 많은 시간 소요
03. ORM(Object Relational Mapper)
- 관계형 데이터베이스와 객체지향은 설계 원칙이 다르기 때문에 사용 방법과 표현방식에 차이가 있을 수 밖에 (패러다임 불일치)
- 객체와 DB테이블을 매핑하여 데이터를 객체화하는 것으로 ORM 등장!
- 예) JPA, Hibernate, Spring Data JPA
- ORM은 객체간의 관계를 바탕으로 SQL을 자동으로 생성하고 메서드를 통해 조작
SELECT * FROM user -> userRepository.findAll();
장점
- SQL을 직접 작성할 필요없이 자바 코드만으로 SQL 사용가능 -> 유자보수 용이
- 필드가 추가되거나 삭제될 시 해당 엔티티만 수정하면 됨
단점
- 프로젝트가 복잡해질수록 어려움
- 복잡한 SQL의 경우 개발자가 직접 추가하여야 함(JPQL)
Layerd Architecture
Tech톡 JDBC, SQL Mapper, ORM
Tech톡 영상 정리 블로그