๐Ÿ“Œ ์นด์นด์˜ค ๋กœ๊ทธ์ธ API ์—ฐ๋™ - 1๋‹จ๊ณ„: ์ธ๊ฐ€ ์ฝ”๋“œ ๋ฐ›๊ธฐ

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

SPRING BOOT

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

๐Ÿ“… ๋‚ ์งœ

2025-05-13

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

โœ… 1. ์™œ ๋ฐฑ์—”๋“œ์—์„œ ์นด์นด์˜ค ๋กœ๊ทธ์ธ์„ ๊ตฌํ˜„ํ•ด์•ผ ํ• ๊นŒ?

  • JavaScript SDK๋ฅผ ํ™œ์šฉํ•˜๋ฉด ํ”„๋ก ํŠธ ๋‹จ์—์„œ ๋กœ๊ทธ์ธ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, client_id ๋…ธ์ถœ ๋ฐ ํ† ํฐ ํƒˆ์ทจ ์œ„ํ—˜์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— Spring Boot ๊ฐ™์€ ๋ฐฑ์—”๋“œ ์„œ๋ฒ„์—์„œ ์ฒ˜๋ฆฌํ•˜๋Š” REST ๋ฐฉ์‹์ด ๊ถŒ์žฅ๋จ.

โœ… 2. ์นด์นด์˜ค ๋กœ๊ทธ์ธ OAuth2 ํ๋ฆ„ ์š”์•ฝ

์นด์นด์˜ค ๋กœ๊ทธ์ธ ๊ณผ์ •


โœ… 3. ์นด์นด์˜ค ๊ฐœ๋ฐœ์ž ์ฝ˜์†” ์„ค์ •

  1. ์นด์นด์˜ค ๋กœ๊ทธ์ธ ํ™œ์„ฑํ™”
  2. Redirect URI ๋“ฑ๋ก โ†’ http://localhost:8090/kakao/callback
  3. ํ•„์ˆ˜ ๋™์˜ ํ•ญ๋ชฉ ์„ค์ •
    • ๋‹‰๋„ค์ž„ (profile_nickname)
    • ํ”„๋กœํ•„ ์‚ฌ์ง„ (profile_image)
    • ์ด๋ฉ”์ผ (account_email)

โœ… 4. ์ธ๊ฐ€ ์ฝ”๋“œ ์š”์ฒญ URL ๊ตฌ์„ฑ

ํŒŒ๋ผ๋ฏธํ„ฐ์„ค๋ช…ํ•„์ˆ˜ ์—ฌ๋ถ€
client_id์นด์นด์˜ค ์•ฑ์˜ REST API ํ‚คโœ…
redirect_uri์ธ๊ฐ€ ์ฝ”๋“œ ์ˆ˜์‹  ์ฃผ์†Œ (์ฝ˜์†”์— ๋“ฑ๋ก ํ•„์š”)โœ…
response_type"code"๋กœ ๊ณ ์ •โœ…

์˜ˆ์‹œ URL:

https://kauth.kakao.com/oauth/authorize?client_id=YOUR_CLIENT_ID&redirect_uri=http://localhost:8090/kakao/callback&response_type=code

โœ… 5. Spring Boot ์ธ๊ฐ€ ์ฝ”๋“œ ์š”์ฒญ ๋ฐ ์ˆ˜์‹  ์ฝ”๋“œ

package com.example.demo.C04Kakao;

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

@Controller
@Slf4j
@RequestMapping("/kakao")
public class C02KakaoLoginController {

    // ์‹ค์ œ ๋ฐœ๊ธ‰๋œ ํ‚ค๋Š” ๋ณด์•ˆ์ƒ ์™ธ๋ถ€์— ๋…ธ์ถœํ•˜์ง€ ์•Š๋„๋ก ์ฃผ์˜
    String REDIRECT_URI = "http://localhost:8090/kakao/callback";
    String CLIENT_ID = "YOUR_CLIENT_ID"; // ์‹ค์ œ ํ‚ค๋Š” ์™ธ๋ถ€ ๋…ธ์ถœ ๊ธˆ์ง€
    String RESPONSE_TYPE = "code";

    // 1๋‹จ๊ณ„: ์‚ฌ์šฉ์ž ์ธ๊ฐ€ ์š”์ฒญ (์นด์นด์˜ค ๋กœ๊ทธ์ธ ์ฐฝ ๋ฆฌ๋””๋ ‰ํŠธ)
    @GetMapping("/getCode")
    public String getCode() {
        log.info("GET /kakao/getCode...");
        return "redirect:https://kauth.kakao.com/oauth/authorize?client_id=" + CLIENT_ID
                + "&redirect_uri=" + REDIRECT_URI
                + "&response_type=" + RESPONSE_TYPE;
    }

    // 2๋‹จ๊ณ„: ์นด์นด์˜ค์—์„œ ์ธ๊ฐ€ ์ฝ”๋“œ๋ฅผ ๋ฐ›์•„์˜ค๋Š” ์ฝœ๋ฐฑ
    @GetMapping("/callback")
    public void callback(@RequestParam("code") String code) {
        log.info("GET /kakao/callback... ์ธ๊ฐ€ ์ฝ”๋“œ ์ˆ˜์‹ : " + code);
        // TODO: ์ดํ›„ Access Token ์š”์ฒญ ๋‹จ๊ณ„์—์„œ ์ด code ์‚ฌ์šฉ
    }
}

๐Ÿ”น ํ…Œ์ŠคํŠธ ์‹œ๋‚˜๋ฆฌ์˜ค

  1. ๋ธŒ๋ผ์šฐ์ €์— ์ž…๋ ฅ:
http://localhost:8090/kakao/getCode
  1. โ†’ ์นด์นด์˜ค ๋กœ๊ทธ์ธ ๋ฐ ๋™์˜ ์ง„ํ–‰
  2. โ†’ ์„œ๋ฒ„ ์ฝ˜์†” ์ถœ๋ ฅ ์˜ˆ:
GET /kakao/callback... ์ธ๊ฐ€ ์ฝ”๋“œ ์ˆ˜์‹ : abcde12345xyz...

๐Ÿ”ฅ ์ •๋ฆฌ

  • ์นด์นด์˜ค ๋กœ๊ทธ์ธ REST ์—ฐ๋™ ์‹œ ์ฒซ ๋‹จ๊ณ„๋Š” ์ธ๊ฐ€ ์ฝ”๋“œ ์ˆ˜์‹ 
  • Redirect URI๋Š” ์นด์นด์˜ค ์ฝ˜์†”๊ณผ ๋ฐฑ์—”๋“œ ์ฝ”๋“œ ์–‘์ชฝ์—์„œ ์ •ํ™•ํžˆ ์ผ์น˜์‹œ์ผœ์•ผ ํ•จ
  • ๋ฐ›์€ ์ธ๊ฐ€ ์ฝ”๋“œ๋Š” ๋‹ค์Œ ๋‹จ๊ณ„์—์„œ Access Token ์š”์ฒญ์— ์‚ฌ์šฉ๋จ

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


profile
Here, My Pale Blue.๐ŸŒ

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