[항해 플러스 백엔드 6기] 당신은 코드를 작성하는게 아니라, 설계를 하고 있다

Uicheon·2024년 10월 12일
0

항해

목록 보기
4/6
post-thumbnail

예.. 어그로 죄송합니다 제목의 당신은 바로 저였습니다.

이번주차는 설계문서화가 메인입니다.
코치님이 말씀해준 것 중에 뇌리에 깊게 박힌 내용이 있어요.

여러분들 설계 안하고 코드 먼저 작성한다고 할 때 어떻게 하시나요?
클래스 한 개 만든 뒤, 필드 하나 넣었다.. 뺐다.. 이게 맞나? 이거 하시죠?
이게 코드를 작성하는 건가요?
아니죠? 오히려 설계를 하고 있는거죠!


네.. 충격 많이 먹었습니다.

[들어가기 전]
다음 용어가 무엇인지 알고, 설명할 수 있나요?

  • 마일스톤
  • 시퀀스 다이어그램
  • ER 다이어그램
  • Open API Spec/Swagger

1. 기술 회고

1. 마일스톤


깃허브 프로젝트를 이용해 마일스톤을 만들었다.
음.. 이쁘다!

2. 시퀀스 다이어그램

머메이드를 이용해 시퀀스 다이어그램을 그렸다. 원래는 d2를 이용하려 했는데, 깃허브 마크다운에서 지원한다해서 사용했다!

혹시 그런 고민 안해봤나요?
"시퀀스 다이어그램에 어디까지 그려야하지.."

위 질문에 대한 답은 코치님들도 모두 달랐지만, 내가 동의한 결론은 모든 도메인을 포함시키자 였다!

그럼 개발할 때 공수가 줄어든다 😁

3. ERD

이 또한 머메이드를 이용해서 그렸다.

크게 다음과 같이 구성된다.

  • 유저
  • 대기열
  • 결제/충전 내역
  • 예약
  • 콘서트
    • 공연일
    • 좌석

4. OAS를 이용한 API 스펙/MockAPI

OpenAPI Spec이라는 것을 이용해서, yaml파일을 먼저 작성해 만들었다.

장점

  • 코드를 작성하기 전, 이해관계자(ex 프론트)와 스펙상으로 회의 가능하다
  • OAS로 작성하면 바로 MockAPI를 뽑아 제공 가능하다.
    • 이 API 언제 뽑혀요?.. 테스트 해봐야 하는데.. 를 안들을 수 있다.
    • 다른 사람들이 내 API에 의존하여 블락되는 지점 해소 가능
  • OAS는 스펙이다. 즉, 다른 툴로 export 가능하다
    • (Java/Kotlin) Spring Swagger
    • Postman
    • 등등...
  • 단일 진실 공급원(SSOT)이 될 수 있다.

단점

  • 코드를 먼저 안짜는 것도 단점일 수도 있다
    • 도대체 뭘 API 스펙으로 제공해야할지 감이 안올수도 있다.
  • 러닝 커브 (OAS 문법)
  • Swagger로 뽑았는데 무수히 많은 클래스들이 생성됨
    • 이 또한, 위의 김정규님 세션에서 해결법을 제시한다.
    • Custom CodeGen을 참고해보자

5. DDD의 어그리게이트 루트/엔티티

프로젝트를 계속 진행하며 날 괴롭히고 오해한 DDD의 개념이 하나 있다.
바로 DDD의 어그리게이트 루트이다.
DDD에서 어그리게이트 루트는 한 도메인의 진입점이자, 모든 수행을 관장하는 뿌리다.
모든 서비스와 요청은 어그리게이트 루트를 DB에서 불러와서 처리한다.

예를 들자면

Order order = orderRepository.findById(1L);

order.changeOrder(new Order(...));

한 도메인의 어그리게이트 루트는 한 개이고, 한 개의 엔티티로 관리된다. 라고 이해하면서 한 도메인 내의 모든 JPA 엔티티를 @Embeddable, @ElementCollection을 이용하여 관리하려고 노력했다.

근데 이게 틀렸다.

왜냐하면 DDD의 엔티티JPA의 엔티티와 다르기 때문이다.

이 문제를 코치님께 여쭤봐서 깨달았다. 같은 용어라도 다른 컨텍스트라면 다른 개념이다.


2. KPT

Keep : 현재 만족하고 계속 유지할 부분

  • 꾸준히 코어타임을 지키는 점
  • 꾸준히 아고라에 질문 올리는 점

Problem : 개선이 필요하다고 생각하는 문제점

  • 아.. 머메이드에 설계하전에 종이에 할 걸. 코치님 말씀대로 너무나도 딴짓하게 되더라
  • 왜 기술적인 회고를 쓰지 않지? 써야겠다!

Try : 문제점을 해결하기 위해 시도해야 할 것

  • 다음부터 설계는 종이에다가 먼저 스케치를 그리자!
  • 오늘부터 기술 회고도 시작!

항해에 참가하려는 당신!

혹시 [들어가기전]의 답변이 궁금하신가요!?
글을 읽다보니 '아..! 나도 저거 알아야하는데!' 하진 않으신가요?!

여기까지 글을 읽으셨다면, 아마 항해 플러스 과정에 관심있으신 분이라고 생각합니다.

궁금한 점이 있으시다면 저에게 편하게 댓글 남겨주세요!
혹은 highestbright98@naver.com으로 메일을 남겨주셔도 굉장히 빨리 답변한답니다!

항해 플러스 백엔드에 관련해서 궁금하신점이 있다면 언제든 편하게 말씀주세요!

그리고 글이 도움됐다면, 등록하실때 제 추천인 코드 [9MPLfu] 입력하면,
20만원 할인의 혜택이 있답니다! (물론 저에게도 혜택이 있습니다! 😉)

profile
컨셉입니다~

0개의 댓글