-
Notifications
You must be signed in to change notification settings - Fork 2
사용 기술 선택
-
한 줄 소개
- adoc 파일을 html 등으로 변환해주는 문서 도구
-
제안 배경 (요구사항, 사용 목적)
- adoc : API 문서 작성시 필요한 문서 언어
- 마크 다운과 비교 대상
-
비교 : ‘Markdown’ vs ‘Asciidoc’
-
Markdown
- 장점 : 단순한 표현력
- 단점 : 복잡한 기능 못 씀
-
Asciidoc
- 장점 : 전문적 문서 작성할 수 있는 강력한 표현력을 가지고 있음
-
include
다른 asciidoc 문서를 현재 문서로 가져와 포함시킬 수 있다
-
- 단점 : 마크다운에 비해 공부해야할게 많음
- 장점 : 전문적 문서 작성할 수 있는 강력한 표현력을 가지고 있음
-
Markdown
-
사용방법
-
asciidoctorExt
에spring-restdocs-asciidoctor
의존성을 추가한다. -
아래처럼 adoc 파일을 작성하고, dsciidoctor 테스크를 실행하면 html문서가 생성됨
= Member API 문서 :doctype: book :icons: font :source-highlighter: highlightjs :toc: left :toclevels: 3 == 회원 가져오기 === Request include::{snippets}/members/findMemberById/http-request.adoc[] === Response include::{snippets}/members/findMemberById/http-response.adoc[]
-
스프링 어플리케이션이 직접 해당 문서를 포함해 jar파일이 만들어지도록 build.gradle에 아래 내용 추가
bootJar { dependsOn asciidoctor // (1) from("${asciidoctor.outputDir}") { // (2) into 'static/docs' } }
-
-
참고자료
-
한 줄 소개
- Spring Rest Docs를 위해 사용하는 테스트 도구 중 하나
-
제안 배경 (요구사항, 사용 목적)
- Spring REST Docs를 사용하려면 테스트 코드를 반드시 작성해야 함
- 따라서 테스트 도구를 선택해야 되는 상황
-
비교 : ‘MockMvc’ vs ‘RestAssured’
-
RestAssured
-
@SpringBootTest
와 기본적으로 사용- 장점 : 실제환경과 동일한 환경 테스트 가능
- 스프링의 전체 빈을 컨텍스트에 모두 띄워서 테스트 환경 구동
- 단점 : 느리고, 테스트 실행 비용이 많이 든다
- 장점 : 실제환경과 동일한 환경 테스트 가능
-
-
MockMvc
-
@SpringBootTest
와 사용할 수도 있고,@WebMvcTest
와 함께 사용할 수도 있음 -
@WebMvcTest
-
장점 : 빠르고, 테스트 실행 비용이 적게 든다.
-
슬라이스 테스트. 독립적으로 하나의 계층만 테스트하는 기법 사용
⇒ 일반적으로 문서화를 위한 컨트롤러 테스트를 작성할 때 컨트롤러만 독립적으로 테스트
-
-
단점 : 어플리케이션 전체를 띄우지 않으므로, 실제 환경과 동일한 환경은 아님
-
-
-
RestAssured
-
사용방법
- MockMvc를 사용하기 위한 의존성을 추가한다.
@AutoConfigureRestDocs @WebMvcTest(MemberController.class) class MemberControllerTest { @Autowired private MockMvc mockMvc; @MockBean // MemberController이 의존하는 빈을 모킹 private MemberService memberService; @DisplayName("멤버를 가져온다.") @Test void findMemberById() throws Exception { // given given(memberService.findMemberById(any())) .willReturn(new MemberDto(1L, "후디", "[email protected]")); // when & then mockMvc.perform(MockMvcRequestBuilders.get("/members/1")) .andDo(MockMvcResultHandlers.print()) .andDo(MockMvcRestDocumentation.document("members/findMemberById", Preprocessors.preprocessRequest(prettyPrint()), Preprocessors.preprocessResponse(prettyPrint()))) .andExpect(MockMvcResultMatchers.status().isOk()); } }
-
참고자료
-
한 줄 소개
- 도메인 패턴을 중심에 놓고 설계하는 방식
- 데이터 중심의 접근법을 탈피해서 순수한 도메인의 모델과 로직에 집중
- 소프트웨어 엔티티와 도메인 컨셉트를 가능한 가장 가까이 일치시키는 것
- 실제 코드로 구현 가능한 현실성 있는 도메인 모델 분석과 그것을 추상화하는 설계
-
제안 배경 (요구사항, 사용 목적)
- 요새 MSA를 많이 찾던데, MSA에서 도메인 주도 설계가 많이 쓰인다
-
장점
- 도메인에 집중할 수 있는 설계방식이다
-
단점
- 설계에 좀 오래 걸릴 수 있다
-
사용방법
-
참고자료
-
한 줄 소개
공통의 기능을 분리
분리한 모듈은 자신의 비즈니스 로직에만 집중
-
제안 배경 (요구사항, 사용 목적)
로깅 구현
-
장점
공통적인 작업(로깅)을 한 곳에서 처리해줄 수 있음
코드의 가독성과 유지보수성이 높아짐
-
단점
-
사용방법
AOP 의존성 추가
-
참고자료
-
한 줄 소개
- aws code pipeline 돈 많이 들면 이거 쓰자
- ci 도구
- gitmarcket에서 이용가능, public repository에서 무료로 이용 가능
- 깃헙에 호스팅 되는 소프트웨어 프로젝트의 빌드, 테스트를 위해 사용됨
-
제안 배경 (요구사항, 사용 목적)
- CI 구현
- CI를 성공적으로 구현할 경우 애플리케이션에 대한 새로운 코드 변경 사항이 정기적으로 빌드 및 테스트 되어 레포지토리에 통합
-
장점
- public repository에서 무료로 이용 가능
- 빌드를 해준다
- 테스트도 해준다
- 직접 서버를 운영할 필요 없이, Travis에서
알아서
VM으로 호스팅해 줌
-
단점
- 유료 서비스를 사용할 경우, 가격이 꽤 비싸다
-
사용방법
- 트레비스 사이트에서 레포지터리 등록하고, yml 파일 설정한다
- amazon s3에 트레비스 서버에서 생성된 jar 파일 저장
- aws CodeDeploy에서 배포
-
참고자료
[CI/CD] Travis CI를 활용한 배포 자동화 (1) https://hyeonic.tistory.com/210
[CI/CD] Jenkins vs GitLabCI vs Travis https://owin2828.github.io/devlog/2020/01/09/cicd-1.html
-
한 줄 소개
- 로그 수집
- Prometheus: 대상 시스템으로부터 각종 모니터링 지표를 수집하여 저장하고 검색할 수 있는 시스템
- Grafana: 프로메테우스를 비롯한 여러 데이터들을 시각화해주는 모니터링 툴
-
제안 배경 (요구사항, 사용 목적)
- 로그 수집
- 모니터링
-
장점
- 그라파나는 다양한 DB 연결 가능 : AWS 클라우드워치를 데이터 소스로 사용 가능
-
단점
- 서버를 하나 더 띄우는게 좋을 것 같다.. ec2 필요
- Grafana는 주로 시계열 분석을 수행하기 위해 구축 → 다른 보고 유형이 필요한 경우 기능이 제한될 수 있음
-
사용방법
- 도커로 띄우고 yml 설정한 다음 연결한다
-
비슷한 도구
- elastic search + kibana
-
참고자료
- 한 줄 소개
- Java code coverage의 약자로 junit 테스트의 결과를 바탕으로 커버리지를 결과를 리포트 해주는 라이브러리
- 코드 정적 분석도구인 sonarqube와 연계하여 사용하는 경우가 많음
- 코드 커버리지에 대한 결과를 html이나 xml, csv와 같은 리포트로 생성한다.
- 설정한 커버리지를 만족하는지 여부를 확인할 수 있다.
-
제안 배경 (요구사항, 사용 목적)
-
장점
- 레퍼런스가 많다(다른 도구의 경우 레퍼런스가 부족).
- 사용 방법이 간단하다.
-
단점
-
사용방법
-
비슷한 도구
- Cobertura
- Clover
- 오잉 깃허브에 있는 Coveralls 이것도 비슷한 것 같다..!
-
참고자료
Gradle 프로젝트에 JaCoCo 설정하기 https://techblog.woowahan.com/2661/
Jacoco 사용법 및 예제(maven) https://frozenpond.tistory.com/72
-
한 줄 소개
- sonarqube
- 정적분석 도구
- 소냐큐브 서버를 띄워서 Jacoco가 만들어낸 리포트(.xml)를 전송하면 웹으로 통계를 볼 수 있다
- 실제로 Docker로 쉽게 설치한 후, 젠킨스 같은 도구로 코드를 컴파일/빌드하고 소냐큐브에게 API로 보내 검사를 의뢰하는게 일반적인 구성
- sonarlint: SonarQube를 베이스로 만든 IntelliJ, Eclipse, VsCode등에 있는 IDE 플러그인
- sonarqube
-
제안 배경 (요구사항, 사용 목적)
- 정적 분석 도구 → 소스코드의 구조적인 문제, 잠재적 위험성, 코드 컨벤션(냄새나는 코드)를 찾는데 사용
- 중복 코드, 코딩 표준, 유닛 테스트, 코드 커버리지(Jacoco), 코드 복잡도, 버그 및 취약점등
-
장점
- 또한 레퍼런스가 많고 기능이 좋아서, 왠만한 CI/CD 도구들과는 다 호환된다
-
단점
- 소나큐브: ec2 필요
- SonarQube는 코드를 분석하는 [Scanner]와 분석결과를 API로 받아 보고서를 만드는 [웹 서버]로 구성됩니다.
-
사용방법
- 커밋전에 SonarLint 분석 옵션을 넣는다
-
참고자료
- 한 줄 소개
- 애플리케이션의 보안(인증과 권한, 인가 등)을 담당하는 스프링 하위 프레임워크
- '인증'과 '권한'에 대한 부분을 Filter 흐름에 따라 처리
- 제안 배경 (요구사항, 사용 목적)
- 로그인
- sql injection 방어 → 근데 하는 방법 검색해도 잘 안 나옴. jpa는 자동으로 방어 된다고 함
- xss 방어 → 근데 하는 방법 검색해도 잘 안 나옴.
- 장점
- 인증, 인가 구현할 때 유용하다고 한다
- 단점
- 어렵다
- 사용방법
- 참고자료
-
한 줄 소개
api 문서 자동화 도구
-
제안 배경 (요구사항, 사용 목적)
api 문서 도구로 활용
-
장점
테스트가 성공해야 문서로 작성된다 → API의 신뢰도를 높이고 테스트 코드의 검증을 강제
실제 코드에 추가되는 코드가 없다 → 프로덕션 코드와 분리되어있기 때문에 Swagger같이 Config 설정 코드나 어노테이션이 프로덕션 코드를 더럽히지 않는다
실무에서 많이 쓰이는 것으로 알고 있음
-
단점
적용하기 어렵다…!
-
사용방법
build.gradle 설정, ..
-
참고자료
- 한 줄 소개
- 인메모리 캐시 DB
- 제안 배경 (요구사항, 사용 목적)
- 캐시 DB로 활용 → 동작속도 빠르게
- 채팅이 도입될 경우 메시지 전달함으로도 사용 가능할 듯ㅎㅎ
- 장점
- 인메모리 DB라서 빠르다
- 단점
- 인메모리
- 서버가 꺼지면 데이터가 날라갈 수 있다
- 용량이 일반 DB에 비해 적다
- 인메모리
- 구현방법
- ec2에 레디스를 설치한다
- 아스키독
- 단기간에 완성시켜야 하니까 마크다운을 일단 사용한다.
- 사용하다가 불편하면 아스키 닥터를 더 알아본다.
-
MockMvc
- Spring REST Docs과 같이 쓰기 좋다.
- 테스트 실행 비용이 적게 든다.
-
DDD
- 도메인 모델과 로직에 집중할 수 있다.
-
AOP
- 공통 기능을 분리하고, 분리한 모듈은 자신의 비즈니스 로직만 집중
- 로깅할 때 사용. 로깅 모듈을 재사용할 수 있음
- travis ci
- 일단 aws code pipeline 사용. 필요하면 travis ci 사용.
- 빌드, 테스트 위해 사용
- aws code pipeline 대체용. 비용이 많이 들거나 설정이 잘 안되거나 등 상황이 생기면 travis ci로 대체하자
-
Grafana ( + Prometheus)
- 데이터 시각화 도구. 로그 수집, 모니터링에 사용
- 단점 : EC2나 다른 서버가 추가로 필요함
- 돈이 있으면 쓰자
-
Jacoco
- 코드 커버리지 도구
- 다른 도구에 비해 참고 자료가 많음
- Coveralls
- 코드 커버리지 도구
- travis ci랑 같이 씀
- 시간이 남으면 써보자
-
sonarlint
- 정적분석도구
- 중복코드 등 코드스멜 잡는 용도
- Spring security
- 인증과 보안
- 어렵다
- 개발하다가 여유가 되면 써보자
-
Docker
- 배포만이라도 쓰자