🍀

Spring Rest Docs 적용, 캠퍼스 핵데이 Java 코딩 컨벤션(Window CRLF 이슈 해결)

작성일자
Sep 17, 2023
태그
DIARY_DEVELOP
프로젝트
FIS
책 종류

Spring Rest Docs 적용

  • 정의) Java Spring 진영에서 쓰이는 API 문서 자동화 도구
    • Swagger vs Spring Rest Docs
      • Swagger
        Spring Rest Docs
        장점
        - 적용이 쉬움 - API 테스트 화면 제공함
        - 제품 코드에 영향 없음 - 테스트가 성공해야 문서 작성되어 API 스펙과 항상 일치함(동기화)
        단점
        - 제품코드에 어노테이션 추가해야 함 - 제품코드와 동기화 안될 수 있음
        - 적용이 어려움
  • 사용 기술)
    • SpringBoot, Gradle, jUnit4, MockMvc, AsciiDoc
      • jUnit4
        Spock
        장점
        - 라이브러리 추가하지 않아도 됨 - 컴파일 시점에 오류 잡기 쉬움
        - BDD 스타일로 직관적임 - 동적 테스트가 쉬움
        단점
        - 동적 테스트 작성이 불편함
        - 라이브러리 추가해야 함 - 컴파일 시점에 오류 찾기 힘듦
        MockMvc
        RestAssured
        장점
        - @WebMvcTest로 수행이 가능해 Controller Layer만 테스트하기에 속도가 빠름 - 문서 작성하기에 적당함
        - BDD 스타일로 직관적임 - 통합 테스트할 땐 좋은 선택이 될 수 있음
        단점
        - 별도 구성 없이는 @SpringBootTest로 수행해야 하는데 전체 컨텍스트를 로드해 빈을 주입하게 되어 속도가 많이 느림
        AsciiDoc
        Markdown
        장점
        - include 기능을 제공함 - 강력한 표현력 가짐
        - 개발자에게 친숙함
        단점
        - 개발자에게 친숙하지 않음 - Ruby 의존성 때문에 빌드 시간 오래 걸림
        - import 기능 있지만 사용 불편함 (Slate 사용하면 편하다고 하지만, 결과물이 우리가 생각한 doc 파일과 다르며 별도 설정 해야 하는 번거로움이 있음) - 단순해서 API 명세 문서화하기에 표현력 제한됨
    • 적용)
      • ./build.gradle
      • 생성)
        • documentation / openapi3 클릭 시 /build/api-spec 디렉터리에 OAS 기본 구조가 작성된 openapi3.yaml 파일이 생성됨
        • 우리팀은 아래와 같이 커스텀해서 src/main/resources/static/docs에 생성되게 변경했음
       

      네이버 캠퍼스 핵데이 Java 코딩 컨벤션 적용

      적용 방법

      • .editorconfig 파일 추가
        • 해당 파일을 루트 디렉토리에 추가하면, 별도 설정 없이도 IDE에서 해당 파일을 인식하여 포매팅을 적용함
        • 코드 스타일 관리하는 표준 도구
      • .editorconfig가 올바르게 적용되었는지 확인. 우측 하단에 4 space 버튼 클릭했을 때 아래와 같은 창이 뜨면 성공
        • notion image
      • 자바 핵데이 컨벤션 문서의 Appendix D: 편집기 설정 중 D.2.1. Formatter 적용 섹션에 있는 내용을 적용.이렇게 나온다면 성공.
        • notion image
      • 자바 핵데이 컨벤션 문서의 Appendix D: 편집기 설정 중 D.2.4. 파일을 저장 할 때마다 포멧터 자동 적용 섹션에 있는 내용을 적용. 파일 마지막에 있는 newline을 지우고 저장 시 자동으로 다시 newline이 추가되면 성공.

      윈도우 특이사항 : 새줄 적용 관련해 git checkout 할 때마다 CRLF로 바꿔버려서 컨벤션에 맞지 않게 된다.

      • 아래와 같이 설정해 해결 가능하다.
        • notion image
          notion image
       

      정적 팩토리 메소드 네이밍 컨벤션

      • from : 인자 한 개일때
      • of : 인자 여러 개일때
       

      REST API에서 연관관계

      • REST 리소스 간에는 연관 관계가 있을 수 있고, 이런 경우 다음과 같은 표현방법으로 사용
        • 만약에 관계명이 복잡하다면 이를 서브 리소스에 명시적으로 표현하는 방법이 있음.
          • 예를 들어 사용자가 ‘좋아하는’ 디바이스 목록을 표현해야 할 경우 다음과 같은 형태로 사용
         

        RequestParam naming convention

        • camel case로 간다.
         
         
        Spring Rest Docs 적용, 캠퍼스 핵데이 Java 코딩 컨벤션(Window CRLF 이슈 해결)