이제 알바가 끝났고, 알고리즘, web , spring , java에 온 전력을 다 할 것이다.
월요일부터 화이팅.
Spring boot의 핵심 기능과 구조에 대해서 간략하게 정리를 해보았다,
HTTP메서드, REST API에 대해서는 이 다음 회고에서 정리하도록 하고 이번 회고에서는 서비스 계층과 DTO에 대해서 설명을 해보려고 한다.
앞의 내용을 나중에 설명하는 이유는 앞의 내용이 더 중요한 내용들이 많아서 그렇기 때문이고 간략하게 설명하자면, 컨트롤러, 서비스, 리파지토리 이런 구조로 크게 3가지로 나뉠 수 있고, 컨트롤러에서 handler method를 통해 여러 기능들을 다양한 계층에게 처리하도록 요청 할 수있는데 현재 Service클래스가 없다면? 그것을 Controller의 hadler method에서 처리해야 한다는 단점이 있다. 즉.
controller와 비지니스로직을 담당하는 service 계층의 분리에 대해서 알아보겠다.
public class //Service {
public Member create~() {
return null;
}
public Member update() {
return null;
}
public Member find(ID) {
return null;
}
public List<> finds() {
return null;
}
public void delete() {
}
}
이런 식으로 비지니스 로직을 따로 분리해서 처리하는 것이다 즉. 이러한 클래스를 처리하려면 당연스럽게 Controller의 코드안에
들어가게 되는 것이다. 즉 여기서 DI의 개념이 들어가는 것이다.
이런식으로 컨트롤러에 Service의 클래스를 주입해야 하는 상황이 생기고, 이 것을 DI를 통해 처리할 수 있는데 @Autowired 와
@RequiredArgsConstructor
를 통해 처리할 수 있고, 그냥 의존성만 주입하려면 생성자를 통해 처리할 수 있다. 하지만 여기서 문제가 또 생긴다. 뭐냐하면
Controller에서 API즉 client에게 받은 요청들을 담은 변수들을 많이 담았을 때 그것을 모두 Service에게 보내려고 했을 때 파라미터 즉 전달값이 너무 많아진 다는 것이다. 이것을 어떻게 해결할 까 생각했지만, 여기서 나오는 개념이 DTO 개념이다.
public class Member {
private long memberId;
private String email;
private String name;
private String phone;
}
이렇게 전달 받을 인자값을 알 고 있다면 미리 Class를 통해서 객체를 만들 어 주는 것이다. 여기서 가장 중요한 것은 Entity개념인데 , 총 모두 가지고있는 성질들을 모아놓은 것을 Entity라고 하고, 그 중 보여주고 싶은 것이나 받고 싶은 것을 DTO를 통해서 작게 만들어서 처리를 하는 것이다 예를 들면
Email; 과 name;만 따로 빼서 받은 후 Member라는 entity로 변환을 해서 큰 틀로 저장을 하는 것이다. 그럼 여기서 또 다른 큰 개념이 나오게 된다. 그것이 바로 Mapper라는 개념이다. entitiy라는 최종 목적으로 반환하기 위해서는 일일이 개발자가 mapping을 해주는 방법이 있는데 spring에서는 의존성을 추가하면 이것을 자동으로 해준 다는 것이다.
implementation 'org.mapstruct:mapstruct:1.4.2.Final'
annotationProcessor 'org.mapstruct:mapstruct-processor:1.4.2.Final'
이 의존성을 추가해 줘야하고, *Lombok 의존성 밑에 추가해야한다. 아니면 에러가 날 가능 성이 크다.
그렇게 되면 DTO를 Entitiy에 메핑하는 코드가 생성되게 되고, 그것을 이용하면 끝이다. 여기까지가 DTO와 서비스를 공부하면서 정리 한 것이다. 이 뒤에는 더 중요한 부분을 설명해보도록 하겠다.
'부트캠프 > 코트스테이츠 백엔드 코스' 카테고리의 다른 글
30~31 (0) | 2023.04.27 |
---|---|
28~30회고 (0) | 2023.04.16 |
24일차 스프링 프레임워크 (0) | 2023.04.11 |
회고 20~23일차 (0) | 2023.03.29 |
회고 19일 (0) | 2023.03.20 |