=====
@RequestBody 의 작동 방식
https://kim-jong-hyun.tistory.com/60
setter로 값 넣는게 아니다. ( 맨 마지막 줄에 나옴 )
요약하자면 getter 또는 setter 메서드의 'get', 'set' 부분을 때어내고 앞의 영문을 소문자로 바꿔서 body에 들어온
key와 같을때 매핑한다고 한다
By default Jackson maps the fields of a JSON object to fields in a Java object by matching the names of the JSON field to the getter and setter methods in the Java object.
Jackson 기본 설정 : getter, setter 이름으로 json필드, 엔티티필드 파싱
=====
이해가 안됨.
-> 220906 이해는 됨.
=====
[#25] 데이터베이스 이중화 적용
마지막 줄 : 조회쿼리는 slaveDB에서 처리하게 하자.
[#25] MASTER와 SLAVE 데이터베이스에 대한 타입을 상수로 정의하는 클래스 생성
enum 한번씩 읽어보자. type을 선언 후 들어오는 값 "MASTER", "SLAVE" 를 생성자에 넣고 getType으로 가져올 수 있다.
# Transaction이 readOnly인지 여부에 따라서 데이터베이스를 선택할 수 있는 RoutingDataSource 클래스 생성
AbstractRoutingDataSource 상속 후 determineCurrentLookupKey 메서드 오버라이드. Transaction이 readOnly 면 SLAVE DB 선택.
# [#25] MASTER와 SLAVE DataSource 설정 및 RoutingDataSource를 적용한 LazyConnectionDataSourceProxy를 DataSource로 사용하도록 설정
이거부터 3개가 데이터베이스 이중화 적용
220906 이해함
=====
DTO 기본생성자, getter, setter
이 글 다 읽어보기.
# 결론
- @RestController에서 @RequestBody의 바인딩은 Jackson라이브러리의 ObjectMapper가 해준다.
- (JacksonMessageConverter 는 ObjectMapper)
- ObjectMapper는 @RequestBody가 생성을 위임한 경우가 아니라면 기본 생성자로 생성한다.
- 따라서 위 상황이 아니라면 기본 생성자는 꼭 필요하다. (@NoArgsConstructor가 필요한 이유)
- ObjectMapper는 Setter와 Getter로 DTO의 필드를 가져온다. (set, get 빼고 필드명 같은 거 가져오는 방식)
- 그리고 setter를 사용하는 것이 아니라 reflection을 사용해서 필드 값들을 넣어준다.
- 따라서 DTO에 사용할 필요가 거의 없는 Setter보다 프로덕션 코드에 사용되거나 테스트에서 필요한 Getter를 넣는게 좋다. (쉽게 말해, Setter 또는 Getter 둘 중 하나만 있으면 되는데 Getter를 넣자!)
'Code Analysis > daangn-market-used-trading' 카테고리의 다른 글
[#47] 사용자 비밀번호 변경시 예외처리 (0) | 2022.09.05 |
---|---|
요청과 응답으로 엔티티(Entity) 대신 DTO를 사용하자 (0) | 2022.09.05 |
[#14] 거래 게시판 기능 구현 (0) | 2022.09.05 |
#1 프로젝트생성 ~ #7 회원관리 및 회원탈퇴 기능 (0) | 2022.09.04 |