# Web?
웹 서비스 개발을 시작하면 꼭 마주하게 되는 개념이 있다.
바로 URI, HTTP, REST API 같은 요소들이다.
단어는 익숙하지만 실제로 어떤 역할을 하는지 한 번에 연결되지 않는 경우가 많다.
이 글에서는 웹이 어떻게 동작하고 REST가 무엇을 의미하며
왜 모든 서비스가 REST API 형태로 제공되는지 흐름 중심으로 정리해 본다.
# 웹을 구성하는 기본 요소
웹은 크게 세 가지 축으로 돌아간다.
1. 사용자에게 보이는 웹사이트
우리가 브라우저로 접속하는 화면들이다.
2. 개발자가 사용하는 API(Web Service)
카카오/네이버/구글 등에서 제공하는 Open API 같은 데이터 교환용 서비스.
3. 브라우저(Chrome, Safari 등)
사용자–서버 간 연결을 중개하는 인터페이스.
웹은 이 세 가지 요소가 합쳐져서 동작한다.
# URI와 URL의 차이
웹 요청을 처리하려면 무엇을 요청할 것인가? 가 먼저 정해져야 한다.
여기서 등장하는 것이 URI와 URL이다.
- URI(Uniform Resource Identifier)
서버에 존재하는 리소스를 식별하는 기준 - URL(Uniform Resource Locator)
그 리소스가 어디에 있는지를 알려주는 위치 정보
예시를 보면 더 명확해진다
http://www.naver.com/index.html?page=123&age=12
URL → http://www.naver.com/index.html
URI 전체 → index.html?page=123&age=12
URI가 URL보다 더 큰 개념이다.
# REST API는 무엇을 해결하는가?
REST는 웹 자원(Resource)을 URI로 표현하고
여기에 HTTP 메서드(GET/POST/PUT/DELETE)를 조합해서
리소스를 조회·생성·수정·삭제하는 구조를 의미한다.
핵심은 다음 세 가지다.
리소스(Resource) → URI
동작(Method) → HTTP Method
표현(Representation) → JSON, XML 등 데이터 형식
REST가 가장 많이 쓰이는 이유는 구조가 단순하면서도 확장성이 높기 때문이다.
# REST의 주요 특징
1. 클라이언트와 서버의 분리
각자 독립적으로 동작하고 서로에게 강하게 의존하지 않는다.
2. Stateless
서버는 이전 요청의 상태를 기억하지 않는다. 각 요청은 처음부터 필요한 정보를 모두 포함해야 한다.
3. 일관된 인터페이스
표준 HTTP 메서드로 CRUD가 명확하게 나뉜다.
# HTTP Method 예시
GET /user/100
→ 100번 사용자 조회
POST /user
→ 새로운 사용자 생성 (body 활용)
PUT /user
→ 사용자 정보 수정 또는 없으면 생성
DELETE /user/100
→ 100번 사용자 삭제
URI는 “무엇”, Method는 “어떤 동작”인지 명확히 나뉜다.
# REST API URI 설계의 기본 원칙
REST API를 만들 때는 다음 규칙을 지키면 더 읽기 좋고 유지보수가 쉬워진다.
1. URI는 명사로 표현
/member/show/1 (X)
/members/1 (O)
2. 계층 구조를 그대로 표현
/apartments/dong/102
3. 파일 확장자 금지
이미지나 파일 자체를 의미하는 것이 아니라면 URI에 확장자를 넣지 않는다.
4. 가독성이 필요할 때는 '-' 사용
/players/player-name/chadev
5. 변하는 값은 Path Variable
/courses/{chapter}/math/{page}
6. Query Parameter는 선택적 정보
/user/{page}?id=kim&name=david
Path → 식별
Query → 필수가 아닌 부가적인 정보
# HTTP Method 정리
| Method | 역할 | PathVar | Query | Body |
| GET | 조회 | O | O | X |
| POST | 생성 | O | - | O |
| PUT | 수정/없으면 생성 | O | - | O |
| DELETE | 삭제 | O | O | X |
# HTTP 상태 코드 요약
| 코드 | 의미 | 설명 |
| 1xx | 처리 중 | 서버가 작업을 이어가는 중 |
| 2xx | 성공 | 정상 처리 |
| 4xx | 클라이언트 오류 | 요청 오류, 인증 문제 등 |
| 5xx | 서버 오류 | 서버 내부 처리 실패 |
'spring' 카테고리의 다른 글
| JPA(=Java Persistance API) (0) | 2025.12.01 |
|---|---|
| Thymeleaf (0) | 2025.12.01 |
| Validation (0) | 2025.12.01 |
| AOP (Aspect Oriented Programming) (0) | 2025.12.01 |
| Spring boot 기초 (0) | 2025.11.28 |
