늦은 프로그래밍 이야기

221230 TIL (Git, 팀프로젝트) 본문

내일배움캠프/TIL, WIL

221230 TIL (Git, 팀프로젝트)

한정규 2022. 12. 31. 01:48

팀 프로젝트

Git / Github

지난 번 프로젝트에서는 깃과 깃허브를 사용했었는데, 브랜치도 나누지 않고, 하나의 repository에 push와 pull만 이용해서 진행했었는데 오늘은 조원의 repository를 fork 해서 브랜치를 나누어 작업을 하고 push를 하여 pull request와 merge를 사용해서 합치는 방식으로 진행을 하였다.

 

그동안 소스트리나 인텔리제이를 이용하여 commit과 push를 사용했지만, 오늘은 터미널을 이용하여 명령어를 통해 사용해 보았다.

 

팀원 중 한분이 지난번 프로젝트에서 깃과 깃허브를 사용해 보아서 협업을 위한 깃허브 사용법에 대해 많이 배웠다.

git remote -v : 연결되어 있는 remote repository를 확인할 수 있는 명령어
git remote add 별칭 repo주소 : remote repository와 연결할 수 있는 명령어
git branch 브랜치명 : branch를 생성할 수 있는 명령어
git switch 브랜치명 : 해당 branch에 체크아웃 할 수 있는 명령어
git push repo별칭 브랜치명 : 해당 repository의 branch에 push할 수 있는 명령어

스프링 시큐리티

팀 프로젝트에서 그동안 개인과제로 했던 블로그 만들기 프로젝트를 다시 협업으로 구현하고, 스프링 시큐리티 기능을 추가하여 리팩토링 하는 작업을 진행하였다. 각자 역할을 나눴는데 User 회원가입, 로그인 관련 기능들과 스프링 시큐리티 기능을 맡게 되었다.

Spring Security 기본 로그인 페이지에서 로그인이 되지 않는 문제

일단 기본적인 틀은 작성했는데, Postman에서는 회원가입과 로그인이 되고 정상적으로 JWT Token을 반환하지만, 사용해 보라고 하였던, 기본 로그인 페이지에서 로그인이 정상적으로 되지 않았다. 강의에서 배웠던 예제코드와 강의에서 작성했던 프로젝트 코드를 보며 무엇이 잘못 되었는지 한참 찾아 보았지만, 알 수 없었다.

 

그러던 중 동료 수강생이 UserDetailsImpl을 한번 보라고 해서 봤더니, Override한 메소드들이 return false라고 적혀 있는 것을 보았다.

UserDetailsImpl CLASS
@Override
public boolean isAccountNonExpired() {
    return true;
}

@Override
public boolean isAccountNonLocked() {
    return true;
}

@Override
public boolean isCredentialsNonExpired() {
    return true;
}

@Override
public boolean isEnabled() {
    return true;
}

잠겨있다고 나오던 메시지가 isAccountNonLocked를 true로 바꾸었더니 메시지가 바뀌는 걸 확인할 수 있었다. 하나씩 true로 바꿔보다가 모두 바꾸고 나니 로그인에 성공(?)하는 것을 볼 수 있었다. (성공 메시지가 나오지 않아서 알 수 없음)

 

로그인 문제를 해결하고 나니 다음 인증 문제들을 해결할 수 있었다. 어떻게 해야 하는건지 감을 잡지 못하고 있었는데, JWT 토큰을 받아서 토큰 값을 입력하고 인증을 받는 것은 똑같다는 것을 알고 스프링 시큐리티를 사용해서 JWT 토큰을 인증하는 방식으로만 리팩토링 하면 된다는 것을 깨달았다.

AS-IS
@PostMapping("/posts")
public PostingResponseDto createPosting(@RequestBody PostingRequestDto requestDto, HttpServletRequest request) {
String token = jwtUtil.resolveToken(request);
    if (token == null) {
        throw new IllegalArgumentException("토큰이 유효하지 않습니다.");
    }
    AuthenticatedUserInfoDto authenticatedUserInfoDto = jwtUtil.validateAndGetUserInfo(token);
}

TO-BE
@PostMapping("/posts")
public PostingResponseDto createPosting(@RequestBody PostingRequestDto requestDto, @AuthenticationPrincipal UserDetails userDetails) {
    return blogService.createPosting(requestDto, userDetails.getUsername());
}

JWT Token 인증관련 코드들을 JwtAuthFilter에 작성해 놓고 @AuthenticationPrincipal을 사용하여 JwtAuthFilter에서 인증을 거친후 userDetails의 Username을 넘겨주면 된다.

 

개인과제에 적용하며 연습해 보았고, 추후 모두 완성되면, 모든 메소드에 적용하며, 좀 더 자세하게 알 수 있도록 해야겠다.


'내일배움캠프 > TIL, WIL' 카테고리의 다른 글

230102 TIL  (0) 2023.01.02
9주차 WIL  (0) 2023.01.01
221229 TIL  (0) 2022.12.30
221228 TIL  (0) 2022.12.28
221227 TIL  (0) 2022.12.27
Comments