티스토리 뷰
기존에 TIL쓰는 방식을 바꿔보기로했다.
어쨋든!
처음에 데이터를 가져올때 Entity를 하나하나 Get으로 값을 가져왔는데
DTO(Data Transfer Object)라는 계층간 데이터의 교환을 위해 사용하는 객체를 사용해야한다고 들었다.
이걸 왜 사용하는가에 해답은 Entity는 데이터베이스와 맞닿은 핵심 클레스이기 때문에 Entity를 직접적으로 변경하거나
꺼내와서 사용하게되면 좋지않다는 이야기.
Member라는 클래스를 정의하고, 생성자로 Member의 정보를 가져오는 녀석인 MemberInfoRequestDto를 통해 클라이언트가 입력한 값을 받아서 Member 생성자에서 불러와줌을 확인할 수 있다.
@NoArgsConstructor
@Entity
@Getter
public class Member {
@Id @GeneratedValue
private Long id;
private String name;
private String email;
private String pw;
public Member(MemberInfoRequestDto requestDto) {
this.name = requestDto.getName();
this.email = requestDto.getEmail();
this.pw = requestDto.getPw();
}
}
MemberInfoRequestDto
@Getter
@NoArgsConstructor
public class MemberInfoRequestDto {
private Long id;
private String name;
private String email;
private String pw;
}
클라이언트의 요청을 받는 controller
/**
* 가입
*/
@PostMapping("/member/join")
public void join(@RequestBody MemberInfoRequestDto requestDto) {
Member member = new Member(requestDto);
memberService.save(member);
}
controller의 요청을 받아 레파지토리와 소통하는 service
public Member save(Member member) {
return memberRepository.save(member);
}
그리고 Member를 조회하는 dto를 생성함에 있어서 기존에는 이렇게 코드를 작성했는데
@Getter
public class MemberInfoResponseDto {
private String name;
private String email;
public MemberInfoResponseDto(Member member) {
this.name = member.getName();
this.email = member.getEmail();
}
@Builder 어노테이션을 통해 메소드를 만들어서 dto타입으로 변환해주는 과정을 보다 직관적이게 바꿔주었다.
public MemberInfoResponseDto from(Member member) {
return MemberInfoResponseDto.builder()
.name(member.getName())
.email(member.getEmail())
.build();
}
Member를 단일 조회할때 사용한 서비스 부분인데 id값을 받아와서 memberRepository의 findById를 통해 값을 가져와서
Member타입인 member에 객체를 넣어서 MemberInfoRequestDto의 메소드인 from을 통해 MemberInfoRequestDto타입으로 감싸서 return 해주었다. 처음에는 좀 헷갈리는듯 했으나, 계속 쓰다보면 보기에도 좋고 유용하게 쓰일거같다는 생각.
public MemberInfoResponseDto findOne(Long id){
Member member = memberRepository.findById(id).orElseThrow(
() -> new IllegalArgumentException("에러발생")
);
MemberInfoResponseDto memberInfoResponseDto = new MemberInfoResponseDto().from(member);
return memberInfoResponseDto;
}
builder 관련 참고하면 좋은 블로그:https://jdm.kr/blog/217
빌더 패턴(Builder Pattern) :: JDM's Blog
간만에 작성하는 디자인 패턴 포스트입니다. 이번 포스트에서는 빌더 패턴Builder Pattern에 대해 알아보고자 합니다. Builder Pattern 빌더 패턴은 추상 팩토리 패턴이나 팩토리 메소드 패턴과는 조금
jdm.kr
'개발 > TIL' 카테고리의 다른 글
| pom.xml profiles에 따라 다른 배포 환경 설정 (0) | 2023.05.09 |
|---|---|
| SOLID 원칙 (0) | 2022.11.26 |
| 10.5 Entity (0) | 2022.10.05 |
| 10.4 HTTP, JPA (0) | 2022.10.04 |
| 9.30 Spring Container, DI (0) | 2022.10.01 |
- Total
- Today
- Yesterday
- DTO
- method
- badrequest
- JPA
- this
- 환경세팅
- POI
- 풀텍스트
- JPQL
- 김영한
- EntitiyManagerFactory
- JWT토큰
- Spring
- backoffice
- 항해99
- ajax
- EC2
- ssl
- 알고리즘
- wil
- DI
- python
- java
- 코드해석
- joinfetch
- 협업
- .jks
- instance
- querydsl
- IOC
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |