Skip to content

f-lab-edu/music-everywhere

Repository files navigation

music-everywhere

취미 연주자들을 위한 플랫폼

취미로 악기를 다루다보면 다른 사람과 함께 연주하고 싶어집니다.
이 서비스는 취미로 음악을 즐기는 것의 보편화를 위해 연주자들 간의 커넥션을 잇는 것을 목표로 합니다.

네이버 밴드와 같이 그룹 단위의 커뮤니티 서비스를 개발합니다.

프로젝트 구성

각 디렉토리는 다음 역할을 하는 애플리케이션을 담고 있습니다.

  • api-gateway : Spring Cloud Reactive Gateway를 사용해 API-GATEWAY 패턴을 적용하였습니다.
  • common-library : 여러 마이크로서비스에 공통적으로 사용되는 로직을 별도의 라이브러리로 추출하여 사용하고 있습니다.
  • config-service : Spring Cloud Config를 통해 중앙집중식 설정 정보 관리를 적용하였습니다. Spring Cloud Bus로 변경을 감지하며, Kafka를 메세지 플랫폼으로 사용하였습니다.
  • docs : 프로젝트의 문서가 포함되어 있습니다. Swagger API 문서, Kafka 토픽 네이밍 컨벤션이 존재합니다.
  • eureka-discovery : Spring Cloud Netflix Eureka를 통해 서비스 디스커버리를 적용했습니다.
  • jenkins : 빌드를 위한 jenkinsfile을 모아놨습니다. 현재 CI/CD를 운영하지 않아 사용하지 않고 있습니다.
  • group-service : 커뮤니티를 위한 그룹 관리, 게시글 서비스를 담당합니다.
  • payment-service : 결제 기능을 담당합니다. 실제 결제 로직은 존재하지 않으며, 추상화된 메소드를 통해 진행하고 있습니다.
  • user-service : 사용자 관리를 담당합니다.

✅개발 시 신경 쓴 것들

- 문서를 통한 커뮤니케이션 실천하기

  • API 문서 작성하기 --> 문서 링크
  • 카프카 토픽 네이밍 규칙 --> 문서 링크
  • 발생했던 문제, 장애에 대해 원인 -> 해결과정 -> 결론 형식으로 정리하여 동일한 문제 발생을 막기

- 객체 지향 프로그래밍에 대해 고려하여 개발하기

  • 추상화 비용에 대해 고려하기

- 기술 적용 시 Trade-off를 고려하여 적용 기술 선택하기

- 가독성 좋은 코드(리뷰어가 읽기 좋은 코드)를 작성하기 위해 노력하기

- 좋은 테스트 코드를 작성하기 위해 노력하기

  • 효율적인 test fixture 재사용에 대해 고민하기

✅사용 기술 및 개발 환경

image

✅서비스 아키텍처

image

✅Application UI

image 카카오 오븐 에서 볼 수 있습니다.

✅Database ERD

image

✅프로젝트를 진행하며 고민한 TOPIC

1. 트랜잭션 전파 전략과 UnexpectedRollbackException 발생

2. 마이크로서비스에 API Gateway 패턴 도입하기

3. Facade 패턴을 도입해 순환 의존 문제 해결 / 복잡한 의존 관계 개선하기

4. 동시성 문제 발생과 해결 과정

5. Consumer 도입으로 냄새나는 switch 구문 리팩토링하기

6. Jenkins build strategy 적용기 - 배포 프로세스를 마이크로서비스별로 실행되도록 설정해보자!

7. 커서 기반 페이징을 선택한 이유 (feat. 성능 테스트 with JMeter)

8. 마이크로서비스 간 통신을 진행하며 한 고민들(분산 트랜잭션, 이벤트 기반 아키텍처)

9. 게시글 검색이 너무 느려요

About

취미 연주자들을 위한 플랫폼

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published