취미 연주자들을 위한 플랫폼
취미로 악기를 다루다보면 다른 사람과 함께 연주하고 싶어집니다.
이 서비스는 취미로 음악을 즐기는 것의 보편화를 위해 연주자들 간의 커넥션을 잇는 것을 목표로 합니다.
네이버 밴드와 같이 그룹 단위의 커뮤니티 서비스를 개발합니다.
각 디렉토리는 다음 역할을 하는 애플리케이션을 담고 있습니다.
- 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 문서 작성하기 --> 문서 링크
- 카프카 토픽 네이밍 규칙 --> 문서 링크
- 발생했던 문제, 장애에 대해
원인 -> 해결과정 -> 결론
형식으로 정리하여 동일한 문제 발생을 막기
- 추상화 비용에 대해 고려하기
- 효율적인 test fixture 재사용에 대해 고민하기
카카오 오븐 에서 볼 수 있습니다.
- 문제 발생 및 해결 과정 --> 트랜잭션은 재사용할 수 없다구요!
- 도입 과정 --> API Gateway를 만들어보자
- 도입 과정 --> Facade 패턴으로 의존 복잡성을 줄여보자!
- 발생 이슈 --> 그룹 가입 시 동시성 이슈 발생
- 해결 과정 --> 동시성 문제와 synchronized, 동시성 문제와 DB Lock, 동시성 문제와 분산 락
- 리팩토링 과정 --> switch에서 냄새나는 것 같아..!
- 도입 과정 --> CI/CD Pipeline을 구축해보자!
- 도입 과정 및 선택 이유 --> 페이징 때문에 서비스가 망하는 과정
- 사고 과정 -> 서비스간 통신을 해보자! - 방법과 선택, 서비스간 통신을 해보자! - 구현과 의문
- 결제 실패 시 어떻게 해야 할까? -> 왜 결제했는데 적용이 안돼요?
- 검색 시간을 8.19s → 0.048s로 개선한 경험을 공유합니다. -> 게시글 검색이 너무 느려요