Java 12

쿠키 - SameSite 및 Domain 설정에 따른 쿠키 전달 이슈

1. SameSite 설정SameSite 옵션은 브라우저에서 쿠키가 요청에 포함되는 조건을 제어한다. 특히 서로 다른 도메인 간의 요청(크로스 사이트 요청)에 대해 보안을 강화하는 역할을 한다.SameSite의 종류Strict: 같은 사이트에서만 쿠키가 전송된다. (가장 엄격)Lax: 대부분의 상황에서 같은 사이트에서만 전송되지만, 일부 GET 요청은 허용None: 다른 도메인에서도 쿠키가 전송됨. 단, Secure 플래그가 반드시 함께 설정되어 있어야 한다.설정 예시 (Spring Boot 기준)ResponseCookie.from("token", tokenValue) .sameSite("None") // 크로스 도메인 허용 .secure(true) // SameSite=None을 위해..

Java/Spring 2025.04.18

Web Server와 WAS

Web Server란?HTTP 요청을 받고, 사용자가 필요한 자료를 HTTP 프로토콜을 통해 전달하는 컴퓨터. 정적 리소스(HTML, CSS, 이미지 등)를 클라이언트에게 제공하는 역할을 수행.WAS(Web Application Server)란?웹 서버의 기능과 함께 동적 컨텐츠 처리를 위한 웹 컨테이너를 포함한 서버. 사용자의 요청을 받아 비즈니스 로직을 실행하고, 그 결과를 웹 페이지에 반영하여 응답.정적 페이지와 동적 페이지정적 페이지사용자가 HTTP 요청을 보냄.웹 서버가 요청된 파일이 존재하는지 확인.파일이 존재하면 그대로 응답.항상 동일한 데이터를 반환. 동적 페이지사용자가 HTTP 요청을 보냄.웹 서버가 요청을 웹 컨테이너에 전달.웹 컨테이너가 서블릿(또는 컨트롤러)을 찾아 비즈니스 로직 실..

Java/Spring 2025.02.16

어노테이션(Annotation)

어노테이션이란?소스 코드에 추가적인 정보를 제공하는 메타데이터.비즈니스 로직에는 직접적인 영향을 주지 않음.클래스, 메서드, 변수, 인자 등에 추가 가능하며, 컴파일 또는 실행 시 특정 처리를 수행하도록 도움.어노테이션의 역할컴파일 시 정보 전달 (예: @Override → 오버라이딩 여부 확인)빌드 툴에서 코드 자동 생성 시 사용 (예: Lombok의 @Getter, @Setter)런타임 시 특정 기능을 수행하는 정보 전달 (예: @Autowired, @Controller, @Service)어노테이션의 동작 방식단순히 @를 붙인다고 동작하는 것이 아니라, 어노테이션을 처리하는 프로그램(Spring 등)이 리플렉션을 통해 해당 어노테이션을 해석하고 실행.어노테이션 자체는 정보 전달용 표식이며, 이를 처리..

Java/Spring 2025.02.09

Spring Security

Spring Security란?Spring Security는 애플리케이션의 보안(인증 및 권한 관리)을 담당하는 프레임워크.비유: 외부 인력이 사내 시스템에 접근하는 경우, 보안 정책과 접근 권한을 설정해야 함.Spring Security 설정 예제@Configuration@EnableWebSecuritypublic class SecurityConfig { @Bean SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http .authorizeHttpRequests((authorizeHttpRequests) -> authorizeHttpRe..

Java/Spring 2025.02.06

OSIV

JPA 레포지토리와 영속성 컨텍스트JPA 레포지토리는 영속성 컨텍스트를 가진다.**기본적인 Fetch 전략은 Lazy(지연 로딩)**이다.조회 후 영속성 컨텍스트가 끝난 후에 @OneToMany 관계 데이터를 가져오는 것은 원칙적으로 불가능.하지만, Spring Boot는 컨트롤러 내에서는 영속성 컨텍스트를 유지시키는 전략을 기본적으로 사용.이를 OSIV(Open Session in View) 전략이라고 한다.설정 변경 가능: application.ymlspring: jpa: open-in-view: false # 비활성화spring: jpa: open-in-view: true # 활성화OSIV(Open Session in View)란?Spring 백엔드 구조:Repository(레포지토리)Se..

Java/Spring 2025.02.06

Servlet, Dispatcher Servlet, Servlet Container

서블릿(Servlet)이란?서블릿 개요서블릿(Servlet)은 동적인 웹 사이트를 만들기 위해 웹 서버에서 실행되는 자바 프로그램이다.서블릿을 사용하는 이유HTTP 요청 정보를 쉽게 활용하고, 응답을 편리하게 처리할 수 있음.비즈니스 로직에 집중할 수 있도록 도와줌.서블릿을 처리할 URL을 매핑하면 해당 요청이 들어올 때 자동으로 처리됨.service 메소드만 재정의하여 요청 처리 방식을 지정하면 됨.서블릿과 톰캣(Tomcat)의 관계톰캣(Tomcat)은 서블릿 컨테이너 역할을 수행하는 대표적인 웹 서버.서블릿은 웹 서버에서 실행되며, 톰캣은 서블릿을 실행하고 관리하는 환경을 제공.톰캣이 서블릿 요청을 받아 적절한 서블릿 인스턴스를 실행하고 응답을 반환.서블릿 컨테이너(Servlet Container)서..

Java/Spring 2025.02.02

Stream API

함수형 프로그래밍과 스트림함수형 프로그래밍: 상태 변경을 피하고 사이드 이펙트를 최소화하여 안정성과 예측 가능성을 향상시키는 프로그래밍 패러다임.스트림: 함수형 프로그래밍 개념을 자바에 도입하여 컬렉션을 선언적으로 처리할 수 있는 기능.함수형 프로그래밍의 핵심 개념불변성:데이터가 생성된 후 변경되지 않음.데이터를 변경하려면 새로운 객체를 생성해야 함.순수 함수:동일한 입력에 대해 언제나 동일한 결과를 반환.사이드 이펙트 없음.일급 함수:함수를 반환하거나 할당 가능.함수를 인자로 전달 가능.고차 함수:다른 함수를 반환하거나 인자로 받을 수 있음.추상화 수준과 재사용성을 높임.조합 함수:작은 함수를 조합하여 더 큰 함수 생성 가능.자바 스트림의 특징선언형 프로그래밍:"어떻게"(명령형)보다 "무엇을"(선언형)..

Java 2025.01.25

JPA에서 트랜잭션과 @Transactional 어노테이션

JPA 트랜잭션정의데이터베이스 상태를 변경하는 작업의 단위를 의미한다.트랜잭션의 특성 (ACID)원자성 (Atomicity): All or Nothing. 부분적인 성공은 허용되지 않는다.예: 송금 트랜잭션의 경우, 송금이 실패하면 출금도 실패해야 한다.일관성 (Consistency): 데이터 간의 정확성을 유지해야 한다.예: 송금 시 출금 금액과 입금 금액은 항상 동일해야 한다.격리성 (Isolation): 둘 이상의 트랜잭션이 동시에 실행될 때, 서로 간섭하지 않아야 한다.예: 두 명이 같은 계좌의 돈을 송금받으려 할 때, 두 트랜잭션이 동시에 진행되지 않도록 해야 한다.영속성 (Durability): 데이터는 영구적으로 보존되어야 한다.예: 은행 서버가 재부팅되어도 계좌 금액은 변하지 않아야 한다...

Java/JPA 2025.01.20

역속성 컨텍스트와 @Transactional

@Transactional 어노테이션의 역할@Transactional은 Spring에서 제공하는 어노테이션으로, 트랜잭션의 범위를 메서드 단위로 지정한다. 이 어노테이션을 사용하면 다음과 같은 이점이 있다:트랜잭션 자동 관리: 메서드 실행 시작 시 트랜잭션이 시작되고, 메서드가 정상적으로 종료되면 트랜잭션이 커밋된다. 예외가 발생하면 트랜잭션이 롤백된다.코드 간소화: 개발자가 직접 트랜잭션을 시작하고 커밋/롤백하는 코드를 작성할 필요가 없다.JPA의 영속성 컨텍스트와 @TransactionalJPA는 영속성 컨텍스트를 통해 엔티티를 관리하며, 트랜잭션 범위 내에서만 유효하다. 주요 특징은 다음과 같다:엔티티의 상태 추적: 영속성 컨텍스트는 엔티티의 상태를 추적하고, 변경 사항을 데이터베이스에 반영한다.스..

Java/JPA 2025.01.20

스프링에서 잭슨 라이브러리의 직렬화/역직렬화

직렬화와 역직렬화란?직렬화객체 데이터를 특정 형식(예: JSON, 바이너리 등)으로 변환해 전송하거나 저장할 수 있게 만드는 과정이다.역직렬화직렬화된 데이터를 다시 객체로 변환하는 과정이다.JSON이나 바이너리 데이터를 애플리케이션에서 사용할 수 있는 객체 형태로 복원하는 작업이다.스프링의 잭슨(Jackson) 을 이용한 직렬화/역직렬화잭슨은 Java Reflection API를 활용해 클래스 정보를 동적으로 읽어들여 분석해서 직렬화/역직렬화를 수행한다.참고 - Java Reflection API란?Reflection API는 실행 중에 클래스, 메서드, 필드 등의 정보를 동적으로 가져오거나 수정할 수 있는 Java의 기능이다.이를 통해 컴파일 시점에 알 수 없는 클래스의 구조를 런타임에 파악하고 조작할..

Java/Spring 2025.01.18