feat: 깃허브 oauth 연동#15
Conversation
스프링 부트 4부터는 JacksonJsonMessageConverter으로 변경
확인 못했던 인덱스 제거 한번에 인덱스를 추가하기 위함
record로 진행할시 final이되어 문제 발생해 일반 클래스로 되돌림
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
| private final Clock clock; | ||
|
|
||
| @Autowired | ||
| public RefreshTokenService( |
There was a problem hiding this comment.
생성자 하나로 합치고 @Autowired 빼는것도 깔끔할듯합니다
SecureRandom과 Clock은 빈으로 등록하고
There was a problem hiding this comment.
테스트용 생성자 제거했습니다.
OAuthService, RefreshTokenService 생성자 하나로 합치고 빈등록해서 해결했습니다.
우선 패키지 만들지 않고 common.config에 배치했고 설정 늘어나면 패키지 분리해서 관리하겠습니다.
| @Component | ||
| public class GithubApiClient { | ||
|
|
||
| private final RestClient restClient; |
There was a problem hiding this comment.
외부 api 호출 시 HTTP Interface를 사용하면 깔끔합니다.
인터페이스만 선언하고 구현체는 프록시가 자동 생성하는 패턴이 있습니다.
There was a problem hiding this comment.
외부 GIthub API 호출 부분 인터페이스 기준으로 변경했습니다.
실제 요청 경로 코드에 명확하게 보이도록 Github_OAUTH_BaseUrl 과 각 api path로 분리해 처리했습니다.
| private final RestClient restClient; | ||
|
|
||
| public GithubApiClient(GithubOAuthProperties githubOAuthProperties) { | ||
| this.restClient = RestClient.builder() |
There was a problem hiding this comment.
• 거기까지는 생각하지 못했습니다. 각 상황에 맞게 아래처럼 timeout을 설정 해보겠습니다.
connect-timeout 3s: 연결 자체가 3초 이상 걸리면 네트워크 문제로 보고 빠르게 실패 처리read-timeout 5s: OAuth/프로필 조회는 응답이 작아 5초 이상 지연되면 재시도하도록 실패 처리- 레포 분석용 GitHub API는 파일 조회가 많아질 수 있어 이후 별도 timeout으로 분리
| 배포 프론트 테스트: | ||
|
|
||
| ```env | ||
| GITHUB_OAUTH_REDIRECT_URI=https://www.udangtang.site/auth/callback |
There was a problem hiding this comment.
주소 빠르게 테스트하기 위해 했던 흔적이어서 지우겠습니다.
| 인프라: | ||
|
|
||
| ```env | ||
| POSTGRES_HOST=localhost |
There was a problem hiding this comment.
빠르게 테스트하려고 했던 흔적이어서 배포환경에 맞게 넣을 수 있도록 README.md, application.yml, .env.example 전부 수정했습니다.
기존에 빠르게 테스트 하기위해 했던 흔적 제거
|
고생하셨습니다 👍 |
변경 사항
PR 요약
GitHub OAuth 기반 로그인 흐름을 구현하고, Core Server 인증 토큰 체계를
추가했습니다.
프론트는 GitHub 로그인 URL 발급 API를 호출하고, callback으로 받은
code/state를 백엔드에 전달하면 Core Server가 GitHub token 교환, 사용자
생성/갱신, 자체 access/refresh token 발급까지 처리합니다.
주요 변경 사항
후속 개선 사항
인증/OAuth 실패 로그가 아직 부족해 운영 중 원인 추적을 위해 보강이
필요합니다. 특히 state 검증, GitHub token exchange, GitHub profile/
email 조회, token 암호화, user upsert 단계별 실패 지점을 구분해 남기는
방향으로 개선할 예정입니다. 단, code/access token/refresh token 등 민
감값은 로그에 남기지 않습니다.
DI 코드를 간소화하기 위해 일부 Service/Controller를 record로 전환했
지만,
@Configuration처럼 record 전환 시 Spring 제약이 생기는 경우가있었습니다. record와 class가 섞이면 코드 스타일이 애매해질 수 있어, 이
후에는 일관성을 위해 Spring Bean을 일반 class 기반으로 유지할지도 검토
가 필요합니다.