[Spring boot] 치지직 로그인 구현

하비·2026년 1월 10일

Spring boot

목록 보기
6/7

치지직 OAuth 로그인을 위한 API 연동을 해보도록 하겠습니다.

developers: https://developers.chzzk.naver.com/
develop document: https://chzzk.gitbook.io/chzzk/chzzk-api/authorization
어플리케이션 등록: https://developers.chzzk.naver.com/application

먼저, developers를 들어가게 되면, 다음과 같은 화면이 뜹니다.

이 사이트에서 어플리케이션 등록과 openApi 문서를 볼 수 있습니다.
→ document: 치지직 open api 문서
→ application: 애플리케이션 등록

1. 애플리케이션 등록

API를 이용하기 위해서는 애플리케이션을 등록해야 합니다.

리디렉션 URL

여기서 로그인 리디렉션 URL은 인증 서버에서 인증을 마친 후, 데이터 소스(인증 코드, state)를 어디 주소로 보내줄지를 나타내는 것입니다. 저는 백엔드 서버의 주소/callback 주소로 등록해줬습니다. 나중에 인증 코드 요청을 할 때, 이 리디렉션 url와 보낼 때 리디렉션 url을 대조합니다.

API Scopes


저는 유저 조회만 했습니다. 이 scope는 document에서 어떤 API를 쓸 지 선택하는 것이니, 자신에 맞게 선택하면 되겠습니다. 저는 채널명을 조회해야 해서 이렇게 했습니다.

2. 인증 코드 요청 및 발급

이제 document를 보면서 인증 코드 요청 및 발급을 해보겠습니다.

여기서 주의할 점은,
인증코드를 발급받을 때는 사이트가 다르다는 것입니다.

GET https://chzzk.naver.com/account-interlock

여기에서 발급받을 수 있습니다.

그 외의 다른 API들은 Open Api 도메인에서 쓸 수 있습니다.

https://openapi.chzzk.naver.com

이번에는 인증 코드 발급 받는 것과 유저 정보를 조회하는 부분만 간단하게 할 것이기 때문에, 웹사이트를 통해 접속하도록 하겠습니다.

https://chzzk.naver.com/account-interlock?clientId={자신의 클라이언트 id}&redirectUri={자신의 리디렉션 URI}&state={아무거나}

이 주소로 접속을 하게 될 경우, 네이버 로그인을 하게 되며, 인증에 성공했을 경우, redirectUri?code={인증코드}&state={썼던거}로 리다이렉트하게 됩니다.

코드

이때, 코드를 다음과 같이 작성하게 되면, 자동으로 백엔드에 code와 state를 입력 받아 처리를 할 수 있게 됩니다.

@GetMapping("{authType}/callback")
public ResponseEntity<ApiResponse<LoginResponse>> login(@PathVariable String authType,
                                                        @RequestParam String code,
                                                        @RequestParam String state) {
    LoginResponse response = authService.login(authType, new LoginRequest(code, state));
    return ApiResponseEntity.onSuccess(response);
}

3. 치지직 Access Token 발급

이제 인증 코드를 받았으니 Access Token을 발급 받아보도록 하겠습니다. Access Token을 발급 받아야 다른 API 호출이 가능합니다.
이제는 Open Api 도메인을 사용해야 합니다.

https://openapi.chzzk.naver.com

  • grantType : 인증 방식이 여러 방식이 있고, 그중 대표적인 방법이 Authorization Code Grant입니다. 이것은 다음 포스팅 때 다뤄보도록 하겠습니다.

코드

  • AccessToken 발급
 private ChzzkLoginResponse getAccessToken(LoginRequest loginRequest) {
    ChzzkApiResponse chzzkLoginResponse = restClient.post()
            .uri(chzzkOAuthProperties.getAccessTokenUrl())
            .contentType(MediaType.APPLICATION_JSON)
            .body(ChzzkLoginRequest.of(loginRequest,
                    chzzkOAuthProperties.clientId(),
                    chzzkOAuthProperties.secret()))
            .retrieve()
            .body(ChzzkApiResponse.class);

    return chzzkLoginResponse.content();
}

(tip) 여기서 body를 String.class로 바꾸면 응답을 볼 수 있습니다.

  • 응답
{"code":200,"message":null,"content":{"refreshToken":"${refreshToken}","accessToken":"${accessToken}","tokenType":"Bearer","expiresIn":86400,"scope":"유저 조회"}}
  • ChzzkApiResponse
public record ChzzkApiResponse(int code, String message, ChzzkLoginResponse content) {
}
  • ChzzkLoginResponse
public record ChzzkLoginResponse(String accessToken, String refreshToken, String tokenType, String expiresIn) {
}

4. 유저 정보 조회


이번엔 유저 정보 조회를 하겠습니다. 유저 정보 조회는 Client 인증과 Access Token 인증 둘 다 해줘야 합니다.

코드

public ChzzkUserResponse getUserInfo(LoginRequest loginRequest) {
    ChzzkLoginResponse chzzkLoginResponse = getAccessToken(loginRequest);
    return restClient.get()
            .uri(chzzkOAuthProperties.getUserInfoUrl())
            .header("Authorization", "Bearer " + chzzkLoginResponse.accessToken())
            .header("Client-Id", chzzkOAuthProperties.clientId())
            .header("Client-Secret", chzzkOAuthProperties.secret())
            .header("Content-Type", "application/json")
            .retrieve()
            .body(ChzzkUserResponse.class);
}

return 부분에 있는 코드를 보시면 됩니다.

  • 응답
{"code":200,"message":null,"content":{"channelId":"${channelId}","channelName":"똥손 암살자 1563","nickname":"똥손 암살자 1563"}}
  • ChzzkUserResponse
public record ChzzkUserResponse(String channelId, String channelName) {
    public static ChzzkUserResponse of(String clientId, String channelName) {
        return new ChzzkUserResponse(clientId, channelName);
    }
}

마무리

이렇게 치지직 OAuth 2.0 인증 코드를 이용한 토큰 발급과 유저 정보 조회를 해보았습니다. 다음 포스팅에서는 OAuth는 무엇인가에 대해 알아보려고 합니다. 많관부!

profile
멋진 개발자가 될테야

0개의 댓글