HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
👏
[3차] 최종 프로젝트 공지 페이지
/
👍🏿
[최종 프로젝트] 선배 개발자와의 소통 일지
/
🔥
팀 07 백엔드 코칭 일지
🔥

팀 07 백엔드 코칭 일지

기입 일자
Jul 29, 2022 08:57 AM
기록 유형
질의응답(코칭)
날짜
멘토
우기
분야
백엔드
 
7/2207/2507/2808/0508/07 (중간 멘토링)도메인 설명 부족도메인테스트엔티티 데이터 삽입 방법을 통일하는게 좋다조회랑 업데이트를 분리해서 생각해라엔티티에 최대한 비지니스로직을 담기예외 메시지중요 엔티티 삭제Reaction 엔드 포인트얘기를 많이 해라Querydsl 알림 처리 → 할 수 있음요청/응답 처리로직 ReadME
 

7/22


  • 프론트와 협업
    • API 설계에서 조회는 프론트에 의존적이다. 따라서 필수적인 데이터 예를 들면 식별번호 같은 데이터만 미리 설계하고, 자세한 사항은 프론트에 맞게 개발하는걸 추천한다.
    • API 설계에서 CUD는 ERD 설계가 완료된 시점에서는 프론트에 의존적이지 않게 결정할 수 있다.
 
  • 웹에서 익스텐션까지 제공하면 괜찮은 프로젝트가 될 것 같다.
 
  • 프로젝트 설계
    • 멀티 모듈을 생각해 봤으면 좋겠다.
 
  • API 래핑
    • ResponseEntity는 살작 오버엔지니어링 같다.
    • 자세한 점은 프론트와 말해보면 좋을 것 같다.
 
  • 테스트 순서
    • 팀간 테스트 작성 순서를 정하는 것도 좋다.
      • ex) 성공 테스트 작성 후 실패 테스트
        • Why - 테스트 결과를 볼때 한눈에 볼 수 있다.
 
  • final을 필수로 쓰기로 했으면 실수를 방지해주는 tool이 있다. (나중에 공유해 주겠다.)
 
  • 조회 응답 Dto 재활용? → 해보고 무엇이 문제인지 파악해보자!
 
  • 예외
    • 사용자 메세지 : 커스텀 exception
    • 버그/공격 메세지: 런타임류 exception
 
  • 테스트 관련
    • 도메인 테스트 - 도메인 테스트는 대부분 의존대상이 다른 도메인 객체라서 mockup 할 이유가 없습니다.
      리포지토리 테스트 - query를 직접 짠것이 아니라면 굳이 테스트 할 이유는 없습니다. JPA 의존적이라는 생각을 할 수도 있지만, 변화가능성이 0에 수렴할 법한 기술을 갈아끼울수있다고 생각하고 개발하는건 오버엔지니어링 이라고 생각합니다.
      서비스 테스트 - 다른 서비스 혹은 너무 복잡한 데이터세팅 (예를들면 통계성 데이터) 같은 경우는 mockup 해도 괜찮습니다.
      API 테스트 - api 테스트에서 mockup 해서 슬라이스 테스트를 하는건 사실 통합테스트로 바라보지 않는다는 관점입니다. 해당 관점으로 테스트해도 무방합니다 하지만, 통합테스트는 필요하죠. restTemplate 같은걸로 호출해 테스트하는 방법으로 통합테스트를 해줘야 할 필요성이 있습니다. 보통 이렇게 테스트 해버리게되면 사실 두번 일하는 것으로 느낄 가능성이 크고 실제로도 그렇습니다. 그래서 저는 API 테스트를 통합테스트로 바라보고 슬라이스테스트 하지 않습니다.
      외부시스템 - mockup 해야 할 대상입니다. 외부 시스템 우리가 제어할 수 없습니다. end to end 테스트에서 실제로 실행되는것을 테스트해야합니다.
      각 계층별 테스트마다 검증해줘야 할 범위와 대상이 분명합니다.한 번씩 생각해보는 시간 가져보시죠
 
 
mock check → repository는 글쎼?
transaction 키워드는 service는 필요합니다
repository @Transcation ?
controller @Transcation ?
classic(멘토님께서는 이 방법이 Good) vs mokist(요새 win) TDD
Video preview
 
  • 이번 프로젝트는 DDD로 했으면 좋겠다.
    • DDD 고려 비즈니스 로직이 Domain에 들어가면서 domain에 대한 생각들을 많이 하게 된다.
 
  • 지금 당장 필요한 건 CICD가 아니라 도메인에 대한 제대로 된 이해
    • CICD 한다면 Jenkins 추천 github action 후짐;
    • 신입으로 큰 회사에 들어가면 CI/CD는 관여하지 못할 확률이 높음.
    • CI/CD 환경에서 개발하는 경험은 중요하지만, CI/CD에 보다는 도메인에대한 이해가 더 우선이다.
 
  • 인프라 스트럭쳐 말고는 왠만하면 mocking 하지 않습니다 - 토비님 회사
 

인텔리제이를 멋지게 쓰는게 중요하다.
테스트 뿐만 아니라 엔티티 에서도 작성 순서를 중요도 대로 하면 좋다.
 

07/25

우기 멘토님 : 카테고리는 고정이니 엔티티가 아니라 이늄을 으로 관리하는 것이 어떨까?
만약 초기데이터가 필요한 경우다 라면
  1. 플라이웨이에 넣는다
  1. 관련 서비스쪽에 포스트컨스크럭트 같은걸로 필요데이터가 있는지 확인 후 없으면 세이브하도록 로직 넣어준다
  1. 어드민 같은 페이지에서 수동으로 넣는다
  1. 수동으로 인서트 쿼리를 실행한다
이런 방법들이 있다
가장 중요한건 변화 라는 키워드
자주 변할만한 곳은 충분히 객체지향적으로 잘 구조화할 필요가 있고, 아닌곳은 절차지향적으로 짜도 된다
 

07/28

픽스처 만드는데 유용한 프로젝트 소개해주심
Getting Started
Tip Getter and Setter is not mandatory. You could generate immutable instances by Fixture Monkey with BuilderArbitraryGenerator or JacksonArbitraryGenerator. You would not need to change anything for using Fixture Monkey. Choose the way of instantiating. Check out details here. Last modified October 9, 2021 : Update doc 0.3.1 (6c35d6e)
Getting Started
https://naver.github.io/fixture-monkey/docs/v0.3.x/getting-started/
Getting Started
 

08/05


분기 (로직)에 대한 처리는 컨트롤러가 아닌 서비스에서 진행되어야 한다. (→ 리포지토리에서 되도 좋을듯?)
 

08/07 (중간 멘토링)


도메인 설명 부족

  • 모르는 사람이 보면 무슨 코드인지 알 수 없음
  • 내가 1년뒤에 봐도 알 수 있는 코드를 쓰자
notion image

도메인

  • 중요한 필드가 위로
  • VO 를 명확히 구분, 내부에서 관리하지 말자
  • VO 는 윗 계층에서 접근해도 문제 되지 않음
  • enum 대문자로 받거나 추상화를 하거나 해보자
  • 상태 관리를 위한 enum 도입 고려
  • 동시성 이슈가 생길 수 있는 곳은 @Version 사용하기 (북마크 좋아요 개수)
notion image
 

테스트

  • extracting 추잡하다.
notion image
  • 테스트에서 관심없는 부분은 매직넘버 써도됨
비포
비포
애프터, Exception 검증 커스텀 하게 할 수 도 있다.
애프터, Exception 검증 커스텀 하게 할 수 도 있다.
 

엔티티 데이터 삽입 방법을 통일하는게 좋다

리스트를 넘기는 업데이트 ???!?!!
리스트를 넘기는 업데이트 ???!?!!
단건을 넘기는 삽입 ?!?!?!
단건을 넘기는 삽입 ?!?!?!
 

조회랑 업데이트를 분리해서 생각해라

  • 서비스 → 업데이트하는 리포지토리 여러개 주입 X
  • 북마크 서비스/ 북마크 삽입을 위해 → 북마크 리포, 태그 리포 다 받으면 안됨면 안됨
 
 

엔티티에 최대한 비지니스로직을 담기

  • 팔로우 엔티티에 팔로우 로직이 들어있으면 좋을 것 같다. (엔티티 상태를 가지는 필드가 있으면 비지니스 로직을 표현하기 수월하다. ex) FollowType.FOLLOW, FollowType.UNFOLLOW)
  • @ManyToMany, @ElementCollection (FavoriteCategory is not entity)
 

예외 메시지

  • 정말 사용자에게 보여질 메시지 인가요?
 

중요 엔티티 삭제

  • 상태 변경으로 처리, DB 삭제하면 안됨
 

Reaction 엔드 포인트

  • POST 메서드를 사용할거면 바디를 활용해라. url에 데이터를 넣을거면 POST가 POST 인가?
 

얘기를 많이 해라

  • 같은 기술을 사용해서 개발을 하면 적용 방식이 통일 되야한다.
  • 그냥 공부 할꺼면 그래도 되는데 그냥 공부는 아니니까
  • e.g.) Querydsl 적용 방식 - Profile, Bookmark 달랐음
 

Querydsl

  • 을 쓸꺼면 동적 쿼리 생성을 적극적으로 써라
  • if 문 덕지덕지 되도 됨
  • DTO Projection 활용 고려하자
    • for loop 로 어거지로 서비스에서 말아주는것 보다 나음
    • 요 dto 를 웹 계층 까지 전달해도 됨
 

알림 처리 → 할 수 있음

  • 알림 mongoDB 에 머리 좀 박다가 잘 안풀리면 mysql json 타입 사용을 고려
 

요청/응답 처리

  • ArgumentResolver 필요 한지? → ?!?!?!
  • JsonSerializer 필요 한지? → ObjectMapper 이런걸로 안되나?
 

로직

  • 리액션 카운트 맵 조회시 group by
  • 3항 연산자는 생각보다 더러운 녀석이다 - 복잡함
 

ReadME

  • 용례정리 (ex) cond → condition)