본문 바로가기

Spring

(65)
3. 필터 체인에서 자주 사용되는 시큐리티(보안) 필터 간단하게 정리 필터 체인(Filter Chain)은 말 그대로 여러 개의 필터들이 체인 형태로 연결되어 순차적으로 요청(Request)과 응답(Response)을 가로채 처리하는 구조를 말합니다. 이런 필터 체인을 통해 인증, 권한 확인, 세션 관리, CSRF 방어 등의 보안 기능들을 체계적으로 구현할 수 있습니다. 특히 Java 기반(예: Spring Framework) 웹 애플리케이션에서는 Servlet Filter를 활용해 보안 로직을 구성하는 경우가 많으며, Spring Security는 내부적으로 다양한 보안 관련 필터들을 연결한 “필터 체인”을 사용해 방대한 보안 기능을 제공하는 대표적인 예시입니다. 1. Spring Security의 핵심 필터 체인 구조Spring Security는 DelegatingFi..
2. @EnableGlobalMethodSecurity 대체 @EnableGlobalMethodSecurity는 Spring Security 6.0(2022년 11월 릴리즈)부터 더 이상 사용되지 않으며, 대신 새로운 방식으로 변경되었습니다. 이는 스프링 보안 설정을 더욱 직관적이고 간소화하기 위한 변화입니다. 대체: @EnableMethodSecurityimport org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity;@Configuration@EnableMethodSecurity(prePostEnabled = true)public class SecurityConfig { // 보안 설정 관련 코드}  @EnableMethodSecurity 주요 변경점..
스프링 시큐리티(Spring Security) 개요 스프링 시큐리티는 스프링 프레임워크 기반 애플리케이션에서 인증(Authentication)과 권한 부여(Authorization)를 중심으로 보안 기능을 제공하는 강력한 프레임워크입니다. 현대적인 애플리케이션의 다양한 보안 요구를 만족시키며, 유연성과 확장성을 겸비하고 있습니다.  주요 기능인증(Authentication):사용자가 누구인지 확인하는 과정입니다.ID/비밀번호, OAuth2, JWT, SSO(Single Sign-On) 등 다양한 인증 방식을 지원합니다.권한 부여(Authorization):특정 사용자가 애플리케이션의 리소스에 접근할 권리가 있는지를 검증합니다.URL, 메서드, 도메인 객체 단위로 세밀한 권한 제어가 가능합니다.보안 공격 방어:CSRF(Cross-Site Request Fo..
배치 쿼리의 성능 이슈 원인 간단하게 스프링 애플리케이션에서 배치 쿼리(Batch Query)를 사용하는 경우, 성능 이슈는 주로 데이터 처리량과 쿼리 실행 방식에서 발생합니다. 배치 쿼리는 대량의 데이터를 한 번에 처리하기 위한 방법이지만, 올바르게 설정하지 않으면 성능 저하나 예기치 않은 문제를 일으킬 수 있습니다. 배치 쿼리의 성능 이슈 원인1. JDBC Batch Size 미설정문제: 기본적으로 JDBC는 배치 쿼리를 처리할 때 한 번에 한 레코드씩 처리합니다. 이는 데이터베이스와의 연결 횟수가 증가해 성능이 저하됩니다.원인: hibernate.jdbc.batch_size(Hibernate) 또는 spring.jpa.properties.hibernate.jdbc.batch_size(Spring Boot)와 같은 설정을 하지 않은 경우..
영속성 컨텍스트(Persistence Context) JPA(Java Persistence API)의 핵심 개념 중 하나로, 엔티티(Entity) 객체를 관리하고 데이터베이스와의 상호작용을 책임지는 논리적 작업 공간입니다. 이를 통해 객체와 데이터베이스 간의 상태를 동기화하고, 애플리케이션 개발에서 생산성과 효율성을 높이기 위해 사용. 1. 영속성 컨텍스트(Persistence Context)란?정의:영속성 컨텍스트는 JPA가 제공하는 엔티티를 저장하거나 조회하는 작업을 담당하는 메모리 상의 캐시입니다.쉽게 말해, 엔티티 객체를 관리하는 1차 캐시 역할을 합니다.**엔티티 매니저(EntityManager)**를 통해 영속성 컨텍스트에 접근합니다.EntityManager = 영속성 컨텍스트를 관리하는 인터페이스. 2. 영속성 컨텍스트의 상태엔티티 객체는 영속..
@Embedded, @Embeddable 간단하게 @Embedded는 JPA(Java Persistence API)에서 객체 지향적인 데이터 모델링을 지원하기 위해 사용되는 어노테이션입니다. 이는 엔티티 클래스 내에 값 타입(Value Type) 객체를 포함(Embed)하여, 해당 객체의 속성들을 데이터베이스 테이블의 컬럼으로 매핑할 수 있게 해줍니다. 1. Embedded의 기본 개념Embedded(포함):JPA 엔티티의 필드로 또 다른 객체(값 타입 객체)를 포함시킬 때 사용합니다.주요 어노테이션:@Embedded: 값 타입 객체를 엔티티에 삽입할 때 사용.@Embeddable: 값 타입 객체로 사용할 클래스를 정의할 때 사용.2. Embedded와 Embeddable의 관계@Embedded와 @Embeddable은 항상 같이 사용됩니다.@Embed..
@Converter 간단하게 @Converter는 JPA가 제공하는 어노테이션으로, 엔티티 필드와 데이터베이스 컬럼 간의 변환 로직을 정의할 때 사용합니다.주요 기능Java 객체 ↔ DB 데이터 간의 변환엔티티 필드 값을 데이터베이스에 저장하거나 읽어올 때 변환 작업을 자동으로 수행합니다.재사용 가능변환 로직을 분리해 여러 엔티티에서 쉽게 재사용할 수 있습니다.자동 적용@Converter(autoApply = true)를 설정하면, 특정 타입에 대해 변환기를 전역적으로 적용할 수 있습니다.2. 기본 사용법2.1. Converter 인터페이스변환 로직은 jakarta.persistence.AttributeConverter 인터페이스를 구현하여 정의합니다.public interface AttributeConverter { Y co..
Native Query Native Query는 JPA에서 제공하는 기능 중 하나로, JPQL 대신 SQL 쿼리를 직접 작성해서 사용할 수 있는 방법입니다. Native Query는 데이터베이스에 종속적이며, 특정 데이터베이스에서만 동작할 수 있는 SQL 구문을 사용할 수 있습니다.JPA의 추상화된 JPQL을 사용하는 대신, 더 강력하고 세밀한 제어가 필요한 경우 Native Query를 사용합니다. Native Query의 특징SQL 기반JPQL과 달리, 데이터베이스 테이블 및 컬럼 이름을 직접 사용하여 쿼리를 작성합니다.데이터베이스 종속성특정 데이터베이스의 고유 기능(예: MySQL의 LIMIT, PostgreSQL의 JSONB 등)을 사용할 수 있습니다. 따라서 데이터베이스 변경 시 쿼리도 수정이 필요할 수 있습니다.복잡..