Thanks to visit codestin.com
Credit goes to github.com

Skip to content

hkc321/spring-kotlin

Repository files navigation

spring-kotlin

CI-CD codecov

  • Practice spring-boot with kotlin
  • Practice hexagonal architecture

Environment

설명

kotlin과 srping boot를 이용한 회원 및 게시판 관련 api

  • 회원가입 및 로그인 및 로그아웃
  • 회원 CRUD, 권한 변경
  • 게시판/게시글/댓글 CRUD 및 페이징
  • 게시글/댓글 좋아요

ERD

erd

시스템 구조

systemimg

주요내용

hexagonal architecture를 통해 외부로부터 주요 로직을 격리

  • hexagonal architecture를 구현해 각 도메인 별 주요로직을 외부요소(db)로 부터 격리하여 유지보수가 쉽도록 하였습니다.
  • 관련 블로그 게시물

spring security 및 jwt를 통한 인증 및 인가 구현

  • custom filter들을 등록하여 spring security를 사용하였습니다.
  • 인증 및 인가 시 jwt를 사용하도록 하였습니다.
    • 인증 시 custom filter에서 jwt를 검사하여 유효성을 검사합니다.
    • 성공 시 access token과 refresh token을 발행합니다.
    • access token 만료 시 header에 refresh token을 포함하여 새로운 access token을 발급받도록 하였습니다.

OAS를 이용하여 테스트 코드 기반 swagger api 문서 작성

  • restdocs-api-spec 오픈소스를 사용하여 swagger api 문서를 작성
    • spring rest doc과 swagger의 장점을 이용할 수 있습니다.
    • test code를 작성해야만 문서를 작성할 수 있기 때문에 문서의 신뢰도가 상승합니다.
    • test code를 통해 OAS파일을 만들고 해당 파일을 swagger로 띄웁니다.

Codecove를 통한 코드 커버리지 측정

  • 툴을 통해 코드 커버리지를 측정하여 테스트 코드의 범위를 파악

필요한 곳에 redis 사용

redis의 특성을 이용하여 필요한 곳에 사용

  • JWT 구현
    • 만료 시간이 있는 특성 사용
    • 로그인 시 refresh토큰을 redis에 유효 기간을 지정하여 저장
    • user가 refresh token을 통해 access token 발급 요청 시 유효 기간을 확인하여 처리
    • access token이 만료되기 전 로그아웃 시, 해당 토큰을 남은 유효 기간 만큼 redis에 저장한다.
      • 이후 로그아웃된 access token으로 로그인을 시도해도 불가능하게 하였습니다.
  • 게시글 및 댓글 좋아요
    • 중복이 불가능한 set 자료구조 특성 사용
    • 좋아요 클릭 시 user email을 set 자료구조에 저장하여 중복 클릭이 불가능하도록 설정

advice를 통한 일관적인 예외 처리

  • 상황별로 예외처리를 하였습니다.
  • controller advice를 통해 각종 예외 및 에러들을 일관적인 형태로 알려주도록 하였습니다.

nginx를 활용한 무중단 배포 구현

  • nginx를 이용하여 blue green 방식의 무중단 배포를 구현하였습니다.
  • 관련 블로그 게시물에서 자세한 내용을 볼 수 있습니다

slack과 sentry를 통한 에러 추적

  • 배포작업이 완료되면 slack에 알림을 보낼 수 있도록 하였습니다.
  • sentry를 통해 어플리케이션을 모니터링 하며 에러로그를 기록할 수 있도록 하였습니다.
  • 무료버전을 이용중이기 때문에 에러로그 캡쳐 시 slack에도 메시지를 보내도록 하였습니다.

완료 후 느낀점

  • 크고 작은 새로운 기술들을 접하며 어플리케이션의 시작부터 배포까지의 경험을 할 수 있었습니다.
  • 안해본 것을 도전하기 위해 처음보는 기술들을 대거 사용하여 어려움이 있었는데 포기하지 않고 완성하여 뿌듯함이 있습니다.
  • 새로운 기술을 접하며 알아가는 과정이 고통스러웠지만 적용하고 나면 기분이 굉장히 좋았습니다.
    • 한편 또다른 느낀점은 실무에서는 무조건 새롭고 좋은 기술만이 정답이 아니라는 생각도 들었습니다.
    • 비교적 작은 api 임에도 불구하고 새로운 기술들을 적용하느라 생각보다 시간이 오래 걸렸습니다.
    • 해당 기술에 대한 이해도가 낮은 상태에서 레퍼런스가 적은 오픈소스를 사용하였기 때문이라고 생각합니다.
    • 만약 실무에서 특정 기술을 고집하느라 일정을 맞추지 못한다면 문제가 있을거라고 생각합니다.
    • 상황에 맞는 기술을 선택하는 것 또한 개발자의 능력이라고 느꼈습니다.
  • 개발 중 다양한 문제들을 마주치며 저의 부족한점을 깨달았고 끊임없는 공부가 필요하다고 느꼈습니다.

프로젝트 관련 추가 블로그 게시글

About

practice spring with kotlin

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages