Skip to content
This repository has been archived by the owner on Aug 13, 2022. It is now read-only.
/ awesome-wiki Public archive

[연봉 5000만원 이상 이직] Spring framework 를 이용한 다중 접속 Wiki

Notifications You must be signed in to change notification settings

f-lab-edu/awesome-wiki

Repository files navigation

awesome-wiki

Spring framework 를 이용한 다중 접속 애플리케이션에서 발생하는 어려움을 해결하며 공부하기 위한 프로젝트입니다.

최대한 효율적으로 TDD 를 연습하기 위해 할 일 목록 Google sheetsIssue Kanban board 를 적극 활용하고 있습니다.

$ gradlew :app-main:assemble {-PbuildConfig=[LOCAL, ALPHA, BETA, RELEASE]}

buildConfig 를 명시하지 않으면 기본적으로 local 프로파일로 빌드합니다.

또한 빌드 프로파일 변경시 아래와 같은 오류가 발생할 경우, clean task 를 추가해서 clean build 를 해야 합니다.

e: app-main/src/alpha/kotlin/kr/flab/wiki/app/AppConfig.kt: (5, 8): Redeclaration: AppConfig
e: app-main/src/local/kotlin/kr/flab/wiki/app/AppConfig.kt: (5, 8): Redeclaration: AppConfig

$ gradlew :app-main:assemble -PbuildConfig=ALPHA
...

BUILD SUCCESSFUL in 266ms
3 actionable tasks: 3 executed

빌드하기 단락의 내용대로 app-main 모듈을 빌드하면 단독 실행가능한 Spring boot application JAR 파일이 생깁니다. 이 파일은 app-main/build/libs 디렉토리 아래에 다음과 같이 생성됩니다.

$ ll app-main/build/libs
total 24M
-rw-rw-r-- 1 user user 24M Jun 23 18:18 app-main.jar
-rw-rw-r-- 1 user user 14K Jun 23 18:18 app-main-plain.jar

실행 방법은 JAR 파일을 그냥 실행하는것과 동일합니다. 아래와 같이 하면 됩니다.

$ java -jar app-main/build/libs/app-main.jar

주의: 커맨드를 실행하는 실행 경로에 application.yml 파일이 있어야 합니다. 또한 파일 템플릿은 application.yml.sample 을 참고하시기 바랍니다.

이 프로젝트에서는 Unit / Integration / End to end 테스트들을 종류별로 구분해 구현하고 있습니다. 테스트들은 martinFowler.com 의 The practical test pyramid 라는 글에 따라 규모별로 구분하고 있으모, 각 테스트를 실행하는 gradle task 명은 아래와 같습니다.

  • test - 등록된 모든 테스트를 실행합니다. 시간이 가장 많이 걸립니다.

  • unitTest - Unit test 들만을 모두 실행합니다. 시간이 가장 적게 걸립니다.

  • integrationTest - Integration test 들만을 모두 실행합니다. Unit test 보다는 실행 시간이 좀 더 걸립니다.

  • e2eTest - End to end test 들만을 모두 실행합니다. End to end test 를 일컫는 말들은 여러 가지가 있지만 이 프로젝트에서는 API 가 정상 동작하는지를 확인하는 테스트를 의미합니다.

서로 다른 코딩 규칙으로 인해 코드 리뷰에 스타일링 지적 같은 불필요한 시간 낭비가 발생하는 일을 줄이고자, detekt 를 이용해 코딩 스타일과 사전 실수를 관리하고 있습니다.

또한 자동화된 test 를 항상 실행해 코드를 안전하게 변경 및 통합하고자 노력했습니다.

아래 gradle task 를 실행하면 이 프로젝트에서 코드 품질을 측정할 수 있습니다.

./gradlew detekt jacocoTestReport

각 Task 들의 설명은 다음과 같습니다.

  • detekt: detekt 를 실행. Kotlin 정적 분석 실행.

  • jacocoTestReport: 테스트 실행 및 테스트의 코드 커버리지 측정.

현재 프로젝트는 크게 스프링 관련 코드, 즉 entry point가 있는 app-main 모듈과 도메인/비즈니스 로직을 모아둔 app-core모듈로 나뉩니다.

도메인과 프레임워크 코드를 모듈로 분리하여 프로젝트가 spring에 의존하지 않고 약간의 수정으로 다른 프레임워크에서 실행 가능하도록 하는것이 목적입니다.

  • app-core - 설계한 도메인 모델과 서비스를 모아둔 모듈입니다. 문서화를 위한 annotation,과 도메인을 사용하면서 발생하는 exception도 정의되어 있습니다.

    • domain - 도메인의 구현체 패키지입니다. app-main 프로젝트에서는 도메인의 인터페이스만 사용 가능합니다.

      • document - 위키 문서 자체의 도메인입니다.

      • user - 문서를 작성한 유저의 도메인입니다

  • app-main - Spring 프레임워크 관련 코드를 모아둔 모듈입니다.

  • app-lib - 프로젝트에서 자주 사용하는 유틸리티성 메소드를 모아둔 모듈입니다.

Releases

No releases published

Packages

No packages published

Languages