diff --git a/src/app/routes/components/auth.routes.tsx b/src/app/routes/components/auth.routes.tsx
index 0817f87..1712695 100644
--- a/src/app/routes/components/auth.routes.tsx
+++ b/src/app/routes/components/auth.routes.tsx
@@ -1,4 +1,4 @@
-import { LoginPage, RealtorCertificationPage, RealtorLoginPage } from '@/pages';
+import { LoginPage, OAuthRedirectPage, RealtorCertificationPage, RealtorLoginPage } from '@/pages';
import { ROUTER_PATH } from '@/shared';
import { Layout } from '@/widgets';
@@ -14,6 +14,11 @@ export const authRoutes = [
element: ,
handle: { layout: ROUTE_CONFIG.LOGIN.layout },
},
+ {
+ path: ROUTE_CONFIG.OAUTH_REDIRECT.path,
+ element: ,
+ handle: { layout: ROUTE_CONFIG.OAUTH_REDIRECT.layout },
+ },
],
},
{
diff --git a/src/app/routes/config/route-config.ts b/src/app/routes/config/route-config.ts
index 30c7a56..1c679b3 100644
--- a/src/app/routes/config/route-config.ts
+++ b/src/app/routes/config/route-config.ts
@@ -31,6 +31,10 @@ export const ROUTE_CONFIG: Record = {
path: ROUTER_PATH.REALTOR_CERTIFICATION,
layout: 'Auth',
},
+ OAUTH_REDIRECT: {
+ path: ROUTER_PATH.OAUTH_REDIRECT,
+ layout: 'Auth',
+ },
REALTOR: {
path: ROUTER_PATH.REALTOR,
requiresRealtor: true, // 공인중개사만 접근 가능
diff --git a/src/entities/auth/apis/get-ticket.api.ts b/src/entities/auth/apis/get-ticket.api.ts
new file mode 100644
index 0000000..5e7d8e7
--- /dev/null
+++ b/src/entities/auth/apis/get-ticket.api.ts
@@ -0,0 +1,16 @@
+import { fetchInstance } from '@/shared';
+
+export const GET_TICKET_API_PATH = '/api/auth/ticket';
+
+interface GetTicketApiResponse {
+ refreshToken: string;
+}
+
+export const getTicketApi = async (ticket: string): Promise => {
+ const response = await fetchInstance.get(GET_TICKET_API_PATH, {
+ params: {
+ ticket,
+ },
+ });
+ return response.data;
+};
diff --git a/src/entities/auth/apis/index.ts b/src/entities/auth/apis/index.ts
new file mode 100644
index 0000000..5cbea31
--- /dev/null
+++ b/src/entities/auth/apis/index.ts
@@ -0,0 +1 @@
+export * from './get-ticket.api';
diff --git a/src/entities/auth/hooks/getAuthTicket.ts b/src/entities/auth/hooks/getAuthTicket.ts
new file mode 100644
index 0000000..0dbd3f2
--- /dev/null
+++ b/src/entities/auth/hooks/getAuthTicket.ts
@@ -0,0 +1,14 @@
+import { useQuery } from '@tanstack/react-query';
+
+import { getTicketApi } from '../apis';
+
+export const GetAuthTicketQueryKey = {
+ ticket: (ticket: string) => ['ticket', ticket],
+};
+
+export const useGetAuthTicket = (ticket: string) => {
+ return useQuery({
+ queryKey: GetAuthTicketQueryKey.ticket(ticket),
+ queryFn: () => getTicketApi(ticket),
+ });
+};
diff --git a/src/entities/auth/hooks/index.ts b/src/entities/auth/hooks/index.ts
new file mode 100644
index 0000000..df60f1b
--- /dev/null
+++ b/src/entities/auth/hooks/index.ts
@@ -0,0 +1 @@
+export * from './getAuthTicket';
diff --git a/src/entities/auth/index.ts b/src/entities/auth/index.ts
index e69de29..fa88d83 100644
--- a/src/entities/auth/index.ts
+++ b/src/entities/auth/index.ts
@@ -0,0 +1,2 @@
+export * from './apis';
+export * from './hooks';
diff --git a/src/features/login/components/common/buttons/KakaoLoginButton.tsx b/src/features/login/components/common/buttons/KakaoLoginButton.tsx
index 4dc0621..67aefd7 100644
--- a/src/features/login/components/common/buttons/KakaoLoginButton.tsx
+++ b/src/features/login/components/common/buttons/KakaoLoginButton.tsx
@@ -1,10 +1,19 @@
-import { Button } from '@/shared';
+import { BASE_URL, Button } from '@/shared';
import KakaoSymbol from '../../../_assets/kakao-symbol.webp';
export const KakaoLoginButton = () => {
+ const kakaoLogin = () => {
+ // OAuth 서버로 리다이렉트하되, 리다이렉트 URL을 명시적으로 지정
+ const redirectUri = encodeURIComponent(`${window.location.origin}/oauth/redirect`);
+ window.location.href = `${BASE_URL}/oauth2/authorization/kakao?redirect_uri=${redirectUri}`;
+ };
+
return (
-