본문 바로가기
블로그 이미지
Dev-RiQ
Back-end Developer Studying Record
✉️ lwk525678@gmail.com
Back-End/Spring Boot

[Spring Boot] HTTP 통신 방식과 Controller 연결

by Dev-RiQ 2025. 5. 13.

무슨 요청인지 알고 Mapping으로 들어오니?
Mapping 종류만 다르고 URI 같으면 어쩔려고?

 

  • 물은 우리는 답을 알고있다.

서버에 요청을 해봤다면 모두가 아는 사실.

GetMapping해두면 요청보낼때 METHOD : GET 으로 보내면됨~

 

당연한 소리이다. 간단한 예로

const res = fetch('http://localhost:8080/uri', {
    method: "GET",
});

 

위 코드처럼 HTTP 요청을 보낼 때 method를 정의해주면 아래와 같이 요청이 전송된다.

GET /uri HTTP/1.1 
Host: localhost:8080

 

그리고 요청의 결과를 아래와 같이 돌려준다.

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 34
{
    "username": "hyeon",
    "age": 20
}

 

그렇다면 전송하는 방식은 어떤게 있을까

 

  • HTTP Method
GET 리소스 조회 메서드 (Read), 캐싱 가능
POST 전달한 데이터 처리/생성 요청 메서드 (Create), 주로 신규 등록
PUT 리소스를 대체(덮어쓰기 수정)하는 메서드 (Update), 없으면 새로 생성
PATCH 리소스 일부를 변경하는 메서드 (Update)
DELETE 리소스 제거 메서드 (Delete)

 

기본적으로 많이 사용되는 5가지이다. 이외에 HEAD, TRACE, OPTION, CONNECT 가 있지만 직접적으로 사용한 적 없기에 생략한다.

 

그렇다면 Spring Boot에서 해당 메서드를 어떻게 받아서 사용하는가?

 

  • Spring Boot에서 HTTP 요청 받기

위에서 작성한 GET 요청을 받는 컨트롤러를 만들어보자.

@RestController
public class GetController {
    
    @RequestMapping(method = RequestMethod.GET, path = "/uri")
    public ResponseEntity getResponse() {
        return ResponseEntity.ok("response");
    }
    
}

 

해당 컨트롤러에서 GET method의 /uri path 요청을 받도록 설정했다. 하지만 딱 봐도 매번 저렇게 적어주기 귀찮을거 같으니 뭔가 간소화된 절차를 만들지 않았을까? 라는 의문을 가질 수 있다. 그래서 준비했다.

@RestController
public class GetController {
    
    @GetMapping("/uri")
    public ResponseEntity getResponse() {
        return ResponseEntity.ok("response");
    }
    
}

 

이렇게 요청이 들어오길 원하는 HTTP 요청의 method를 Mapping앞에 붙여주어 위의 과정을 간소화 시킬 수 있다. 각각의 요청은 Handler Mapping에서 처리해서 넘겨주기 때문에 우리는 Controller에 간단한 몇 글자만 적어주면 되는 것이다.

 

하지만, 같은 uri에 대해 여러 메서드를 사용해야한다면

@RestController
@RequestMapping("/uri")
public class GetController {
    
    @GetMapping("")
    public ResponseEntity getResponse() {
        return ResponseEntity.ok("response");
    }
    
    @PostMapping("")
    public ResponseEntity postResponse() {
        return ResponseEntity.ok("post success");
    }
    
    @DeleteMapping("")
    public ResponseEntity deleteResponse() {
        return ResponseEntity.ok("delete success");
    }
    
}

 

해당 코드와 같이 class 자체를 맵핑해주어 /uri path로 들어오는 경로를 컨트롤러 자체에 설정해준다. 이렇게하면 /uri로 들어온 요청중 Get, Post, Delete에 따라 해당 메서드로 이동시켜준다. 또한, 실수로 같은 uri와 method의 맵핑이 중복이 될 경우 컴파일 에러를 띄워주기 때문에 빠르게 해당 부분을 수정할 수 있다.

 

 

블로그 이미지
Dev-RiQ
Back-end Developer Studying Record
✉️ lwk525678@gmail.com