개발 기간

2022.02~2022.05

기술 스택

Springboot(mybatis)

구현 내용

코드폴리오 프로젝트는 디자이너와 프론트엔드 개발자와의 협업으로 백엔드를 맡아 진행

초기 백엔드 회의에서는 주기적인 회의를 통해 기획의 구체화를하고, ERD설계와 API명세서 작성, 페이지 레벨링등을 구체적으로 문서화했습니다.

제가 맡은 파트는 User & Follow 및 로그인 입니다.

spring security를 적용하여 security filter를 사용한 유저 로그인과, 로그인 시에 jwt token을 발행하고 access token이 만료되었을 시엔 refresh token을 발행하는 방식으로 기능을 구현했습니다.

Rest API 의 일관된 포맷을 위해 HTTP 상태코드를 공부하고, 프론트엔드 개발자와의 회의를 통해 response data의 규칙을 정해 dto를 사용하여 일관된 결과를 보낼 수 있도록 구현했습니다.

에러 처리를 도맡아 controller단에서는 예외처리시 @RestControllerAdvice 을 이용하여 Runtime exception에서의 에러 정보를 핸들링 합니다.

security 예외처리는 security filter에서 exceptionHandling을 이용하여 jwt token 예외처리를 할 수 있게 구현했습니다.

swagger2를 사용하여 api 명세서를 자동화하여 각 API의 설명을 달아 배포 후에는 프론트엔드에서 확인할 수 있었습니다.

사용자 로그를 추적할 수 있는 환경을 만들기 위해 logback을 이용하여 jdbc hibernate에서 처리하는 sql문을 추적하고, log를 커스텀하여 호출하는 api마다 알맞는 로그를 만들 수 있게 구현하고, 날짜별로 file을 구성할 수 있게 만들었습니다.

사용자 회원가입시 uuid를 발급하여 jwt token에 uuid를 담아 사용자의 정보를 조회할 때 uuid로 조회할 수 있게 구현하였습니다. 이는 token이 만료 시에도 파싱이 가능한 토큰에서 유저 정보를 파싱할 수 없도록 보안 강화, DB에서 사용자의 정보를 조회할 때 사용하는 PK를 변하지 않는 값으로 설정.

mail 기능을 구현하면서 비동기적으로 메일 전송할 수 있는 방법을 고안, Async 어노테이션을 사용하여 service layer에서 thread를 간단하게 사용할 수 있었고, templateEngine을 이용하여 html파일로 메일 작성 후 보낼 수 있도록 구현, 동시에 메일 서비스를 사용할 경우 트래픽으로 인한 시간 이슈를 테스트 한 결과 100개의 메일을 처리하는데 8분정도의 시간이 걸렸고, 또한 smtp 라이브러리를 사용하며 gmail의 보안을 해제 하면서 보안 이슈가 생길 수 있어 이를 해결할 수 있는 방법으로 메일 서버를 고민중입니다.