BE/Spring & Spring Boot 62

[Spring Boot] STOMP

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

모놀리식 아키텍처와 MSA

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

[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) 라고 부름.핸드셰이크가 완료되면 연결이 업그레이드되어 지속적인 양방향 통신이 가능해..

[Spring Boot] @CacheEvict

@CacheEvict 이란 무엇인가@CacheEvict 는 Spring Framework 에서 캐시(Cache)를 비우는 데 사용하는 어노테이션임.스프링 캐시 추상화(Cache Abstraction) 기능과 함께 사용되며, 캐시에 저장된 데이터를 명시적으로 삭제할 때 활용함.주로 데이터 변경이 발생하는 시점에서 사용하여, 캐시에 저장된 오래된 데이터를 제거하고 최신 데이터를 반영하도록 유도함.캐싱은 시스템 성능을 향상시키지만, 데이터가 변경되었을 때는 반드시 캐시를 갱신하거나 삭제해야 데이터 불일치 문제를 방지할 수 있음. 이를 위해 사용하는 것이 @CacheEvict 임.1. @CacheEvict의 주요 속성속성설명value 또는 cacheNames대상 캐시 이름 (캐시 저장소 구분)key제거할 캐시의..

[Spring Boot] 소셜로그인

✅ 카카오 소셜 로그인 전체 흐름 정리 (프론트, 카카오, 백엔드, DB, 브라우저 사이 데이터 흐름 중심) ### 🔐 전제 세팅 정보 • 프론트 주소: http://localhost:3000 • 백엔드 주소: http://localhost:8080 • 카카오 로그인 Redirect URI: http://localhost:8080/login/oauth2/code/kakao • 프론트 최종 리디렉트 URI: http://localhost:3000/oauth/callback 💡 카카오 소셜 로그인 상세 흐름 ✅ 1. 프론트: 로그인 버튼 클릭// React 등 프론트 코드window.location.href = "http://localhost:8080/oauth2/authorization/kakao"; ..

[Spring Boot] WebFlux

Spring WebFlux란? Spring WebFlux는 비동기(Asynchronous) 및 논블로킹(Non-blocking) 방식으로 동작하는 웹 프레임워크로, Spring 5에서 처음 도입되었음. ✅ Spring WebFlux의 특징 1. 비동기 & 논블로킹 (Asynchronous & Non-blocking) • 기존 Spring MVC는 요청을 처리하는 동안 스레드를 블로킹하지만, WebFlux는 논블로킹 방식으로 동작하여 높은 동시성 처리 가능. 2. 리액티브 스트림(Reactive Streams) 기반 • Publisher와 Subscriber 개념을 활용하여 데이터 스트림을 처리. • Project Reactor의 Mono와 Flux를 사용하여 비동기 데이터 흐름을 제어. 3. 함수형 엔드..

[Spring Boot] DAO와 Repository의 차이?

1️⃣ DAO (Data Access Object)란? DAO는 데이터베이스와의 직접적인 상호작용을 담당하는 객체로, SQL을 사용하여 CRUD(Create, Read, Update, Delete) 작업을 수행하는 계층을 의미함. 📌 특징 • 데이터베이스와 직접 연결하여 데이터를 조회, 저장, 수정, 삭제하는 역할. • JDBC, MyBatis, Hibernate, JPA 등 다양한 방법으로 구현 가능. • 비즈니스 로직(Service)과 데이터 접근을 분리하여 코드의 유지보수성을 높임. 📌 DAO 예제 (JDBC 사용)import java.sql.*;public class UserDao { private static final String URL = "jdbc:mysql://localhost:..

[Spring Boot] DAO

DAO (Data Access Object)란? 1️⃣ DAO 개념 DAO(Data Access Object)는 데이터베이스(DB)와 애플리케이션 간의 데이터 접근을 담당하는 객체임. 즉, DAO는 데이터베이스와 직접 상호작용하는 계층으로, 데이터를 조회, 저장, 수정, 삭제(CRUD)하는 역할을 함. DAO를 사용하는 이유: • 비즈니스 로직과 데이터 접근 코드의 분리 (유지보수성 증가) • 데이터베이스 변경 시 애플리케이션 코드에 최소한의 영향 • 코드의 재사용성을 높이고 가독성을 향상 2️⃣ DAO 패턴 구조 DAO는 MVC 패턴에서 Model 계층의 일부로 사용됨. DAO 패턴의 주요 구성요소: 1. Entity (DTO, VO) • DB 테이블과 1:1 매핑되는 데이터 객체 2. DAO (Dat..

[Spring Boot] ApplicationContext

ApplicationContext란? ApplicationContext는 스프링(Spring)의 핵심 인터페이스로, 스프링이 관리하는 Bean들의 생성, 관리, 설정 등을 담당하는 IoC 컨테이너임. IoC(Inversion of Control, 제어의 역전)란 객체의 생성과 관리를 프로그래머가 아니라 외부 컨테이너(스프링 컨테이너)에 맡기는 것을 의미하는데, 스프링에서 이 역할을 하는 컨테이너가 바로 ApplicationContext임. 즉, 스프링에서 사용되는 거의 모든 객체(Bean)는 ApplicationContext에 의해 관리된다고 보면 됨. ApplicationContext의 핵심 역할 ApplicationContext의 핵심적인 기능들은 다음과 같음. • Bean 생성 및 관리 • 의존성 ..