티스토리 뷰

API

카카오 로그인 연동하기

열코 2026. 5. 10. 10:37
반응형

카카오 로그인 REST API를 Java 환경에서 구축하는 방법을 단계별로 상세히 정리해 드립니다. 본 가이드는 Spring Boot 환경을 기준으로 하며, 인가 코드 요청부터 사용자 정보 조회(로그인 완료) 단계까지의 핵심 로직과 예제 코드를 포함합니다.


[JAVA] 카카오 로그인 REST API 구현 가이드

카카오 로그인은 OAuth 2.0 표준 프로토콜을 따르며, 크게 인가 코드 받기, 토큰 받기, 사용자 정보 가져오기의 3단계로 구성됩니다.


Step 1: 카카오 디벨로퍼스 설정

코드를 작성하기 전, 카카오 디벨로퍼스에서 어플리케이션 설정을 완료해야 합니다.

  1. 내 애플리케이션 추가: 앱 이름과 사업자명을 입력하여 생성합니다.
  2. REST API 키 확인: [내 애플리케이션] > [앱 설정] > [앱 키]에서 REST API 키를 복사해둡니다.
  3. 플랫폼 등록: [제품 설정] > [카카오 로그인] > [플랫폼]에서 Web 플랫폼을 선택하고 사이트 도메인(예: http://localhost:8080)을 등록합니다.
  4. Redirect URI 설정: [카카오 로그인] 메뉴에서 활성화 상태를 ON으로 바꾸고, 인가 코드를 받을 URI(예: http://localhost:8080/login/kakao)를 등록합니다.
  5. 동의항목 설정: [카카오 로그인] > [동의항목]에서 닉네임, 이메일 등 필요한 정보의 수집 권한을 설정합니다.

Step 2: 의존성(Dependencies) 추가

HTTP 요청을 편리하게 처리하기 위해 HttpURLConnection 대신 RestTemplate이나 WebClient를 사용할 수 있습니다. 여기서는 범용적인 JSON 처리를 위해 Gson 또는 Jackson을 포함합니다.

pom.xml (Maven)

XML
 
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!-- JSON 파싱용 -->
    <dependency>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
        <version>2.8.9</version>
    </dependency>
</dependencies>

Step 3: 인가 코드(Authorize Code) 요청

사용자가 "카카오 로그인" 버튼을 눌렀을 때 실행되는 단계입니다. 카카오 인증 서버로 사용자를 리다이렉트시켜 로그인 및 동의 화면을 띄웁니다.

Controller 예제

Java
 
@GetMapping("/kakao/login")
public String getKakaoAuthUrl() {
    String reqUrl = "https://kauth.kakao.com/oauth/authorize"
            + "?client_id={REST_API_KEY}"
            + "&redirect_uri={REDIRECT_URI}"
            + "&response_type=code";
    
    // 실제 개발 시에는 {REST_API_KEY}와 {REDIRECT_URI}를 본인의 설정값으로 치환하세요.
    return "redirect:" + reqUrl;
}

반응형

Step 4: 액세스 토큰(Access Token) 발급

사용자가 동의를 완료하면 카카오는 설정한 Redirect URI로 인가 코드(code)를 보내줍니다. 서버는 이 코드를 받아 카카오 서버에 토큰 발급을 요청해야 합니다.

Service 로직 예제

Java
 
public String getAccessToken(String authorize_code) {
    String accessToken = "";
    String reqURL = "https://kauth.kakao.com/oauth/token";

    try {
        URL url = new URL(reqURL);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();

        // POST 요청을 위한 설정
        conn.setRequestMethod("POST");
        conn.setDoOutput(true);

        // POST 파라미터 전달
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(conn.getOutputStream()));
        StringBuilder sb = new StringBuilder();
        sb.append("grant_type=authorization_code");
        sb.append("&client_id=본인의_REST_API_키");
        sb.append("&redirect_uri=http://localhost:8080/login/kakao");
        sb.append("&code=" + authorize_code);
        bw.write(sb.toString());
        bw.flush();

        // 결과 코드가 200이라면 성공
        int responseCode = conn.getResponseCode();
        
        // 요청을 통해 얻은 JSON 타입의 Response 메세지 읽어오기
        BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
        String line = "";
        String result = "";

        while ((line = br.readLine()) != null) {
            result += line;
        }

        // Gson 라이브러리에 포함된 클래스로 JSON 파싱
        JsonParser parser = new JsonParser();
        JsonElement element = parser.parse(result);

        accessToken = element.getAsJsonObject().get("access_token").getAsString();

        br.close();
        bw.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return accessToken;
}

Step 5: 사용자 정보 조회 (로그인 처리의 핵심)

발급받은 Access Token을 사용하여 카카오 서버에 사용자 정보를 요청합니다. 이 정보를 바탕으로 DB 조회 후 회원가입 또는 로그인을 완료합니다.

Service 로직 예제

Java
 
public HashMap<String, Object> getUserInfo(String accessToken) {
    HashMap<String, Object> userInfo = new HashMap<>();
    String reqURL = "https://kapi.kakao.com/v2/user/me";

    try {
        URL url = new URL(reqURL);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod("POST");

        // 요청 헤더에 토큰 포함
        conn.setRequestProperty("Authorization", "Bearer " + accessToken);

        int responseCode = conn.getResponseCode();
        BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));

        String line = "";
        String result = "";

        while ((line = br.readLine()) != null) {
            result += line;
        }

        JsonParser parser = new JsonParser();
        JsonElement element = parser.parse(result);

        JsonObject properties = element.getAsJsonObject().get("properties").getAsJsonObject();
        JsonObject kakao_account = element.getAsJsonObject().get("kakao_account").getAsJsonObject();

        String nickname = properties.getAsJsonObject().get("nickname").getAsString();
        String email = kakao_account.getAsJsonObject().get("email").getAsString();

        userInfo.put("nickname", nickname);
        userInfo.put("email", email);

    } catch (IOException e) {
        e.printStackTrace();
    }

    return userInfo;
}

Step 6: 통합 컨트롤러 구성

앞서 만든 로직들을 연결하여 최종적인 콜백 처리를 수행합니다.

Java
 
@Controller
public class KakaoController {

    @Autowired
    private KakaoService kakaoService;

    @RequestMapping(value="/login/kakao")
    public String login(@RequestParam("code") String code, HttpSession session) {
        // 1. 인가 코드로 토큰 받기
        String accessToken = kakaoService.getAccessToken(code);
        
        // 2. 토큰으로 사용자 정보 조회
        HashMap<String, Object> userInfo = kakaoService.getUserInfo(accessToken);
        
        System.out.println("login info : " + userInfo.get("email"));
        
        // 3. 세션에 저장하거나 자체 DB 로직 처리
        if (userInfo.get("email") != null) {
            session.setAttribute("userId", userInfo.get("email"));
            session.setAttribute("access_token", accessToken);
        }
        
        return "index"; // 로그인 성공 후 메인 페이지로 이동
    }
}

요약 및 주의사항

  1. 인가 코드 소모: 인가 코드는 1회용입니다. 토큰 요청에 한 번 사용하면 폐기되므로 재사용이 불가능합니다.
  2. 보안: REST API 키와 Client Secret은 절대 클라이언트 측(JS)에 노출되어서는 안 되며, 서버 환경 변수로 관리하는 것이 안전합니다.
  3. 토큰 유효기간: 액세스 토큰은 만료 시간이 있습니다. 장기적인 연동이 필요하다면 refresh_token을 사용하여 토큰을 갱신하는 로직을 추가해야 합니다.
  4. 에러 핸들링: 카카오 API 응답 코드가 200이 아닌 경우(401, 403 등)에 대한 예외 처리를 반드시 구현해야 서비스의 안정성이 보장됩니다.

이 과정을 통해 Java 환경에서 카카오 REST API를 이용한 기본적인 소셜 로그인 시스템을 구축할 수 있습니다.

#Java #카카오로그인 #KakaoLogin #RESTAPI #스프링부트 #SpringBoot #OAuth2 #백엔드개발 #API연동 #소셜로그인구현

반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/05   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함
반응형