🎈 Eureka Server 구축 1. 프로젝트 생성 프로젝트를 생성할 때 Eureka Server 의존성을 추가합니다. 이 Eureka Server는 API Gateway와 각 서비스의 위치 정보를 관리하는 역할을 하게 됩니다. Eureka Server 의존성
도입 배경 현재 Ficket 프로젝트는 user, admin, event, queue, ticketing, face 총 6개의 마이크로서비스로 구성되어 있습니다. 초기에는 각 마이크로서비스에 개별적으로 인증/인가 로직을 적용하는 방식을 고려했으나, 이로 인해 코드의
Config 서버 도입 배경 현재 Ficket 프로젝트는 user, admin, event, queue, ticketing, face 총 6개의 마이크로 서비스로 구성되어 있습니다. 기존 방식에서는 각 마이크로 서비스의 설정 파일이 개별적으로 관리되고 있어, 공통 설
지난 시간에는 Config 서버 생성 및 설정을 진행하였습니다. 하지만 실행 중인 MSA(Microservices Architecture) 애플리케이션들이 Config 서버와 연결되어 있는 상황에서, Git에 저장된 user-service-local.yml 파일의 내용이 변경되었다고 가정해봅시다. 이 경우 Config Server는 즉시 변경된 내용을 ...
지난 글에서는 Git Repository를 Private으로 설정하여 Spring Cloud Config Server의 환경 설정 파일을 보호하는 방법을 다뤘습니다. 하지만, 이 방식만으로는 환경 설정 파일의 중요한 정보(예: 데이터베이스 비밀번호, API 키 등)가 유출될 가능성을 완전히 차단하기 어렵습니다. 이를 보완하기 위해 암호화 기법을 사용하는...
저번에 Config Server 암호화를 통해 Spring Cloud Config Server에 암호화를 적용하였습니다. 하지만 몇 가지 의문이 생겼습니다. 암호화를 적용했음에도 민감한 설정 값들이 충분히 안전하게 보호되고 있는가? 예를 들어, Config Serve
문제 발생 Spring Cloud Config 서버에서 암호화된 데이터를 복호화하려는 과정에서 아래와 같은 오류가 발생했습니다: 원인 Config 서버 설정에서 복호화 기능이 비활성화된 상태(spring.cloud.config.server.encrypt.enabled=false)였기 때문에, 클라이언트가 복호화를 시도할 때 키를 찾을 수 없었습니다. ...
이번 프로젝트에서는 MSA 기반 프로젝트를 개발하면서 Kafka Connect를 사용하여 독립적인 서비스 간의 DB를 동기화했습니다. 이 글에서는 Kafka와 Kafka Connect 설치부터, MySQL JDBC Connector 설정 및 Docker Compose
마이크로서비스 아키텍처(MSA)는 각각 독립적으로 배포 및 운영될 수 있는 서비스로 구성됩니다. 그러나 이러한 독립성에도 불구하고, MSA 환경에서는 서비스 간에 통신이 필요한 경우가 빈번히 발생합니다. 이를 통해 각 서비스가 데이터를 공유하고 협력하여 사용자의 요구를
개요 MSA(Microservices Architecture) 환경에서는 여러 서비스 간의 통신이 빈번히 이루어집니다. 하지만 특정 서비스에서 장애가 발생하거나 응답 시간이 지연되면 호출하는 서비스에도 영향을 미쳐 전체 시스템의 장애로 이어질 수 있습니다. 이 글에서는
Ficket 프로젝트는 얼굴 인식을 기반으로 한 티켓팅 서비스를 제공합니다. 얼굴 인식 서비스 개발을 위해 빠른 프로토타이핑, 유연한 확장성, 그리고 Python 기반 환경에서의 효율적인 통합이 중요했습니다. 이를 충족하기 위해 경량 웹 프레임워크인 Flask를 서버
1. 좌석 선점 티켓팅 시스템에서는 좌석이라는 고유 자원을 여러 사용자가 동시에 접근할 때 중복 예약을 방지해야 합니다. 이를 해결하기 위해 다음과 같은 요구 사항을 고려해야 합니다: 긴 락 유지 필요: 좌석을 선점한 사용자가 결제를 완료할 때까지 해당 좌석을 다른 사용자가 선택하지 못하도록 해야 합니다. 동시성 처리: 여러 사용자가 동시에 좌석을 요...
AWS Lambda 도입 배경 행사 등록 화면에서는 하나의 포스터 이미지와 하나의 배너 이미지를 등록하지만, 다양한 화면 요소에 맞춰 적절한 크기의 이미지가 필요합니다. 아래 설계도에서 볼 수 있듯이 각 이미지의 사용 목적에 따라 다양한 사이즈로 제공되어야 합니다.
Ficket 프로젝트에서 얼굴 인식 기반 티켓팅 중, 티켓 구매를 구현하는 과정에서 PortOne(KakaoPay)을 사용하였습니다. 본 문서는 포트원 API V2, 웹훅 V2 버전(2024-04-25 기준), 테스트 기반으로 작성되었습니다. 1. 포트원 연동 (Ka
Ficket 프로젝트는 얼굴 인식 기반 티켓팅 프로젝트로, 사용자 얼굴 이미지를 안전하게 보관하기 위한 방안을 고민했습니다. 민감한 데이터를 다루는 만큼 보안이 가장 중요한 요소였고, 데이터 암호화와 접근 제어를 위해 S3의 SSE-KMS(Server-Side Encryption with AWS Key Management Service)를 사용하기로 했습니...
Ficket은 얼굴 인식을 기반으로 한 티켓팅 서비스로, 사용자가 등록한 얼굴 이미지를 통해 현장에서 티켓 소지 여부를 확인할 수 있는 시스템입니다. 이 시스템은 InsightFace를 활용해 얼굴 임베딩(특징 벡터)을 생성하고, AES 암호화를 통해 데이터를 DB에
Ficket 프로젝트를 진행하며 조회수를 기준으로 실시간 랭킹 구현을 맡았습니다. 프로젝트에서는 기존에 Spring의 @Cacheable을 사용해 Redis 캐시를 통해 성능 최적화를 구현한 이벤트 상세 조회 API가 있었는데, 이를 활용하여 랭킹 시스템을 구현하려 했습니다. 하지만 캐시에 데이터가 있는 경우 조회수 증가 로직이 실행되지 않는 문제를 발견하...
저번에 조회수 기준 랭킹을 구현한 데 이어, 이번에는 예매율 기준 랭킹을 구현했습니다. 구현할 내용은 다음과 같습니다. Redis Sorted Set 사용: 예매 수를 기반으로 상위 50개의 순위를 기록합니다. 키 설정: 일간, 주간, 월간 데이터와 장르별로 구분할 수 있도록 Redis 키를 설정합니다. 주문 성공 시 업데이트: 주문이 성공하면 R...
반영된 최종본 오픈 티켓 화면의 반응형 구현을 위해 Figma에서 화면 설계를 진행했습니다. 아래는 PC와 모바일 화면 설계 이미지입니다. 오픈 티켓 PC 화면 오픈 티켓 PC 화면 오픈 티켓 모바일 화면 오픈 티켓 모바일 화면 설계 차이점 PC와 모바일 화면
Ficket 프로젝트는 얼굴 인식 기반 티켓팅 프로젝트로, 공연 데이터를 실시간으로 관리하며 사용자들에게 빠르고 정확한 검색 환경을 제공하는 것을 목표로 하고 있습니다. 이 프로젝트는 MSA(Microservices Architecture) 기반으로 설계되어 이벤트 관리, 검색, 사용자 인증 등 각 서비스가 독립적으로 운영되면서도 서로 긴밀하게 협력하는 ...
저번에 설계했던 시스템은 검색엔진 서버와 이벤트 서버를 중심으로 한 데이터 색인 및 검색 시스템이었습니다. 주요 기술 스택으로는 Elasticsearch, Redis, MongoDB, Object Storage, Spring Boot, Kibana를 사용하여 데이터 색
1. Spring Batch 이전 글에서는 Elasticsearch, Kibana, Redis, MongoDB를 Docker Compose로 구성하는 과정을 다루었으며, 이번 글에서는 Spring Batch, Quartz 설정, CSV 파일 생성 및 S3 업로드, K
이전 글에서는 Elasticsearch, Kibana, Redis, MongoDB를 Docker Compose로 구성하는 과정을 다루었으며, 이번 글에서는 인덱스 생성, S3 저장소 설정, 그리고 전체 색인 작업을 진행하겠습니다. 전체 색인 작업 개요 전체 색인 작
이번 글에서는 Elasticsearch 부분 색인 작업에 대해 다룹니다. 부분 색인은 데이터 변경 이벤트(생성, 수정, 삭제)가 발생했을 때, 해당 데이터를 Elasticsearch에 실시간으로 반영하는 작업입니다. Kafka, Redis, MongoDB를 활용하여
이번 글에서는 Elasticsearch를 활용한 검색 기능 구현 과정을 다룹니다. 주요 목표는 이벤트 검색과 자동완성 기능을 제공하는 API를 설계하고, Elasticsearch의 강력한 검색 및 필터링 기능을 활용하여 성능과 사용자 경험을 극대화하는 것입니다. 검색
1. 프로젝트 소개 Ficket은 얼굴 인식 기반의 티켓팅 서비스입니다. 이벤트마다 사용자가 몰리는 상황에서도 안정적이고 공정한 티켓팅을 제공하기 위해 대기열 시스템을 설계했습니다. 이번 글에서는 Ficket의 대기열 설계를 어떻게 했고, 그 설계를 구현하기 위해 어떤 기술 스택을 선택했는지, 그리고 왜 그런 선택을 했는지를 공유해 보겠습니다. 2. 대...
이번 글에서는 지난번에 기획하고 설계했던 Ficket 대기열 시스템의 실제 구현 과정을 공유하려고 합니다. 기획 단계에서 설정한 목표는 Kafka, Redis, WebSocket, WebFlux를 활용해 공정하고 확장 가능한 대기열 시스템을 만드는 것이었습니다. 이번