'냥냠대' 서버 개발 일기 - 2 (Swagger 적용)

한태민·2022년 3월 30일
0
post-thumbnail

일기의 시작은 근황부터...

1편을 적은 뒤 꽤 많은 시간이 흘렀다.

나는 2월 초 중소기업의 백엔드 개발자로 취업하게 됐다. 🥰

누구나 다 아는 유명한 N사, K사, C사 같은 회사는 아니지만 만족하면서 출근하고 있다.ㅎㅎ

취업 상당히 바쁠 것이라 생각했지만 생각보다 여유롭다. 내가 맡은 할 일을 끝내고 나면 공부 하고싶은 것들을 할 수 있어서 좋다. 아직까진 그렇다


이후 나는 취업의 기쁜 마음으로 맥북 프로를 질렀다. 할부금은 내년의 내가 마지막으로 내겠지 뭐...

1편에서 못했던 내용...

그때 당시 maven package의 오류가 있어 진행을 하지 않았었다. 이후 계속해서 확인 해 보니 jdk가 서로 충돌하여 진행이 되지 않았었다. 이후 버전을 맞춰 clean-package를 진행하였고 정상적으로 작동하였다.

이후 빌드 한 jdk에 맞춰 EC2도 버전을 같게 하여 빌드 하였다.

이제는 어떻게 테스트하지?

취업 이후 한동안 건드리지도 못하고 회사 프로젝트에 잠시 집중했었다. 하지만 여유도 생기고 Spring이라는 매력에 더 빠져들어버렸다.

이제는 EC2에 올렸고 계속해서 기능을 추가할때마다 테스트를 해야한다.

system.out.println()으로 찍어서 테스트를 하는 방법은 이제 더 이상 되지 않고 해서는 안된다.

여러 방법이 있지만 처음에 사용했던것은 PostMan을 이용하여 테스트를 하는 것이였다.

계속해서 API는 커질테고 분명 API Docs가 필요할테니 가장 익숙하고 GUI가 마음에 들어 사용하였다.

좋은 툴을 선택한 것은 맞지만 뭔가 불편하고 계속해서 내가 추가를 수동으로 해줘야한다는 귀찮음이 가장 크게 느껴졌다.

그래서 나름 고민끝에 swagger를 선택하였다.

직접 써본 결과 장점이 확실한 것 같다.

장점

  1. 편함
  2. 깔끔함

단점

  1. 어노테이션 추가를 계속 해줘야하기 때문에 코드가 조금씩 길어짐

직접 해보자

먼저 의존성 추가부터!

        <!--Spring swagger2-->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-boot-starter</artifactId>
            <version>3.0.0</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>3.0.0</version>
        </dependency>

3.0.0 버전에서 이 부분을 추가 시켜줘야 오류가 나지 않았다.
혹시 모르니 꼭 application.yml에 추가하자(application.xml, application.properties 등 ...)

spring:
    mvc:
      pathmatch:
        matching-strategy: ant_path_matcher

그 후 Config 폴더를 새로 생성하고 SwaggerConfiguration을 작성한다.

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;


@Configuration
@EnableSwagger2
public class SwaggerConfiguration {
    @Bean
    public Docket swaggerApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.nyanyumserver.nyanyumserver"))
                .paths(PathSelectors.any())
                .build();
    }
    private ApiInfo apiInfo(){
        return new ApiInfoBuilder()
                .title("NYU API")
                .description("USER")
                .version("1.0.0")
                .build();
    }
}

다 작성을 완료했다면 이제 Controller에 적용하자

일단 적용할 ControllerEnableSwagger2 어노테이션을 추가

위 코드처럼 @ApiOperation을 추가하고 value 값도 넣어준다.

@ApiOperationvalue값이 적용되면 이런 모습으로 나온다.

@ApiParam은 파라미터 값의 이름을 지정해준다.
속성값으로 required를 넣어 줌으로 반드시 값을 넣어야 동작하도록 한다.

@ApiIgnore는 나타내지 않을 파라미터를 숨기는 기능을 가지고 있다. 나는 세션을 굳이 보여줄 필요 없으므로 적용했다.

다 적용했다면 이제 확인해보자

swagger 3.0.0 부터 아래 링크와 같은 형태로 접속해야 된다.

http://localhost:{port}/swagger-ui/index.html#/

{port}는 프로젝트의 포트번호를 넣으면 된다.

링크로 접속을 하면 다음과 같이 나온다

후기

swagger를 적용한 뒤 프론트에서 테스트를 할때 너무 편하다는 이야기를 많이 들었다. 나 또한 테스트를 하기 너무 편하기도 했고 여러모로 잘 적용한 기능 중 하나여서 기분이 좋았다.

profile
Real knowledge is to know the extent of one's ignorance.

0개의 댓글

관련 채용 정보