T.I.L

캘린더 프로젝트 후기

skawlsgus2 2024. 8. 16. 11:47

2024.08.15

캘린더 프로그램

1. 클래스 다이어그램

2. API 명세서

3. EDR

4. 느낀점

Spring을 처음 접하고 시간에 쫓겨 만든 프로그램이었다. 아무것도 모르는 상태에서 주어진 과제를 수행하며 느낀 점을 끄적여본다.

 패키지 구조

패키지 구조

구성했던 패키지에 대해 하나씩 설명하자면, controller 패키지에는 ScheduleController 라는 클래스가 존재한다. 여기서는 Schedule과 관련된 엔드포인트에 해당하는 메서드들을 관리하며 어떤 데이터를 받아서 클라이언트에게 무엇을 전달할지 정의해 두었다. 추상화하자면 하나의 건물의 출입구를 정의해 둔 클래스라고 보면 된다.

 

건물에 비유했으니 끝까지 설명해보자. 건물 내부로 들어가면 출구 쪽으로 나가기 위해 거쳐야하는 방들이 있다. 그 중 첫번 째 방이 service 패키지의 ScheduleService 클래스이다. 여기서는 ScheduleController 에서 넘겨받은 객체(requestDto) 정보를 바탕으로 DB와 연결되어있는 다음 방 repository 패키지의 ScheduleRepository 클래스로 요청을 보낸다. 조금 더 정확히 말하자면,  ScheduleRepository 클래스에 정의되어 있는 메서드를 사용하여 클라이언트에게 반환할 객체(ResponseDto)를 받아온다. 즉 DB와 컨트롤러 사이에 길을 만들어 주는 클래스라고 생각하면 편하다. 



 

두 번째 방은 잠깐 언급했던 repository 패키지의 ScheduleRepository 클래스이다. 여기서는 ScheduleService 에서 사용할 수 있는 여러 메서드들을 정의해 두고 각 메서드는 DB에 직접적으로 요청을 보낼 수 있는 SQL 쿼리가 담겨있다. 해당 쿼리들을 통해 DB에서 데이터를 받거나 업데이트하고 반대로 DB에 데이터를 저장하는 기능을 한다. 

 

클라이언트로 부터 올바른 URL 과 유효한 파라미터로 정의된 요청을 받으면  ScheduleController 클래스에서 정의된 메서드로 데이터가 보내진다. 이 때 파라미터는 @RequestParam 이나 @PathVariable 로 받을 수 있고, 내용은 @RequestBody 나 @ModelAttribute 를 사용해 객체로 바꿔줄 수 있다. 여기서 말하는 객체가 바로 dto 패키지에 정의된  requestDto 객체이다. 즉, 클라이언트로 부터 Json 형식으로 데이터를 전달받으면 Spring 에서 @RequestBody 를 통해 해당 내용을  requestDto 객체로 만들어준다. 

 

requestDto 객체는 ScheduleController 클래스에서 매개변수로  ScheduleService 클래스에 전달되는데 이때 requestDto 객체가 가지고 있는 정보(클라이언트로 부터 전달받은 내용) 와 다른 여러 정보를 담여 Schedule 객체를 생성해 낸다. 여기서 다른 여러 정보라는 것은 구체적으로는 Schedule 객체는 가졌지만 requestDto  에는 없는 하위 필드들을 말한다. 

 

Schedule 객체를 생성하면 이것을 DB에 저장해야하므로 Schedule 객체를 매개변수로 ScheduleService 클래스에서 ScheduleRepository 클래스로 전달한다. 이 때 ScheduleRepository 클래스에 정의된 메서드들을 사용해 DB에 쿼리문을 보낸다. 만약 DB에서 찾은 내용을 사용자에게 보내고 싶다면 DB에서 가져온 데이터를 바탕으로 반환 객체(responseDto) 의 하위 필드를 채워 반환해준다.