이 글은 책 「스프링 부트와 AWS로 혼자 구현하는 웹 서비스」를 공부하고 정리한 글입니다.
이번 시간에는 다양한 DB 접근 방법과 JPA 특징에 대해서 알아보도록 하겠다.
웹 서비스를 개발하고 운영하다 보면 데이터베이스를 다루는 일은 필수적이다.
Spring을 이용하여 데이터베이스를 사용하는 방법은 다음과 같이 다양하다.
- 순수 Jdbc (Java Database Connectivity)
- Database에 접근하기 위한 Java의 표준 API
- low level 코드를 작성해야 한다. → 코드의 양이 많아진다.
- Jdbc Template
- JDBC를 효율적으로 사용하기 위한 Spring API
- JDBC를 그냥 사용하는 것보다 훨씬 코드의 양이 적어진다.
- SQL Mapper
- SQL과 Java 객체를 매핑하는 기술
- SQL의 input 또는 output을 Java 객체와 매핑
- ORM (Object Relational Mapping)
- RDBMS의 테이블과 Java 객체를 매핑하는 기술
- ORM Framework가 객체와 테이블을 매핑하는 역할을 수행한다.
- ORM Framework가 SQL을 자동으로 생성한다.
Jdbc는 별도의 학습 없이 개발이 가능하며 안정적이고 유연한 기술이지만,
다음과 같은 이유로 개발의 효율성이 떨어진다는 한계점을 갖는다.
SQL Mapper와 ORM는 위와 같은 Jdbc 프로그래밍을 직접 하지 않도록 기능을 제공해주는 Persistence Framework
이다.
💡 Persistence Framework란
데이터베이스와의 연동되는 시스템을 빠르게 개발하고 안정적인 구동을 보장해주는 프레임워크를 의미한다.
SQL Mapper는 Jdbc에 비하면 효율적이지만, 여전히 직접 데이터베이스 쿼리를 작성해야 하기 때문에 실제로 개발하는 시간보다 SQL을 다루는 시간이 더 많아지는 경우가 발생하게 된다.
SQL Mapper의 문제점까지 해결하기 위해, JPA라는 자바 표준 ORM이 등장하게 되었다.
아직 SI 환경에서는 Spring & MyBatis
를 많이 사용하지만, 자사 서비스를 개발하는 곳에서는 SpringBoot & JPA
를 전사 표준으로 사용하고 있다.
그러므로 이번 프로젝트에서는 JPA를 사용하도록 하겠다!
현대의 웹 애플리케이션에서 관계형 데이터베이스(RDB, Relational Database)
는 빠질 수 없는 요소이며, 이로 인해 객체를 관계형 데이터베이스에서 관리하는 것은 무엇보다 중요해졌다.
이러한 RDB는 SQL만 인식할 수 있기 때문에 점점 모든 코드가 SQL 중심으로 변하게 되는데, 이러한 SQL 중심 개발은 지루한 코드의 무한 반복
과 패러다임의 불일치
라는 문제점을 갖는다.
하나씩 자세히 살펴보자.
CRUD SQL
을 다 만들어줘야 한다.→ 너무 비효율적이며, SQL에 의존적인 개발을 할 수 밖에 없다.
JPA는 이러한 문제들을 해결하기 위해서 등장하게 되었다.
객체 중심으로 개발을 하게 되니 생산성도 향상되며 유지보수가 용이해진다. 이런 점 때문에 JPA는 규모가 크고 365일 24시간, 대규모 트래픽과 데이터를 가진 서비스에서 점점 표준 기술로 자리 잡고 있다.
JPA는 인터페이스로 인터페이스인 JPA를 사용하기 위해서는 구현체가 필요하다.
구현체로 Hibernate
, Eclipse Link
등이 있지만 Spring에서 JPA를 사용할 때는 이 구현체들을 직접 다루지 않는다. 그 대신 구현체들을 좀 더 쉽게 사용하고자 추상화시킨 Spring Data JPA
라는 모듈들을 이용하여 JPA 기술을 다룬다.
💡 JPA, Hibernate, Spring Data JPA의 관계
JPA ← Hibernate ← Spring Data JPA
Hibernate를 쓰는 것과 Spring Data JPA를 쓰는 것은 큰 차이가 없지만, 그럼에도 스프링 진영에서는 Spring Data JPA를 권장하고 있다.
이렇게 한 단계 더 감싸놓은 Spring Data JPA가 등장한 이유는 다음과 같다.
JPA를 잘 쓰려면 객체지향 프로그래밍과 관계형 데이터베이스를 둘 다 이해해야 하기 때문에 높은 러닝 커브를 가진다. 하지만 그만큼 JPA를 사용해서 얻는 보상은 크다.
JPA에서는 여러 성능 이슈 해결책들을 이미 준비해놓은 상태이기 때문에 이를 잘 활용하면 네이티브 쿼리만큼의 퍼포먼스를 낼 수 있다.
앞으로 만들 게시판의 요구사항은 다음과 같다.
- 게시판 기능
- 게시글 조회
- 게시글 등록
- 게시글 수정
- 게시글 삭제
- 회원 기능
- 구글/네이버 로그인
- 로그인한 사용자 글 작성 권한
- 본인 작성 글에 대한 권한 관리
다음 시간에는 JPA를 적용해보자!
https://deveun.tistory.com/entry/SQL-Mapper%EC%99%80-ORM-%EC%B0%A8%EC%9D%B4
https://velog.io/@mmy789/JPA-Basic-JPA%EB%9E%80