CORS(Cross-Origin-Resource-Sharing)란?서로 다른 출처(Origin)에서 리소스를 공유하는 것을 말합니다. URL의 구조URL은 다음과 같은 6가지 요소로 구성됩니다.https://www.domain.com:8080/member?query=name&page=1#firsthttps:// www.domain.com :8080 /member ?query=name&page=1 #firstProtocol: https://Host: www.domain.comPort: :8080Path: /memberQuery string: ?query=name&page=1Fragment: #first여기서 Protocol, Host, Port 부분이 Origin(출처)입니다. CORS 설정이 되어 있지 ..
1. Redis와 Kafka를 활용해서 물건 구매 로직을 구현한 이유1. Redis를 이용한 실시간 재고 관리물건 구매 요청이 들어오면 Redis에서 물건 수량을 즉시 감소하도록 설계했습니다. 서비스는 예약된 시간에만 오픈되기 때문에, 서비스 시작 전 Redis에 물건의 초기 수량을 미리 저장해두는 방식으로 준비하고 있습니다. 현재는 물건 수량 감소 로직만 구현되어 있지만, 추후 서비스가 안정화되면 Redis에 물건 수량을 미리 저장하는 로직도 추가할 계획입니다.2. Kafka를 이용한 순차적 DB 반영한 번에 대량의 구매 요청이 들어올 경우를 대비해 Kafka를 사용하여 데이터의 순차 처리를 보장하고자 했습니다. 물건 구매 요청이 발생하면 해당 요청을 Kafka에 기록하고, Kafka의 Consumer..
서비스를 개발할 때 UUID를 Primary Key로 사용하는 방법이 있습니다. 하지만 저는 Member 클래스에만 UUID를 필드로 추가하였고, 그 이유를 정리해 보았습니다. 1. 왜 UUID 사용하지 않아야 할까?UUID는 전역적으로 고유한 식별자를 생성할 수 있어 데이터베이스의 ID로 자주 사용됩니다.하지만 프로젝트를 진행하면서 저장 공간 효율성과 검색 성능을 고려해 UUID를 ID로 사용하지 않기로 결정 했습니다. 1.1. 저장 공간 효율성UUID는 128비트로 길이가 길어, 숫자형 ID보다 더 많은 저장 공간을 차지합니다. 1.2. 검색 성능UUID는 랜덤하게 생성되기 때문에 데이터베이스에서 인덱스를 생성할 때 정렬되지 않은 상태로 저장됩니다.이로 인해 데이터베이스 검색 시 성능이 떨어질 수 있..
최근 프로젝트에서 객체 생성 시 Builder 패턴을 도입할지 고민했지만, 필수 필드 누락으로 인해 객체가 잘못 생성될 위험이 있어 Builder 패턴을 사용하지 않기로 결정했습니다. 이에 대해 간단히 기록해 보았습니다. 1. Builder 패턴의 장점1.1. 가독성 향상Builder 패턴은 복잡한 객체의 생성 과정을 가독성 높게 표현할 수 있습니다.// 예시: Builder 패턴을 이용한 객체 생성Member member = new Member.Builder() .id(1L) .name("Yeseul Hong") .email("yeseul@example.com") ..
Hot Deal이라는 프로젝트를 진행하면서 어떻게 하면 데이터의 무결성을 보장할 수 있을지 고민해보았습니다. 가격이나 재고와 같은 특정 값을 다룰 때는 이 값들이 항상 올바른 범위를 가지도록 하는 것이 중요합니다. 그렇지 않으면 잘못된 값이 비즈니스 로직에 흘러들어가 시스템 전체에 오류를 일으킬 수 있기 때문입니다. 이러한 문제를 해결하기 위해 구체적인 자료형을 생성해 보았습니다. Java의 기본 자료형이 아닌, 값 자체에 대한 제약 조건을 포함하는 Price와 Quantity 클래스를 만들어 활용했습니다. 이로써 코드 중복을 줄이고, 생성과 동시에 유효성 검증을 통해 데이터 무결성을 보장할 수 있습니다. 1. 왜 기본 자료형이 아닌 구체적인 자료형을 선택했을까?가격(Price)과 재고(Quantity)..
오늘은 Kubernetes 환경에서 Spring Boot 애플리케이션을 Prometheus와 Grafana를 사용해 모니터링하는 방법을 상세히 알아보겠습니다.특히 ServiceMonitor 설정 시 자주 발생하는 문제와 해결 방법에 대해 중점적으로 다루어보려 합니다. 이 포스트는 Kubernetes 클러스터에 배포된 Spring Boot 애플리케이션의 메트릭을 Prometheus로 수집하고, Grafana를 통해 시각화하는 과정을 다룹니다.이 설정은 Helm을 이용해 Prometheus와 Grafana를 설치한 상태에서 진행됩니다. 1. Spring Boot 서버 설정1.1 Actuator 및 Prometheus 라이브러리 추가먼저 Spring Boot 애플리케이션이 Prometheus 메트릭을 제공하려..