Skip to content

프로젝트 기획

이지표 edited this page Aug 29, 2024 · 8 revisions

프로젝트 기획

주제 선정시 고민

스크린샷 2024-08-29 오후 8 54 37
  • 사람들이 사용하지 않을 프로젝트를 만드는 건 지루하고 괴로운 일 입니다.
  • 기능보다는 기술
  • 캠프를 끝나고 공부할 내용을 알아가자
  • 하나의 앱을 만드는데 많은 개발자들은 무슨 일을 하고 있을까?
  • 기능 하나에 하나의 팀

그래서 무엇을 무엇을 할까?

스크린샷 2024-08-29 오후 8 57 47
  • 배달의 민족에서는 다양한 서비스들이 존재
  • 그 중에서 사용자들이 주문하기 위해 행하는 첫 동작인 가게 찾기 기능

가게 노출의 기술적 어려움

스크린샷 2024-08-29 오후 8 53 59
  • 배달의 민족은 2020년 기준 가게 목록 검색에 15,000 TPS 발생
  • 어떻게 하는거지?
  • 여러 문제 상황을 직접 겪어보면서 해결해보자!

일 하는 방식

스크린샷 2024-08-29 오후 8 57 47 스크린샷 2024-08-29 오후 9 06 21
  • 기능이나 사용하는 기술을 점진적으로 발전시켜 보자
  • 변경, 수정에 열려있는 코드, 구조를 설계
  • 프로젝트 초기에 전체 과제를 정해두지 않고 돌아가는 프로그램을 만드는 사이클을 짧게 잡고 사이클이 끝날 때 마다 다음 해야할 일을 정하는 방식

최소 기능 개발

스크린샷 2024-08-29 오후 9 07 53
  • 가게, 메뉴, 리뷰 등록/수정/조회
  • 키워드 입력 -> 해당하는 가게&메뉴 찾기
  • 배달 가능 지역&키워드를 입력 -> 해당하는 가게&메뉴 찾기
  • ToDo
    • 서버 분리, 메세지큐 도입, 데이터 베이스 분리, CQRS 패턴

흐름

1

image

  • 멀티 모듈

    • 실험시 변경되는 인프라에 대해 코드 변경 최소화
    • 인터페이스와 모듈을 이용
  • 이벤트 발행 방식

    • loose coupling
  • MySQL Index performance

  • Elastic Search query vs MySQL Like

  • 생각지도 못한 이슈 발생

    • 리뷰 수 증가 동시성 이슈

2

image

  • cache
    • join 을 자주하는게 싫다
  • 가게목록 서비스가 search service 와 cache service 를 이용하는 형태로 변경

3

  • 서버로 분리
    • 공부 목적, 다양한 외부 서버로 부터 데이터를 취합하는 상황을 만들어 보고 싶었다
    • 그렇다면 엔터프라이즈 애플리케이션은 왜 분리할까? 고민해본 결론
image image
  • 비동기 호출
    • RestTemplate, HttpClient, WebClient, Virtual Thread
  • 서킷 브레이커

4

  • ToDo
    • DB 분리
    • 외부 메세지 큐 서비스 도입
    • Elastic Search bulk update