사전 준비 | HTTP 프로토콜

Faithful Dev·2025년 2월 25일

스프링 프레임워크

목록 보기
15/20

HTTP는 HyperText Transfer Protocol의 약자로, 웹에서 클라이언트와 서버 간 데이터를 주고받는 프로토콜이다. 스프링 프레임워크는 HTTP 기반으로 동작하는 웹 애플리케이션을 쉽게 개발할 수 있도록 다양한 기능을 제공한다.


기본 개념

HTTP는 요청(Request)과 응답(Response) 구조를 가지며, 주로 다음과 같은 특징이 있다.

특징

  • 무상태(Stateless): 요청과 응답이 각각 독립적이며, 서버는 이전 요청을 기억하지 않음.
  • 클라이언트-서버 모델: 클라이언트가 요청을 보내면 서버가 응답.
  • TCP/IP 기반: HTTP는 기본적으로 TCP(80번 포트)를 사용하여 데이터를 주고받음.
  • 메시지 기반 통신: 요청과 응답은 메시지(헤더 + 바디) 형태로 전달됨.

요청과 응답

HTTP 통신은 Request(요청)Response(응답)을 주고받는 방식으로 이루어진다.

요청(Request)

요청은 클라이언트(브라우저, 앱 등)에서 서버로 보내는 메시지이다. 기본적인 HTTP 요청 형식은 다음과 같다.

GET /hello HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0
Accept: text/html
  • HTTP 메서드: GET, POST, PUT, DELETE 등의 동작을 정의.
  • URL (URI): 요청 대상의 경로.
  • HTTP 버전: HTTP/1.1, HTTP/2 등.
  • 헤더(Header): 요청에 대한 부가 정보 (User-Agent, Content-Type 등).
  • 바디(Body): POST 요청에서 데이터를 포함하는 부분.

응답(Response)

서버는 클라이언트 요청을 처리한 후 응답을 반환한다.

HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 123

<html>
  <body>Hello, World!</body>
</html>
  • 상태 코드(Status Code): 200(성공), 404(페이지 없음), 500(서버 오류) 등.
  • 헤더(Header): 응답에 대한 부가 정보 (Content-Type, Set-Cookie 등).
  • 바디(Body): HTML, JSON 등의 실제 데이터.

스프링에서 처리

스프링 MVC에서는 HTTP 요청과 응답을 쉽게 처리할 수 있도록 다양한 기능을 제공한다.

컨트롤러에서 요청 처리

스프링에서는 @RestController 또는 @Controller를 사용하여 HTTP 요청을 처리한다.

@RestController
@RequestMapping("/api")
public class HelloController {
	
    @GetMapping("/hello")
    public String sayHello() {
    	return "Hello, Spring!";
	}
}
  • @RestController: JSON이나 문자열을 응답하는 컨트롤러.
  • @RequestMapping("/api"): 기본 URL을 /api로 지정.
  • @GetMapping("/hello"): GET 요청을 처리.

요청 데이터 받기

쿼리 파라미터 받기

@GetMapping("/greet")
public String greet(@RequestParam String name) {
	return "Hello, " + name;
}
  • /greet?name=John → 응답: Hello, John

JSON 데이터 받기

@PostMapping("/user")
public User createUser(@RequestBody User user) {
	return user;
}
  • @RequestBody를 사용하면 JSON 데이터를 받을 수 있음.

응답 처리

스프링에서는 다양한 방법으로 HTTP 응답을 반환할 수 있다.

기본 문자열 응답

@GetMapping("/text")
public String textResponse() {
	return "Hello, World!";
}

JSON 응답

@GetMapping("/json")
public Map<String, String> jsonResponse() {
	Map<String, String> map = new HashMap<>();
    map.put("message", "Hello, JSON!");
    return map;
}
  • Map을 사용하면 JSON 형태로 변환됨.

ResponseEntity 활용

@GetMapping("/custom-response")
public ResponseEntity<String> customResponse() {
	return ResponseEntity.status(HttpStatus.OK)
    					 .header("Custom-Header", "CustomValue")
                         .body("Custom Response");
  • ResponseEntity를 사용하면 상태 코드, 헤더 등을 자유롭게 설정 가능.

상태 코드

서버는 응답을 보낼 때 상태 코드(Status Code)를 포함한다.

상태 코드설명
200 OK요청 성공
201 Created리소스 생성됨
400 Bad Request잘못된 요청
401 Unauthorized인증 필요
403 Forbidden접근 금지
404 Not Found리소스 없음
500 Internal Server Error서버 내부 오류

스프링 필터와 인터셉터 (HTTP 요청 가로채기)

필터(Filter)

  • javax.servlet.Filter를 구현하여 요청 및 응답을 가로챔.
  • 모든 요청을 사전에 처리하거나 변형 가능.
@Component
public class MyFilter implements Filter {
	@Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
    		throws IOException, ServletException {
        System.out.println("필터 실행됨");
        chain.doFilter(request, response);
	}
}

인터셉터(Interceptor)

  • HandlerInterceptor를 구현하여 특정 요청을 가로챔.
@Component
public class MyInterceptor implements HandlerInterceptor {
	@Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
    	System.out.println("인터셉터 실행됨");
        return true;
	}
}

스프링과 REST API

스프링에서는 HTTP를 기반으로 한 REST API 개발이 가능하며, @RestController@RequestMapping을 활용하여 API를 만들 수 있다.

@RestController
@RequestMapping("/api/users")
public class UserController {
	
    @PostMapping
    public ResponseEntity<User> createUser(@RequestBody User user) {
    	return ResponseEntity.status(HttpStatus.CREATED).body(user);
	}
    
    @GetMapping("/{id}")
    public ResponseEntity<User> getUser(@PathVariable Long id) {
    	User usre = new User(id, "John Doe");
        return ResponseEntity.ok(user);
	}
}
  • @PostMapping: 사용자 생성
  • @GetMappping("/{id}"): 사용자 조회

정리

스프링에서는 HTTP 프로토콜을 사용하여 웹 애플리케이션을 개발할 때, 요청과 응답을 처리하는 다양한 기능을 제공하며, REST API 개발도 쉽게 가능하도록 지원한다.
필터와 인터셉터를 활용하면 요청을 가로채거나 변형할 수도 있다.

profile
Turning Vision into Reality.

0개의 댓글