✏️ 일정 관리 앱 과제 해설 세션 & 과제 회고
과제 해설
🧑🎓 개인적으로 놓쳤던 요소 위주로 작성
프로젝트를 생성하고 어떤 것 부터 해야할지 막힌다면?
- 3 Layer Architecture 패키지 구조 잡기
(Entity, Dto, Controller, Service, Repository)
- Entity, Dto 객체에
@Getter 추가
직관적인 함수명, 필드명
- 등록일자 : createdAt
- 수정일자 : updatedAt
→ 습관적으로 전 직장에서 쓰던 필드명으로 작명했는데 createdAt, updatedAt 으로 주로 쓰인다. (물론, 회사마다 다양하게 사용한다.)
Repository 의 리턴타입 통일
Repository는 엔티티에 의해 생성된 DB 테이블에 접근하기 위한 인터페이스 (Java → DB)
코드 Rename: shift + F6 (휴먼 에러 방지)
직접 수정하는 것보다 Refactor > Rename 으로 일괄 수정하여 실수를 줄이자.
@AllArgsConstructor / @RequiredArgsConstructor
-
@AllArgsConstructor는 모든 필드 생성자 (final이 없어도 된다.)
-
@RequiredArgsConstructor는 final 필수
- 의존성 주입된 필드의 변경을 방지할 수 있다.

-
@Autowired 를 사용하는 방식은 추천하지 않음 → 옛날 방식의 코드 👴🏻
- not recommended

RESTful API ⇒ @DeleteMapping()
DELETE 메서드에서 인증/인가에 필요한 정보를 어디에 담아서 요청해야할까?
- URL query string parameter ❌
- Request Body parameter ❌
- DELETE 는 HTTP Request Body를 가지지 않는게 원칙
- body에 포함되어 있으면 요청을 거절해버리는 서버가 많다.
- Request Header parameter ✅
- DELETE → POST ✅
- 굳이 DELETE 메서드를 고집할 필요가 없다면, Request body에 필요한 정보를 담고, POST 메서드 요청 메세지를 보내는 것도 나쁘지 않은 방법이다.
- POST와 구분하기 위해 URI에 컨트롤 메서드를 추가할 수도 있다.
💭 개인적으로는 DELETE 요청 메소드가 클라이언트의 요청 의도가 명확하게 드러나기 때문에 POST 메소드보다 DELETE 메소드를 사용을 선호한다.
🔗 참고자료
[API 설계] DELETE request 요청/처리/응답에 관한 소소한 고민
@RequestBody requestDto
- Setter 나 생성자를 작성하지 않아도 Controller 에서 JSON 데이터를 받아 requestDto 객체에 값을 받아올 수 있다.
- 내부적으로 jackson 라이브러리를 이용, key-value 값을 파싱하여 필드값과 키값을 매핑하여 value 값을 저장
- Reflections 라이브러리가 private 필드를 public 으로 강제 변경 후 직접 접근하여 값을 저장한다.
- reflection: 자바에서 클래스나 멤버에 대한 정보를 런타임에 조사하고, 조작할 수 있는 기능
무분별한 인터페이스 사용
인터페이스를 활용하는 건 상황이 거의 정해져있을 때 → “대명사” 쓸 때
- MessageQueue
- SQS, Kinesis, AmazonMQ, Kafka, RabbiMQ
- Database
- MySQL, MSSQL, Oracle, MariaDB, ...
→ 무분별한 인터페이스 사용은 코드를 읽기 힘들게 한다.
회고
배운 점(Keep)
- SpringBoot 를 활용한 프로젝트 개발
- springframework.boot: 프로젝트 개발에 필요한 대부분의 기능 제공
- 의존성 추가가 편하고 버전 관리가 쉽다.
- Github Issues 사용
- Swagger UI 적용
아쉬운 점(Problem)
- 과제 요구사항 이해 부족 → 완성도가 부족하다.
- 심도 깊은 고민을 하지 않고 코드 따라치기에 급급했다.
- 구조적 고민 ↓
- 내가 작성한 코드를 완벽하게 이해했는지?
- 개선할 사항은 없는지?
개선할 점(Try)
- 페이징 기능 개선
- Swagger 라이브러리 완벽하게 적용하기
→ 코드리뷰 이후 개선사항 추가 예정 ✨
📝 TODO
- 코드리뷰 후 피드백 반영
- JPA 강의 + 강의노트 정리
💭 Diary
Spring 을 적용한 첫 웹 프로젝트 과제가 끝났다. 기초적인 CRUD 를 구현하는 과제이지만 세부적으로 고민해야할 사항도 많고, Spring Boot 와 DB 연동으로 순수 자바로만 구현했던 지난 과제들과 보다 생각해야할 부분이 많았다. 과제 해설 이후에 어디서부터 개선해야할 지 아직 감이 잡히지 않는데 리뷰 이후 피드백 위주로 수정을 진행할 예정이다.