[TIL] 2025-02-04_일정관리_과제

Yuri·2025년 2월 4일

TIL

목록 보기
41/59
post-thumbnail

✏️ 일정 관리 앱 과제 해설 세션 & 과제 회고

과제 해설

🧑‍🎓 개인적으로 놓쳤던 요소 위주로 작성

프로젝트를 생성하고 어떤 것 부터 해야할지 막힌다면?

  • 3 Layer Architecture 패키지 구조 잡기
    (Entity, Dto, Controller, Service, Repository)
  • Entity, Dto 객체에 @Getter 추가

직관적인 함수명, 필드명

  • 등록일자 : createdAt
  • 수정일자 : updatedAt

→ 습관적으로 전 직장에서 쓰던 필드명으로 작명했는데 createdAt, updatedAt 으로 주로 쓰인다. (물론, 회사마다 다양하게 사용한다.)

Repository 의 리턴타입 통일

Repository는 엔티티에 의해 생성된 DB 테이블에 접근하기 위한 인터페이스 (Java → DB)

  • 엔티티에 데이터를 담아오면 된다. (JPA)

코드 Rename: shift + F6 (휴먼 에러 방지)

직접 수정하는 것보다 Refactor > Rename 으로 일괄 수정하여 실수를 줄이자.

@AllArgsConstructor / @RequiredArgsConstructor

  • @AllArgsConstructor는 모든 필드 생성자 (final이 없어도 된다.)

  • @RequiredArgsConstructorfinal 필수

    • 의존성 주입된 필드의 변경을 방지할 수 있다.
  • @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)

  1. SpringBoot 를 활용한 프로젝트 개발
    • springframework.boot: 프로젝트 개발에 필요한 대부분의 기능 제공
    • 의존성 추가가 편하고 버전 관리가 쉽다.
  2. Github Issues 사용
    • 이슈번호를 사용하여 변경 이력 관리
  3. Swagger UI 적용

아쉬운 점(Problem)

  1. 과제 요구사항 이해 부족 → 완성도가 부족하다.
  2. 심도 깊은 고민을 하지 않고 코드 따라치기에 급급했다.
    • 구조적 고민 ↓
    • 내가 작성한 코드를 완벽하게 이해했는지?
    • 개선할 사항은 없는지?

개선할 점(Try)

  1. 페이징 기능 개선
  2. Swagger 라이브러리 완벽하게 적용하기

→ 코드리뷰 이후 개선사항 추가 예정 ✨


📝 TODO

  1. 코드리뷰 후 피드백 반영
  2. JPA 강의 + 강의노트 정리

💭 Diary

Spring 을 적용한 첫 웹 프로젝트 과제가 끝났다. 기초적인 CRUD 를 구현하는 과제이지만 세부적으로 고민해야할 사항도 많고, Spring Boot 와 DB 연동으로 순수 자바로만 구현했던 지난 과제들과 보다 생각해야할 부분이 많았다. 과제 해설 이후에 어디서부터 개선해야할 지 아직 감이 잡히지 않는데 리뷰 이후 피드백 위주로 수정을 진행할 예정이다.

profile
안녕하세요 :)

0개의 댓글