728x90
์ค๋ ๊ณต๋ถํ ๋ด์ฉ
- UX ์ํฌ์?
- ํ์ด์ง ๊ตฌํ
- ์์ ๋ก๊ทธ์ธ ๊ตฌํ
- HttpInterface ๊ณต๋ถ
- ๋ฐฑ์ค
๐ญ ๋๋ ์ & ๋ฐฐ์ด ์
์ด์ ์ค๋๋ ๊ฐ์ด ์ด๋์ ๋ ์นด์นด์ค ๋ก๊ทธ์ธ ๊ธฐ๋ฅ์ ๋ง๋ค์๋๋ฐ, ์ค๋ ์ค๋๊ฐ ๋๋ถ๋ถ์ ์์ ์ ๋๋ด์ฃผ์๋ค.
๋๋ ์์ ๋ก๊ทธ์ธ ํ๊ณ ์ถ์ด์ ๋ฆฌํฉํ ๋ง ํ๋ ๋ถ๋ถ ํด๋ ๊ด์ฐฎ๋ ๋ฌผ์๊ณ , ์ค๋๋ OK ํด์ค์ ์ฌ๋ฌ ์์ ๋ก๊ทธ์ธ์๋ ๋์ํ ์ ์๋๋ก ์ ์ฐ์ฑ ์๊ฒ ์ฝ๋๋ฅผ ๋ฆฌํฉํ ๋งํ์๋ค.
๊ทธ ๊ณผ์ ์์ RestTemplate ๋์ ์คํ๋ง6์์ ์ ๊ณตํด์ฃผ๋ HttpInterface๋ฅผ ์ฌ์ฉํ๋๋ฐ ์ฝ๋๊ฐ ๋๋ฌด ๊น๋ํด์ก๋ค.
๋ด์ผ ์๋ง ์์ ๋ก๊ทธ์ธ ์ ๋ฆฌํด์ ๋ธ๋ก๊น ํ๋ฉด์ ์ด๊ฒ๋ ๊ฐ์ด ์ถ๊ฐํด์ผ๊ฒ ๋ค.
๋๋ต ๋ค์๊ณผ ๊ฐ์ ์ฐจ์ด๊ฐ ์๋ค.
@Component
@RequiredArgsConstructor
public class KakaoAccessTokenClient {
private static final String TOKEN_API_URI = "https://kauth.kakao.com/oauth/token";
private final RestTemplate restTemplate = new RestTemplate(); // TODO ๋ณ๊ฒฝ
private final KakaoConfig kakaoConfig;
public KakaoToken fetch(String code) {
MultiValueMap<String, String> requestBody = createPostTokenRequestBody(code);
HttpEntity<MultiValueMap<String, String>> postRequest = new HttpEntity<>(requestBody, createUrlEncodedHeader());
KakaoToken kakaoTokenResponse =
restTemplate.postForObject(TOKEN_API_URI, postRequest, KakaoToken.class);
if (kakaoTokenResponse == null) {
throw new AuthException(NOT_FOUND_ACCESS_TOKEN);
}
return kakaoTokenResponse;
}
private MultiValueMap<String, String> createPostTokenRequestBody(String code) {
MultiValueMap<String, String> body = new LinkedMultiValueMap<>();
body.add("grant_type", "authorization_code");
body.add("client_id", kakaoConfig.clientId());
body.add("redirect_uri", kakaoConfig.redirectUri());
body.add("code", code);
body.add("client_secret", kakaoConfig.clientSecret());
return body;
}
private HttpHeaders createUrlEncodedHeader() {
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.set(CONTENT_TYPE, APPLICATION_FORM_URLENCODED_VALUE);
return httpHeaders;
}
}
๊ธฐ์กด ์์ ์ฝ๋๊ฐ HttpInterface๋ฅผ ์ฐ๋ฉด ์๋์ ๊ฐ์ด ๊น๋ํด์ง๋ค.
public interface KakaoApiClient {
@PostExchange(url = "https://kauth.kakao.com/oauth/token", contentType = APPLICATION_FORM_URLENCODED_VALUE)
KakaoToken fetchAccessToken(@RequestParam MultiValueMap<String, String> body);
}
@Component
@RequiredArgsConstructor
public class KakaoMemberClient implements OauthMemberClient {
private final KakaoApiClient kakaoApiClient;
private final KakaoConfig kakaoConfig;
@Override
public OauthMember fetch(String code) {
KakaoToken accessToken = kakaoApiClient.fetchAccessToken(tokenRequestBody(code));
// ... ์๋ต
}
private MultiValueMap<String, String> tokenRequestBody(String code) {
MultiValueMap<String, String> body = new LinkedMultiValueMap<>();
body.add("grant_type", "authorization_code");
body.add("client_id", kakaoConfig.clientId());
body.add("redirect_uri", kakaoConfig.redirectUri());
body.add("code", code);
body.add("client_secret", kakaoConfig.clientSecret());
return body;
}
}
๐ฅ ๋ด์ผ ๊ณต๋ถํ ๋ด์ฉ
- ๋ฐฑ์ค
- ์์ ๋ก๊ทธ์ธ ์ ๋ฆฌ
- ํ๋ก์ ํธ ๊ฐ๋ฐ
- DB ๊ณต๋ถ
- ์ฌ์ด์ฝ๋
์ค๋ ๊ณต๋ถํ ๋ด์ฉ ํฌ์คํ
728x90
'๐ณ TIL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[TIL] 2023-07-27 (4) | 2023.07.27 |
---|---|
[TIL] 2023-07-26 (0) | 2023.07.27 |
[TIL] 2023-07-24 (0) | 2023.07.25 |
[TIL] 2023-07-23 (3) | 2023.07.24 |
[TIL] 2023-07-22 (0) | 2023.07.23 |