diff --git a/src/App.js b/src/App.js
index 0dd250e25c1216cfbf912f0c13ede69396ae6667..35f2d12a991eb51e711a5cf119cdcbe8015e0417 100644
--- a/src/App.js
+++ b/src/App.js
@@ -61,6 +61,34 @@ function App() {
     return null;
   });
 
+  // 토큰 만료 체크 함수
+  const checkTokenExpiration = () => {
+    const token = localStorage.getItem('token');
+    if (token) {
+      try {
+        const decoded = jwt_decode(token);
+        if (decoded.exp * 1000 < Date.now()) {
+          // 토큰 만료시 로그아웃과 동일한 효과
+          localStorage.removeItem('token');
+          setUser(null);
+          setIsAuthenticated(false);
+          toast.info('세션이 만료되었습니다. 다시 로그인해주세요.');
+        }
+      } catch (error) {
+        localStorage.removeItem('token');
+        setUser(null);
+        setIsAuthenticated(false);
+      }
+    }
+  };
+
+  // 주기적으로 토큰 체크 (30초마다)
+  React.useEffect(() => {
+    const timer = setInterval(checkTokenExpiration, 30000);
+    // 컴포넌트가 언마운트될 때 타이머 정리
+    return () => clearInterval(timer);
+  }, []);
+
   const login = (userData) => {
     setUser(userData);
     setIsAuthenticated(true);
diff --git a/src/pages/Login.js b/src/pages/Login.js
index c92837ae556c84623e179bc2df3016f70c6504db..aa7cb641dda3ca1925f613b9d8dcb5c231ca6ceb 100644
--- a/src/pages/Login.js
+++ b/src/pages/Login.js
@@ -124,6 +124,15 @@ const handleLogin = async (e) => {
       localStorage.setItem('token', token);
 
       const decoded = jwt_decode(token);
+      console.log('로그인 토큰 정보:', {
+        토큰: token,
+        만료시간: new Date(decoded.exp * 1000).toLocaleString(),
+        현재시간: new Date().toLocaleString(),
+        남은시간: Math.floor((decoded.exp * 1000 - Date.now()) / 1000 / 60) + '분',
+        사용자: decoded.name,
+        이메일: decoded.email,
+        전체_디코딩_정보: decoded
+      });
       const userData = {
         _id: decoded.userId,
         email: decoded.email,