일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Spring
- JPA
- Security
- Java
- 프로그래머스
- oracle
- 함수
- JavaScript
- 알고리즘
- 스프링
- Eclipse
- 넥사크로
- 방법
- 쿼리
- 에러
- kotlin
- mybatis
- GitHub
- IntelliJ
- 시큐리티
- 자바
- Vue
- error
- Git
- db
- 오라클
- 생성
- 코틀린
- jquery
- aws
- Today
- Total
송민준의 개발노트
우아한테크콘서트에서 본 역사...? 본문
우선 우아한테크콘서트를 보면서 느낀거는
배민이 시스템을 개발하면서 정말 고민을 많이하고 노력을 많이 한게 보였다.
현재 1년차인 내가 봤을 때 우리 회사에서 이렇게 한다면 따라갈 수 있을까?
그런 생각들이 들게하는 콘서트였다.
한편으로는 저러한 생각들을 하고 실천할 수 있는 환경이랄까 그런게 부러웠고
살면서 저런 기업에서 한번쯤 일해보고 싶다는 동기부여가 된듯하다.
1. 온프레미스 -> 클라우드 마이그레이션
- 라이브시스템 뿐만 아니라 erp까지 마이그레이션함
- 우아한형제들의 경우 막대한 트래픽이 특정 시간대(점심, 저녁)에
집중되어 있음. 그날 그 시점에 장애가 발생하면 업주, 라이더, 고객까지
각자의 이해관계가 엇갈리며 피해를 보게됨.
이러한 주문 한 건이 완료되기까지 만만치 않음.
2. 배민 마이크로서비스 구축
- 2015년도에는 하루 주문건이 5만 이하였음
MS SQL(스토어드 프로시저 방식 사용), PHP, ASP 가 주력이였음
DB 장애시 전체 서비스 마비됨.
테이블은 약 700개, 프로시저가 4000개 정도...
- 2016년 주문건수 10만건 돌파함
PHP -> 자바 전환, MSA 시작, AWS 마이그레이션 시작
(넷플릭스 또한 생존의 문제로 MSA, 클라우드로 넘어감)
- 선착순 이벤트 준비(1000명 치킨 할인이벤트)
프론트서버가 죽어버림. 밤샘해서 aws로 마이그레이션함
다음날 주문서버가 죽어서 또 밤샘해서 aws로 마이그레이션함
다음날 결제까지 되었는데 PG사가 죽어버림.(장비 늘림)
- 2017년 하루 주문 20만건 이상. 장애가 정말 많이 남.
배민 서버가 터짐 -> 요기요로 고객 넘어가서 요기요 터짐
-> 똑같이 배달통 터짐 -> 고객, 업자 전부 피해
가게 목록과 검색을 엘라스틱 서치로 바꿈
- 2018 전사 1순위 시스템 안정
가게 상세를 AWS 다이나모DB를 활용(MS DB에서 1~5분간격으로 배치돌려서 넣어줌)
순차적 기능별 독립(주문) 시킴
주문 파트 MS DB -> AWS RDB로 전환(라이더스 + 기존 배민 통합함)
주문 이벤트 기반 아키텍처 구성 - 어떤 파트가 죽어도 회복이 빠름
(주문 시스템 -> AWS SNS -> AWS SQS -> 시스템 -> DB)
- CQRS 아키텍처 전환 결정(Command and Query Responsibility Segregation)
( 핵심 비즈니스 명령-Command 시스템과
조회(Query) 중심의 사용자 서비스
둘을 철저하게 분리)
- 장애 격리
각 시스템이 내부에 필요한 데이터 보관
내부 서비스(광고, 검색)의 모든 변경 내역이 이벤트로 전달
장애시 데이터 싱크가 늦어져도 고객 서비스 가능
- 서비스 자체 데이터 저장소와 동기화
가게/업주는 RDB, 광고는 엘라스틱서치, 가게노출은 다이나모DB, redis로 해서 이벤트 기반으로 동기화
- 2019 MS DB -> 타 DB 전환 완료