JPA 이야기 01 편 - 시작해봅시다.
포스트
취소

JPA 이야기 01 편 - 시작해봅시다.

JPA 란 무엇인가?

JPA(Java Persistence API)는 자바 진영의 ORM 기술 표준입니다.

그럼 ORM 이란?

ORM(Object-Relational Mapping)은 객체와 관계형 데이터베이스를 매핑한다는 뜻입니다. ORM 프레임워크는 객체와 테이블을 매핑해서 애플리케이션과 데이터베이스 언어간의 패러다임 불일치 문제를 개발자 대신 해결해줍니다. 예를 들어, 데이터를 저장할 때 개발자가 데이터베이스 DML로 INSERT INTO 구문을 직접 작성하는 것이 아니라 Java에서 객체를 생성해 컬렉션에 저장하면 ORM 프레임워크가 적절한 INSERT SQL 문을 작성하여 데이터베이스에 넘겨주는 것이죠.

JPA 시작하기

왜 JPA 를 사용하게 됐나?

저는 원래 파이썬 웹 개발자였습니다. Django에서는 이미 ORM 기술을 당연한듯 사용하고 있었습니다. 하지만 회사 프로젝트에 참여하기 위해 Java Spring 개발자로 전향했었고 그 당시 프로젝트에서는 Mybatis를 사용하고있었습니다. Django로 웹개발을 하던 제 입장에서 봤을 때 비지니스 서비스를 구현하면서 SQL문을 짜고 매핑하는 과정 자체가 굉장히 귀찮게 느껴졌었습니다. 또한 개발속도도 굉장히 느렸었죠. ‘Django 쓰면 나 혼자해도 2~3배는 빨리할거같은데?’라는 생각을 하면서 말이죠… 그래서 ‘Java 기반 프레임워크는 원래 이렇게 구린가?’ 같은 의문을 품게되었습니다. 하지만 찾아보니까 Spring에는 이미 JPA라는 훌륭한 ORM 기술이 있었습니다!

생각보다 쉽지 않았다…

새 프로젝트가 결정되고 JPA를 적용시키고자 했지만 쉽지않았습니다. JPA의 러닝커브가 생각보다 높았기 때문입니다. 물론 사전 준비를 위해 이전에 토이프로젝트를 만들어봤었지만 실제로 부딪혀보니 엔티티를 설계하기 위해 많은 어노테이션의 기능을 알아야했고 n+1 문제, OneToOne 구조에서 Lazy 로딩이 생각처럼 동작하지않는 등 해결해야할 과제의 연속이었습니다. SQL에 익숙한 선임 개발자분들의 비판도 있었습니다. 프로젝트 초기에는 ‘그냥 SQL문 짜는게 낫지’라는 분위기가 컸으니까요. 하지만 하나씩 문제를 해결해가며 레퍼런스가 쌓이고 프로젝트가 순항하기 시작하자 개발속도에 가속도가 붙기 시작했고 현재의 저로썬 다시는 Mybatis로 돌아가고싶지않게 됐습니다 ㅎㅎㅎ…

서론

이 이야기는 제가 JPA를 도입하기 위한 일지라고 보시면 될 것 같습니다. 부족한 부분도 많을거라고 생각합니다만 JPA를 처음 시작하시는 동료 개발자분들이 제가 겪은 시행착오를 조금이라도 줄일 수 있었으면 좋겠습니다. :D

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.

도커를 이용한 로컬 데이터베이스 구축

JPA 이야기 02 편 - 다양한 연관관계 매핑