일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- Mockito #Reflection #Sigleton #Test #JUnit
- LiveTemplate
- 외장톰캣
- spring
- Spring Framework
- autocomplete
- 톰캣
- 디자인패턴 #싱글톤
- tomcat
- Today
- Total
자라선
[자바 ORM 표쥰 JPA 프로그래밍] 1일차 - JPA를 사용하는 이유 본문
JPA는 Java Persistence API 로 자바의 ORM 프레임워크이다.
객체지향 프로그래밍 언어인 자바를 관계형 데이터베이스와 같이 관계를 맺어
자바의 객체와 데이터베이스의 테이블과 서로 매핑시켜주는 프레임워크이다.
자바 개발자들은 DB에서 CRUD를 하기 위해서 매번 테이블을 찾고 SQL를 짜고 코드에 삽입하는 과정을 진행하는데
이러한 과정은 프로젝트가 커지면 커질 수록 많아져 추후에는 관리하는데 SQL만 주구장창 수정할 경우도 생긴다.
이때 JPA를 사용한다면 손쉽게 수정할 수 있을 뿐더러 프로젝트의 전반적인 생산성, 유지보수성, 테스트에도 편리해져 버그도 줄여질 수도 있다.
JPA는 객체와 테이블을 매핑하였기 때문에 데이터베이스의 비중을 줄이고 자바에 비중을 높아 지는데 데이터 중점으로 개발을 진행하지 않고 객체 중점으로 개발을 진행하기 때문에 더욱 더 객체 지향 자바 개발에 비중이 높아지게된다.
이 밖에는 다음과 같다.
1. 반복적인 SQL 작성으로 코드의 복잡성 및 유지보수 관리가 힘들어진다.
일반적으로 자바에서 JDBC API를 사용하여 쿼리를 작성해 DB에 요청하게 된다.
쿼리를 작성하여 쿼리의 파라미터를 넣어 SQL를 실행 간단해 보이는 작업이지만
이것이 컬렉션으로 보관되어 리스트형식을 저장하고 싶고 싶다던가 쿼리가 50개, 100개가 넘어간다면
하나하나 추가해주느라 쿼리에만 붙잡혀 있게 될 것이다.
우리는 어플리케이션을 개발하러 왔지 SQL를 짜러온 것이 아닌데 말이다....
2. 의존적인 SQL
개발을 진행하는데 있어 언제든지 개발된 소스들이 수정될 수가 있다.
이럴 경우 SQL에 의해 상당한 시간을 잡아먹게 되는데. 예를 들어 테이블의 컬럼이 하나가 추가가된다면
그 테이블에 관계된 모든 소스코드들에게 영향을 끼치게된다.
추가된 컬럼을 조회해야한다면 조회하는 SQL를 수정하여 컬럼을 추가하고. 소스코드도 추가된 컬럼을 가져올 수 있도록 수정해야한다. 동시에 추가된 컬럼을 수정해야하는 기능이라면 똑같이 UPDATE 쿼리에서 항목을 추가해주어야 한다.
프로젝트 개발단계에서는 상황에 따라 테이블이 언제든지 변동이 될 수가 있고 그 테이블을 정규화가 진행되어 분할되는 경우도 있을 수 있다. 그러면 이런 경우마다 계속 코드를 수정해주어야하나?
이렇게 SQL 하나 때문에 번거로운 작업을 계속 진행해야만하나? 복잡해진다 ..
반대로 JPA는 이 문제들을 어떤 식으로 해결하냐하면 다음과 같다.
- 저장 기능
jpa.persist(member); // 저장
위의 jpa.persist는 저장하는 기능을 담당하는데 단순히 위와 같이 객체를 파라미터로 주입시켜준다면
JPA는 적절한 INSERT 문을 자동으로 생성하여 DB에게 요청하게된다.
- 조회 기능
String memberId = "helloId";
Member member = jpa.find(Member.class, memberId); // 조회
jpa.find 는 해당 객체를 DB에서 불러와 조회하게 된다. 추가 파라미터에 값을 넣어 조건도 넣을 수도 있다.
JPA는 자동으로 적절한 조건에 부합하는 SQL를 생성하게된다.
- 수정 기능
Member member = jpa.find(Member.class, memberId);
member.setName("이름변경"); // 수정
희안하게도 JPA는 별도의 수정 기능을 따로 제공해주진 않는데 대신에 find로 데이터를 조회 후 조회한 데이터를 트랜잭션하기 전 값을 변경한다면 변경된 값이 DB에 커밋되어 반영이 된다.
이건 보면서도 신기하다..
- 연관된 객체 조회
Member member = jpa.find(Member.class, memberId);
Team team = member.getTeam(); // 연관된 객체 조회
기존의 SQL에서 테이블끼리 조인하여 연관된 데이터를 조회하기 위해서는 JPA에서는 위 코드와 같이만 작성해주면 된다.
'Develop > JPA' 카테고리의 다른 글
[자바 ORM 표쥰 JPA 프로그래밍] 4일차 - 객체 매핑 및 설정 (0) | 2021.03.17 |
---|---|
[자바 ORM 표쥰 JPA 프로그래밍] 4일차 - 책 예제 환경 구축 (0) | 2021.03.17 |
[자바 ORM 표쥰 JPA 프로그래밍] 3일차 - JPA 란? (0) | 2021.03.13 |
[자바 ORM 표쥰 JPA 프로그래밍] 2일차 - 패러다임의 불일치 (0) | 2021.03.10 |
[자바 ORM 표쥰 JPA 프로그래밍] 책 구매 (0) | 2021.03.04 |