[TIL] 61일차 _ Spring 플러스 프로젝트 #7

Seoyeon Lee·2025년 12월 30일

Today I Learned ...

오늘은 코드카타 SQL 77-79번 문제와 알고리즘 65번 문제를 풀고, Spring 플러스 프로젝트를 정말 정말 마무리했다!


🗒️ 코드카타 #49

오늘은 총 3개의 SQL 문제를 풀었다.
이제부터는 프로그래머스에서 제공하는 문제가 아니라 릿코드에서 제공하는 문제들을 풀게 된다.
아직 릿코드 SQL 문제의 초반부를 푸는 것이라 오늘은 where절의 and와 or을 사용하는 문제만 3개를 풀었다.
앞부분의 쉬운 문제들은 빠르게 풀고, 뒷부분 문제들을 풀어봐야겠다.

오늘은 1개의 알고리즘 문제를 풀었는데, 생각보다 간단하게 풀 수 있었다.
문자열을 입력받았을 때, 첫 번째 문자를 기준으로 잡고, 기준 문자가 등장한 횟수와 아닌 문자가 등장한 횟수가 같아질 때마다 문자열을 쪼개는 것이었다.
for문을 활용해 문자열의 문자를 차례로 돌면서 기준 문자가 나오면 creterion++, 아닌 문자가 나오면 other++ 이런 식으로 등장 횟수를 세면서 두 수가 같아질 때를 계산했다.
중간에 1자의 문자열을 입력받았을 때의 경우를 생각하지 못해서 테스트 케이스 1개에서 실패가 나오긴 했지만,
이 부분을 해결해주니 간단하게 테스트에 통과할 수 있었다.

사실 하나의 문제를 더 풀고 있는데, 테스트 케이스의 반절은 통과하지만, 나머지 반은 통과하지 못하고 있다.
오늘은 Spring 프로젝트 과제를 제출하는 날이라 여기까지만 진행하고, 내일 다시 시도해봐야겠다.

오늘 푼 문제와 풀이는 깃허브를 통해 업로드해두었다.
GitHub 보러가기


🖥️ Spring 플러스 프로젝트 #7

오늘로 정말 정말 Spring 플러스 프로젝트가 끝났다!

오늘 과제 제출 전 리팩토링 겸 과제 요구사항들을 보면서 구현 내용을 하나씩 테스트 해봤는데, 수정할 내용들이 정말 정말 많았다.

우선 스프링 시큐리티를 적용하면서 기존에 있던 Todo에 대한 테스트 코드가 동작하지 않게 되었다.
테스트 코드에서도 스프링 시큐리티가 적용되는데, 이때 아무런 유저 정보가 존재하지 않기 때문이다.
그래서 급하게 테스트 코드에서 동작하는 시큐리티 의존성을 추가하고, @WithMockUser를 통해서 가짜 유저 객체를 주입해주었다.
그리고 JWT 필터를 시큐리티에 등록하면서 테스트코드에서도 JWT 검사 필터가 동작하게 되어버려서 테스트코드에서 필터를 제거하는 조건을 추가해주었다.
사실 이전에 팀 프로젝트의 테스트코드를 작성하면서 이 부분에 대해서는 찾아본 적이 있다.
그래서 필터 제거에 대해서는 간단하게 해결할 수 있었다.

그리고 하나가 더 있었는데, 문제의 요구사항에는 스프링 시큐리티를 적용하면서 JWT 필터와 ArgumentResolver의 역할 모두를 시큐리티로 변경하라고 되어있었다.
그런데 나는 JWT 필터의 역할만 변경하면 되는 줄 알고 ArgumentResolver를 건드리지 않았는데,, 오늘 제출 직전에야 그걸 알아차리게 되었다.
그래서 급하게 기존에 @Auth로 로그인 유저 정보를 받아오던 로직을 @AuthenticationPrincipal로 수정하여 진행하였다.

이 과정에서 커스텀 시큐리티를 도전해보게 되었는데, 기존에는 시큐리티에서 제공하는 User 객체를 사용해서 인증 정보를 저장했었다.
그런데, 이 프로젝트에서는 AuthUser 객체로 로그인 정보를 다루고 있었고, 이걸 크게 수정하고 싶지는 않았다.

AuthUser authUser = new AuthUser(userId, email, UserRole.of(userRole));
SecurityContextHolder.getContext().setAuthentication(new UsernamePasswordAuthenticationToken(authUser, null, List.of(new SimpleGrantedAuthority("ROLE_" + authUser.getUserRole()))));

그래서 위와 같이 AuthUser 객체를 통해서 UsernamePasswordAuthenticationToken 객체를 만들어 저장하였다.
그런데 알고보니 저 AuthenticationToken 객체도 커스텀으로 만들어 사용할 수 있더라.
이건 다음에 프로젝트를 하면서 기회가 되면 사용해봐야겠다.

오늘 해설 세션을 들으면서 알게 된 부분들이 많았는데,, 정리를 안해두었더니 다 까먹었다..
다시 들어보면서 정리해봐야겠다.
이번 프로젝트에 대한 회고도 빠르게 작성해봐야겠다.

내가 작성한 코드는 깃허브에 업로드해두었다.
GitHub 보러가기


🙃 오늘의 느낀점

이제 이번 캠프의 마지막 개인 과제가 끝났고, 내일부터는 2달동안 팀 프로젝트를 진행하게 된다..
팀 프로젝트에서도 1인분은 해낼 수 있도록 정리를 잘 해두어야겠다.

profile
백엔드 개발자 지망생

0개의 댓글