1. Pre-Project

  • AWS 배포 환경 구성
    • EC2
      • 인스턴스 생성
      • 키 페어 통해 SSH로 원격 연결
      • IAM 역할(접근 가능 서비스), 보안 그룹 설정(인바운드 규칙-연결 가능 포트 설정)
      • 세션 매니저 연결을 하려는데 처음에 안 돼서, EC2 인스턴스 터미널에서 AWS CLI 설치하고 Deploy agent 설치하고, SSM을 설치하려고 했는데, ubuntu 18.04 버전엔 SSM이 이미 snap 폴더 안에 설치되어 있다.
        https://docs.aws.amazon.com/ko_kr/systems-manager/latest/userguide/agent-install-ubuntu-64-snap.html
    • S3 생성
      • 세 개의 인스턴스 중 가장 만들기 쉬웠다.
      • 정적 웹 호스팅 활성화
    • RDS 생성
      • 보안 그룹에서 DB 연결 포트 번호 추가해줘야 함!
    • 인스턴스 만들기 전에 리전 확인이 중요하다★
      리전 확인 안 했다가, EC2랑 RDS 도쿄로 설정돼서, 다시 스냅샷 과정으로 서울로 바꾸느라 시간 소요.
    • EC2 타임존 확인
      https://progdev.tistory.com/34

2. JMT

  • 어제는 DB를 못 읽더니, 이젠 갑자기 읽음 ㅋㅋㅋㅋㅋ 뭘까,,
    그리고 새로운 에러를 만났다.
  • Relying upon circular references is discouraged and they are prohibited by default. Update your application to remove the dependency cycle between beans. As a last resort, it may be possible to break the cycle automatically by setting spring.main.allow-circular-references to true. 에러.
    빈 사이에서 순환참조가 일어난다는 의미다.
    검색해보니 PasswordEncoder때문에 발생하는 순환참조로 보인다.
    https://stackoverflow.com/questions/71867218/relying-upon-circular-reference-is-discouraged-and-they-are-prohibited-by-defaul
    https://stackoverflow.com/questions/70073748/i-cant-update-my-webapp-to-spring-boot-2-6-0-2-5-7-works-but-2-6-0-doesnt/71527547#71527547
    PasswordEncoder를 SecurityConfiguration 클래스에서 빼서 따로 빈으로 등록하여 해결!
  • 서버는 잘 돌아가고, 구글 로그인 화면을 확인하고 싶은데 CSR 방식이라서 그런건지, 내가 뭔가 설정을 잘못한 건지 보기가 쉽지 않다..
    API 설정도 바꾸고, 리디렉션 URI를 yml 파일에 추가하는 등의 조치를 취했으나, 계속 다음 화면만 만남. 그래도 연결은 된 것 같음.
  • 똑똑한 도토리님들의 도움으로,, google API 요청/응답 URI 재수정하고 permitAll()에서 .anyRequest().authenticated()로 변경했더니, unauthorized exception 발생.
    이상하게 security filter chain에서
    .authenticationEntryPoint(new CustomAuthenticationEntryPoint())
    .accessDeniedHandler(new CustomAccessDeniedHandler())

    를 주석 처리하면, 제대로 작동했다.
  • 한참을 검색하다가 결국 다른 동기님께 가서 SOS.
    나처럼 무작정 구글 검색이 아니라 컴포넌트 분석을 통해 문제를 해결하는 방식에서 많이 배웠다. 덕분에 디버그 통해서 돌아가고 있는 시큐리티 필터 체인 순서도 쭉 볼 수 있었다. 흥미로웠다.
  • 원인은 custom으로 만든 entrypoint의 commence 메서드에서 oauth 로그인 페이지로 redirection을 하지 않은 것!
    이렇게 보니 굳이 AuthenticationEntryPoint 커스텀할 필요 없을 것 같고, 커스텀 할거면 제대로 메서드 오버라이드 해야한다고 느꼈다.
    이 부분이 학습 컨텐츠에 없었어서, 리다이렉션이 필요한지 몰랐음.
  • ExceptionTranslationFilter에서 handleAccessDeniedException(), sendStartAuthentication() 메서드를 통해서 인증되지 않은 경우의 처리 경로를 확인할 수 있었고, AuthenticationEntryPoint 컴포넌트의 역할은 이름처럼 시작 지점으로 되돌아간다!(redirect)라는 것을 배웠다.
  • 필터를 확인하는 디버그는 FilterChainProxy 클래스에서 clearContext에 브레이크 포인트 찍어서 확인했다.

<느낀 점>
오늘 총 6시간동안 백엔드 팀원들이랑 같이 AWS로 씨름했다.
대체 세션 매니저 연결 기준이 뭐임;; SSM 이미 다 설치 되어있는데...
왜 됐다가 안 됐다가 하는건데.. 우리랑 밀당 왜 하는데...

결국 다른 계정으로 새로 만들었더니, 1시간만에 완료!
5시간 내내 씨름했더니 도가 터서, 같은 작업을 1시간만에 해낸 걸 보고 뿌듯했다.

오늘 완전 셋이서 전우애 생겼고, 머리 셋이 모이면 앞으로도 우당탕탕 어떻게든 프로젝트를 해나갈 수 있을 거라는 믿음이 생겼다.
좋은 팀원들을 만난 것 같다:)

저녁에는 최고의 동기님들 덕분에 OAuth2에 조금이나마 가까워질 수 있는 시간이었다. 정말정말 아무리 표현해도 모자랄 정도로 감사하다 ㅠㅠ
앞으로도 잘 부탁드립니다. 🌹

0개의 댓글