- Practice spring-boot with kotlin
- Practice hexagonal architecture
kotlin과 srping boot를 이용한 회원 및 게시판 관련 api
- 회원가입 및 로그인 및 로그아웃
- 회원 CRUD, 권한 변경
- 게시판/게시글/댓글 CRUD 및 페이징
- 게시글/댓글 좋아요
- hexagonal architecture를 구현해 각 도메인 별 주요로직을 외부요소(db)로 부터 격리하여 유지보수가 쉽도록 하였습니다.
- 관련 블로그 게시물
- custom filter들을 등록하여 spring security를 사용하였습니다.
- 인증 및 인가 시 jwt를 사용하도록 하였습니다.
- 인증 시 custom filter에서 jwt를 검사하여 유효성을 검사합니다.
- 성공 시 access token과 refresh token을 발행합니다.
- access token 만료 시 header에 refresh token을 포함하여 새로운 access token을 발급받도록 하였습니다.
- restdocs-api-spec 오픈소스를 사용하여 swagger api 문서를 작성
- spring rest doc과 swagger의 장점을 이용할 수 있습니다.
- test code를 작성해야만 문서를 작성할 수 있기 때문에 문서의 신뢰도가 상승합니다.
- test code를 통해 OAS파일을 만들고 해당 파일을 swagger로 띄웁니다.
- 툴을 통해 코드 커버리지를 측정하여 테스트 코드의 범위를 파악
redis의 특성을 이용하여 필요한 곳에 사용
- JWT 구현
- 만료 시간이 있는 특성 사용
- 로그인 시 refresh토큰을 redis에 유효 기간을 지정하여 저장
- user가 refresh token을 통해 access token 발급 요청 시 유효 기간을 확인하여 처리
- access token이 만료되기 전 로그아웃 시, 해당 토큰을 남은 유효 기간 만큼 redis에 저장한다.
- 이후 로그아웃된 access token으로 로그인을 시도해도 불가능하게 하였습니다.
- 게시글 및 댓글 좋아요
- 중복이 불가능한 set 자료구조 특성 사용
- 좋아요 클릭 시 user email을 set 자료구조에 저장하여 중복 클릭이 불가능하도록 설정
- 상황별로 예외처리를 하였습니다.
- controller advice를 통해 각종 예외 및 에러들을 일관적인 형태로 알려주도록 하였습니다.
- nginx를 이용하여 blue green 방식의 무중단 배포를 구현하였습니다.
- 관련 블로그 게시물에서 자세한 내용을 볼 수 있습니다
- 배포작업이 완료되면 slack에 알림을 보낼 수 있도록 하였습니다.
- sentry를 통해 어플리케이션을 모니터링 하며 에러로그를 기록할 수 있도록 하였습니다.
- 무료버전을 이용중이기 때문에 에러로그 캡쳐 시 slack에도 메시지를 보내도록 하였습니다.
- 크고 작은 새로운 기술들을 접하며 어플리케이션의 시작부터 배포까지의 경험을 할 수 있었습니다.
- 안해본 것을 도전하기 위해 처음보는 기술들을 대거 사용하여 어려움이 있었는데 포기하지 않고 완성하여 뿌듯함이 있습니다.
- 새로운 기술을 접하며 알아가는 과정이 고통스러웠지만 적용하고 나면 기분이 굉장히 좋았습니다.
- 한편 또다른 느낀점은 실무에서는 무조건 새롭고 좋은 기술만이 정답이 아니라는 생각도 들었습니다.
- 비교적 작은 api 임에도 불구하고 새로운 기술들을 적용하느라 생각보다 시간이 오래 걸렸습니다.
- 해당 기술에 대한 이해도가 낮은 상태에서 레퍼런스가 적은 오픈소스를 사용하였기 때문이라고 생각합니다.
- 만약 실무에서 특정 기술을 고집하느라 일정을 맞추지 못한다면 문제가 있을거라고 생각합니다.
- 상황에 맞는 기술을 선택하는 것 또한 개발자의 능력이라고 느꼈습니다.
- 개발 중 다양한 문제들을 마주치며 저의 부족한점을 깨달았고 끊임없는 공부가 필요하다고 느꼈습니다.