๐Ÿ“Œ ์นด์นด์˜ค ๋กœ๊ทธ์ธ API ์—ฐ๋™ - 4๋‹จ๊ณ„: ๋กœ๊ทธ์•„์›ƒ & ์—ฐ๊ฒฐ ๋Š๊ธฐ

My Pale Blue Dotยท2025๋…„ 5์›” 13์ผ
0

SPRING BOOT

๋ชฉ๋ก ๋ณด๊ธฐ
21/40
post-thumbnail

๐Ÿ“… ๋‚ ์งœ

2025-05-13


๐Ÿ” ์ „์ฒด ๋กœ๊ทธ์ธ ํ๋ฆ„ ์š”์•ฝ

[์‚ฌ์šฉ์ž โ†’ ์นด์นด์˜ค ๋กœ๊ทธ์ธ ์š”์ฒญ]
      โ†“
[์ธ๊ฐ€ ์ฝ”๋“œ ๋ฐœ๊ธ‰] (1๋‹จ๊ณ„)
      โ†“
[์•ก์„ธ์Šค ํ† ํฐ ๋ฐœ๊ธ‰] (2๋‹จ๊ณ„)
      โ†“
[์‚ฌ์šฉ์ž ์ •๋ณด ์š”์ฒญ] (3๋‹จ๊ณ„)
      โ†“
[๋กœ๊ทธ์•„์›ƒ ๋˜๋Š” ์—ฐ๊ฒฐ ํ•ด์ œ] โ† ์ง€๊ธˆ ๋‹จ๊ณ„! (4๋‹จ๊ณ„)

๐Ÿ“ ํ•™์Šต ๋‚ด์šฉ


โœ… 1. ๊ธฐ๋ณธ ๋กœ๊ทธ์•„์›ƒ (ํ† ํฐ ๋ฌดํšจํ™”)

ํ•ญ๋ชฉ์„ค๋ช…
URLhttps://kapi.kakao.com/v1/user/logout
METHODPOST
์ธ์ฆ ๋ฐฉ์‹Authorization: Bearer {ACCESS_TOKEN}
@GetMapping("/logout")
@ResponseBody
public void logout() {
    log.info("GET /kakao/logout");

    String url = "https://kapi.kakao.com/v1/user/logout";
    HttpHeaders header = new HttpHeaders();
    header.add("Authorization", "Bearer " + this.kakaoTokenResponse.getAccess_token());

    HttpEntity entity = new HttpEntity<>(header);

    RestTemplate rt = new RestTemplate();
    ResponseEntity<String> response = rt.exchange(url, HttpMethod.POST, entity, String.class);
    System.out.println(response); // {"id": 4258514384}
}

๐Ÿ“Œ ์ฃผ์˜:

  • ์„œ๋ฒ„์˜ ์•ก์„ธ์Šค ํ† ํฐ์€ ๋งŒ๋ฃŒ๋˜์ง€๋งŒ, ๋ธŒ๋ผ์šฐ์ €์˜ ์นด์นด์˜ค ์„ธ์…˜์€ ์œ ์ง€๋˜์–ด ์ž๋™ ๋กœ๊ทธ์ธ ๋  ์ˆ˜ ์žˆ์Œ
  • ํด๋ผ์ด์–ธํŠธ ์„ธ์…˜์ด ํ•„์š”ํ•˜๋‹ค๋ฉด request.getSession().invalidate(); ๋„ ํ•จ๊ป˜ ์ˆ˜ํ–‰ ํ•„์š”

โœ… 2. ์—ฐ๊ฒฐ ๋Š๊ธฐ (ํšŒ์› ํƒˆํ‡ด ์ฒ˜๋ฆฌ)

ํ•ญ๋ชฉ์„ค๋ช…
URLhttps://kapi.kakao.com/v1/user/unlink
METHODPOST
์ธ์ฆ ๋ฐฉ์‹Authorization: Bearer {ACCESS_TOKEN}
@GetMapping("/unlink")
@ResponseBody
public void unlink() {
    log.info("GET /kakao/unlink");

    String url = "https://kapi.kakao.com/v1/user/unlink";
    HttpHeaders header = new HttpHeaders();
    header.add("Authorization", "Bearer " + this.kakaoTokenResponse.getAccess_token());

    HttpEntity entity = new HttpEntity<>(header);

    RestTemplate rt = new RestTemplate();
    ResponseEntity<String> response = rt.exchange(url, HttpMethod.POST, entity, String.class);
    System.out.println(response); // {"id": 4258514384}
}

๐Ÿ“Œ ์—ฐ๊ฒฐ ๋Š๊ธฐ๋Š” ํ† ํฐ ๋งŒ๋ฃŒ + ์‚ฌ์šฉ์ž ๊ณ„์ • ์—ฐ๊ฒฐ ํ•ด์ œ

  • ์ดํ›„ ๋กœ๊ทธ์ธ ์‹œ ๋ชจ๋“  ๋™์˜ ํ•ญ๋ชฉ์„ ๋‹ค์‹œ ์„ ํƒํ•ด์•ผ ํ•จ

โœ… 3. ์นด์นด์˜ค๊ณ„์ •๊นŒ์ง€ ํ•จ๊ป˜ ๋กœ๊ทธ์•„์›ƒ (๋ธŒ๋ผ์šฐ์ € ์„ธ์…˜ ๋งŒ๋ฃŒ)

ํ•ญ๋ชฉ์„ค๋ช…
URLhttps://kauth.kakao.com/oauth/logout
METHODGET
์ธ์ฆ ๋ฐฉ์‹์—†์Œ (์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ ๊ธฐ๋ฐ˜ ์š”์ฒญ)
ํ•„์š”ํ•œ ์„ค์ •์ฝ˜์†” > Logout Redirect URI ๋“ฑ๋ก ํ•„์ˆ˜
private static final String LOGOUT_REDIRECT_URI = "http://localhost:8090/kakao/login";

@GetMapping("/logoutAll")
public String logoutAll() {
    log.info("GET /kakao/logoutAll...");
    return "redirect:https://kauth.kakao.com/oauth/logout?client_id="
            + CLIENT_ID + "&logout_redirect_uri=" + LOGOUT_REDIRECT_URI;
}

๐Ÿ“Œ ์ด ์š”์ฒญ์€:

  • ๋ธŒ๋ผ์šฐ์ €์˜ ์นด์นด์˜ค ๋กœ๊ทธ์ธ ์„ธ์…˜ ์ž์ฒด๊นŒ์ง€ ๋งŒ๋ฃŒ
  • ๋กœ๊ทธ์•„์›ƒ ์ดํ›„ ์‚ฌ์šฉ์ž๋Š” ์นด์นด์˜ค ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€๋ถ€ํ„ฐ ๋‹ค์‹œ ์‹œ์ž‘
  • logout_redirect_uri๋Š” ๋ฐ˜๋“œ์‹œ ์ฝ˜์†”์— ๋“ฑ๋ก๋˜์–ด ์žˆ์–ด์•ผ ํ•จ

โœ… ์š”์ฒญ ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ ์ •๋ฆฌ (์นด์นด์˜ค๊ณ„์ • ๋กœ๊ทธ์•„์›ƒ์šฉ)

ํŒŒ๋ผ๋ฏธํ„ฐ์„ค๋ช…ํ•„์ˆ˜
client_id์นด์นด์˜ค ์•ฑ REST API ํ‚คโœ…
logout_redirect_uri๋กœ๊ทธ์•„์›ƒ ์™„๋ฃŒ ํ›„ ๋ฆฌ๋””๋ ‰์…˜๋  ์ฃผ์†Œโœ…

์˜ˆ์‹œ URL:

https://kauth.kakao.com/oauth/logout
?client_id=195bf05ed2ad5782307199cda99c35d3
&logout_redirect_uri=http://localhost:8090/kakao/login

๐Ÿ”ฅ ์ตœ์ข… ์ •๋ฆฌ ๋น„๊ตํ‘œ

์ข…๋ฅ˜APIํ† ํฐ ๋งŒ๋ฃŒ๋ธŒ๋ผ์šฐ์ € ์„ธ์…˜ ๋งŒ๋ฃŒ๋‹ค์‹œ ๋กœ๊ทธ์ธ ์‹œ ๋™์˜ ์ฐฝ
๊ธฐ๋ณธ ๋กœ๊ทธ์•„์›ƒ/v1/user/logoutโœ…โŒโŒ
์—ฐ๊ฒฐ ๋Š๊ธฐ/v1/user/unlinkโœ…โŒโœ…
์นด์นด์˜ค๊ณ„์ • ๋กœ๊ทธ์•„์›ƒ/oauth/logoutโœ…โœ…โœ…

๐Ÿ”— ์ฐธ๊ณ  ์ž๋ฃŒ


profile
Here, My Pale Blue.๐ŸŒ

0๊ฐœ์˜ ๋Œ“๊ธ€