Don't Panic
in Springboot ☕ 4분 읽기

[Springboot] HTTP 기초와 Spring Controller·REST 개요

목차

OSI 7계층과 HTTP

OSI 7계층 다이어그램

  • 1~4계층: 네트워크 인프라 영역 (KT, U+ 등 통신사가 담당)
  • 5계층 세션(Session): 두 클라이언트·서버 간 통신 연결을 관리
  • 6계층 표현(Presentation): 데이터를 표현 가능한 형식으로 변환 (OS 간 차이 처리)
  • 7계층 응용(Application): 모든 데이터를 받아 사용 가능하게 하는 계층 → HTTP가 여기에 위치

HTTP (HyperText Transfer Protocol)

  • 통신 7계층 중 응용 계층에 정의된 통신 규약
  • 서버와 클라이언트가 메시지를 전달하는 형식을 정의

HTTP 요청 구조 (Request)

HTTP 요청은 RequestLine + Header + Body 로 구성된다.

구성 요소내용
RequestLineHTTP 메서드(GET 등) + 경로(Path) + HTTP 버전
Header요청에 관한 메타 정보 (key-value 쌍)
Body실제 전송 데이터 (없을 수도 있음)

요청을 받을 때 기대해야 하는 것: 경로·헤더·바디
응답으로 보내줘야 하는 것: 상태 코드(Status)·바디

Content-Type 헤더

  • 응답/요청 바디가 어떤 형식인지를 나타내는 핵심 헤더
  • REST API에서 가장 많이 쓰는 것은 JSON 형식
  • 아무리 몰라도 Content-Type의 용도는 반드시 알아둬야 한다

HTTP Status Code

범위의미
2xx정상 처리
4xx클라이언트 측 오류 (404: 존재하지 않는 경로)
5xx서버 내부 오류 (500: Internal Server Error)

클라이언트 잘못인지 서버 잘못인지 구분하는 분류 정보는 반드시 알아야 한다.


URL (Uniform Resource Locator)

URL 구조 다이어그램

URL의 각 구성 요소:

구성 요소설명
Scheme프로토콜 (http://, https://, ssh:// 등)
Userinfo사용자 정보 (옵셔널, 자주 쓰지 않음)
Host요청을 실제로 처리할 서버 주소
Port포트 번호 (옵셔널, HTTP 기본값: 80)
Path서버 내 경로 (/index.html 등)
Query? 이후 파라미터 (예: 특정 기사 URL의 ? 뒤 내용)
Fragment# 이후 값, 프론트엔드 반응형 웹에서 특정 섹션 지정 용도
https://sports.news.naver.com/index.nhn

위처럼 경로까지만 있는 경우도 있고, 특정 기사로 들어가면 ? 이후 쿼리가 붙는다.
# Fragment는 React·Vue 등 SPA(Single Page Application) 프레임워크에서도 활용된다.


Domain

  • 네트워크 도메인 또는 IP 자원을 식별하는 특별한 문자열
  • IP 주소(예: 125.209.222.142)는 기억하기 어려우므로, 사람이 찾기 쉽도록 도메인(예: www.naver.com)을 사용
  • HTTP 내부에는 도메인 정보가 없음 — 브라우저가 DNS를 통해 IP로 변환한 뒤 요청을 보냄

HTTP 기본 포트는 80, 스킴에 따라 사용 포트가 결정된다.
다른 포트를 넣어도 URL이 틀린 것은 아니지만, 해당 포트에 서비스가 없으면 동작하지 않는다.


Spring으로 구현한다면?

Spring 레이어 아키텍처 개요

개발 직군 구분

직군역할
인프라물리 서버 구축 및 호스팅 담당
DevOpsCI/CD 자동화, 배포 관리 도구 (CircleCI, Kubernetes 등) 운영
백엔드서비스 로직 구현, WAR/JAR 결과물 생성

Spring 주요 어노테이션

Spring 패키지 구조 예시

@Controller

  • 일반적으로 요청의 Path를 다루는 컴포넌트
  • Spring의 MVC 구조에서 View(JSP 등)를 반환할 때 사용
  • ModelAndView를 통해 어떤 파라미터를 전달할지 정의

@RequestMapping

  • Path 상의 상세 경로를 설정하는 데 사용
  • Controller 클래스에 붙이면 상위 경로로 적용 가능
  • HTTP 요청/응답 속성(Content-Type, HTTP 메서드 등)을 정의할 수 있음

@ResponseBody

  • 반환값을 HTTP 응답의 Body에 직접 삽입하기 위한 어노테이션
  • 없으면 Spring이 반환값을 View 이름으로 해석하려 시도함

@ResponseBody 예시

헤더/바디 응답 예시

@RestController vs @Controller

어노테이션특징
@ControllerView(HTML/JSP) 반환 목적, MVC 패턴
@RestController@ResponseBody가 기본 내장, 명확한 데이터(JSON 등) 전송 목적

REST 설계 원칙

REST Constraints

REST는 성능·확장성·간편함·가시성·이식성을 위한 설계 제약사항 모음이며, HTTP 전용으로 만들어진 것은 아니다.

REST 아키텍처 제약

제약설명
1. Client-Server클라이언트(프론트)와 서버(백)가 분리됨
2. Stateless요청에 상태 정보를 포함하지 않음
3. Cacheable응답이 캐시 가능 여부를 명시
4. Layered System클라이언트는 서버 내부 계층을 알 필요 없음
5. Code on Demand(옵셔널) 서버가 실행 가능한 스크립트를 전달 가능

Uniform Interface

Uniform Interface

  • Resource identification in requests: 개별 자원이 요청 자체에 식별자로 내재되어 있음
  • 실제 자원이 아닌 **자원의 표현(Representation)**이 전달됨