심심해서 하는 블로그 :: 'REST API' 태그의 글 목록

'REST API'에 해당되는 글 1건

전체 소스 코드 : https://github.com/ssooni/ssoonidev_blog

Spring Boot : ver 1.5.9

JAVA : ver 1.8 

Build Tool : MAVEN



1. 목표

MongoDB의 데이터를 접근하는 댓글 REST API를 만들어 보는 것이 목표입니다. 추가적으로 Redis Cache Layer를 두어 보는 것도 함께 실습해볼 예정입니다.


2. RestController

Spring 4.0부터 지원하는 @RestController Annotation은 @Controller와 @ResponseBody가 하나로 결합된 Annotation입니다. 따라서 이 클래스 내부의 모든 메서드들의 반환 값은 HTTP Response Body에 직접 쓰이게 됩니다. 따라서 View가 없는 Controller입니다.


대부분 Web 프로그램을 처음으로 개발한다 하면, JSP를 이용해서 화면을 만들다 보니, Web Service는 반드시 View가 있어야 한다고 생각하기 쉽습니다. 하지만 Web Service마다 목적이 있습니다. 사용자에게 View를 제공하는 경우도 있지만, 프로그램끼리 데이터를 주고받기 위해 개발하는 경우도 있습니다. RestController는 후자의 경우에 사용하는 Controller라고 할 수 있습니다. 


이 전 포스팅에서 구현한 ReplyService를 이용해서 RestController를 구현해 보겠습니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
@RestController
public class ReplyController {
 
    private Logger logger = LoggerFactory.getLogger(ReplyController.class);
    
    @Autowired
    private ReplyService replyService;
    
    @GetMapping("/reply/{bno}")
    public List<ReplyDomain> findByBno(@PathVariable("bno"int bno) throws Exception{
        return replyService.findbyBno(bno);
    }
    // 이하 생략...
}
cs


코드 상에서도 일반 @Controller를 사용했을 때와 차이점을 알 수 있는데, ModelAndView 객체나 String으로 View의 경로를 지정하지 않고 데이터 그 자체를 반환하는 것을 알 수 있습니다. 이후에 실행한다면, 화면에 아래의 그림처럼 JSON 형태의 화면을 보여줄 것입니다. 물론 MongoDB에 데이터가 있는 경우에만 해당됩니다.



3. Swagger

View가 없다 보니 문제가 있습니다. 바로 시연이나 테스트에서 보여주기가 힘들다는 거죠. 데이터를 읽는 것은 그래도 저렇게 화면이라도 나오니까 망정이지만, 데이터를 입력하거나 삭제, 수정하는 경우에는 화면 없이 시연하기 어렵습니다. 그렇다고 이 시연을 위해 View를 새로 만든다는 것은 시간 낭비입니다.  하지만 Swagger를 이용하면 이런 점을 깔끔하게 해결할 수 있습니다. Swagger가 알아서 View를 만들어주기 때문이죠.





Swagger는 프로그램이 시작할 때, URL Mapping을 추적해서 위의 그림과 같은 View를 만들어 줍니다. 그리고 각각의 Tab에는 위의 그림처럼 입력이 가능한 Form과 각각의 타입 등의 정보를 제공해줍니다. 따라서 이 프로그램을 처음 보는 사람도 어떤 URL로 구성되어 있으며, 각각의 URL은 어떤 인자를 받아서 어떻게 반환하는지를 쉽게 확인이 가능합니다. 


pom.xml

1
2
3
4
5
6
7
8
9
10
11
<!-- Swagger2 -->
<dependency>
   <groupId>io.springfox</groupId>
   <artifactId>springfox-swagger2</artifactId>
   <version>2.7.0</version>
</dependency>
<dependency>
   <groupId>io.springfox</groupId>
   <artifactId>springfox-swagger-ui</artifactId>
   <version>2.7.0</version>
</dependency>
cs


이제 개발에 적용하는 방법을 알아보겠습니다. 우선 swagger2와 화면을 보여줄 swagger-ui 라이브러리를 추가합니다. 그리고 Swagger를 설정하기 위한 Configuration Class를 작성합니다. 


SwaggerConfig.java

1
2
3
4
5
6
7
8
9
10
11
12
@Configuration
@EnableSwagger2
public class SwaggerConfig {
    @Bean
    public Docket api() {
        return new Docket(DocumentationType.SWAGGER_2)
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.example.controller"))
                .paths(PathSelectors.ant("/reply/**")) 
                .build();
    }
}
cs


line 8

컨트롤러가 있는 패키지를 지정할 수 있습니다. 만약 어떤 패키지를 특정하지 않고 모든 패키지를 추적하고 싶다면 매개변수에서 RequestHandlerSelectors.any()를 사용하면 됩니다. 


line 9

Mapping URL 중에서 어떤 URL을 사용할 것인지 정해줄 수 있습니다. 저는 /reply 밑의 모든 경로에 대하여 추적하도록 하였습니다. 마찬가지로 모든 경로를 다 추적하게 하고 싶다면 PathSelectors.any()를 매개변수로 사용하면 됩니다.


이제 Spring Boot 프로그램을 실행하여, http://localhost:8080[/root_path]/swagger-ui.html로 이동하면, 앞서 실행한 결과를 쉽게 확인할 수 있습니다. 


전체 소스코드는 GitHub를 확인해주세요.

다음 포스팅에서는 Redis로 Cache Layer를 구성하는 방법을 포스팅하겠습니다.




,