Spring Boot 11

HTTP 응답에서 Response Body와 Response Header

웹 개발을 하다 보면 “헤더에 뭐 넣고, 바디에는 뭐 넣지?”가 한 번씩 헷갈립니다.특히 API를 만들 때는 Response Body와 Response Header의 역할을 정확히 이해하는 것이 중요합니다. HTTP 응답 전체 구조서버가 클라이언트(브라우저, 앱, 프론트엔드)에게 응답을 보낼 때, 내부 구조는 크게 네 부분으로 나뉩니다.HTTP/1.1 200 OK ← 1) 상태 라인(Status Line)Content-Type: application/jsonContent-Length: 52 ← 2) 응답 헤더(Response Headers)Set-Cookie: sid=abcd...; HttpOnly ← 3) 빈 줄(헤더와 바디를 구..

Spring Boot 2025.12.13

Spring Boot에서 Swagger(OpenAPI) 적용하기

Spring Boot로 REST API를 만들다 보면,“엔드포인트가 뭐가 있고, 어떤 파라미터를 넘겨야 하지?”이걸 설명하는 게 점점 귀찮아집니다.이럴 때 사용하는 것이 Swagger / OpenAPI 기반의 API 문서화 도구입니다.요즘 Spring Boot 3.x에서는 springfox-swagger2 대신 springdoc-openapi 를 사용하는 것이 거의 표준입니다. Swagger / OpenAPI란 무엇인가?OpenAPIREST API를 표준 형식(JSON/YAML) 으로 기술하기 위한 스펙입니다.“이 서버에는 어떤 API가 있고, 경로는 뭐고, 요청/응답은 어떤 구조다”를 기계/사람 모두 이해할 수 있게 정의합니다.SwaggerOpenAPI 스펙을 기반으로 하는 툴 모음에 가깝습니다.대표..

Spring Boot 2025.12.13

Spring Boot에서 쿼리 파라미터를 DTO로 깔끔하게 받는 방법

스프링 부트에서 GET 요청의 쿼리 파라미터를 받을 때, 가장 먼저 떠올리는 방법은 @RequestParam입니다.하지만 파라미터가 많아질수록 메서드 시그니처가 길어지고, 유지보수가 어려워집니다.이 글에서는 다음 세 가지 방법을 비교하고,특히 DTO로 자동 바인딩하는 방식이 왜 깔끔한지 정리해보겠습니다.@RequestParam으로 각각 받기Map으로 받기DTO 객체로 한 번에 받기 (추천) 예제다음과 같은 요청이 들어온다고 가정해 보겠습니다.GET http://localhost:8080/api/v1/get-api/request3 ?name=woojoo &email=woojoo@eamil.com &organization=woojooStudio쿼리 파라미터는 다음 세 가지입니다.nameemailorganiz..

Spring Boot 2025.12.13

ModelMapper란 무엇이고, 언제 쓰는 게 좋을까?

스프링으로 웹 개발을 하다 보면 이런 코드가 점점 늘어납니다. public class UserDto { private Long id; private String username; private String email; // getter/setter ...}public class User { private Long id; private String username; private String email; private String password; // getter/setter ...}컨트롤러나 서비스에서 이런 코드 많이 보셨을 겁니다.public UserDto toDto(User user) { UserDto dto = new UserDto(); ..

Spring Boot 2025.12.09

JWT 기반 인증 시스템, 왜 이렇게까지 할까?

웹 서비스를 만들다 보면 “이 사람이 진짜 이 사람 맞나?” 를 확인하는 일이 필수입니다.로그인, 관리자 페이지, 내 정보 수정 같은 기능은 모두 인증(Authentication) 과 인가(Authorization) 위에서 돌아갑니다. 왜 인증이 필요한가?로그인 없이 모든 정보에 접근할 수 있는 웹사이트를 생각해 보겠습니다.누구나 내 주문 내역을 볼 수 있음일반 사용자가 관리자 기능을 사용 가능다른 사람의 개인 정보, 배송지, 연락처를 멋대로 수정 가능이런 상황은 말 그대로 보안 재앙입니다.그래서 웹 서비스는 반드시 아래 질문에 답해야 합니다.“지금 요청을 보내고 있는 사람은 누구인가?” → 인증(Authentication)“이 사람이 이 기능/페이지에 접근해도 되는 사람인가?” → 인가(Authoriz..

Spring Boot 2025.12.08

PostController 실습

스프링부트로 간단한 게시글 API를 만들면, 우리가 자바 객체(List, 클래스)를 그대로 return 해도 브라우저나 React에서는 JSON 형태로 자동 변환되어 전달됩니다. 스프링부트로 간단한 게시글 API를 만들면, 우리가 자바 객체(List, 클래스)를 그대로 return 해도 브라우저나 React에서는 JSON 형태로 자동 변환되어 전달됩니다.@RestController와 @RequestMapping — API의 시작@RestController@RequestMapping("/posts")public class PostController { ...}✔ @RestController스프링에게 “이 클래스는 REST API를 담당하는 컨트롤러야”라고 알려주는 어노테이션입니다.가장 중요한 특징:..

Spring Boot 2025.12.01

레이어드 아키텍처 vs 헥사고날 아키텍처

관심사 분리만이 아니라 “영향도 분리”까지스프링 부트로 웹 서비스를 만들 때 가장 많이 쓰는 아키텍처는 계층형(Layered) 아키텍처입니다. 하지만 DDD나 복잡한 도메인 모델링을 할수록 헥사고날 아키텍처(Hexagonal Architecture, 포트-어댑터)가 언급됩니다.두 아키텍처가 어떻게 다른지, 왜 헥사고날 아키텍처가 주목받는지, 하지만 왜 모든 프로젝트에 적합하지 않은지를 현실적으로 정리했습니다. 계층형 아키텍처(Layered Architecture) Controller → Service → Repository → DB ✔ 장점단순하고 이해하기 쉽다스프링에서 가장 자연스럽고 빠르게 개발 가능작은 프로젝트/CRUD 중심 시스템에서 적합✔ 단점 — 핵심: 관심사는 분리하지만 영향도까지 분리되지는..

Spring Boot 2025.11.30

도메인 주도 설계

도메인 주도 설계(DDD, Domain-Driven Design)는 말 그대로 “도메인(비즈니스 로직, 문제 영역)이 설계의 중심이 된다”는 원칙입니다. 핵심 요약 — 무엇이 중요한가?관심사의 분리(Separation of Concerns): UI, 응용(Application), 도메인(Domain), 인프라(Infra)를 역할에 따라 분리한다.도메인 중심: 비즈니스 규칙(도메인)은 도메인 계층에서 표현하고 보존한다.응용 계층: API, 트랜잭션과 흐름을 제어하는 곳. 도메인 모델을 사용해 유스케이스를 구현한다.인프라 계층: DB, 메시지, 외부 API 등 기술적 세부 구현. 도메인이나 응용에 의존하지만 반대는 아니어야 한다 (의존성 역전). 전형적인 계층(레이어) 설명아래는 DDD를 계층형 아키텍처로 ..

Spring Boot 2025.11.30

HTTP, 요청·응답과 REST API

클라이언트와 서버, HTTP란?클라이언트(Client): 사용자가 직접 쓰는 프로그램(보통 브라우저). 사용자 에이전트라고도 부릅니다.서버(Server): 클라이언트의 요청을 받아서 처리하고 응답을 돌려주는 쪽(웹 서버, 애플리케이션 서버 등).HTTP(HyperText Transfer Protocol): 클라이언트와 서버가 요청(request) 과 응답(response) 을 주고받을 때 쓰는 규칙(프로토콜)입니다.→ 즉, "어떤 형식으로 말하고 들을지"를 정한 약속입니다. 브라우저에서 URL 입력 → 여러 번의 요청이 발생하는 이유브라우저 주소창에 URL을 입력해 엔터를 치면 단 한 번의 네트워크 요청이 아니라 여러 요청이 발생합니다.먼저 HTML 문서(웹페이지의 본문)를 받아옵니다.그 HTML 안에 ..

Spring Boot 2025.11.30

Spring의 의존성 주입(DI): 빈 주입과 생성자 주입의 이해

Spring Boot 시작 시 빈 등록 과정애플리케이션 시작 시 일어나는 일Spring Boot 애플리케이션이 시작되면: 1. @SpringBootApplication 실행 ↓2. @ComponentScan으로 컴포넌트 스캔 ├─ @Controller, @Service, @Repository 등 찾기 └─ 찾은 클래스들을 빈으로 등록 ↓3. 모든 빈을 메모리에 생성 (Spring 컨테이너에 저장) ↓4. 의존성 주입 (DI) 수행 ↓5. 애플리케이션 준비 완료 핵심: 빈은 애플리케이션 시작 시 한 번에 메모리에 올라갑니다Spring은 애플리케이션이 시작될 때 모든 빈을 미리 생성해 Spring 컨테이너(ApplicationContext)에 저장합니다. 이를 싱글톤 스코프라고 ..

Spring Boot 2025.11.30