일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 클린 코드
- PostgreSQL 설치 시 에러
- Word Cloud
- 바이오데이터 엔지니어
- Codeforces
- c#
- git
- 디자인 패턴
- 프로그래머스 월간 코드 챌린지
- 프로그래머스 코딩테스트 연습
- 프로그래머스 코딩 테스트 연습
- github
- selenium
- 스코페2021
- Firefox
- 애드센스
- PostgreSQL
- 파이썬
- Spring Boot
- 프로그래머스 월간 코드 챌린지 시즌1
- heroku
- github actions
- WPF
- terraform
- pycharm
- 스프링 부트와 AWS로 혼자 구현하는 웹 서비스
- Python
- 프로그래머스 코딩테스트 연습문제
- 브랜디
- FastAPI
- Today
- Total
프로그래밍 연습하기
스프링 부트와 AWS로 혼자 구현하는 웹 서비스 -3장- 본문
3장에서는 JPA로 데이터베이스를 다루게 된다.
JPA에 대해 설명해주고 데이터베이스를 다루는 코드들과 테스트를 작성해보게 된다.
SQL을 사용하는 것은 많은 단순 반복작업, 객체지향 프로그래밍과 패러다임이 맞지 않는 등의
문제가 있다.
JPA는 객체지향적 프로그래밍을 관계형 데이터베이스에 맞게 SQL을 대신 생성하여 실행해준다.
JPA는 인터페이스이고 사용하기 위해 구현체가 필요한데, 이 프로젝트에서는 Hibernate를 사용한다.
그 구현체를 좀 더 쉽게 추상화시켜 Spring Data JPA라는 모듈을 이용한다.
JPA <- Hibernate <- Spring Data JPA 와 같은 관계를 이루고 있다.
이렇게 한번 더 감싸놓은 이유는 구현체와 저장소 교체의 용이성을 위함이다.
Hibernate 이외의 구현체를 쓸 수도 있고, 관계형 데이터베이스 이외의 저장소로 교체 할 수 있기 때문이다.
따라서 Hibernate와 같은 것을 직접 쓰기 보다는 Spring Data 프로젝트(JPA, Redis, MongoDB)를 권장하고 있다.
하지만 JPA는 그만큼 높은 러닝커브가 단점이 되기도 한다.
프로젝트 구현을 하면서 domain 패키지를 만들게 된다.
domain이란 소프트웨어에 대한 요구사항 혹은 문제 영역이라고 생각하면 된다.
어노테이션 @Entity는 테이블과 링크될 클래스이고 기본값으로 클래스의 카멜케이스 이름을 언더스코어 네이밍으로 매칭한다.
Entity 클래스에서는 Setter 메소드를 만들지 않는다. 무작정 생성하면 인스턴스 값들이 언제 어디서 변하는지
명확하게 구분이 힘들어지기 때문이다.
따라서 필드의 값 변경이 필요할 경우, 명확히 목적과 의도를 나타내는 메소드를 추가하여 사용한다.
Setter가 없다면 어떻게 값을 채울것인가? 생성자를 통해 최종 값을 채운 후 삽입하고, 메소드 호출을 통해 변경한다.
생성자 대신에 Builder를 사용하는데, Builder는 어느 필드에 어느 값을 채우는지 명확하게 표현되는 장점이 있다.
@Transactional 어노테이션은 다양한 속성을 지원하여 트랜잭션 중에 발생하는 상황에 어떻게 할것인지 설정할 수 있다.
또한 기본적으로 정상여부에 따라 Commit이나 Rollback을 한다.
JPA Auditing으로 생성시간/수정시간을 자동화 할 수 있다.
데이터가 언제 삽입되었는지, 수정되었는지는 꼭 필요한 정보이기 때문에 많은 곳에 필요하지만
그만큼 반복작업과 코드의 양이 늘어나게된다.
JPA Auditing을 이용해 공통적인 칼럼을 만들고 그것을 상속하여 자동으로 해결할 수 있다.
이 장을 진행하면서 에러가 두 번 정도 났었는데, 코드 작성 중에 오타가 있었다.
찾는데 시간이 조금 걸려서 내가 코드에 대한 이해도가 좀 부족하다는 생각이 들었다.
'Spring Boot' 카테고리의 다른 글
스프링 부트와 AWS로 혼자 구현하는 웹 서비스 -6장,7장- (0) | 2020.07.13 |
---|---|
스프링 부트와 AWS로 혼자 구현하는 웹 서비스 -5장- (0) | 2020.07.12 |
스프링 부트와 AWS로 혼자 구현하는 웹 서비스 -4장- (0) | 2020.07.11 |
스프링 부트와 AWS로 혼자 구현하는 웹 서비스 -2장- (0) | 2020.07.10 |
스프링 부트와 AWS로 혼자 구현하는 웹 서비스 -1장- (0) | 2020.07.10 |