요즘 스프링 프레임워크로 게시판 프로젝트를 만들면서 REST API도 직접 구현해보고 있는데, 그중에 @RestController를 이용해서 API를 만들고 테스트한 내용을 기록해본다.
1. @RestController란?
기존의 @Controller는 주로 뷰(JSP, Thymeleaf 등)를 반환할 때 사용하지만, @RestController는 JSON 데이터를 반환할 때 사용된다. 내부적으로는 @Controller + @ResponseBody를 합쳐 놓은 거라서, 객체를 반환하면 자동으로 JSON으로 변환해준다.
@RestController
public class MyApiController {
@GetMapping("/hello")
public String hello() {
return "Hello, REST!";
}
}
요런 식으로 작성하면, /hello에 GET 요청을 보내면 문자열 그대로 반환되는 게 아니라 JSON으로 바뀌어서 응답된다.
2. 실제 코드 예시
아래는 게시판 API의 컨트롤러 코드다.
@RestController
@RequestMapping("/api/board")
@RequiredArgsConstructor
@Log4j2
public class BoardController {
private final BoardService service;
@GetMapping("")
public ResponseEntity<List<BoardDTO>> getList() {
return ResponseEntity.ok(service.getList());
}
@GetMapping("/{no}")
public ResponseEntity<BoardDTO> get(@PathVariable Long no) {
return ResponseEntity.ok(service.get(no));
}
@PostMapping("")
public ResponseEntity<BoardDTO> create(@RequestBody BoardDTO board) {
return ResponseEntity.ok(service.create(board));
}
@PutMapping("/{no}")
public ResponseEntity<BoardDTO> update(@PathVariable Long no, @RequestBody BoardDTO board) {
return ResponseEntity.ok(service.update(board));
}
@DeleteMapping("/{no}")
public ResponseEntity<BoardDTO> delete(@PathVariable Long no) {
return ResponseEntity.ok(service.delete(no));
}
}
- @GetMapping(""): 전체 게시글 리스트 조회
- @GetMapping("/{no}"): 특정 게시글 상세 조회
- @PostMapping(""): 게시글 등록
- @PutMapping("/{no}"): 게시글 수정
- @DeleteMapping("/{no}"): 게시글 삭제
그리고 ResponseEntity를 사용하면 단순히 데이터를 반환하는 것뿐만 아니라 상태 코드나 헤더도 같이 설정할 수 있다.
(예: ResponseEntity.status(HttpStatus.CREATED).body(board) 이런 식으로도 가능)
3. REST API 테스트 방법
개발한 API가 잘 동작하는지 테스트하는 방법은 여러 가지가 있지만, 나는 다음 두 가지 방법을 사용했다.
방법 1. 크롬 확장 프로그램 – Talend API Tester
크롬 웹스토어에서 “Talend API Tester - Free Edition” 을 설치해서 사용했다.
Postman이랑 비슷한 UI인데, 무료고 간편하게 테스트할 수 있어서 가볍게 쓰기에 좋았다.
- 메서드 선택 (GET, POST 등)
- URL 입력
- Body, Headers, JSON 입력 등등 다 가능
직접 테스트할 때는 예를 들어 GET http://localhost:8080/api/board/ 이렇게 요청을 보내서 결과를 확인할 수 있다.
방법 2. HTTP 파일 생성해서 테스트 (VSCode, IntelliJ 지원)
두 번째는 api_test.http라는 파일을 직접 만들어서 테스트한 방법이다.
이 방식은 코드처럼 테스트 요청을 적어놓고 클릭 한 번으로 바로 실행 가능해서 굉장히 편리하다.
내가 쓴 예시는 다음과 같다:
### 1. 게시글 목록 조회
GET http://localhost:8080/api/board/
### 2. 개별 게시글 조회
GET http://localhost:8080/api/board/14
IntelliJ에서 실행하면 경로가 BoardController와 연동되어 자동완성이 가능하다.
이걸 IntelliJ에서 .http 파일로 저장한 다음 요청 위에 있는 “Run Request” 버튼을 누르면 바로 응답이 뜬다.
- 한 파일에 여러 요청을 쓸 수 있어서 정리도 깔끔하고,
- 이력이 남아서 재사용하기도 좋다.
+ 추가 팁 – 변수로 URL 관리하기 (http-client.env.json)
.http 파일로 API를 테스트할 때, 같은 URL이 반복되면 나중에 수정할 때 번거롭다.
이럴 때는 환경 변수 파일을 만들어서 공통 URL을 변수로 등록하고, 코드에서 ${변수명}으로 사용할 수 있다.
이렇게 하면 아래와 같이 간단하게 작성할 수 있다.
### 1. 게시글 목록 조회
GET {{baseUrl}}
### 2. 개별 게시글 조회
GET {{baseUrl}}/14
### 3. 게시글 등록
< {%
request.variables.set("time", $timestamp)
%}
POST {{baseUrl}}
Content-Type: application/json
{
"title": "HTTP 파일로 등록 요청 {{time}}",
"content": "테스트",
"writer": "user"
}
실행이 완료되면 하단 Services에 잘 뜨는 것을 확인할 수 있다.
'Backend' 카테고리의 다른 글
[Spring] Spring AOP(관점지향 프로그래밍)란? - Target, Advice, Proxy, .. (0) | 2025.06.19 |
---|---|
[Spring] Spring Framework란? (주요 기능과 어노테이션) (2) | 2025.06.10 |