코딩과 결혼합니다

230804 - SpringBoot 에서 JPA 환경설정 / 기술 스택 선정 이유 본문

코딩과 매일매일♥/Seoulvival

230804 - SpringBoot 에서 JPA 환경설정 / 기술 스택 선정 이유

코딩러버 2023. 8. 4. 21:58
728x90

환경설정


// build.gradle

implementation 'org.springframework.boot:spring-boot-starter-data-jpa'

//application.properties : Hibernate 설정

spring.jpa.hibernate.ddl-auto=update

spring.jpa.properties.hibernate.show_sql=true
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.properties.hibernate.use_sql_comments=true
  • show_sql, format_sql, use_sql_comments 옵션
    • Hibernate가 DB에 요청하는 모든 SQL을 보기 좋게 출력
  • ddl-auto
    • create : 기존 테이블 삭제 후 다시 생성합니다. (DROP + CREATE)
    • create-drop : create와 같으나 종료시점에 테이블을 DROP
    • update : 변경된 부분만 반영합니다. ( 테이블이 없으면 만들어주고, 있으면 안 만들고)
    • validate : Entity와 테이블이 정상 매핑되었는지만 확인
    • none: 아무것도 하지 않는다.

 

//SpringBoot 환경에서는 EntityManagerFactory와 EntityManager를 자동으로 생성

@PersistenceContext
EntityManager em;

@PersistenceConext 애너테이션을 사용하면 자동으로 생성된 EntityManager를 주입받아 사용할 수 있다.

 


JPA


JPA 사용 이유

SQL 중심적인 개발을 하게 되면 많은 문제점들이 있는데 CRUD를 작업하며 SQL문은 무수히 반복하게 되고, 

필드를 추가해야 할 경우 쿼리문을 모두 변경해야 하는 일이 발생한다. 그리고 객체답게 모델링할수록 맵핑 작업이 계속해서 늘어나게 된다.

JPA는 이러한 과정(SQL)들을 자동화해 주고, 코드 한 두줄로도 로직을 작성할 수 있다.

JPA는 자바 진영의 ORM 기술 표준으로 
ORM이란 객체 관계 매핑을 말하는데 객체는 객체대로, 관계형 DB는 관계형 DB대로 설계하고 ORM 프레임워크가 중간에서 매핑을 해준다.

JPA를 사용하면

  • SQL 중심적 개발에서 객체 중심으로 개발이 가능하고
  • 생산성이 높아지고
  • 유지보수가 편하며
  • 성능 또한 높아진다.
  • 패러다임 불일치 또한 해결해 준다.

앞으로 프로젝트를 진행하며 계속해서 사용할 테이블이 늘어나고 그것을 잘 관리하기 위해서는 JPA 기술을 사용하는 게 필수적으로 느껴졌다. JPA를 사용함으로써 개발의 시간이 크게 줄 것이고, 그 시간을 다른 기능을 좀 더 정교하게 구현하는데 쓴다면 짧은 시간 동안 조금 더 완성적인 프로젝트 개발을 할 수 있을 것 같다.

 

JPA 공부 이유


다만, 아무리 좋은 기술이라도 잘 모르고 쓴다면 아무 소용없을 것이다. JPA를 잘 모르는 상태에서 개발을 한다면 지금처럼 한 두 개의 테이블을 관리하는 데는 크게 어려움이 없겠지만 앞으로 복잡한 객체와 테이블을 사용하게 되었을 때에는 오히려 더 많은 시간들이 걸릴 것이다. 그리고 그때는 아마도 어떠한 문제를 해결하는 데에도 바빠 공부할 시간이 없을 것 같다. 그래서 프로젝트 초기인 지금 나를 포함한 팀원들이 각자가 앞으로 다룰 기술들에 대하여 공부하는 시간을 가지는 중이다. 그렇게 나는 JPA에 대한 기초를 다시 다지게 되었다. 확실히 같은 주제에 대해 반복적으로 공부하다 보니 전보다는 더 이해하기 쉽게 다가온다.

 

계획이 늘 계획대로 이루어지지는 않지만 일단은 이렇게 계획표를 짜놓고 내일까지는 JPA에 대한 개념을 어느 정도 잡으려 한다. 사실 이전에 JPA를 직접 다뤄보기도 했고, 지금 하는 프로젝트에서도 환경설정도 하고 구현도 해놓았지만 확실히 이번에 배운 게 앞으로 많은 도움을 주리라 믿는다. 그렇게 될 것이다!