backendnovice / project-book-publisher

Book Pulisher Project
HomePage
0 stars 0 forks source link

프로젝트 일지 #3

Open backendnovice opened 1 year ago

backendnovice commented 1 year ago

설명 목적

프로젝트를 진행하며 어려웠던 부분이나, 새롭게 알게 된 부분, 정리하고 싶은 부분을 기록하기 위한 이슈.

backendnovice commented 1 year ago

DaoAuthenticationProviderUserDetailsServicePasswordEncoder를 사용하여 username과 password를 인증하는 구현체이다. 다음과 같은 순서로 진행된다.

  1. username과 password를 담고 있는 UsernamePassowordAuthenticationTokenProviderManager로 전달한다.
  2. UserDetailsService를 통해서 해당 UserDetails를 조회한다.
  3. PasswordEncoder를 통해서 암호의 유효성을 검사한다.
  4. 인증이 성공할 경우, UsernamePasswordAuthenticationTokenSecurityContextHolder에 적용된다.

즉, DaoAuthenticationProvider를 Bean으로 적용하고, UserDetailsUserDetailsService를 커스터마이징하는 것으로 검증 로직을 대체할 수 있다는 것이다.


서로 연관된 dependency를 추가할 때는 항상 버전과 호환 여부를 검토해야만 할 것이다. 직접 겪은 사례를 통해서 확실히 깨닫게 되었다.

  1. 프로필 페이지에 세션의 회원 정보를 출력하려고 한다.
  2. sec: 태그를 사용하기 위해서 Thymeleaf-Extras-Spring-Security5 dependency를 추가한다.
  3. 회원 정보가 출력 되지 않으며, 오류 또한 발생하지 않는다.
  4. 컨트롤러를 통해 Principal 객체에 문제가 없는 것을 확인한다.
  5. 많은 예제들을 확인한 결과 코드에 이상이 없는 것을 확인한다.
  6. dependency를 Thymeleaf-Extras-Spring-Security6로 변경한다.
  7. 정상적으로 출력 된다.

Spring Security는 Spring Boot가 3.x로 업데이트 되는 것에 맞춰서 6.x 버전을 출시하였다. 따라서 Thymeleaf-Extras-Spring-Security 또한 5에서 6으로 변경해야만 정상 작동하는 것이다.


참고 출처

Spring Docs :: DaoAuthenticationProvider Github :: thymeleaf-extras-springsecurity

backendnovice commented 1 year ago

Multipart는 HTTP 프로토콜의 body에 데이터를 분할하여 전송하는 것으로, 보통 파일을 전송할 때 사용한다. 관련하여 Content-type의 설정 이슈가 발생했기에 개념을 정리한다.

{
   "name" : "username",
   "email" : "username@email.com",
   "password" : {
      "value" : "password"
   }
}
POST /submit HTTP/1.1
Host: example.com
Content-Type: application/x-www-form-urlencoded
username=John+Doe&password=Password
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryNEesLHNz4NvHFzAA

------WebKitFormBoundaryNEesLHNz4NvHFzAA
Content-Disposition: form-data; name="files[0]"; filename="test.txt"
Content-Type: text/plain
aaaa

개인 프로젝트를 진행하며, branch를 단순하게 Github flow를 단순화시킨 형태(main, develop)로 진행하던 중, commit 기록이 일자의 형태로 merge되는 허탈한 일을 겪었다.

이러한 병합 형태는 fast-foward 줄여서, ff merge 라고 한다. 알고 보니 develop이 main의 commit들을 완전 포함하고 있었기에 발생한 것이었다. --no-ff 옵션을 주면 강제로 commit을 생성하고 병합할 수 있다.


참고 출처

Velog :: HTTP multipart/form-data 란? Velog :: x-www-form-urlencoded와 application/json의 차이 MicroFocus :: Send Data by Using a POST Method Backlog :: 브랜치 통합하기