본문으로 건너뛰기

기술적 의사결정

1. 카카오 결제 모듈 적용​

  • 도입 이유
    1. 실제 e-commerce 플랫폼을 시뮬레이션을 해야 되기 떄문에 결제 과정을 거쳐서 데이터 처리를 해야 프로젝트 컨셉에 맞다고 생각했습니다.
  • 기대 효과
    1. 실제 결제는 이루워지지 않고 카카오api로 유저 인증과 결제 승인을 시뮬레이션을 합니다. 그에 따라, 비스니스 로직을 구현하여 유저 상품 주문이 최종적으로 완료됩니다.

2. 깃허브 액션(CI/CD)​

  • 도입 이유
    1. GitHub의 일부로 통합되어있어 저장소와 CI/CD파이프라인을 하나의 플랫폼에서 관리할 수 있습니다.
    2. GitHub 리포지토리의 .github/workflows 디렉토리에 .yml 파일을 추가하여 비교적 쉽게 설정할 수 있으며 읽기가 쉬워 CI/CD를 처음 시도하는 사용하는 입장에서 접근성이 높았습니다.
  • 기대 효과
    1. CI/CD 파이프라인을 빠르게 설정하고 실행할 수 있다.
    2. 팀 전체가 동일한 CI/CD 프로세스를 확인 및 사용, 관리할 수 있습니다.

3. 락 종류 결정 이유 + 분산 락 사용 시 redis를 선택한 이유​

  • 도입 이유
    1. 레디슨 클라이언트는 사용이 간편하고 직관적인 API를 제공하여 개발 생산성을 높일 수 있음
    2. Redis는 인메모리 기반의 빠른 성능을 제공하여 분산 락 구현에 적합함
    3. Redis는 다양한 데이터 구조를 지원하고, 간단한 명령어로 분산 락을 구현할 수 있어 개발 편의성이 높음
    4. Redis의 Key-Value 구조를 활용하여 분산 환경에서 안정적인 락 관리가 가능함
  • 기대 효과
    1. 레디슨 클라이언트를 사용하여 간편하게 분산 락을 구현함으로써 개발 시간 단축
    2. Redis의 빠른 성능으로 인해 락 획득 및 해제 시간이 짧아져 시스템의 응답성 향상
    3. 분산 환경에서 안정적인 락 관리를 통해 데이터 정합성 및 일관성 유지
    4. Redis의 다양한 기능을 활용하여 분산 시스템의 성능 및 확장성 개선 가능

4. 캐싱​

  • 도입 이유
    1. 가장 많이 조회되는 메인화면의 상품 전체 조회 기능에 대한 응답 속도 개선
    2. 데이터베이스 부하 감소 및 성능 향상
  • 기대 효과
    1. 자주 조회되는 데이터를 캐시에 저장하여 빠른 응답 속도 제공
    2. 데이터베이스 쿼리 횟수 감소로 인한 서버 부하 감소
    3. 사용자 경험 개선 및 웹 애플리케이션의 전반적인 성능 향상
    • 도입 효과
redis
  • 상세 내용:
    • Redis 캐싱으로 Spring Boot 애플리케이션 속도 향상시키기 바로가기

5. MSA​

  • 도입 이유
    1. 확장성과 유연성 향상: 각각의 마이크로서비스가 독립적으로 배포되고 확장될 수 있기 때문에 시스템의 확장성과 유연성이 향상됩니다.
    2. 서비스 분리를 통한 개발 용이성: 각 마이크로서비스는 특정 기능을 수행하므로 서비스 간의 독립성이 높아집니다. 이는 개발팀이 각 서비스를 별도로 관리하고 개발할 수 있게 해줍니다
  • 기대 효과
    1. 서비스 성능 및 가용성 향상: 각 마이크로서비스가 독립적으로 운영되므로 전체 시스템의 성능과 가용성이 향상됩니다
    2. 비용 절감 및 자원 효율화: MSA는 필요한 서비스만 확장할 수 있기 때문에 자원을 효율적으로 사용할 수 있습니다.
  • 주의 사항
    1. 처음부터 MSA를 통한 프로젝트 구축은 짧은 프로젝트 기간에 실패할 가능성이 매우 높습니다. 따라서 최소한의 모놀리식 프로젝트를 구축 한 이후 MSA로 변경하겠습니다.

6. ELK + Alerting​

  • 도입 이유
    1. 분산된 로그 관리: MSA에서는 여러 개의 마이크로서비스가 독립적으로 운영되므로 각 서비스의 로그를 효율적으로 관리해야 합니다. ELK를 사용하면 분산된 로그를 중앙 집중식으로 수집하고 저장할 수 있습니다.
    2. 시스템 신뢰도 향상: Alerting을 통해 시스템의 문제를 미리 예방하고 조치할 수 있어서 시스템의 신뢰도를 향상시킬 수 있습니다.
  • 기대 효과
    1. 로그 분석과 시각화: ELK는 로그를 수집, 분석, 시각화하는데 필요한 도구를 제공합니다. Elasticsearch를 사용하여 로그 데이터를 색인하고 저장하고, Kibana를 사용하여 시각화된 대시보드를 생성하고 사용자 정의할 수 있습니다.
    2. 빠른 대응과 조치: Alerting을 통해 문제를 신속하게 감지하고 대응함으로써 시스템의 가용성과 신뢰성을 높일 수 있습니다.

7. API GATEWAY​

  • 도입 이유
    1. 효율적인 관리: API Gateway를 사용하면 여러 마이크로서비스의 엔드포인트를 단일 진입점으로 통합하여 관리할 수 있습니다. 기존 프론트에서 서버에 요청을 보낼 때 각각 다른 서버에 요청을 보내야하는 점에 대해서 관리가 어려웠습니다.
  • 기대 효과
    1. 유연한 마이크로서비스 관리: API Gateway를 통해 서비스의 엔드포인트를 유연하게 관리할 수 있습니다. 새로운 서비스를 추가하거나 기존 서비스를 수정할 때 API Gateway에서 관리하여 시스템의 유지보수를 용이하게 할 수 있습니다.

8. TDD 가 아닌 기능 구현 이후 e2e 테스트 진행​

  • 도입 이유

    1. TDD(Test Driven Development)의 실효성 그리고 저희 프로젝트의 Deadline을 고려했을떄 TDD 개발 방식을 적용 해야되는지 고민을 했다.TDD는 원활한 디버깅 그리고 안정성에 대한 장점이 있다.

    하지만, 주어진 시간안에 프로젝트를 완성해야 한다는 점 그리고,  실습 목적인 프로젝트에서 완성한 후에 추가 작업이 크게 이루워지지 않기 떄문에 테스트 코드에 대한 비중을 크게 둘 수 없다고 판단했다.

  • 기대 효과

    1. 빠른 개발 속도 및 생산성. 프로젝트 스코프를 더 넓힐수 있다.