본문 바로가기
회고

[항해 플러스 백엔드-4주차] 이커머스 기본 구현하기

코동이 2024. 10. 22.

이번 챕터를 시작하며 꼭 해내고 싶었던 목표

오류 응답에 상태코드, 메세지와 함께 커스텀 에러 문자열을 보여줄 것

Fake 클래스 작성을 통한 Swagger 데이터 전달로 개선하기

멱등성을 이용하여 결제 구현하기

 

이번 챕터를 마무리하며 가장 기억에 남는 성취

 결제/구현을 위해 Facade를 적절하게 잘 활용했고 예외도 만들었습니다. Facade를 사용하기 위해 각종 Service들을 먼저 만들었고 Facade는 작업을 조립하기만 하면 끝입니다. 미리 어떻게 구현할지 설계를 기반으로 만들다보니 고민의 시간이 줄어들어 빠르게 코딩할 수 있었습니다. 통합 테스트를 통해 동시성 테스트를 했고 같은 결제 요청에도 한번만 결제가 되도록 했습니다. 주문-결제의 순서가 단순히 서버에서만 작동하지 않고 프런트와 계속 소통하면서 이루어지는 작업이라 다소 헷갈리는 부분들도 있어서 추후 고도화가 필요합니다.

 

이번 챕터에서 반드시 이뤘으면 했는데 이루지 못한 것(아쉬운 점)

 멱등성을 이용하여 결제 구현하기. 결제의 멱등성을 보장하는 작업을 하고 싶었는데 간단하지 않았습니다. 실무에서 멱등성 키 테이블을 따로 관리하면 Gateway 수준에서 확인 후 처리가 가능하다고 합니다. 간단한 버전으로 프로젝트에 구현할 방법을 고민을 많이 했는데 딱히 찾지 못했고 도전하지 못했습니다. 최대한 실무와 비슷하게 만들어보도록 고민했기 때문에 발생했습니다. 다음 주차에 구현해보도록 하겠습니다.

 

내가 강화해야 할 강점 중 가장 중요하다고 생각하는 한 가지

 이번 주차는 코드수준이 아닌 학습방법에 대해 고민했습니다. 나는 새로운 지식을 어떻게 학습하는가? 짧은 시간이 주어진다면 어떤 방법으로 학습하는게 내게 가장 큰 효과를 낼 수 있을까? 책, 인강, 칼럼, 공식문서, 멘토링 등 다양한 방법이 있습니다. 첫째로는 빠르게 공식문서를 확인해보거나 간단하면서도 핵심적인 코드 예제를 봅니다. 저는 원리를 먼저 이해하려는 경향이 있습니다. 시간이 허락하면 원리를 자세히 들여다봅니다. 하지만 시간이 촉박하다면 지금 내게 가장 필요한 기능만 골라서 구현해야 합니다. 따라서 좋은 회사들의 문서와 코드를 많이 참고합니다. 예를 들어, 이번에는 예외 발생 시 공통 에러 처리를 만들었는데 토스 API를 참고해서 만들었습니다. 좋은 회사의 문서는 가치가 있을 것이라고 생각했고 해당 방식을 사용하니 간단 명료하고 필요한 정보를 잘 전달할 수 있도록 개선되었습니다. Java, Spring이 언제까지 영원할 수 있을까요? 회사에서도 한번도 해본 적 없는 Vue를 사용하고 있는데 나름대로 빠르게 습득하기 위해 다양한 전략들을 시도해보았습니다. 가장 중요한 것은 내가 코드를 실제로 짜보고 어떻게 실무에서 사용하고 있으면 적용할 수 있을지 계속 고민해야 합니다. 평소에 좋은 책을 꾸준히 보며, 인강을 통해서는 핵심 개념과 코드를 공부하고 다양한 사람들과의 소통을 통해 좋은 방향으로 나아가는 다양한 접근법이 좋다고 생각합니다.

 

내가 개선해야 할 개선점 중 가장 중요하다고 생각하는 한 가지

 다양한 심화 과정을 고민하기 이전에 먼저 기본 과제를 충실하게 마칠 것. 기본 구현은 쉽게 할 수 있을 것이라는 생각으로 심화 설계에 시간을 많이 투자했다. 어떻게 하면 실무에 좀 더 가까울 수 있을까 고민했다. 특히 주문/결제에서 멱등성과 관련해 다양한 글들을 봤다. MSA 환경, 동시성 문제, 중복 요청 등등의 상황이 있었다. 가장 중요한 것은 주문/결제를 주어진 목표에 맞게 구현하는 것이 먼저다. 그 이후에 개선하는 방향으로 가도 괜찮다. 아쉬운 점은 이번 @SpringBootTest 이후 데이터 클렌징을 제대로 하지 못했다. 찾아보니 클래스쪽에 @Transactional을 걸어주거나, 매 테스트마다 repository를 직접 비워주는 방식을 택해야 한다. 찾아보면 간단한 내용이었다. 미리미리 기본 기능을 잘 구현하고 심화를 고민해야겠다.

 적절한 테스트 코드를 고민할 것. 테스트 코드는 유지보수 시 중요하다. 만약 A기능을 만들었는데 A' 기능이 필요하다면 달라진 부분에서 테스트 코드가 깨져야 한다. 하지만 테스트를 위한 테스트 코드를 만들었다면 이 테스트가 정상적으로 작동하지 않을 것이다. 먼저 예외 케이스가 어떤 것들이 있을지 잘 고민해보고 먼저 문서로 적는 습관을 들여야 겠다.

 

반응형