전체 글 190

정합성 문제

정합성 문제란 무엇인가정합성(整合性, Consistency) 문제란 시스템 내 데이터 간의 논리적 관계나 상태가 어긋나는 상황을 의미함.쉽게 말해 "데이터가 서로 맞지 않음" → 즉, 하나는 A라고 말하고 다른 하나는 B라고 말하는 경우를 말함.이러한 정합성 문제가 발생하면 서비스의 신뢰성이 떨어지고, 사용자 경험에도 직접적인 영향을 줄 수 있음.1. 정합성의 의미정합성은 시스템에서 데이터의 상태가 논리적으로 일관되고 모순되지 않는 것을 의미함.정합성이 잘 유지된다는 것은 업데이트, 복제, 분산 처리, 캐시 반영 등이 모두 제대로 동기화되어 있는 상태를 뜻함.예시주문 상태가 “결제 완료”인데 실제 결제 이력이 없음 → 정합성 문제재고 수량은 0인데 주문은 통과됨 → 정합성 문제Kafka로 전송된 이벤트에..

DB 2025.04.30

[Spring Boot] E2E 테스트

E2E 테스트란 무엇인가 – End-to-End 테스트 개념과 전략**E2E 테스트(End-to-End Test)**는 소프트웨어 시스템의 시작부터 끝까지, 사용자 관점에서 전체 흐름을 시뮬레이션하며 테스트하는 방식임.사용자가 실제로 사용하는 방식 그대로 애플리케이션을 테스트함으로써, 기능이 서로 잘 연결되어 있는지를 검증함.UI → API → DB → 응답 → 화면 결과까지 모든 흐름을 점검하는 것이 특징임.1. E2E 테스트의 목적전체 기능 흐름 검증각 컴포넌트가 개별적으로 잘 동작하더라도, 통합 시 문제가 발생할 수 있음.E2E 테스트는 이 전체적인 연결 상태를 검증함.실제 사용자 경험 시뮬레이션클릭, 입력, 전송 등 사용자의 행동을 자동화하여 실제 사용과 유사한 시나리오를 반복적으로 실행함.서비스..

PostgreSQL

대규모 환경에서의 PostgreSQL 운영 전략PostgreSQL은 오픈소스 RDBMS 중 가장 강력하고 신뢰성 높은 시스템으로 평가받고 있음.ACID 트랜잭션 지원, 고급 쿼리 최적화 기능, 확장성 있는 아키텍처로 인해 중소기업부터 대규모 서비스까지 폭넓게 활용되고 있음.하지만 데이터량이 많아지고 트래픽이 커질수록 단순한 설정만으로는 성능과 안정성을 확보하기 어려움.따라서 대규모 환경에서는 PostgreSQL의 다양한 기능과 아키텍처를 이해하고 활용해야 함.1. PostgreSQL의 대규모 시스템에서의 장점MVCC 기반 동시성 처리여러 사용자의 읽기/쓰기 작업을 락 없이 처리 가능함.확장 가능한 인덱스, 파티셔닝, 샤딩데이터가 많아져도 수평적/수직적 확장이 가능함.스토리지 최적화 및 WAL 기반 복구W..

DB 2025.04.28

[Spring Boot] Redis pub/sub

Redis Pub/Sub 이란 무엇인가Redis Pub/Sub(Publish/Subscribe)은 Redis가 제공하는 메시징 기능 중 하나로, 발행/구독 모델을 기반으로 메시지를 전달하는 구조임.서버 간 또는 서버와 클라이언트 간에 비동기 메시지를 실시간으로 전달할 수 있도록 하는 기능임.특정 채널(channel)에 메시지를 발행하면, 해당 채널을 구독 중인 모든 클라이언트가 동시에 메시지를 받을 수 있음.별도의 큐나 브로커 없이 간단하게 실시간 메시징이 가능하다는 점에서 실시간 채팅, 알림, 스트리밍, 이벤트 브로드캐스트 등에 적합함.1. Redis Pub/Sub 기본 개념Pub/Sub 구조는 다음과 같이 구성됨:Publisher → Channel → SubscriberPublisher: 메시지를 발..

[Spring Boot] STOMP

STOMP란 무엇인가 – 웹소켓을 더 구조화하기 위한 프로토콜STOMP (Simple Text Oriented Messaging Protocol) 는 텍스트 기반의 경량 메시징 프로토콜로, 웹소켓 상에서 메시지를 주고받을 때 구조적이고 표준화된 방식으로 통신을 가능하게 해주는 프로토콜임.웹소켓이 단순한 통신 채널이라면, STOMP는 그 위에서 주제(topic), 구독(subscription), 전송(send), 연결 관리 등을 정의하는 규약임.Spring Framework에서는 STOMP를 통해 복잡한 웹소켓 로직을 단순화하고, 채팅, 실시간 알림, 브로커 연동 등을 쉽게 구현할 수 있음.1. 왜 STOMP를 사용하는가?웹소켓 자체는 프레임 단위로 데이터를 주고받는 낮은 수준의 통신 프로토콜임.예를 들어..

K6 부하 테스트

K6란 무엇인가 – 개발자 친화적인 부하 테스트 도구K6는 현대 웹 애플리케이션을 위한 오픈소스 부하 테스트(Load Testing) 도구임.개발자와 테스터가 성능 테스트를 코드처럼 작성하고 자동화할 수 있도록 설계됨.특히 JavaScript 기반으로 스크립트를 작성하므로 개발 친화적이며, CI/CD 환경에서도 쉽게 통합 가능함.1. K6의 주요 특징코드 기반 시나리오 작성JavaScript 문법을 기반으로 테스트 스크립트를 작성할 수 있음.경량화 및 고성능Go 언어로 개발되어 실행 속도가 빠르고, 수천~수만 RPS(Request per second)를 생성 가능함.자동화에 유리함테스트 스크립트를 Git 저장소에 관리하고, CI 파이프라인에 통합할 수 있음.여러 환경 지원로컬, Docker, 클라우드(K..

Infra 2025.04.25

모놀리식 아키텍처와 MSA

모놀리식(Monolithic) 아키텍처와 MSA(Microservices Architecture) 비교 정리애플리케이션을 설계할 때 어떤 아키텍처로 구성할지 결정하는 것은 매우 중요한 요소임.대표적으로 모놀리식(Monolithic) 아키텍처와 MSA(Microservices Architecture, 마이크로서비스 아키텍처) 가 널리 사용되고 있음.두 아키텍처는 시스템을 구성하는 방식, 배포 전략, 확장성, 유지보수 방식에 큰 차이가 있음.1. 모놀리식(Monolithic) 아키텍처란?모놀리식 아키텍처는 하나의 애플리케이션이 하나의 프로젝트로 구성되어 모든 기능이 함께 동작하는 구조임.웹 서버, API, DB 접근, 비즈니스 로직, UI 레이어 등이 하나의 코드베이스와 하나의 실행 파일로 통합되어 있음.특..

Nori 한글 형태소 분석기, KNN 서치

Elasticsearch와 함께 사용하는 Nori 형태소 분석기와 KNN 서치Elasticsearch는 강력한 검색엔진이지만, 기본적으로 영어에 최적화되어 있음.한국어 같은 복잡한 언어를 정확하게 처리하려면 형태소 분석이 필요하며, 이를 위해 Nori 분석기를 사용함.또한, KNN 서치는 텍스트 유사도 기반 검색이나 추천 시스템을 구축할 때 사용하는 벡터 기반의 고속 유사 검색 기능임.1. Nori 형태소 분석기란 무엇인가Nori 분석기는 Elasticsearch에서 제공하는 한국어 전용 형태소 분석기임.형태소는 단어를 구성하는 가장 작은 의미 단위이며, Nori는 이를 분리하고 불용어 제거, 사용자 사전 기반 분석 등 다양한 기능을 제공함.주요 기능명사, 동사, 조사 등 분리하여 분석함.불용어 제거로 ..

DB/Elasticsearch 2025.04.23

[Spring Boot] Spring JDBC

Spring JDBC 란 무엇인가Spring JDBC 는 Spring Framework에서 제공하는 JDBC (Java Database Connectivity) 추상화 라이브러리임.기본 Java JDBC API는 매우 낮은 수준의 코드 작성이 요구되고, 반복 코드가 많으며 예외 처리가 복잡함.Spring JDBC 는 이런 복잡한 과정을 간결하고 일관성 있는 방식으로 처리할 수 있도록 도와주는 모듈임.기본 JDBC 기능은 그대로 사용하면서도, Spring이 제공하는 템플릿 기반의 API를 통해 코드량을 줄이고 예외 처리, 트랜잭션 관리, 리소스 정리를 자동화할 수 있음.1. Spring JDBC 의 주요 특징JDBC 코드 간소화반복되는 Connection, PreparedStatement, ResultSe..

[Spring Boot] 웹소켓

웹소켓(WebSocket)이란 무엇인가웹소켓(WebSocket)은 클라이언트(브라우저 등)와 서버 간에 실시간 양방향 통신을 가능하게 해주는 프로토콜임.HTTP 프로토콜과 다르게 요청-응답 방식이 아니라, 연결이 유지된 상태에서 양방향으로 데이터를 자유롭게 주고받을 수 있음.일반적인 HTTP 는 클라이언트가 요청할 때만 서버가 응답하는 방식이지만, 웹소켓은 한번 연결이 성립되면 서버에서도 자유롭게 클라이언트에 메시지를 보낼 수 있음.따라서 실시간성이 중요한 채팅, 알림, 주식 시세, 게임 서버 등에 많이 사용됨.1. 웹소켓의 동작 방식웹소켓은 처음에는 HTTP 요청 으로 연결을 시작함. 이를 핸드셰이크(Handshake) 라고 부름.핸드셰이크가 완료되면 연결이 업그레이드되어 지속적인 양방향 통신이 가능해..