[회고] 코드숨 스프링 12기 4주차

개발자 춘식이·2022년 12월 5일
0

CodeSoom

목록 보기
4/8
post-thumbnail

4주 차 회고록

4주 차는 JPA를 맛보기로 써봤다. 회사에서는 iBatis, MyBatis를 쓰는데 JPA는 언제쯤 쓸 수 있을까? 다음 회사는 꼭! 스프링부트와 JPA를 사용하는 곳을 가고 싶어서 이참에 JPA책도 구매했다.🤭 TDD로 구현하는 것이 과제의 목표 중 하나였는데, 나 같은 경우 일단 로직을 다 구현해놓고 테스트는 나중에 작성했는데 과제 풀이 영상을 보니 하나하나 그때마다 필요한 기능을 구현하고 나서 테스트해서 빠르게 되는지 안 되는지 빠르게 반복해가면서 작성해야한다는 것을 느꼈다. Git 커밋 메시지도 되도록 커밋 컨벤션대로 작성하고자 했다! 🤗


4주 차 Keyword

  • 클린 아키텍처 : 클린 아키텍처는 소프트웨어를 계층으로 분리해 관심사를 분리하는 아키텍처이다. 보고 싶은 중 하나가 클린 아키텍처인데 내가 과연 아키텍처까지 고려할 수 있는 실력인가 싶어서 구매는 아직 안 했지만 2023년에는 꼭 읽어보고 싶다.
  • Entity : 객체지향에서의 Entity는 식별자를 가진 객체를 말한다. Entity, Dto, Vo, Dao는 항상 헷갈린다.
  • JPA : JPA는 자바 진영의 ORM(Object-Relational Mapping) 기술 표준이다. 쿼리를 따로 작성하지 않아도 알아서 CRUD를 도와준다. 물론 쿼리도 직접 작성할 수 있다! 처음 JPA를 알았을 때 완전 신세계였다. ㅋㅋㅋㅋ
  • @PathVariable : 코드숨 과제를 하면서 처음에는 @RequestParam으로 지정했다가 컨트롤러 테스트를 해보니 에러가 발생했다. 대신 @PathVariable을 사용했더니 되는 것이었다..! 간단하게 말하자면 @PathVariable@Requestmapping의 URL에 {}안에 들어가는 path variable을 받는다. (쿼리 스트링X)
  • @RequestParam : 쿼리 파라미터로 넘어오는 파라미터를 메소드 파라미터에 넣어준다. 따라서 과제에서는 @GetMapping("/{id}") 이런 식으로 되어 있어 path variable을 받아야 하는데 @RequestParam을 사용하니 에러가 나는 게 당연지사였다. 😓

코드 리뷰 코멘트

📌 ProductServiceImpl처럼 뒤에 Impl가 붙는 게 사실 좋은 이름은 아니다. 적절한 이름을 찾지 못해서 그냥 Impl을 붙이는 것이기 때문이다.

📌 테스트를 작성할 때는 모든 게 올바르게 동작하는 경우인 Happy path를 먼저 작성하고 난 후 나머지 다른 예외 케이스를 단계적으로 구현하는 것이 좋다.

📌 테스트 시 신뢰할 수 있는 객체를 하나 만들자.

📌 given은 주어진 상황이 달라질 때이다. 아래 예시를 보면 given은 로그인하지 않은 사용자와 로그인 한 사용자고, 이게 달라질 때를 명확하게 드러내기 위해서 context 같은 것으로 표현한다.

예) 특정 API를 호출하는 것을 테스트하고 있다고 가정해 보면
/some-api는 로그인하지 않은 사용자가 요청하면 403 Forbidden을 응답한다
/some-api는 로그인한 사용자가 요청하면 something을 응답한다

📌 Controller에서 인터페이스에 의존해야 다른 ProductService를 구현하는 다른 서비스로 변경해도 Controller에는 영향이 없을 것 같다.


마무리

저번 주부터 <구글 엔지니어는 이렇게 일한다> 북 스터디도 참여하게 되었다. 읽기를 미루고 미루던 책이었는데 마침 타이밍이 좋아 신청했다. 벌써 코드숨을 한 지 한 달이 지났다. 부디 초심 잃지 않고 남은 한 달도 열심히 공부해 12월을 잘 마무리하고 싶은 마음이다.

profile
춘식이를 너무 좋아하는 주니어 백엔드 개발자입니다.

0개의 댓글