전체 글 (61) 썸네일형 리스트형 Day20 - [Spring Boot] Authorization, CORS, CSRF와 리소스 소유권 인가 구현 오늘 학습한 내용Day 20에서는 Spring Security에서 인증(Authentication)과 인가(Authorization)를 구분하고,실제 서비스에서 사용자가 자신의 리소스에만 접근할 수 있도록 인가 로직을 구현했다.이전까지는 JWT를 이용해 로그인한 사용자를 식별하는 것에 집중했다면,오늘은 그 사용자가 특정 상품을 수정하거나 삭제할 권한까지 가지고 있는지를 판단하는 단계로 넘어갔다.추가로 프론트엔드와 백엔드가 서로 다른 Origin에서 동작할 때 필요한 CORS 설정과,JWT Access Token + Refresh Token Cookie 구조에서 CSRF를 어떻게 봐야 하는지도 같이 정리했다.Authentication과 Authorization의 차이처음에는 인증과 인가가 비슷하게 느껴졌는.. DAY18 - [Spring Boot] 회원가입/로그인 구현과 Spring Security 세션 인증 흐름 정리 Day 18에서는 이전에 학습한 Spring Security 기본 구조를 실제 회원 시스템에 연결했다. 단순히 URL 접근을 막는 수준에서 끝나는 것이 아니라, 회원가입 → 비밀번호 암호화 → 로그인 → 인증 정보 저장 → 현재 로그인 사용자 조회 흐름까지 직접 구현했다.이번 단계에서는 JWT를 사용하지 않고, Spring Security의 AuthenticationManager와 HTTP Session을 이용한 로그인 구조를 구성했다. 이를 통해 Spring Security 내부에서 인증이 어떤 식으로 처리되는지 먼저 이해하는 데 초점을 맞췄다.1. 오늘의 학습 목표회원 계정에 이메일과 비밀번호 정보 추가회원가입 API 구현PasswordEncoder를 이용한 BCrypt 비밀번호 암호화UserDeta.. DAY19 - [Spring Boot] Session에서 JWT로 전환하기 - Access/Refresh Token 인증 구현 Day 18에서는 Spring Security를 이용해 회원가입과 로그인 기능을 구현하면서 서버 세션에 로그인 정보를 저장하는 방식까지 만들어봤다. 이번 Day 19에서는 그 구조를 JWT 기반 인증 방식으로 변경해봤다단순히 JWT 토큰을 발급하는 것에서 끝내지 않고, Access Token과 Refresh Token을 각각 어떤 용도로 사용할지, 어디에 저장할지까지 직접 정하고 실제 PostgreSQL 환경에서 인증 흐름을 검증했다.1. Session 인증 방식 다시 정리하기먼저 기존 Day 18에서 사용했던 Session 인증 구조부터 다시 정리했다.로그인 요청 ↓AuthenticationManager ↓AuthenticationProvider ↓UserDetailsService .. DAY17 - Spring Boot 4 + Spring Security 기초: SecurityFilterChain과 BCrypt, MockMvc 접근 제어 테스트 1. 오늘의 학습 목표이번 학습에서는 Spring Security의 기본 구조를 이해하고, 실제 프로젝트에 SecurityFilterChain을 적용해 API 접근 제어를 구현했다.단순히 의존성을 추가하는 것에서 끝내지 않고, 인증(Authentication)과 인가(Authorization)의 차이, PasswordEncoder의 역할, Security Filter Chain의 요청 처리 위치를 학습한 뒤 MockMvc 테스트를 통해 실제 보안 정책이 적용되는지 검증했다.Authentication과 Authorization의 차이Spring Security 요청 처리 구조SecurityFilterChain 설정permitAll()과 authenticated()의 차이BCryptPasswordEncode.. DAY16 - Spring Transaction과 비관적 락으로 동시 입찰 정합성 지키기 1. 학습 목표 이번 학습의 핵심은 여러 DB 작업을 하나의 논리적 작업으로 묶는 Transaction을 이해하고, 동시에 같은 경매에 입찰이 들어오는 상황에서 데이터 정합성을 지키는 방법을 실제 luxit 프로젝트에 적용하는 것이다. luxit에서는 하나의 입찰 요청이 단순히 Bid 한 건을 저장하는 것으로 끝나지 않는다. Auction 조회→ 경매 상태 확인→ 현재가 확인→ Bid 생성→ 입찰 규칙 검증→ Bid 저장→ Auction 현재가 변경→ Commit 이 흐름 중 하나라도 실패하면 일부 데이터만 DB에 남아서는 안 된다. 예를 들어 Bid는 저장됐는데 Auction의 현재가 변경이 실패한다면, 실제 입찰 기록과 경매의 현재.. DAY15 - [Spring/JPA] N+1 문제 이해하기 — LAZY와 @EntityGraph로 조회 성능 개선하기 이번 학습에서는 JPA를 사용할 때 자주 발생하는 성능 문제 중 하나인N+1 문제를 직접 확인하고,@EntityGraph를 이용해 조회 쿼리를 최적화해보았다.단순히 개념만 학습하는 것이 아니라 luxit 프로젝트의상품(Product), 판매자(User), 경매(Auction) 연관관계를 기준으로실제 SQL이 어떻게 발생하는지 확인하고,H2 테스트와 실제 PostgreSQL 환경에서 개선 결과까지 검증했다.1. JPA에서 LAZY Loading이란?JPA 연관관계를 설정할 때 자주 사용하는 옵션 중 하나가지연 로딩(LAZY Loading)이다.지연 로딩은 연관된 엔티티를 처음부터 모두 조회하지 않고,실제로 해당 데이터가 필요한 순간에 SQL을 실행하는 방식이다.@ManyToOne(fetch = FetchT.. DAY14 - JPA 연관관계 매핑 완전 정리 @ManyToOne, @OneToMany, mappedBy, LAZY까 학습일: 2026-09-20 프로젝트: luxit 주제: JPA 연관관계 매핑, 연관관계의 주인, mappedBy, LAZY 로딩 1. 오늘 학습 목표 관계형 데이터베이스에서는 테이블 간 관계를 FK(Foreign Key)로 표현한다. 예를 들어 입찰 테이블이 특정 경매에 속한다면 bids.auction_id 같은 FK 컬럼을 사용한다. 하지만 Java에서는 단순히 ID 값만 저장하기보다 객체 자체를 참조하는 방식이 더 자연스럽다. private Auction auction; JPA의 연관관계 매핑은 DB의 FK와 Java 객체 참조를 연결한다. Databasebids.auction_id ↓JPA@ManyToOne ↓Java.. Day13 - JPA 기초와 영속성 컨텍스트, Dirty Checking 직접 검증하기 1. 오늘의 학습 목표 오늘은 기존에 메모리에서 관리하던 상품 데이터를 Spring Data JPA와 PostgreSQL을 이용해 실제 데이터베이스에 저장하도록 변경했다. 특히 단순히 JPA 문법을 사용하는 것에 그치지 않고, JPA의 핵심 개념인 Entity, 영속성 컨텍스트, Dirty Checking이 실제 애플리케이션에서 어떻게 동작하는지 직접 확인했다. ORM / JPA / Hibernate 관계 이해 JPA Entity 작성 Spring Data JPA Repository 적용 PostgreSQL 연동 @Transactional 적용 Dirty Checking 직접 검증 JPA 기반 CRUD 검증 2. OR.. 이전 1 2 3 4 ··· 8 다음