diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..dcd73c7
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,8 @@
+# 디폴트 무시된 파일
+/../../피로체크/.idea/shelf/
+/../../피로체크/.idea/workspace.xml
+# 에디터 기반 HTTP 클라이언트 요청
+/../../피로체크/.idea/httpRequests/
+# Datasource local storage ignored files
+/../../피로체크/.idea/dataSources/
+/../../피로체크/.idea/dataSources.local.xml
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
new file mode 100644
index 0000000..aa0b0f1
--- /dev/null
+++ b/.idea/compiler.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
new file mode 100644
index 0000000..29f2e28
--- /dev/null
+++ b/.idea/gradle.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml
new file mode 100644
index 0000000..03d9549
--- /dev/null
+++ b/.idea/inspectionProfiles/Project_Default.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..722604f
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..e30031f
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..0fcafb0
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/workspace.xml b/.idea/workspace.xml
new file mode 100644
index 0000000..557b024
--- /dev/null
+++ b/.idea/workspace.xml
@@ -0,0 +1,130 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {
+ "customColor": "",
+ "associatedIndex": 2
+}
+
+
+
+
+
+
+
+
+ {
+ "keyToString": {
+ "ASKED_MARK_IGNORED_FILES_AS_EXCLUDED": "true",
+ "Gradle./Users/seonju/Documents/플젝/피로체크/backend/pirocheck/build.gradle.executor": "Run",
+ "Gradle.pirocheck 빌드.executor": "Run",
+ "RequestMappingsPanelOrder0": "0",
+ "RequestMappingsPanelOrder1": "1",
+ "RequestMappingsPanelWidth0": "75",
+ "RequestMappingsPanelWidth1": "75",
+ "RunOnceActivity.ShowReadmeOnStart": "true",
+ "RunOnceActivity.git.unshallow": "true",
+ "Spring Boot.PirocheckApplication.executor": "Run",
+ "git-widget-placeholder": "backend__sj",
+ "kotlin-language-version-configured": "true",
+ "node.js.detected.package.eslint": "true",
+ "node.js.detected.package.tslint": "true",
+ "node.js.selected.package.eslint": "(autodetect)",
+ "node.js.selected.package.tslint": "(autodetect)",
+ "nodejs_package_manager_path": "npm",
+ "project.structure.last.edited": "모듈",
+ "project.structure.proportion": "0.23046875",
+ "project.structure.side.proportion": "0.40229884",
+ "vue.rearranger.settings.migration": "true"
+ }
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1746360615858
+
+
+ 1746360615858
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git "a/.idea/\355\224\274\353\241\234\354\262\264\355\201\254.iml" "b/.idea/\355\224\274\353\241\234\354\262\264\355\201\254.iml"
new file mode 100644
index 0000000..d6ebd48
--- /dev/null
+++ "b/.idea/\355\224\274\353\241\234\354\262\264\355\201\254.iml"
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/backend/pirocheck/.gitignore b/backend/pirocheck/.gitignore
index 768f475..77aa6f7 100644
--- a/backend/pirocheck/.gitignore
+++ b/backend/pirocheck/.gitignore
@@ -37,4 +37,4 @@ out/
.vscode/
### 환경 변수 ###
-.env
\ No newline at end of file
+../../.env
\ No newline at end of file
diff --git a/backend/pirocheck/src/main/java/backend/pirocheck/User/controller/UserController.java b/backend/pirocheck/src/main/java/backend/pirocheck/User/controller/UserController.java
new file mode 100644
index 0000000..9f8239d
--- /dev/null
+++ b/backend/pirocheck/src/main/java/backend/pirocheck/User/controller/UserController.java
@@ -0,0 +1,44 @@
+package backend.pirocheck.User.controller;
+
+import backend.pirocheck.User.dto.request.LoginRequest;
+import backend.pirocheck.User.dto.response.LoginResponse;
+import backend.pirocheck.User.entity.User;
+import backend.pirocheck.User.repository.UserRepository;
+import backend.pirocheck.User.service.UserService;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.HttpSession;
+import lombok.RequiredArgsConstructor;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping("/api")
+@RequiredArgsConstructor
+public class UserController {
+
+ private final UserService userService;
+
+ // 로그인
+ @PostMapping("/login")
+ public ResponseEntity login(@RequestBody LoginRequest request, HttpSession session) {
+ User user = userService.login(request.getName(), request.getPassword());
+
+ //세션에 로그인 정보 저장
+ session.setAttribute("loginUser", user);
+
+ // 사용자 정보 응답
+ return ResponseEntity.ok(new LoginResponse(user));
+ }
+
+ // 로그아웃
+ @PostMapping("/logout")
+ public ResponseEntity logout(HttpSession session) {
+ session.invalidate(); // 세션 종료 (메모리에서 삭제)
+ return ResponseEntity.ok().build(); // 본문은 없음 (void)
+ }
+
+
+}
diff --git a/backend/pirocheck/src/main/java/backend/pirocheck/User/dto/request/LoginRequest.java b/backend/pirocheck/src/main/java/backend/pirocheck/User/dto/request/LoginRequest.java
new file mode 100644
index 0000000..a530d8a
--- /dev/null
+++ b/backend/pirocheck/src/main/java/backend/pirocheck/User/dto/request/LoginRequest.java
@@ -0,0 +1,12 @@
+package backend.pirocheck.User.dto.request;
+
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class LoginRequest {
+
+ private String name;
+ private String password;
+}
diff --git a/backend/pirocheck/src/main/java/backend/pirocheck/User/dto/response/LoginResponse.java b/backend/pirocheck/src/main/java/backend/pirocheck/User/dto/response/LoginResponse.java
new file mode 100644
index 0000000..ec9d65a
--- /dev/null
+++ b/backend/pirocheck/src/main/java/backend/pirocheck/User/dto/response/LoginResponse.java
@@ -0,0 +1,19 @@
+package backend.pirocheck.User.dto.response;
+
+
+import backend.pirocheck.User.entity.User;
+import lombok.Getter;
+
+@Getter
+public class LoginResponse {
+
+ private Long id;
+ private String name;
+ private String role;
+
+ public LoginResponse(User user) {
+ this.id = user.getId();
+ this.name = user.getName();
+ this.role = user.getRole().name(); // MEMBER or ADMIN
+ }
+}
diff --git a/backend/pirocheck/src/main/java/backend/pirocheck/User/entity/Role.java b/backend/pirocheck/src/main/java/backend/pirocheck/User/entity/Role.java
new file mode 100644
index 0000000..ce1c180
--- /dev/null
+++ b/backend/pirocheck/src/main/java/backend/pirocheck/User/entity/Role.java
@@ -0,0 +1,6 @@
+package backend.pirocheck.User.entity;
+
+public enum Role {
+ ADMIN,
+ MEMBER
+}
diff --git a/backend/pirocheck/src/main/java/backend/pirocheck/User/entity/User.java b/backend/pirocheck/src/main/java/backend/pirocheck/User/entity/User.java
new file mode 100644
index 0000000..e2b88d0
--- /dev/null
+++ b/backend/pirocheck/src/main/java/backend/pirocheck/User/entity/User.java
@@ -0,0 +1,35 @@
+package backend.pirocheck.User.entity;
+
+import jakarta.persistence.*;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+
+@Entity
+@Getter
+@Table(name="users")
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+
+public class User {
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ private Long id;
+
+ private String password; // 전화번호 일부
+
+ private String name;
+
+ private String email;
+
+ private String phone;
+
+ @Enumerated(EnumType.STRING)
+ private Role role; // MEMBER or ADMIN
+
+ private Integer generation;
+
+}
diff --git a/backend/pirocheck/src/main/java/backend/pirocheck/User/repository/UserRepository.java b/backend/pirocheck/src/main/java/backend/pirocheck/User/repository/UserRepository.java
new file mode 100644
index 0000000..675aca1
--- /dev/null
+++ b/backend/pirocheck/src/main/java/backend/pirocheck/User/repository/UserRepository.java
@@ -0,0 +1,11 @@
+package backend.pirocheck.User.repository;
+
+import backend.pirocheck.User.entity.User;
+import io.swagger.v3.oas.annotations.Operation;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+import java.util.Optional;
+
+public interface UserRepository extends JpaRepository {
+ Optional findByName(String name);
+}
diff --git a/backend/pirocheck/src/main/java/backend/pirocheck/User/service/UserService.java b/backend/pirocheck/src/main/java/backend/pirocheck/User/service/UserService.java
new file mode 100644
index 0000000..304edd8
--- /dev/null
+++ b/backend/pirocheck/src/main/java/backend/pirocheck/User/service/UserService.java
@@ -0,0 +1,19 @@
+package backend.pirocheck.User.service;
+
+import backend.pirocheck.User.entity.User;
+import backend.pirocheck.User.repository.UserRepository;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+
+@Service
+@RequiredArgsConstructor
+public class UserService {
+
+ private final UserRepository userRepository;
+
+ public User login(String name, String password) {
+ return userRepository.findByName(name)
+ .filter(user -> user.getPassword().equals(password))
+ .orElseThrow(() -> new IllegalArgumentException("이름 또는 비밀번호가 일치하지 않습니다."));
+ }
+}