Skip to content

백엔드 기술 사용

Kiara Kim edited this page Sep 1, 2023 · 5 revisions

백엔드 기술 사용

카페인 팀에서 REST Docs를 사용하는 이유에 대해서 적어보도록 하겠습니다.

먼저 카페인 팀에서는 프론트엔드와 API 통신을 위해서 API 문서화 작업이 필요했습니다.

그 과정에서 기술 문서를 작성할 수 있는 두 가지 기술이 있었습니다.

문서화 도구 후보

Swagger

먼저 첫 번째 후보 스웨거입니다.

스웨거는 간단하게 어노테이션만 추가해주면 자동으로 문서가 생성되기 때문에 큰 시간을 들이지 않고 문서화를 할 수 있습니다.

하지만, 매 문서화가 필요한 부분마다 코드에 어노테이션이 붙으면서 코드의 가독성이 저해될 수 있습니다. 또한 테스트 기반 문서화 기술이 아니라 신뢰성 있는 문서가 되지 않을 수 있습니다.

REST Docs

REST Docs는 테스트 코드에 영향을 받기 때문에, 테스트가 통과해야지 문서 조각이 나오고 이를 통해 문서를 작성할 수 있습니다.

따라서 스웨거에 비해서 문서의 신뢰성이 높다는 장점이 있습니다.

하지만, 러닝커브가 있어서 처음에 배우고 적용하려면 적지 않은 메서드들을 학습하고, 어떻게 사용하는지 익혀야한다는 단점이 있습니다.

결론

카페인 팀에서는 어차피 테스트를 작성하기로 했고, 이를 통해 Response의 데이터들도 검증하기로 했습니다.

어차피 Swagger, REST Docs 둘 다 데이터 검증을 해야하는 상황에서 REST Docs가 러닝커브가 분명 있지만, 다들 학습하고 이를 통해 데이터 검증 및 문서화를 하기로 했습니다.

따라서, 어노테이션이 많고 비교적 신뢰성이 떨어지는 Swagger를 선택하지 않고 REST Docs를 카페인 팀의 문서화 도구를 결정하였습니다.

JJWT

인가

저희 프로젝트는 개인화 기능이 있기 때문에 로그인 후의 요청은 JWT를 포함하여 사용자가 특정 경로,서비스,리소스에 접근하는 것을 허락해줍니다.

정보 교환

public/private key 쌍을 이용하여 JWT 가 서명될 수 있기에, JWT 는 안전하게 정보를 주고받는데도 잘 쓰입니다.

이를 통해 보낸 사람에 대한 인증도 되며 서명은 헤더와 페이로드를 사용해 계산하므로 내용이 변조되지 않았다는 사실도 알 수 있습니다.

특정 알고리즘을 이용한 비밀키 생성 기능도 제공해주며 '특정 클레임이 반드시 존재해야 한다'라는 조건 등도 설정할 수 있게 해줍니다.

깃허브에 들어가보면, 아주 친절한 README와 잘 형성된 커뮤니티를 엿볼 수 있습니다. 이러한 커뮤니티가 지속 가능성에 대한 기대와 신뢰를 구축하는데 큰 영향을 미치는 것 같습니다.

동작 순서

  • 인가 서버에 인가 권한을 요청한다.
  • 인가가 허가된다면, 서버에서는 액세스 토큰을 발급한다.
  • 애플리케이션은 발급된 액세스 토큰을 통해 API 서버 혹은 리소스에 접근한다.

Spring Actuator

스프링 부트 액추에이터는 Spring Boot 프레임워크 내의 모듈로, 프로덕션 환경에서 애플리케이션을 모니터링하고 관리하는 데 도움을 주는 기능을 제공합니다. /health, /metrics, /info, /env 등 유용한 정보를 노출하는 여러 기본 엔드포인트를 제공합니다. 이러한 엔드포인트는 HTTP를 통해 접근할 수 있으며 운영팀이 애플리케이션을 모니터링하고 관리하는 데 사용됩니다.

Prometheus

프로메테우스는 데이터를 수집하고 저장할 수 있는 오픈 소스 라이브러리입니다. Prometheus는 시계열 데이터를 수집, 저장 및 조회하기 위한 고성능의 시계열 데이터베이스입니다. 메트릭 데이터를 수집하고 기록하여 이를 통해 리소스 사용, 성능, 상태 등을 추적하고 분석할 수 있습니다. 다른 비슷한 오픈소스 라이브러리가 있음에도 prometheus를 사용한 이유는 가장 많은 커뮤니티가 있고, 레퍼런스가 많고 그 중 제일 안전하다는 평가를 받고 있어 사용했습니다.

Grafana

Grafana는 다양한 데이터 소스로부터 가져온 데이터를 사용하여 시각화 대시보드를 만들 수 있는 도구입니다. 시계열 데이터, 그래프, 테이블, 로그 등 다양한 형식의 데이터를 시각적으로 표현할 수 있습니다.

Spring Actuator에서 받은 정보들을 Prometheus가 수집하고 저장을 합니다. 그리고 그것들을 확인하기 편하도록 Grafana라는 툴을 통해 시각화 해줍니다.

Actuator + Prometheus + Grafana VS Cloudwatch

저희가 Cloudwatch를 사용하지 않은 이유는 cloudwatch는 aws를 사용하는 경우에서만 사용할 수 있기 때문에 해당 모니터링 툴을 사용했습니다.