SNS 백엔드 프로젝트 마무리 회고
이번 SNS 백엔드 프로젝트에서는 스프링 시큐리티와 JWT를 사용한 인증 절차, 외부 API를 이용한 국가 정보 관리, Soft Delete 전략, 그리고 깃 브랜치 전략을 중심으로 개발을 진행했습니다. 이번 글에서는 각각의 주요 기능에 대한 개발 배경과 경험을 공유하고자 합니다.
1. 인증 절차
스프링 시큐리티를 기반으로 JWT 인증을 추가해 HTTP의 비연결성과 무상태성을 활용했습니다. 기존의 세션 방식을 비활성화하고 JWT를 사용함으로써 사용자 인증 시 ID/PASSWORD를 SecurityContextHolder(Authentication)로 전달했습니다. 아직 인가 기능을 도입하지 않았지만, 향후 확장성을 고려해 스프링 시큐리티를 사용한 구조를 유지했습니다.
특히, UsernamePasswordAuthenticationFilter
대신 OncePerRequestFilter
를 사용했습니다. 이는 구조에 따라 인증 로직을 유연하게 구현할 수 있는 장점이 있다고 판단했기 때문입니다. 폼 로그인을 사용하지 않았고, UsernamePasswordAuthenticationFilter
가 성공/실패 구분 외에는 확장성이 떨어진다는 점을 고려하여 선택한 결정이었습니다.
2. 외부 API 사용
회원의 거주 국가를 판별하기 위해 국가 정보를 관리하는 방식을 고민했습니다. 252개의 나라를 열거 상수로 하드코딩하는 것은 비효율적이라 판단했고, 외부 API를 사용해 국가 정보를 가져오는 방법을 선택했습니다. 서버 실행 시 @PostConstruct
를 사용해 외부 API에서 국가 이름을 가져와 캐싱 데이터를 생성해 사용했습니다. 서버 실행 시간이 서버 점검에 포함되므로 큰 문제가 없었습니다.
다만, 국가명은 빈번히 변경되지 않으므로 DB에 저장하고 필요에 따라 스케줄링을 통해 월~년 단위로 최신화하는 것도 좋은 대안이 될 수 있다고 생각합니다.
3. Soft Delete 전략
회원 탈퇴 시 이메일 정보는 필요하지만 하드 삭제(hard delete)는 지양했습니다. 실제 현업에서도 하드 삭제를 피하고, 대신 회원 정보를 익명화하여 이메일만 유지하는 Soft Delete 방식을 채택했습니다. 이로 인해 향후 복구가 필요할 때 확장성 있게 대응할 수 있게 되었고, 요구 조건이 변경되어 복구 가능 기능이 필요할 때도 유연하게 적용할 수 있습니다.
또한, 댓글과 같은 상호작용의 흐름을 유지하기 위해 탈퇴된 사용자의 댓글은 유지하고, 사용자 정보를 익명화하여 표시했습니다. 스프링 배치를 사용해 개인정보 보관 기간이 지난 경우 하드 삭제하는 기능을 추가하면 더욱 개선될 것으로 보입니다.
4. Git 브랜치 전략
기능별 브랜치를 통한 단위 테스트가 편리했습니다. 이를 통해 각 기능을 별도로 테스트하고, 머지하면서 테스트에 대한 신뢰성을 높일 수 있었습니다. 다만, 공통 코드가 업데이트될 경우 브랜치 간 패치 버전에 따른 코드 신뢰성 차이가 발생하는 단점이 있었습니다. 이러한 점에서 팀 내 공통 코드 업데이트에 대한 빠른 동기화가 중요하다는 것을 느꼈습니다.
마무리하며
이번 프로젝트는 스프링 시큐리티와 JWT, Soft Delete 전략 등을 적용하면서 확장성과 유지보수성을 고려한 구조를 만들어 나가는 데 집중했습니다. 개발 과정에서 확장성 있는 구조 설계와 데이터의 유연한 처리 방법을 고민하면서 많은 것을 배울 수 있었으며, 팀과의 협업에서 Git 전략을 활용해 효율적인 단위 테스트와 기능별 개발을 경험할 수 있었습니다. 앞으로도 이러한 경험을 바탕으로 더 나은 시스템 설계와 개발을 목표로 노력하고자 합니다.
'프로젝트' 카테고리의 다른 글
스파르타코딩 Spring 심화 프로젝트 회고록 (0) | 2024.11.10 |
---|---|
스파르타코딩 Spring 팀소개 페이지 회고록 (0) | 2024.09.02 |