REST(Representational State Transfer)는 웹 자원을 관리하기 위한 아키텍처 스타일이며,
HTTP 프로토콜을 이용해 클라이언트와 서버 간의 일관된 통신을 구성한다.
| 항목 | 설명 |
|---|---|
| 🧩 정의 | 웹 자원을 관리하는 아키텍처 / 구조 |
| 🌍 특징 | HTTP 규약을 이용한 일관성 있는 통신 구성 |
| 🔗 주요 목적 | CRUD(Create, Read, Update, Delete) 기능을 표준화된 방식으로 제공 |
REST 아키텍처 기반으로 자원을 HTTP 요청으로 CRUD 할 수 있게 만든 API 규격
| 항목 | 설명 |
|---|---|
| 📘 정의 | REST 구조를 따르는 API |
| ⚙️ 역할 | REST 기반의 웹서비스 인터페이스 구축 |
| 💡 특징 | HTTP 요청을 통해 자원을 CRUD 할 수 있도록 설계 |
REST 아키텍처 원칙을 잘 지켜 구현된 API를 의미함
| 조건 | 설명 |
|---|---|
| 🧱 일관성 | /member/XXXX, /board/XXXX 형태로 경로 통일 |
| ⚙️ HTTP Method | POST(등록), GET(조회), PUT(수정), DELETE(삭제) |
| 💬 무상태성 (Stateless) | 서버가 클라이언트 정보를 저장하지 않음 |
| 📦 응답 타입 | JSON, XML 등으로 반환 |
Spring 프레임워크에서 동작과 기능을 정의하는 메타데이터 어노테이션
| 어노테이션 | 설명 |
|---|---|
🧱 @SpringBootApplication | 스프링 기본 세팅 + 컴포넌트 스캔 + 내장 Tomcat 실행 |
🎯 @Controller | 클래스가 Controller임을 알리고, HTTP 통신 지원 (@Component 포함) |
⚙️ @Component | 스프링이 스캔할 대상으로 지정, 자동 Bean 등록 (싱글톤 역할) |
🌍 @RestController | @Controller + @ResponseBody + @Component 포함 |
💬 @ResponseBody | 응답 시 Java 객체를 JSON으로 자동 변환 |
HTTP 요청 시 쿼리스트링(Query String)을 통해 매개변수를 전달할 때 사용하는 어노테이션
@RequestParam| 항목 | 설명 |
|---|---|
| 🎯 역할 | 단일 파라미터를 변수에 저장 |
| ⚙️ 생략 기준 | 변수명이 URL 파라미터명과 일치하면 생략 가능 |
| 💾 주요 타입 | 기본형 (int, String, List, Map 등) |
| 🔗 처리 가능 요청 | 쿼리스트링, <form> (첨부파일 제외) |
| 📬 HTTP 메소드 | GET / POST / PUT / DELETE |
| 🧾 추가 속성 | - name : URL 파라미터명 지정- defaultValue : 값이 없을 때 기본값- required : 매개변수 필수 여부 (true/false) |
@ModelAttribute| 항목 | 설명 |
|---|---|
| 🎯 역할 | 복수 파라미터를 객체(DTO)에 저장 |
| ⚙️ 생략 기준 | DTO 타입일 경우 기본 적용되어 생략 가능 |
| 💾 주요 타입 | DTO, VO 등 사용자 정의 객체 |
| 🔗 처리 가능 요청 | 쿼리스트링, <form> (첨부파일 포함) |
| 📬 HTTP 메소드 | GET / POST / PUT / DELETE |
HTTP 본문(Body)에 포함된 데이터를 객체로 받는 어노테이션
@RequestBody| 항목 | 설명 |
|---|---|
| 🎯 역할 | HTTP 본문(Body)을 객체에 저장 |
| 💾 주요 타입 | DTO, List, Map 등 |
| 🔗 처리 가능 요청 | 본문(Body) |
| 📬 HTTP 메소드 | POST / PUT |
| 🔒 보안 | 매개변수가 URL에 노출되지 않아 보안에 유리 |
| 📡 지원 데이터 형식 | JSON 타입으로 객체 지원 |
HTTP 요청 시 서버로 전달되는 매개변수의 구조 및 전달 방식
| 항목 | 설명 |
|---|---|
| 🌍 전달 방식 | 쿼리스트링을 통해 key=value 형식으로 전달 |
| 💡 예시 | http://localhost:8080/day03/param1?param1=value1¶m2=value2 |
| 🧠 타입 제한 | HTTP 요청은 문자열만 전송 가능 (자동 타입 변환 지원) |
| 구분 | 내용 |
|---|---|
| 🌐 REST | 웹 자원 관리 아키텍처 (HTTP 기반 통신) |
| ⚙️ REST API | REST 아키텍처를 따른 CRUD형 API |
| 🧩 RESTful API | REST 원칙을 잘 지킨 API 구현 형태 |
| 🧱 주요 어노테이션 | @Controller, @RestController, @RequestParam, @RequestBody 등 |
| 💬 매개변수 구분 | 쿼리스트링 → @RequestParam, Body → @RequestBody |
| 🔒 보안 | Body 방식이 쿼리스트링보다 안전 |