본문 바로가기
experience/woowacon 2023

WOOWACON(우아콘) 2023 후기 - 2

by heekng 2023. 11. 17.
반응형

WOOWACON(우아콘) 2023 후기 - 1에 이어 백엔드 두번째 세션에 대한 내용입니다.

모놀리식에서 점진적 서비스 분리: 사업과제와 병행하여 시스템 개선하기

배민상회개발팀 손민성님, 윤미현님

배민상회 서비스를 개발하고 있는 손민성님과 윤미현님의 세션입니다.

비즈니스의 성장에 따라 복잡도가 커지고, 특정 도메인의 변화가 다른 도메인에 영향을 끼치며, 빌드 시간이 길어져 개발에 영향이 갈 정도라는 것을 가장 큰 이유로 서비스 분리를 계획했다고 합니다.

배민상회개발팀에서 목표한 내용은 아래와 같습니다.

  1. 빌드/개발 단위를 작게 만들기
  2. 컴포넌트 분리
  3. 서비스 분리
  4. 안전한 배포
  5. 점진적 개발

빌드/개발 단위를 작게 만들기

큰 단위의 빌드는 코드 라인 수가 증가할수록 빌드 시간이 증가하지만, 작은 단위의 빌드는 빌드시간이 짧습니다.
따라서 컴포넌트를 분리해 한번의 빌드가 빠르게 진행될 수 있도록 초점을 잡은 것 같았습니다.

컴포넌트 분리

  • 도메인단위로 컴포넌트를 나눈다.
  • 콘웨이의 법칙
    • 소프트웨어 구조는 해당 소프트웨어를 개발한 조직의 커뮤니케이션 구조를 닮게 된다.
  • 점진적 분리!!
    • 바로 서비스로 분리하는 것이 아닌 모듈로 분리
    • 양방향 의존성을 제거해 의존성을 한 방향으로만 흐르게 만들어야 한다.
    • 인터페이스를 적극 활용해 상위 수준 모듈과 하위 수준 모듈은 둘 다 추상화에 의존
  • 충돌 최소화하기
    • 이미 의존하고있던 서비스는 인터페이스를 의존하게 한다.

우아콘에서 가장 좋았던 내용이었습니다.
제가 개발하고 있는 서비스는 모놀리식 서비스입니다.
최근 신규 서비스 런칭과정에서 기존의 서비스를 성격에 따라 분리하고, 공통된 내용을 모듈로 분리하는 과정을 진행했는데 서비스 이용자가 많지 않고 개발인력이 부족한 상황에서 바로 MSA를 적용하기 어렵다는 생각을 했었습니다.
하지만 서비스로 바로 분리하는 것이 아닌 모듈로 분리하는 내용을 보고 이미 모듈화된 환경은 구성되었으니 바로 써먹을 수 있겠다고 생각했습니다.
기존 모놀리식에서 사용하던 서비스를 동일한 이름의 인터페이스로 변경하고, 분리한 모듈에서 기존 서비스로직을 구현체로 제공하는 것은 충분히 적용할만한 방식의 모듈화라고 생각했습니다.

서비스 분리하기

  • 개발/빌드 단위인 컴포넌트와 배포단위인 서비스가 일치할 필요가 없다.
  • 서비스 분리는 트레이드오프를 고려해서 결정해야 한다.
    • 배민상회개발팀은 개발/배포/실행을 독립적으로 관리하고자 서비스 분리를 진행
  • 소스코드 호출을 네트워크 통신 호출로 변경
    • 네트워크 통신 비용과 제약이 생긴다.
    • 네트워크 실행, 지연 발생이 가능하니 재시도 매커니즘을 추가
    • 너무 오래 걸리는 요청은 성능개선과 작게 나누어 병렬요청
    • requestBody를 이용해 요청에 필요한 데이터 전달.
  • CQRS 사용

컴포넌트 분리와 서비스 분리 내용을 합쳐 고민했습니다.
지금까지는 모놀리식 to MSA 과정을 바로 서비스 분리라 생각했지만, 그 중간 과정에 컴포넌트 단위로 분리한다면 굳이 많은 서버를 사용하면서 서비스를 분리할 필요가 없다고 생각했습니다.
학습한 내용(MSA)를 바로 서비스 분리로 생각할 것이 아닌 트레이드오프를 고려해야 한다는 생각을 참 많이 했습니다.

안전하게 배포하기

  • Feature Flag로 빠르게 롤백하기
    • 코드 변경 없이 특정기능 on/off
  • spring cloud config, bus로 구현

지금까지는 spring cloud config를 단순한 프로퍼티 config서버로 사용해왔습니다.
수정한 기능에 대해서 수정작업할 때, 안전성을 보장하는 방법으로 사용할 수 있겠다는 것을 알게 되었습니다.
config서버는 런타임에도 활용할 수 있다는 것! (바로 써먹으러 가야겠습니다.)
모듈화와 더불어 실행에 불안함이 있다면 config서버를 사용해 배포없이 로직 on/off를 진행하는 것!

마무리

아마 많은 개발자분들이 공감하고 아이디어를 얻어가지 않았을까 싶은 세션이었습니다.
서비스를 도메인을 기준으로 분리하고자 한다면?
하지만 기존에 잘 동작하고 있던 서비스를 건드는 것이 불안하다면?
인터페이스를 활용해 모듈화하고, config서버를 이용해 안전한 배포를 진행해보는 것은 어떨까 싶습니다.

읽어주셔서 감사합니다.

해당 세션은 꼭 영상 오픈시 다시 봐야겠습니다.
너무 좋았던 세션… 빨리 영상 나오면 좋겠다

반응형

'experience > woowacon 2023' 카테고리의 다른 글

WOOWACON(우아콘) 2023 후기 - 1  (0) 2023.11.17