빗썸 테크 아카데미 (BE 심화 과정) - 2주 1일차

donchanee·2022년 4월 18일
0
post-thumbnail

저번주 Q&A

Map과 FlatMap의 차이

FlatMap은 동기라고도, 비동기라고도 둘 다 함 / Map은 동기인데

Map을 스케쥴러로 사용하면 차이가 없어진다?

Map 같은 경우는 아이템을 변환해서 새로운 아이템으로 변환하고,

FlatMap은 아이템을 변환해서 새로운 Publisher로 변환한다.

그래서 체이닝 형태에서 플랫맵을 많이 쓰게 된다.

WebFlux 동작 방식

이벤트 루프가 리퀘스트가 올때 처리해야하는 부분을 담당하게 됨

MVC는 하나의 스레드가 하나의 요청을 끝까지 처리하고 스레드 풀에 다시 넣는데,

WebFlux는 이벤트 루프에 일을 맡기고 콜백 URL을 통해 응답을 다시 받게 됨

MVC 대비 WebFlux가 효율적인 부분은 MVC에서는 스레드를 매번 할당해서 스레드를 블라킹하기 때문에 CPU를 많이 사용하는데, (스레드를 할당해주는 컨텍스트 비용이 높다)

WebFlux 같은 경우 이벤트루프 1개 or N개에서 이벤트를 비동기적으로 처리하기 때문에, 이 컨텍스트 스위칭 비용을 아낄 수 있다는 것이 장점 (단, 요청이 많을 경우에만)

WebFlux 에서는 보통 어떤 DB?

서버의 아키텍쳐보다는, 다루는 Data의 성격에 따라 선택해야한다.

또, R2DBC 대신 JDBC를 사용하기로 했다면 Blocking Code가 격리되도록 해야함 (publishOn, subscribeOn)

이벤트 루프가 돌아가는 워커 스레드레엇 블러킹 작업을 한다하면, 스레드 풀이 녹아버리고 CPU Hang이 걸리게 되는 등의 문제가 생겨서 꼭 메인 스레드에서 블러킹 코드가 사용되지 않아야함.

WebFlux와 MVC를 섞어쓰면 어떤 문제가 있을지?

서로 다른 APP일 경우는 전혀 문제가 없다.

하나의 앱 안일 경우는, non blocking framework + blocking stack일 경우가 문제

이벤트 루프를 멈추는 경우가 가장 Critical하다.

Domain Driven Development

기존의 개발은 관계형 데이터 모델에 종속

일단 DB 설계를 쫙 해두고, DB 설계에 맞춰 시스템을 개발했는데

DB가 확장이 되면서 이것저것 들어가게 되어서 처음에 설계할 때의 의도대로 프로그램이 동작 X

그러다보니, DB 모델과 실제 개발의 불일치가 생겼고 이러한 모순을 극복하기 위해 DDD 방법론 등장

도메인 주도 설계

실제 사용하는 사람이 이 서비스를 어떻게 쓸건데? 요구하는게 뭔데? 를 먼저 분석하는 것

용어 사전을 기반으로 한 도메인 중심 설계를 하는데, 작은 도메인으로 이루어져 있으니 설계와 구현이 수정될 수가 있다.

용어 사전이란 (*글로서리라고 많이 씀) 사용자, 설계자, 구현자가 모두 의미에 동의할 수 있는 용어의 모음이다.

도메인이란?

소프트웨어로 해결하고자 하는 문제의 영역이다.

예를 들어, 음식 배달 서비스와 같은 경우 음식점 관리, 주문, 배달 연계 등의 도메인이 있다

또 쇼핑몰 서비스 같은 경우 상품 관리, 주문, 배송 등 도메인에 따라 배달과는 다르게 배송이라는 뜻이 달라질 수 있다.

어떤 활동을 하느냐를 정의하는게 도메인을 정의하는 것

도메인 모델은 요구사항으로부터 도메인과 엔티티를 정의하고 관계를 경계와 함께 추상화한 모식도이다.

이 경계가 무엇이냐면 세일즈와 서포트 영역에서 각각 사용하는 고객과 제품으로 연결이 되어있고 다른 것들은 연결이 되어 있지 않다. 이것이 바운디드 컨텍스트이다.

Domain-driven과 Object-oriented의 차이?

Object는 추상화하거나 구체화 할 수 있는 대상 - 명사형

Domain은 요구사항에서 표현하는 모든 것을 의미한다.

Domain Driven Design의 스텝은 다음과 같다.

  1. 요구사항 정리
  2. 핵심 도메인 로직 파악
  3. 용어 사전 정리
  4. 도메인을 작은 단위로 분리하고
  5. Bounded context를 설정하고 관계를 정의한다
  6. 세부 동작을 설계한다
  7. Context 별 Bounds 침범 여부 확인
  8. 변경 사항 발생 시 반복한다

Domain Driven Development 의 기본 요소

  • Domain model pattern

    • Entity
    • Value object
    • Service
    • Aggregate
    • Repository
  • Bounded Context

2022.04.18 Daily 회고

오늘 한 일

  • 저번시간 Q&A
  • SOAP, REST, GraphQL, gRPC
  • Domain Driven Development
  • Domain Driven Design

느낀 점

  • 저번시간 Q&A를 통해 조금 더 복습하고 정리할 수 있었습니다.
  • DDD에 대해 말로만 들어봤는데, 실제 구현을 해봐야 좋을거 같습니다.
  • 과제가 두개 생겼는데, 열심히 해서 언능 해치우고 싶습니다.

현재 나의 상태

  • 다양한 일들이 휘몰아쳐오고 있는 상태입니다.

0개의 댓글