Spring Rest Docs 적용네이버 캠퍼스 핵데이 Java 코딩 컨벤션 적용적용 방법윈도우 특이사항 : 새줄 적용 관련해 git checkout 할 때마다 CRLF로 바꿔버려서 컨벤션에 맞지 않게 된다.정적 팩토리 메소드 네이밍 컨벤션REST API에서 연관관계RequestParam naming convention
Spring Rest Docs 적용
- 정의) Java Spring 진영에서 쓰이는 API 문서 자동화 도구
- Swagger vs Spring Rest Docs
ㅤ | Swagger | Spring Rest Docs |
장점 | - 적용이 쉬움
- API 테스트 화면 제공함 | - 제품 코드에 영향 없음
- 테스트가 성공해야 문서 작성되어 API 스펙과 항상 일치함(동기화) |
단점 | - 제품코드에 어노테이션 추가해야 함
- 제품코드와 동기화 안될 수 있음 | - 적용이 어려움 |
- 사용 기술)
- SpringBoot, Gradle, jUnit4, MockMvc, AsciiDoc
- 적용)
./build.gradle- 생성)
documentation / openapi3클릭 시/build/api-spec디렉터리에 OAS 기본 구조가 작성된openapi3.yaml파일이 생성됨- 우리팀은 아래와 같이 커스텀해서
src/main/resources/static/docs에 생성되게 변경했음
ㅤ | jUnit4 | Spock |
장점 | - 라이브러리 추가하지 않아도 됨
- 컴파일 시점에 오류 잡기 쉬움 | - BDD 스타일로 직관적임
- 동적 테스트가 쉬움 |
단점 | - 동적 테스트 작성이 불편함 | - 라이브러리 추가해야 함
- 컴파일 시점에 오류 찾기 힘듦 |
ㅤ | MockMvc | RestAssured |
장점 | - @WebMvcTest로 수행이 가능해 Controller Layer만 테스트하기에 속도가 빠름
- 문서 작성하기에 적당함 | - BDD 스타일로 직관적임
- 통합 테스트할 땐 좋은 선택이 될 수 있음 |
단점 | ㅤ | - 별도 구성 없이는 @SpringBootTest로 수행해야 하는데 전체 컨텍스트를 로드해 빈을 주입하게 되어 속도가 많이 느림 |
ㅤ | AsciiDoc | Markdown |
장점 | - include 기능을 제공함
- 강력한 표현력 가짐 | - 개발자에게 친숙함 |
단점 | - 개발자에게 친숙하지 않음
- Ruby 의존성 때문에 빌드 시간 오래 걸림 | - import 기능 있지만 사용 불편함 (Slate 사용하면 편하다고 하지만, 결과물이 우리가 생각한 doc 파일과 다르며 별도 설정 해야 하는 번거로움이 있음)
- 단순해서 API 명세 문서화하기에 표현력 제한됨 |
- 참고
네이버 캠퍼스 핵데이 Java 코딩 컨벤션 적용
적용 방법
.editorconfig파일 추가- 해당 파일을 루트 디렉토리에 추가하면, 별도 설정 없이도 IDE에서 해당 파일을 인식하여 포매팅을 적용함
- 코드 스타일 관리하는 표준 도구
.editorconfig가 올바르게 적용되었는지 확인. 우측 하단에4 space버튼 클릭했을 때 아래와 같은 창이 뜨면 성공

- 자바 핵데이 컨벤션 문서의 Appendix D: 편집기 설정 중
D.2.1. Formatter 적용섹션에 있는 내용을 적용.이렇게 나온다면 성공.

- 자바 핵데이 컨벤션 문서의 Appendix D: 편집기 설정 중
D.2.4. 파일을 저장 할 때마다 포멧터 자동 적용섹션에 있는 내용을 적용. 파일 마지막에 있는 newline을 지우고 저장 시 자동으로 다시 newline이 추가되면 성공.
- 참고
아래 PR 내용을 바탕으로 작성함
chore: 코딩 스타일 컨벤션 적용
윈도우 특이사항 : 새줄 적용 관련해 git checkout 할 때마다 CRLF로 바꿔버려서 컨벤션에 맞지 않게 된다.
- 아래와 같이 설정해 해결 가능하다.


- 참고
정적 팩토리 메소드 네이밍 컨벤션
- from : 인자 한 개일때
- of : 인자 여러 개일때
REST API에서 연관관계
- REST 리소스 간에는 연관 관계가 있을 수 있고, 이런 경우 다음과 같은 표현방법으로 사용
- 만약에 관계명이 복잡하다면 이를 서브 리소스에 명시적으로 표현하는 방법이 있음.
- 예를 들어 사용자가 ‘좋아하는’ 디바이스 목록을 표현해야 할 경우 다음과 같은 형태로 사용
- 참고
RequestParam naming convention
- camel case로 간다.







