Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: 개발서버 테스트 환경 개선 #683

Open
wants to merge 5 commits into
base: chongdae
Choose a base branch
from

Conversation

fromitive
Copy link
Contributor

@fromitive fromitive commented Dec 30, 2024

📌 관련 이슈

close #680

✨ 작업 내용

  • 테스트 환경에서 테스트하기 위해선 실제 kakao API를 통해 accessToken을 얻어야 하는데, 백엔드들은 accessToken을 얻기가 쉽지 않아서 테스트하기 불편했어요.
  • 이를 개선하고자 accessToken이 어떤 값이와도 로그인하도록 테스트 환경을 구축했어요.
  • 프로덕션 환경이 배포될때 실수로 테스트 환경이 올라가는 것을 방지하기 위해 프로파일 별로 분리하였고, 추가로 로깅을 하는 조치를 했습니다.

2개의 커밋에 아래의 방식을 적용했는데요, 어느 것을 더 선호하는지 의견 부탁드립니다 🙇

테스트 환경 로그인 방식

현재는 아래와 같은 방식으로 인증이 진행되요.

이용자 -> 카카오톡 로그인 페이지 -> 인증요청 -> 카카오 로그인 API를 통해 카카오 ID 획득 -> 회원 테이블에 이미 가입되어있는지 확인

두가지 방식을 고민했어요.

  1. 아무 accessToken이 오면 해당 accessToken을 카카오 ID로 설정하여 로그인 진행

관련 커밋 : refactor: 테스트 운영 환경 인증 클라이언트 분리

  1. 테스트 환경을 카카오 로그인 API를 사용하고, 회원이 존재하지 않으면 accessToken을 카카오 ID로 설정하여 로그인 진행

관련 커밋 : refactor: 기존 운영환경과 동일한 인증 방식을 지원하고 인증이 실패해도 성공하도록 인증 방식 변경

최종적으로 2번을 선택했는데 이유는 1. 안드 친구들의 테스트의 용이성, 2. fcm 토큰 중복으로 인한 로그인 API 실패 때문이에요.

  1. 안드 친구들의 테스트 용이성

백엔드 입장에선 swagger를 활용하여 accessToken값만 변경하여 로그인 및 회원가입이 용이하나, 안드로이드 폰으로 테스트 하면 매번 다른 accessToken을 받게 되서 기존 테스트로 사용한 계정을 사용할 수 없는 것이 큰 단점으로 다가왔어요.

  1. fcm 토큰 중복으로 인한 로그인 API 실패

fcm 토큰은 2개의 계정이 가질 수 없더라구요 즉, Unique 제약 조건을 가집니다.

TLDR; 처음에 이를 해결하기 위해 AuthServicecheckFcmToken을 추상화 하는 방식을 생각했어요. 제 입장에선 fcm 상관 없이 api 기능만 테스트하면 된다고 생각했어요.

하지만, 개발서버에서 fcm 서비스가 제대로 동작하는지 확인하기 위해선 실제 fcm 서비스를 사용해야 하니까 실제 fcm을 등록해야 하는 경우가 생기게 되므로 이를 호환하기 위해선 기존 카카오톡 로그인을 유지하면서 api 테스트를 용이하게 해야할 필요가 있어서 추상화 하지 않았습니다.

📚 기타

@fromitive fromitive self-assigned this Dec 30, 2024
Copy link
Member

@masonkimseoul masonkimseoul left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

고생하셨습니다 포케!
저도 2번 방식이 좋은 것 같아요.
간단한 코멘트 남겼습니다. 확인 부탁드려요~

@Bean
@Profile({"default", "dev"})
public AuthClient testAuthClient() {
log.warn("테스트 인증 환경이 설정되었습니다. 프로덕션 환경이라면 서버 중지가 필요합니다.");
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이렇게 로깅해주는 거 좋네요~! 👍

@@ -20,10 +24,18 @@ public class AuthClientConfig {
private Duration readTimeoutLength;

@Bean
public AuthClient authClient() {
@Profile("prod")
public AuthClient realAuthClient() {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
public AuthClient realAuthClient() {
public AuthClient prodAuthClient() {

이런 네이밍은 어떨까요?

Copy link
Contributor Author

@fromitive fromitive Dec 31, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Real, External, Prod, Oauth 고민하다가 prod 와 real이 남았서 고민했었는데 메이슨 덕분에 네이밍 고민이 줄어들었네요 ㅎㅎ

prod 프로파일과 동일한 명칭이면 사용할 때 햇갈리지 않을 것 같아요

그럼 testAuthClient도 일관성에 맞게 devAuthClient로 변경할까 고민이네요..

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

일관성 있게 devAuthClient로 변경하는 것 찬성합니다! testAuthClient라는 명칭을 사용할 경우 dev 환경이 아닌 저희 로컬 테스트 환경으로 오해될 소지가 있는 것 같아요 :)

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

오 답변을 못 드렸었네요! 죄송합니다. 저도 devAuthClient 좋은 것 같아요.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

오 그럼 devAuthClient, prodAuthClient 채택하겠습니다 의견 주셔서 고마워요 😄

Copy link
Contributor

@helenason helenason left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

2번 방법으로 진행하는 것에 찬성합니다! 다만 궁금한 점이 두가지 있어요.

  1. 포케가 description에서 언급한 모든 테스트 환경이라는 용어는 dev 테스트 환경을 의미하는 것이 맞죠?

  2. 2번 방법은, 실제 카카오 로그인을 시도한 후 카카오 로그인 회원이 아닐 경우 1번 방법을 시도한다고 이해해도 될까요?

@fromitive
Copy link
Contributor Author

@helenason

안녕하세요 에버 잘지내시죠? ㅎㅎ

1번 답변은 이해하신대로 dev 테스트 환경이 맞습니다. 추가로 local에서 실행해도 dev 테스트환경과 동일하게 적용됩니다.
2번 답변도 마찬가지로 정확합니다! 마땅한 카카오 로그인 아이디가 없을 경우 1번 방식을 시도합니다 😄

@helenason
Copy link
Contributor

@fromitive

1번 답변은 이해하신대로 dev 테스트 환경이 맞습니다. 추가로 local에서 실행해도 dev 테스트환경과 동일하게 적용됩니다.

그럼 로컬 테스트 환경에서 매번 카카오 인증 로직에 접근하는 것인가요? 만약 그렇다면 매 테스트마다 외부 API에 의존하게 되는 것인데, 제가 잘못 이해한 것인지 궁금해요!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

♻️ 개발서버 테스트 환경 개선
3 participants