지금까지 spring, springboot를 간단하게 여러 번 훑어보았다. 이제 본격적으로 토이프로젝트를 시작하기 전에 간단하게 기초내용들을 한번 정리하려고 시작하려 한다.
JPA
JPA (Java Persistence API)는 자바 ORM 기술에 대한 API들이다. 인터페이스의 집합체이다. ORM이란 (Object-Relational Mapping) 객체와 관계형 데이터베이스 간의 차이를 중간에서 해결해 주는 기술이다. crud sql을 알아서 처리해 준다. jpa를 사용하기전에는 SQL문을 한줄 한줄 모두 작성해주어야했다고 한다. SQL문을 직접 작성해야하다보니 객체가 데이터 베이스에 추가되거나 수정 등을 하려면 다시 코드를 열어서 모든 SQL을 수정해야 한다. 하지만 jpa를 사용하면 필드만 추가하면 SQL은 jpa가 알아서 처리해준다. 이러한 점들 때문에 아직 SQL문이 익숙하지 않은 본인도 spring을 이용할 수 있었다. 또한 jpa를 사용하면 상속, 연관관계 (객체와 RDB 간의 패러다임 불일치 문제)등의 문제를 알아서 해결해 준다.
여기서 예시를 하나 들면 SQL문을 모두 작성해야 할 경우 테이블의 모든 엔티티들을 가져와야 할 시 SQL문을 모두 작성해야 하는데 사람이 직접 작성하다 보니 신뢰할 수 없는 데이터가 된다. 100개가 있는데 잘못 작성해서 99개만 적용되고 1개는 원하는 수정이 이루어지지 않았을 경우 치명적인 오류다. 하지만 jpa를 사용한다면 이를 걱정할 이유가 없다.
개발자는 SQL Mapper가 아니다 - 김영한
실제 서비스에서는 몇천, 몇만의 데이터가 존재하는데 이를 sql을 직접 작성하는 것은... 끔찍하다.
이러한 이유로 jpa를 사용하면 개발자는 sql문에 대한 고려를 많이 하지 않고 객체 중심의 개발을 할 수 있게 된다. 이로 인해 테스트 작성, 유지 보수 등에 이점이 생긴다.
jpa는 인터페이스의 집합체라고 하였기에 이를 구현해 놓은 프레임워크를 선택해야 한다. 마이바티스, 하이버네이트등 여러 프레임워크들이 있는데 하이버네이트가 대중적으로 사용 중이면 본인도 하이버네이트를 이용해 공부하였다.
결론: JPA는 객체와 데이터 베이스 간의 차이점을 중간에서 해결. 개발자는 객체 중심의 개발에 집중할 수 있고 SQL문을 일일이 작성하는 수고를 덜게 해 준다.
'Spring' 카테고리의 다른 글
[Spring] 나만 보는 스프링 사전(스프링 어노테이션) (0) | 2023.06.30 |
---|---|
[Spring JPA] 영속성 컨텍스트 완벽 이해!, 연관 관계 주인 mapping (cascade와 차이?) (0) | 2023.03.30 |
[Spring] @JoinColumn & 연관관계 맵핑 @Mappedby (외래키 주인? 연관관계 주인?) (1) | 2023.01.13 |
[Spring] Gradle vs Maven (빌드? 빌드 도구?) (0) | 2022.12.29 |
[Spring] 웹 스코프 (request) & 프록시 (2) | 2022.08.11 |