Study 48

Spring에서 Bean 생명주기 개념 정리

스프링 컨테이너와 ApplicationContext란?Spring에서 객체를 관리하는 핵심은 바로 스프링 컨테이너입니다. 이 컨테이너는 객체(Bean)를 생성하고, 의존성을 주입하며, 생명주기를 관리합니다.ApplicationContext는 스프링 컨테이너의 구체적인 구현체이며, BeanFactory를 확장합니다.BeanFactory가 최소 기능만 제공하는 반면, ApplicationContext는 다음을 포함한 다양한 기능을 제공합니다대부분의 스프링 애플리케이션에서는 ApplicationContext를 사용합니다. Bean 생명주기 전체 흐름Spring에서 Bean의 생명주기는 다음과 같은 순서로 진행됩니다.Bean 인스턴스 생성 (생성자 호출)의존성 주입 (필드, 생성자, setter 등)BeanNa..

Study/SpringBoot 2025.05.17

Spring MVC와 Spring Security의 예외 처리 차이점

예외 처리란?먼저 "예외 처리"는 프로그램 실행 중에 문제가 생겼을 때(예: 로그인 실패, 없는 사용자 요청 등), 그 문제를 적절하게 처리해서 사용자에게 이해할 수 있는 응답을 보내는 걸 말한다.Spring MVC의 예외 처리Spring MVC에서는 컨트롤러에서 예외가 터졌을 때 자동으로 예쁘게 처리할 수 있게 도와주는 여러 기능을 제공하는데, 대표적으로@ExceptionHandler@ResponseStatus@ControllerAdvice1. @ExceptionHandler@ExceptionHandler(MyCustomException.class)public ResponseEntity handleMyException(MyCustomException ex) { return ResponseEntit..

Study/SpringBoot 2025.05.05

Redis, Redis Pub/Sub, Redis Stream( VS Kafka)

1️⃣ Redis(Remote Dictionary Server)란 무엇인가?= 키-값(key-value) 구조로 데이터를 저장하는 인메모리 데이터 저장소.Redis의 특징항목 설명인메모리디스크 대신 메모리에 저장해서 빠른 속도Persistence 지원필요하면 디스크에 주기적으로 저장 가능 (AOF, RDB)다양한 자료구조String, List, Set, Sorted Set, Hash, HyperLogLog 등싱글 스레드 기반I/O 멀티플렉싱으로 고성능 유지 (논블로킹)Pub/Sub 지원메시지 브로커처럼 채널 기반 발행/구독 가능간단한 설치 및 사용몇 줄 명령어로 바로 사용 가능 2️⃣ Redis가 동작하는 원리1. 인메모리 저장모든 데이터는 RAM(메모리)에 저장.→ 읽기/쓰기가 수천~수만 QPS(초당 ..

Study 2025.04.27

MySQL 인덱스의 종류와 사용 기준, 주의사항

1. 인덱스란?인덱스는 데이터베이스 테이블에서 원하는 데이터를 더 빠르게 찾기 위해 사용하는 자료구조야.일반적으로 B-Tree 구조를 사용WHERE 조건이나 JOIN, ORDER BY, GROUP BY 등을 사용할 때 검색 성능을 높여줘. 2. MySQL 인덱스의 종류BRIN, GIN은 MySQL에서 지원하지 않고 Partial B-Tree도 거의 사용되지 않음👉 MySQL에서 거의 모든 경우 B-Tree 기반 인덱스 사용3. 인덱스를 설정하는 기준 (언제 인덱스를 걸어야 할까?)조건 설명WHERE 절 자주 사용예: SELECT * FROM users WHERE email = 'abc@email.com'JOIN의 ON절두 테이블을 자주 조인하는 컬럼에 인덱스를 설정해야 빨라져ORDER BY / GROU..

Study 2025.04.20

JPA의 flush()는 언제, 왜 호출될까?

JPA의 플러시는 영속성 컨텍스트의 변경 내용을 데이터베이스에 동기화하는 과정이다. 즉, 영속성 컨텍스트의 변경 내용을 실제 DB에 반영하는 행위이다.주의: flush()는 영속성 컨텍스트를 비우지 않는다. 단지, 쓰기 지연 SQL 저장소에 쌓여 있던 쿼리들을 데이터베이스에 전송할 뿐! 언제 자동으로 flush()가 호출될까?기본적으로 flush()는 다음 시점에 자동 호출된다.1. 트랜잭션이 커밋될 때2. JPQL 쿼리를 실행할 때 1️⃣ 왜 JPQL 실행 시 자동으로 flush()가 일어날까? 예를 들어 하나의 트랜잭션 안에서 다음과 같은 코드가 있다면em.persist(memberA); // 아직 DB에는 반영되지 않음List result = em.createQuery("select m from ..

Study/SpringBoot 2025.04.12

지속적 통합과 배포의 핵심, CI/CD 파이프라인

CI/CD 파이프라인CI/CD 파이프라인은 소프트웨어 개발의 전 과정을 자동화하여 코드 변경 사항이 개발 환경에서 프로덕션 환경까지 빠르고 안전하게 이동할 수 있도록 하는 일련의 프로세스다.CI(Continuous Integration)와 CD(Continuous Delivery 또는 Continuous Deployment)의 결합으로, 코드를 지속적으로 빌드, 테스트, 배포하여 소프트웨어 품질을 유지하고 릴리스 주기를 단축한다. CI(Continuous Integration, 지속적 통합)CI(Continuous Integration, 지속적 통합)는 소프트웨어 개발에서 개발자들이 코드 변경을 지속적으로 중앙 리포지토리에 병합하고, 자동화된 빌드와 테스트를 통해 변경 사항이 즉시 통합되는 프로세스를 의..

Study 2025.03.30

Spring Boot 테스트 코드: 통합 테스트 vs 단위 테스트

통합 테스트는 전체 애플리케이션 컨텍스트를 로드하여 실제 운영 환경과 유사한 조건에서 컴포넌트 간의 상호작용과 전체 시스템의 동작을 검증하는 데 목적이 있으며, 주로 @SpringBootTest, @AutoConfigureMockMvc과 MockMvc를 활용해 테스트한다. 반면, 단위 테스트는 특정 클래스나 메서드를 외부 의존성과 격리된 상태에서 검증하여 기능의 정확성을 빠르고 효율적으로 확인하는 데 초점을 두며, @Mock, @InjectMocks, Mockito 등을 사용해 최소한의 환경에서 테스트를 수행한다.1️⃣ 통합 테스트전체 Spring Boot 애플리케이션 컨텍스트(ioc)를 로드하여, 실제 환경과 유사한 조건에서 컨트롤러의 동작을 검증하는 테스트다. (DB, 서비스, 리포지토리, 시큐리티 ..

Study/SpringBoot 2025.03.27

SpringBoot + JPA: N+1 문제 발생 원인과 해결 방법

N+1 문제 정의한 번의 조회로 주 엔티티 “N개”를 가져왔을 때, 각각의 연관 엔티티를 다시 조회하는 쿼리가 “N번” 추가 실행되어 총 (1 + N)번의 쿼리가 발생하는 현상이다.public void printTeamMembers(EntityManager em) { List teams = em.createQuery("SELECT t FROM Team t", Team.class) .getResultList(); // 1️⃣ 1번 쿼리 (Team 전체 조회) for (Team team : teams) { for (Member member : team.getMembers()) { System.out.println("Mem..

Study/SpringBoot 2025.03.22

Spring Been 객체와 프록시 패턴

빈(Been)은 스프링 IoC/DI 컨테이너의 핵심 관리 대상이며, 주로 의존성 주입 (DI) 을 통해 빈을 프레임워크로부터 주입받아 사용하는 것이 일반적이다.사용 이유객체 관리의 효율성 : 스프링 컨테이너가 빈의 생성, 소멸, 의존성 관리를 자동으로 처리해주므로 개발자는 객체 관리에 대한 부담을 덜고 비즈니스 로직에 집중할 수 있다.컴포넌트 재사용성 및 유지보수성 향상: 빈은 독립적인 단위로 설계되어 재사용성이 높고, 설정과 코드가 분리되어 유지보수가 용이하다.빈의 스코프(Scope)스프링 빈은 생성과 관리의 범위를 지정할 수 있는 스코프가 있다. 스코프에 따라 빈이 생성되고 유지되는 방식이 달라지며, 이를 통해 애플리케이션 요구사항에 맞는 객체 관리를 수행할 수 있다.Singleton (기본 스코프)..

Study/SpringBoot 2025.03.10

Spring Boot 주요 모듈 및 MVC 아키텍처

1. Spring Boot 주요 모듈Spring Boot는 Java 플랫폼을 위한 경량(Lightweight) 및 유연한 애플리케이션 프레임워크다. 기존의 J2EE 솔루션(EJB 등)보다 가벼우면서도 다양한 기능을 제공하여, 필요한 모듈만 선택적으로 사용할 수 있는 장점이 있다. 주요 모듈Core Container스프링의 핵심 모듈이며, IoC(Inversion of Control) 컨테이너(BeanFactory, ApplicationContext)를 제공하여 빈(Bean)의 생명주기를 관리한다.객체의 생성, 의존성 관리, 생명주기 관리를 담당한다.AOP(Aspect-Oriented Programming)횡단 관심사(Cross-cutting concerns)를 분리하여 핵심 로직과 분리해 재사용성을 높인..

Study/SpringBoot 2025.03.06