본문 바로가기

분류 전체보기53

[Photogram] Redis + Resilience4j로 MSA 장애 전파 막기 Photogram은 MSA 기반으로 구성되어 있으며, 게시글 관련 기능은 Post-service, 사용자 정보는 User-service에서 담당하고 있다.게시글 상세 조회 API는 작성자의 정보가 필요하기 때문에, Post-service는 User-service에 사용자 정보를 요청하게 되어 있다. 현재 게시글을 조회하는 플로우는 다음과 같다:사용자가 게시글 상세 조회 요청Post-service는 게시글 데이터 조회작성자 정보를 위해 User-service 호출사용자 정보를 포함한 게시글 응답 반환그런데 이 구조에 문제가 있는데, 만약 User-service가 다운되거나 응답하지 않는 상황이 발생하면, 게시글 조회 API 자체가 실패한다.즉, User-service의 문제로 Post-service도 함께.. 2025. 4. 23.
Photogram Push 기반 피드 구현 Photogram에서는 사용자의 팔로우 기반 피드를 Push 방식으로 구성했다.즉, 게시글이 업로드되면 해당 게시글 정보를 팔로워들의 피드에 즉시 푸시하는 방식이다. ERD는 위와 같이 구성되어 있으며 쿼리로 충분히 feed를 구현할 수 있다.SELECT p.*FROM Post pJOIN Follow f ON p.writer_id = f.target_idWHERE f.requester_id = :userId AND f.status = 'ACCEPTED'ORDER BY p.created_at DESCLIMIT 20;하지만 feed는 요청이 잦거나, follow가 많을수록 DB에 부하가 올 수 있다. Push 기반 피드 생성 흐름 (with Kafka & Redis)전체 흐름 요약클라이언트가 게시글 업로.. 2025. 4. 14.
Photogram 태그 기반 게시글 검색 기능 Post는 N개의 태그를 가질 수 있도록 설계를 하였다.tag는 중복된 이름이 많을 것을 대비해, 기존의 태그를 사용할 수 있도록 post와 tag 사이 post_tag라는 중간 테이블을 추가하였다.  RDB 기반 태그 검색의 장점과 한계실제 테스트를 위해 약 100만 건의 데이터를 대상으로 RDB와 Elasticsearch의 검색 속도를 비교해본 결과, RDB 쪽이 더 빠른 성능을 보였다.(물론 이는 내가 아직 Elasticsearch를 완전히 최적화하지 못했기 때문일 수도 있다.)하지만, 다음과 같은 상황에서는 RDB 방식에 한계가 있었다.부분 검색 (LIKE '%태그%')→ 인덱스를 활용하지 못해 검색 속도가 급격히 느려짐철자가 조금씩 다른 경우→ 예: "운!동", "운 동", "운동기록" 등연관 .. 2025. 4. 13.
Photogram 인증 구현하기 Photogram 프로젝트에서는 인증 방식으로 JWT(Json Web Token)를 사용한다.Gateway에서 JWT를 검증 후 요청 헤더에 User-Id를 추가하고 , 마이크로서비스 간에는 이 헤더 값을 통해 인증 여부를 판단한다.https://github.com/setung/photogram  인증 흐름사용자가 로그인 시도user-service에서 로그인 처리로그인 성공 시 JWT 발급JWT를 포함한 요청클라이언트는 이후 요청 시 JWT를 헤더에 담아 Gateway로 전달Gateway에서 JWT 검증JWT의 유효성 확인유효할 경우, JWT에서 userId를 추출하여user-id라는 이름의 헤더로 마이크로서비스에 전달마이크로서비스에서 user-id 판단Gateway가 전달한 user-id 헤더 존재 여.. 2025. 4. 13.
Photogram 아키텍처 Photogram은 Instagram을 모티브로 한 SNS 서비스로, 대규모 트래픽 처리와 MSA 구조 학습을 목적으로 만든 개인 프로젝트이다.실무에서 자주 사용하는 구조와 기술들을 직접 설계하고 구현하면서 아키텍처 감각을 키우는 것이 이 프로젝트의 목표이다.https://github.com/setung/photogram목표MSA 구조 설계 및 구현Kafka 기반 이벤트 처리 경험ElasticSearch를 활용한 태그 기반 검색시스템 설계 및 트래픽 처리 구조 학습기술 스택BackendSpring Boot (Kotlin), Spring CloudDBMySQL, RedisMessagingKafkaSearchElasticSearchStorageAWS S3EmailAWS SESInfraConfig Server.. 2025. 4. 13.
7장. 분산 시스템을 위한 유일 ID 생성기 설계 다중 마스터 복제 - DB의 auto_increment 기능을 활용하는 방법으로 각 DB의 ID의 값을 서버 개수만큼 크기로 증가시켜 얻는 방법. - 여러 데이터 센터에 걸쳐 규모를 늘리기 어렵다. - ID의 유일성은 보장되곘지만 그 값이 시간 흐름에 맞추어 커지도록 보장할 수는 없다. - 서버를 추가하거나 삭제할 때도 잘 동작하도록 만들기 어렵다. UUID - 128비트로 유일성이 보장되는 ID를 만드는 간단한 방법. - 서버 사이의 조율이 필요 없으므로 동기화 이슈가 없고 규모 확장도 쉽다. - 시간순으로 정렬할 수 없고, 숫자가 아닌 값이 포함될 수 있다. 티켓 서버 - auto_increment 기능을 갖춘 데이터베이스 서버를 중앙 집중형으로 하나만 사용하는 방법. - 유일성이 보장되 ID를 쉽게.. 2025. 1. 25.
728x90