기본 생성자와 모든 필드를 파라미터로 가진 오버로딩된 생성자를 만들어 줍니다.그러면 생성자에 파라미터를 직접 주입하는 것과, 기본생성자로 객체를 선언하고 setter를 통해 값을 주입하는 것은 어떤 차이가 있는가?실제 사용 용례
요청이 수신되었고 처리가 계속되고 있음을 나타냄핵심은 '연결 상태 확인'브라우저나 HTTP 클라이언트가 자동 처리하므로 개발 과정에서 직접 다룰 일을 적음대표적으로 WebSocket 연결 시작시 볼 수 있는 101 Switching Protocols 등이 있음200 :
- SpringBoot / Junit 사용 기준 테스트 계층 구조 Repository 테스트 - 데이터베이스 CRUD 로직 Service 테스트 - 비즈니스 로직 Controller 테스트 - API 엔드포인트 1.Repository 테스트
Java 객체 <-> JSON 변환 라이브러리Java의 Object 타입을 JSON 타입의 String으로 변환SpringBoot에서는 기본 내장 (별도 설치 불필요)@RestController 사용시 자동 동작return (Java객체) -> JSON 자동변환직
@PathVariable과 @RequestParam의 차이점과 실무 활용법 URL에서 데이터를 추출하는 방식 @PathVariable - URL 경로에서 추출 @RequestParam - Query String에서 추출 언제, 무엇을 사용하는가? @PathVar
데이터를 URL 경로로 받음GetMapping으로 key/value 맵핑 필요생략 불가능 (반드시 명시)데이터를 Query String으로 받음GetMapping에는 경로 맵핑 불필요 (? 이후 파라미터를 자동 인식 처리)생략 조건부 가능 (Primitive Type
샘플 코드 전문 1. CREATE (createMemo) > public MemoResponseDto createMemo(@RequestBody MemoRequestDto requestDto) Front-End에서 이렇게 호출할 경우 서버는 JSON 자료를 받게
Structured Query Language데이터를 데이터베이스에서 조작하고 관리하기 위해 사용하는 언어Data Definition Language테이블이나 관계의 구조를 생성하는데 사용새로운 데이터베이스 및 테이블을 생성데이터베이스와 테이블의 내용을 수정데이터베이스
OrderService 가 MySQLOrderRepository를 직접 new로 생성하고 있다.이를 '강한 결합' (Tight Coupling) 이라고 부름문제는 차후 DB를 교체한다던가 하면, OrderService에 작성된 코드를 직접 수정해야 한다. 서비스가 10
클래스, 필드, 메서드, 생성자에 대한 접근 범위를 제한하는 키워드다. 객체지향의 핵심 원칙인 캡슐화(Encapsulation)을 구현하는 도구이며, 외부에 공개할 것과 내부에 숨길 것을 명확히 구분하기 위해 사용된다.좁은 순서 : private -> default -
비즈니스 로직(Business Logic)은 컴퓨터 프로그램에서 실제 비즈니스 규칙에 따라 데이터를 생성, 표시, 저장, 변경하는 핵심적인 부분으로, 서비스의 본질적인 동작 방식을 정의하는 코드입니다. 이는 UI(화면)나 DB(저장소)와는 구분되며, "주문 시 재고 차
1. JPA 개요 JPA(Java Persistence API)는 Java 애플리케이션에서 관계형 데이터베이스를 객체지향적으로 다루기 위한 표준 인터페이스(스펙)이다. 핵심 키워드: ORM(Object-Relational Mapping) JPA는 스펙일 뿐이고, 실
JPA가 기본 제공하는 객체 쿼리 언어. SQL과 비슷하지만 테이블이 아닌 엔티티를 대상으로 한다.한계 : 문자열이라 컴파일 타임에 오류를 잡을 수 없고, 동적 쿼리 작성이 불편하다.DB에 직접 날리는 순수 SQL. 복잡한 쿼리나 DB 종속 기능이 필요할 때 사용한다.
영속성 컨텍스트란, Entity를 영구 저장 (Commit)하기 전 JPA가 관리하는 "1차 메모리 공간" 개념이다. (DB와 애플리케이션 사이 중간 계층)영속성 컨텍스트는 EntityManager를 통해 관리됨을 기억em.persist(), em.find() 등의 메
Spring Boot에서 JPA를 사용할 때 알아야 할 핵심 개념들을 정리합니다. EntityManager 자동 구성, @Transactional의 동작 원리, 영속성 컨텍스트와 트랜잭션의 생명주기, 그리고 트랜잭션 전파까지 다룹니다.의존성 추가Hibernate 설정
JPA를 직접 사용하면 EntityManager를 통해 persist(), find(), remove() 등을 직접 호출해야 합니다. Spring Data JPA는 이런 JPA를 한 단계 더 추상화한 모듈로, Repository 인터페이스만 선언하면 CRUD 기능을 바
게시글, 댓글, 메모 등 거의 모든 엔티티에는 생성 시간과 수정 시간이 필요합니다. 그런데 매번 엔티티마다 이 필드를 선언하고, save() 할 때마다 LocalDateTime.now()를 직접 넣어주는 건 반복적이고 비효율적입니다.Spring Data JPA는 이 문
Spring에서는 Bean을 등록하는 두 가지 방식이 존재합니다.기술 지원 Bean (Technical Support Bean)공통 로그 처리보안 설정 (PasswordEncoder, SecurityConfig 등)데이터베이스 연결 설정외부 라이브러리 객체비즈니스 로직
Spring에서 같은 타입의 Bean이 여러 개 등록되어 있을 때, @Autowired로 주입하려고 하면 어떤 Bean을 주입해야 할지 알 수 없어 오류가 발생합니다.오류 메시지: "Food 타입의 Bean 객체가 하나 이상 있습니다."필드명을 Bean의 이름과 동일하
정의: 사용자가 실제 본인이 맞는지 확인하는 과정예시: 로그인, 지문인식, 2단계 인증 등핵심 질문: "당신은 누구인가?"정의: 인증된 사용자가 특정 리소스에 접근할 권한이 있는지 확인하는 과정예시: 관리자 페이지 접근, 파일 수정 권한, API 엔드포인트 접근 제한핵
HTTP 프로토콜은 무상태(Stateless) 특성을 가지고 있습니다. 즉, 서버는 클라이언트의 이전 요청을 기억하지 못합니다. "로그인한 사용자가 다음 페이지로 이동하면 다시 로그인해야 한다면?"이런 불편함을 해결하기 위해 쿠키와 세션을 사용하여 HTTP에 상태 정보
JWT(Json Web Token)는 JSON 포맷을 이용하여 사용자 정보를 안전하게 전달하기 위한 토큰 기반 인증 방식입니다. Claim 기반: 토큰 자체에 사용자 정보를 담아서 전달저장 위치: 일반적으로 브라우저의 쿠키 저장소에 보관하나의 세션이 모든 클라이언트의
본 포스팅은 Spring Boot에서 JWT(JSON Web Token)를 다루는 방법에 대해 다룹니다. JWT의 생성, 검증, 그리고 쿠키를 통한 관리 방법까지 개발에서 적용할 수 있는 내용을 담았습니다.프로젝트 설정(2. JwtUtil 클래스 이해하기(3. JWT
Spring Boot에서 Filter란 무엇인지, 어떻게 구현하고 활용하는지 정리합니다.Filter는 Web 애플리케이션(서블릿 컨테이너)에서 관리되는 영역으로,클라이언트로부터 오는 요청(Request) 과 응답(Response) 에 대해 최초/최종 단계에 위치합니다.
Spring Security의 개념부터 Form Login, JWT 기반 인증/인가, 권한 제어, Validation까지한 번에 흐름을 잡을 수 있도록 정리합니다.Spring Security란?(2. SecurityContextHolder & Authentication
우리 서버가 다른 서버에 HTTP 요청을 보내야 할 때 사용하는 Spring의 도구, RestTemplate을 알아봅니다.지금까지는 브라우저(Client)로부터 요청을 받는 서버 입장에서만 개발을 해왔습니다.하지만 실제 서비스를 개발하다 보면, 우리 서버가 직접 다른
이번 포스팅에서는 JPA에서 Entity 간 연관 관계를 어떻게 표현하는지, DB 테이블과 어떻게 다른지를 정리합니다.예제는 고객(User) - 음식(Food) - 주문(Order) 앱을 기반으로 설명합니다.JPA를 제대로 이해하려면, DB 테이블과 Java Entit
JPA에서 테이블 간 관계를 매핑할 때 가장 복잡하게 느껴지는 것이 바로 N:M (다대다) 관계입니다.예를 들어 "음식"과 "고객"의 관계를 생각해보면한 명의 고객이 여러 음식을 주문할 수 있고,하나의 음식은 여러 고객이 주문할 수 있습니다.이러한 상태를 N:M 관계
연관된 Entity를 언제 가져올 것인가? — Fetch Type의 핵심을 이해해 봅니다.JPA에서 연관관계가 설정된 Entity를 조회할 때, 연관 Entity의 데이터를 언제 가져올지 선택할 수 있습니다.이 설정을 Fetch Type 이라고 하며, 두 가지 방식이
영속 상태의 Entity에서 수행되는 작업(저장, 삭제 등)이 연관된 Entity까지 자동으로 전파되는 것을 뜻합니다.쉽게 말해, 부모 Entity에 특정 작업을 수행했을 때 자식 Entity에도 동일한 작업이 자동으로 따라가도록 설정하는 기능입니다.각 Entity를
Scheduler란? 특정 시간 또는 주기마다 자동으로 실행되는 작업을 정의하는 기능입니다. Cron 표현식 이해하기 Spring의 @Scheduled 어노테이션은 Cron 표현식으로 실행 시점을 지정합니다. ` | 필드 | 허용 값 | 예시 | |------|
DB 데이터가 수천, 수만 건이 넘어가면 전체를 한 번에 조회하는 것은 성능 문제로 이어집니다.Spring Data JPA는 이를 위해 Pageable과 Page라는 강력한 페이지네이션 도구를 기본 제공합니다.Pageable은 인터페이스로, 다음 세 가지 정보를 담습니
웹 서비스가 많아질수록 사용자 입장에서는 매번 회원가입을 해야 하고, 사이트마다 다른 비밀번호를 기억해야 한다. 서비스 운영자 입장에서도 회원 개인정보를 안전하게 보호해야 한다는 부담이 크다.이 문제를 해결하기 위해 등장한 것이 OAuth 2.0 기반 소셜 로그인이다.
본 포스팅은 IoC(Inversion of Control)와 DI(Dependency Injection)에 대해단순히 "Spring 문법"이 아니라,소프트웨어 설계의 근본적인 사고방식임을 이해하는 것을 목표로 한다.Spring을 처음 접하면 @Autowired, @Co
JPA를 사용하면서 헷갈렸던 부분을 정리한다."find()로 조회한 엔티티를 수정했는데, save()를 안 불렀는데도 DB에 반영됐어요. 이거 정상인가요?"결론부터 말하면, 조건에 따라 정상이다. 그리고 그 조건을 이해하는 것이 JPA를 제대로 다루는 핵심 중 하나다.