[따라하기] 2-5. Service

허성재's avatar
Aug 27, 2024
[따라하기] 2-5. Service
 
컨트롤러는 요청(유효성,인증체크)과 응답(View, Data)만 잘하면 된다.
Repo는 DB랑 CRUD, 파싱만 잘하면 된다.
그럼 나머지는 전부 Service(트랜잭션 관리, DTO만들기)가 한다.
 
notion image
 
서비스를 만들어봤다. AutoWired인제 안쓴다 변수에 final과 롬복의 @RequiredArgsConstructor 만 있다면 화면들 더 간결하게 만들수 있다. 이 친구도 Ioc컨테이너에 넣기위해 @Service를 붙혀준다.
참고로 @Service든 @controller든 다 @Component 컨포넌트들이다.
 
notion image
 
컨트롤러의 작동을 더 간단하게 만들 수 있다. 상세보기를 눌렀을 때 필요한 정보만을 전부 DTO에 넣어 보내주기만 하는 역할을 하여 지할일만 하게 만들었다.
 
notion image
선생님은 DTO의 관리를 해당 패키지안에 Request용도와 Response용도에 따라 구분을 지어놓으셨다.
보면 Board객체 Request 요청과 응답중 어디에 쓰는건지를 정해주고 그밑에 스태틱 클래스로 어느 기능에 쓸 DTO인지를 적었다.
 
그럼 DTO는 어떻게 만드느냐
notion image
이것이 초기버전이다.
상세보기를 들어갔을때 필요한 title, content, username이 필요하고 선생님가라사대 어떻게 수정이 될지 모르기 때문에 각 테이블의 id를 넣어주라 하셨다.
마지막으로 DTO를 만들게된 isOwner이라는 Boolean값이 있다 이게 뭐냐면
notion image
 
 
인제 내가 쓴 게시글에만 수정과 삭제가 나온다.
{{>layout/header}} <div class="container p-5"> <!-- 수정삭제버튼 --> {{#model.isOwner}} <div class="d-flex justify-content-end"> <a href="/board/{{model.boardId}}/update-form" class="btn btn-warning me-1">수정</a> <form action="/board/{{model.boardId}}/delete" method="post"> <button class="btn btn-danger">삭제</button> </form> </div> {{/model.isOwner}} <div class="d-flex justify-content-end"> <b>작성자</b> : {{model.username}} </div> <!-- 게시글내용 --> <div> <h2><b>{{model.title}}</b></h2> <hr/> <div class="m-4 p-2"> {{model.content}} </div> </div> </div> {{>layout/footer}}
이건 해당 view이다..
 
이렇게 끝나지 않았다. 보면 DTO의 변수이름과 해당 엔티티의 이름이 다르다. 그런 이유는 같은 Id값이 두번 들어가니 이럴 수 밖에 없다. 그리고 data 방식으로 보냈을 때 보기 싫다.
 
notion image
그리하여 새로나온 V2여기보면 DTO안에 UserDTO를 또 넣어서 구분을 시켜버린다. 기가 맥힌다. 이게 사용이되는것도 아직은 좀 신기하다. 하여튼 board의 필요한 정보, User의 필요한 정보들만 쏙쏙 넣어서 쏴준다.
컨트롤러, 서비스 정도만 V2적어주고 view에서 살짝만 바꿔주면 아주 잘 작동한다.
{{>layout/header}} <div class="container p-5"> <!-- 수정삭제버튼 --> {{#model.isOwner}} <div class="d-flex justify-content-end"> <a href="/board/{{model.id}}/update-form" class="btn btn-warning me-1">수정</a> <form action="/board/{{model.id}}/delete" method="post"> <button class="btn btn-danger">삭제</button> </form> </div> {{/model.isOwner}} <div class="d-flex justify-content-end"> <b>작성자</b> : {{model.user.username}} </div> <!-- 게시글내용 --> <div> <h2><b>{{model.title}}</b></h2> <hr/> <div class="m-4 p-2"> {{model.content}} </div> </div> </div> {{>layout/footer}}
 
Share article

heo-gom