오늘도 어김없이 하루가 정신없이 지나갔다. 아니 벌써, 한주가 다 지나갔다. 아니.. 8월이 다지나가고, 9월이 찾아왔다. 이제 낮에는 선풍기와 함께라면 버틸만하고, 저녁에는 선선하니 딱 좋은 날씨가 된 것 같다.
이제 다가오는 9월 4일 부터는 이력서를 지원해볼 계획이다. 이력서를 지원한다고, 공부와 프로젝트를 놓을 생각은 없다. 계속해서 공부와 프로젝트를 개선할 계획이다. 면접준비와 코딩테스트 준비에 몰입 하는 것도 좋지만, 계속된 공부 및 프로젝트 개선이 더 중요하다고 생각이 들었기 때문이다.
무튼 오늘은 기필코 목표한 이슈를 등록하고, 계획한 작업을 하고서 이력서를 다듬는 것을 목표로하였다.
신규 이슈 등록
오늘은 신규 이슈를 두개 등록했다. 하나는 사용 DB를 변경한다. 이고, 다른 하나는 특정(한정판) 상품에 대한 계정당 1회 주문 제한을 추가한다. 이다.
사용 DB를 변경한다.
사용 DB 를 변경한다.(H2 -> MySQL) · Issue #23 · KEEMSY/shoes-ordering-system
설명 개발을 위해 사용하던 H2 DB 에서 실제 운영 시 사용할 DB(MySQL)으로 전환한다. 개발 시에만, H2 를 사용하려했으나, 실제 사용하는 DB와 동일하지 않을 경우, 예측하지 못한 문제가 발생할 수
github.com
초기 신발주문 시스템은 사용하는 DB를 MySQL을 사용하고, 인프라를 실제로 구축할 떄에는 Msater 와 Slave 를 구축하여, DB 가용성과 성능을 챙기는 것이 목표였다. 하지만 초기 개발부터 지금까지 나는 개발 편의라는 핑계로 간편한 설정인 H2 DB를 사용하고 있었다.
이것을 바꿀 필요성을 이번 이력서를 수정하면서 많이 느꼈다. 초기 문서에서 작성한 내용과는 다른 내 행동이자 결과이기에 더 늦기전에 빨리 바로 잡아야한다고 생각이 들었다. DB를 변경하는 것은 내가 개발 단계에서만 사용하기에, 마이그레이션도 없어 크게 어려움이 없을것으로 예상된다.
해당 이슈를 작성하면서, DB를 변경하면서 확인해야 할 항목들을 정리해보았다.
- application.yml 및 build.gradle 수정하기
- CI 내 MySQL 환경 설정 추가하기
첫번째를 제외하고는 경험해본 것이어서 다른 이슈가 발생하지만 않는다면 금방 해결할 수 있을 것 같다.
특정(한정판) 상품에 대한 계정당 1회 주문 제한을 추가한다.
특정(한정판) 상품에 대한 계정 당 1회 주문 제한 을 추가한다. · Issue #25 · KEEMSY/shoes-ordering-system
설명 특정(한정판) 상품을 구매하는 경우를 고려한 1회 주문 제한을 추가한다. 한정판 주문의 경우, 단 계정당 1회만 구매할 수 있다. 구매 후, 취소 시 재구매가 불가능하다. 한정판 상품 구매를
github.com
내가 신발 주문 시스템의 외부 아키텍처를 구성하는데 있어 가장 큰 영향을 준 것은, 한정판 상품에 대한 부분이다. 한정판 상품 구매 경험을 돌이켜볼 때, 이 요구사항을 만족한다면, 내 목표를 가장 구체적으로 만들어 낼 수 있을 것이라고 생각했었기 때문이다.
신발 주문 시스템을 개발하기 전, 내 목표는 다음과 같았다.
- 내가 공부한 내용(아키텍처 및 기술)을 적용할 수 있는 프로젝트를 만들고 싶다.
- 실제 대규모 트래픽이 발생하는 사례를 구체화(클론코딩처럼)할 수 있는 프로젝트를 만들고 싶다.(근거있는 대규모 트래픽의 사례를 다루고 싶었다.)
이 목표를 달성할 수 있는 주제가 바로 한정판 신발 구매였다. 평소 신발을 좋아하던 나는 선착순 구매 및 응모를 많이 참여했었고, 해당 경험을 돌이켜보면, 서버가 터져 사이트 자체가 마비되거나, 운좋게 상품 구매페이지까지 갔지만 결제에서 터지는 안타까운 경험을 많이했었다.
이 경험들을 돌이켜보면서 이 안타까운 경험들이, 내가 지금까지 공부한 내용들을 통해 해결할 수 있을 것이라고 생각이 들었다.
- 서버가 터지는 것은 MSA 를 통해 분산시스템을 구축하면 해결할 수 있을 것이라고 생각했다.
- 결제에서 주문을 실패하는 것은 각 도메인을 동기처리(강하게 결합)하는 것이 아닌 이벤트 비동기처리(느슨한 결합)을 통해 해결할 수 있을 것이라고 생각했다.
이뿐만이 아니다. 해당 과정을 경험하는데 있어, 공부한 내용을 정말 많이 실제로 사용해볼 수 있을거라는 생각이 들었다.
- Monolithic 으로 개발하여, 모놀리식의 한계를 확인하고, MSA으로의 전환하는 경험
- 다양한 개발론 적용: DDD, TDD
무튼 하고 싶은 말은, 특정(한정판)상품에 대한 요구사항은 신발 주문 시스템에서의 핵심 중 핵심이라고 이야기 할 수 있다. 그리고 드디어 그 핵심을 구현할 때가 온 것이다.
나는 이 핵심을 구현하기 위해서, Redis 를 이용해보려고한다. 계정당 1회 구매제한을 구현하는 방법에는 많은 것들이 존재하겠지만, 나는 이것이 가장 효율적이라는 생각이 들었다.
- 단일스레드 기반의 Redis를 통해 수평확장시에도 해당 요구사항을 만족할 수 있다.
- MySQL에 부하를 주지않으며, 빠르게 요구사항에 충족하지 않는 주문을 처리할 수 있다.
정확한 것은 실제로 해봐야 알겠지만, 나는 이렇게 생각하며 계획하고 Issue 를 작성했다.
PR: 피드백 반영을 통한 Test Mother 추가
Chore/kafka integration test-1 (누락된 카프카 통합 테스트를 추가한다.) by KEEMSY · Pull Request #24 · KEEMSY/s
관련 이슈 및 PR 누락된 카프카 통합 테스트를 추가한다. #15 Chore/kafka integration test(누락된 카프카 통합 테스트를 추가한다.) #22 변경 사항 지난 PR의 리뷰 사항 PR:Chore/kafka integration test(누락된 카프
github.com
2일 전, 나는 누락된 카프카 테스트를 추가하는 작업을 했었다. 언제나 그렇듯 PR 을 작성하고 스스로 리뷰 혹은 겪은 문제에 대한 기록을하며 해당 작업을 마무리했었다. 그리고 나는 리뷰가 달린지도 몰랐는데, 이를 어제 메일을 확인하면서, 리뷰 메일이 도착해있는 것을 보고 확인했다. 승원이가 해당 PR에 리뷰를 해주었던 것이다.
리뷰의 내용은 너무나도 당연하면서도 내가 놓친 부분이었다. 나는 Kafka 테스트를 작성하면서, Consumer 세팅 및 Producer 세팅을 반복하고 있었다. 이는 테스트하려는 클래스에 1:1 대응하는 클래스를 만들고 싶지 않다는 생각에서 비롯되었다.
관련한 내가 고민했을 기록한 TIL
드디어 메시징 테스트 진행, 거의 다 온 것 같다(?)[ 3AM, 문제해결 ]
오늘은 원래는 프로젝트 관련된 공부를 하지 않고, 평소 못했던 다른 부분을 공부하려고했다. 독서까지는 이게 가능했는데... 잠깐만 볼까? 하던 계획이, 계속해서 이것저것찾아보고 시도하고
sykeem.tistory.com
하지만 이것은 하나는 해결했지만 승원이의 리뷰 부분을 놓쳤다. 그리고 정말 어이없게도, 나는 승원이가 이야기해주기 전까지 이 부분이 불편하다는 생각을 하지 않았었다. 당연하게 설정하고 작성하고 테스트했다. 그리고 정말 감사하게도 승원이의 리뷰 덕에 이를 개선 할 수 있었다.
Test Mother
나는 이번 리뷰를 통해 Test Mother 라는 것을 처음(?) 알게 되었다. Test Mother 는 테스트 코드에서 재사용 가능한 테스트 데이터 또는 객체를 생성하는 패턴 또는 메커니즘을 가리키는 용어를 의미한다. 이러한 패턴은 테스트 코드를 작성할 때 자주 사용되며, 테스트 데이터를 설정하거나 객체를 생성하는 복잡성을 줄여주는데 도움이 된다고 한다.
그래서 나는 CustomKafkaTestConfig 클래스를 추가했다.
이 클래스에서는 반복하여 설정하는 기본 설정 값을 만들어주는 역할을 담당한다. 처음에는 Factory 생성하는 부분까지 한번에 만드는 것을 고민했으나, 나중에 설정값을 추가적으로 설정하고 싶을 것을 감안하여, 반복되는 기본 설정 값을 만들어내는 것만으로 제한하였다.
해당 작업은 어제 잠들기전 시작해서, 오늘 마무리했다. 그리고 승원이와 이야기를 해보고 괜찮다고하면 바로 반영을 할 계획이다.
요즘 독서는 진짜 포기할 수 없다. 디자인 패턴의 아름다움의 책이 정말 재밌다. 한번 보면 한시간이 사라지는것이 흠이지만 진짜 재밌다. 혼자서 고민하던 내용들에 대한 구체적인(?) 생각을 엿볼 수 있어서 그런것같다.
특히, 이 책을 보면서 내가 공부해야 할 기본소양에 대하여 고민하게되고, 또 망각했던 사실들을 다시 상기하게 되는 것 같다. 대부분의 책을 볼때면 내가 고민하지 못한 부분에 대하여 생각해보는것이 가장 많지만 이 책은 그것 뿐만아니라, 망각했던 사실들을 다시 상기시켜주는 것이 정말 좋은 것 같다. 책을 보고 정리해서 STUDY 레포와 포스팅으로 기록해야겠다. 읽는것도 좋지만 또다시 잊지 않기 위해 기록을 꼭 반드시 해야겠다.
이제 이력서는 거의 준비가 된 것 같다. 나를 가장 잘표현할 수 있는 몇가지 질문과 답변만 작성해두면 이력서는 출격할 수 있는 준비가 된 듯하다. 당연하게 이것은 이제 끝! 을 의미하는 것은 아니다. 이제 시작이고 계속해서 개선하고 성장해나갈 것이다~ 나도 이력서도 말이다 ~~
'회고 > TIL' 카테고리의 다른 글
사용 DB 변경과 JPA, 독서 (0) | 2023.09.04 |
---|---|
생일, 책 선물 (0) | 2023.09.03 |
KafkaTest 추가, 책 구매: 디자인 패턴의 아름다움 (0) | 2023.08.28 |
Order 도메인 1차 개발 완료, Wiki 정리, 추가 개발사항, 책 쇼핑 (0) | 2023.08.27 |
DataAccess 마무리, Web계층 개발, 남은 일정, 인프런 강의 수강 (0) | 2023.08.26 |