애플리케이션 성능 향상이번 주차는 인덱스와 캐시를 이용해 기존 애플리케이션의 성능을 높이는 것이 주요 목표였다. 애플리케이션의 성능을 높이기 위해서는 여러 가지 방법이 존재하겠지만 그 중 이번에는 DB의 성능 튜닝과 캐시를 이용하여 애플리케이션의 성능을 향상해보았다. 저번주와 마찬가지로 이번주도 인덱스의 대한 이해를 위해 Real MySQL8.0의 인덱스 챕터 부분을 읽고 시작한 게 매우 도움이 되었다.그 중 DB 성능 튜닝의 핵심은 "어떻게 디스크 I/O를 줄이느냐가 관건"이라는 것을 배웠다. 디스크의 I/O를 줄이는 방법으로는 인덱스를 이용해 DB를 최적화하는 방법과 캐싱 방법이 존재한다. 인덱스인덱스를 통한 효율적인 쿼리로 불필요하게 데이터에 접근하는 것을 줄일 수 있기 때문에, 인덱스에 대해 공..
대용량 트래픽 & 데이터 처리 챕터 시작본격적으로 대용량 트래픽과 데이터를 처리하기 위한 과정이 시작되었다. 이번주는 현재 이커머스 서비스에서 발생할 수 있는 동시성 상황들을 분석해 보고 여라가지 방법들의 각각의 장단점을 파악하여 직접 동시성 문제를 해결해 보았다. 우선 나는 이전까지 개인적으로 진행하는 프로젝트나 실무에서 조차 동시성 문제를 직접 고려해 본 적이 없다. 그래서 어떤 상황에서 동시성이 발생하는지 1도 모르고 더군다나 DB에 대한 공부를 거의 하지 않아서 어떻게 해결해야 하는지 1도 모르는 상황이었다. 그래서 DB를 먼저 공부해야겠다고 생각을 하여 현재 주로 사용하는 DB인 MySQL을 공부하기 위해 Real MySQL8.0을 사서 먼저 트랜잭션과 잠금 파트를 읽어보았다.덕분에 MySQL..
E-commerce 마무리이번주는 E-commerce 서버 구축을 마무리하는 한 주로 아직 구현하지 못한 장바구니 관련 기능과 미비된 통합 테스트를 추가 작성하고, 주문 결제 시스템을 이벤트 기반 아키텍처 구조로 변경하는 작업을 했다.특히 기존 하나의 트랜잭션 단위의 주문 결제 시스템에서 이벤트 기반 아키텍처 구조로 변경하는데 많은 시간을 사용했다.이벤트 기반 아키텍처 구조로 변경했을 때의 이점과 왜 변경해야 하는지에 대한 고민과 독립적인 트랜잭션 구성 방법에 대한 많은 고민을 하고 관련해서 트러블 슈팅 글을 작성했다.https://seungjjun.tistory.com/328 [E-commerce] 주문 결제를 이벤트 기반 아키텍처로 구축하기주문 결제를 이벤트 기반 아키텍처로 구축하기 이 글에서는 주문..
E-commerce 시작이번 주는 저번주에 ERD, 시퀀스 다이어그램 설계한 것을 바탕으로 본격적으로 e-commerce 서버 구축을 코드 작성을 통해 시작한 한 주였다.기본적인 잔액 조회 및 충전, 상품 조회, 주문 및 결제 API를 구현하고 관련 비즈니스 로직의 유닛 테스트 및 통합 테스트를 작성하는 게 이번 주 과제의 주요 포인트였다.기존에 설계하면서 생각하지 못했던 부분들이 코드를 작성하면서 생각이 나다 보니까 반복적으로 기존 설계 문서를 수정하는 상황이 발생했었다.예를 들어 기존에는 주문 결제 과정을 두 개의 API로 분리하여 설계했던 것을 코드를 작성하다 보니 하나의 트랜잭션 단위에서 처리하도록 변경한 것과 상품에 대한 테이블 설계를 상품과 상품 재고 테이블로 나눴던 부분 같이 기존 설계했을 ..
E-Commerce 서버 구축 시작3주 차 과제는 3주간 서버 구축을 진행할 3개의 시나리오 중 하나를 선택하여 요구사항을 분석하고 관련 문서(시퀀스 다이어그램, ERD, API 명세 등등)를 작성하는 게 과제였다. 문서 작업이 중요하다는 것은 알지만 아직까지도 제일 하기 어렵고, 귀찮은 작업이였다. 귀찮게 느껴지는 이유 중 가장 큰 이유가 ERD 설계나 API 명세를 미리 작성을 해두면 처음부터 끝까지 수정이 되지 않으면 좋겠지만 어쩔 수 없이 중간 중간 수정이 불가피하게 발생하는데, 이 작업이 반복되어 귀찮게 느껴지는 것 같다. 그래서 프로젝트 시작 전 하는 설계에서 개발자로서 역량이 드러난다고 생각이 되었다. 아무튼 나는 이번 과제에서 e-commerce 서버 구축 과제를 선택했다. 다른 2개는 ..
Clean + Layered Architecture이번 2주 차 과제는 아키텍처 설계가 중점인 과제를 진행했다.평소 애플리케이션을 구성할 때 아키텍처 설계 없이 무지성으로 Layered Architecture로 설계하여 애플리케이션을 만들었었는데, 이번 과제를 진행하면서 다양한 아키텍처에 대해 배울 수 있었다. (Layered, Clean, Hexagonal, Clean + Layerd) 이제껏 무지성으로 설계해 왔던 아키텍처를 실제 애플리케이션을 만들 때, 어떻게 아키텍처를 설계할지 고민하며 "이렇게 설계했을 때의 장점이 무엇이지?", "기존에 내가 설계했던 방식은 이러한 문제점이 있었구나" 같은 생각들을 정리하고 몸으로 직접 느낄 수 있었다. 가장 크게 배운 부분은 "하위 계층의 변경은 상위 계층으..