Skip to content

havday/havday-server

Repository files navigation

해브데이 (쇼핑몰)

프로젝트를 통해 경험한 것에 대하여

도메인 주도 설계 (DDD)

  • 친구가 원하는 비즈니스 요구사항을 정확하게 처리하기 위해 도메인 주도 설계를 적용했어요.
  • 요구사항에 대해 명확하게 이해할 수 있었고, 도메인 모델을 통해 비즈니스 로직을 구현하는 데 도움이 되었어요.

도메인 설계 및 분석 문서

헥사고날 아키텍처

  • 결제 및 배송 외부 모듈이 아직 결정되지 않아, 추후에 모듈을 쉽게 추가하거나 교체할 수 있도록 헥사고날 아키텍처를 채택했어요.
  • 헥사고날 아키텍처를 활용함으로써 핵심 비즈니스 로직을 외부 종속성으로부터 분리하여 시스템의 유연성과 유지보수성을 높이려 했어요.

마이크로서비스 아키텍처 (MSA)

  • MSA를 경험해 보기 위해 애플리케이션을 멀티 모듈 방식으로 분리했어요.

  • 이를 통해 Spring + Kotlin 서비스도 경험해 볼 수 있었어요.

  • 완벽한 MSA는 아니지만 서비스 간 결합도를 낮춰 서비스의 확장성을 높이려 했어요.

  • 멀티 모듈의 장점을 살려 Gradle 명령어로 Docker 이미지 빌드와 푸시를 쉽게 할 수 있도록 구성했어요.

Kafka를 이용한 비동기 처리

  • 비동기 처리가 가능한 부분은 Kafka를 이용하여 응답 속도를 높이고 시스템의 성능을 향상 시키려 노력했어요.
  • 또한, 서비스 간 결합도를 낮추어 서비스의 확장성을 높이려 했어요.

Kubernetes와 Helm

  • Kubernetes를 사용하여 컨테이너 오케스트레이션을 관리하고,
  • Helm을 사용하여 Kubernetes 리소스를 편리하게 관리 했어요.
  • 이를 통해 배포와 확장이 쉽고 효율적으로 이루어질 수 있었어요.

Makefile을 이용한 자동화

  • 테스트 자동화와 Docker 이미지 빌드를 쉽게 할 수 있도록 Makefile을 구현했어요.
  • Github Actions를 이용해서 민감한 정보는 환경변수로 관리하고, Makefile에 환경변수를 넘겨주어 사용할 수 있게 구성했어요.

API Gateway와 JWT

  • Spring API Gateway를 이용하여 인증이 필요한 API와 인증이 필요 없는 API를 구분 했어요.
  • 인증이 필요한 API는 JWT를 이용하여 안전하고 상태 없는 인증을 처리했어요.
인증 필요없는 API 호출 방법

request Header

  • Api-Type : no-auth
인증이 필요한 API 호출 방법

request Header

  • Authorization : Bearer ${accessToken}

서비스 구조

  • 프로젝트는 기본적으로 헥사고날 아키텍처를 기반으로 구성되어 있어요.
  • adapter 에서는 외부, 내부에서 사용되는 api를 패키지 단위로 분리했어요.
  • domain 에는 JPA 관련 코드도 adapter로 분리하여 최대한 도메인 로직에 집중할 수 있도록 구성했어요.
.
├── adapter
│   ├── in
│   │   └── web
│   │       ├── dto
│   │       │   ├── request
│   │       │   └── response
│   │       ├── external
│   │       └── internal
│   └── out
│       ├── kafka
│       └── persistence
│           └── jpa
│       └── service
│           └── product
├── application
│   └── port
│       ├── in
│       ├── out
│       └── service
├── config
└── domain

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published