diff --git a/src/main/java/com/backend/glowhouse/repository/UserRepositoryCustom.java b/src/main/java/com/backend/glowhouse/repository/UserRepositoryCustom.java
deleted file mode 100644
index e4d2ce4e7170642574ac600f7cfdaca6e1935c79..0000000000000000000000000000000000000000
--- a/src/main/java/com/backend/glowhouse/repository/UserRepositoryCustom.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package com.backend.glowhouse.repository;
-
-import com.backend.glowhouse.model.Device;
-
-public interface UserRepositoryCustom {
-    public boolean updateUserAssignDevice(String username, Device device);
-}
diff --git a/src/main/java/com/backend/glowhouse/repository/UserRepository.java b/src/main/java/com/backend/glowhouse/repository/user/UserRepository.java
similarity index 91%
rename from src/main/java/com/backend/glowhouse/repository/UserRepository.java
rename to src/main/java/com/backend/glowhouse/repository/user/UserRepository.java
index c4461719739470036e40be5f9bb878e195841f57..2f5b78de8de335f600898a4833af33bb5b39fb64 100644
--- a/src/main/java/com/backend/glowhouse/repository/UserRepository.java
+++ b/src/main/java/com/backend/glowhouse/repository/user/UserRepository.java
@@ -1,4 +1,4 @@
-package com.backend.glowhouse.repository;
+package com.backend.glowhouse.repository.user;
 
 import com.backend.glowhouse.model.User;
 import org.springframework.data.mongodb.repository.MongoRepository;
diff --git a/src/main/java/com/backend/glowhouse/repository/user/UserRepositoryCustom.java b/src/main/java/com/backend/glowhouse/repository/user/UserRepositoryCustom.java
new file mode 100644
index 0000000000000000000000000000000000000000..7f2c4a16013359c8930067136aa8a6b7ca252e2e
--- /dev/null
+++ b/src/main/java/com/backend/glowhouse/repository/user/UserRepositoryCustom.java
@@ -0,0 +1,7 @@
+package com.backend.glowhouse.repository.user;
+
+import com.backend.glowhouse.model.Device;
+
+public interface UserRepositoryCustom {
+    public boolean registerDeviceToUser(String username, Device device);
+}
diff --git a/src/main/java/com/backend/glowhouse/repository/UserRepositoryImpl.java b/src/main/java/com/backend/glowhouse/repository/user/UserRepositoryImpl.java
similarity index 88%
rename from src/main/java/com/backend/glowhouse/repository/UserRepositoryImpl.java
rename to src/main/java/com/backend/glowhouse/repository/user/UserRepositoryImpl.java
index 06e63b23645d2ab1f5c7c671491dc882ffed9bfa..90fca7fb0133b7a24f9f802b73d98f1dba895d3e 100644
--- a/src/main/java/com/backend/glowhouse/repository/UserRepositoryImpl.java
+++ b/src/main/java/com/backend/glowhouse/repository/user/UserRepositoryImpl.java
@@ -1,4 +1,4 @@
-package com.backend.glowhouse.repository;
+package com.backend.glowhouse.repository.user;
 
 import com.backend.glowhouse.model.Device;
 import com.backend.glowhouse.model.User;
@@ -18,7 +18,7 @@ public class UserRepositoryImpl implements UserRepositoryCustom{
     }
 
     @Override
-    public boolean updateUserAssignDevice(String username, Device device) {
+    public boolean registerDeviceToUser(String username, Device device) {
         Query query = new Query();
         query.addCriteria(Criteria.where("username").is(username));
 
diff --git a/src/main/java/com/backend/glowhouse/service/UserService.java b/src/main/java/com/backend/glowhouse/service/UserService.java
new file mode 100644
index 0000000000000000000000000000000000000000..977a08906ea329089bd78ae0b2876da85901945f
--- /dev/null
+++ b/src/main/java/com/backend/glowhouse/service/UserService.java
@@ -0,0 +1,68 @@
+package com.backend.glowhouse.service;
+
+import com.backend.glowhouse.model.User;
+import com.backend.glowhouse.model.exception.ResourceNotFoundException;
+import com.backend.glowhouse.model.response.UserAvailability;
+import com.backend.glowhouse.model.response.UserProfile;
+import com.backend.glowhouse.model.response.UserSummary;
+import com.backend.glowhouse.repository.user.UserRepository;
+import com.backend.glowhouse.security.UserPrincipal;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+public class UserService {
+    private UserRepository userRepository;
+    private ObjectMapper mapper = new ObjectMapper();
+    private static final Logger logger = LoggerFactory.getLogger(UserService.class);
+
+    @Autowired
+    public UserService(UserRepository userRepository) {
+        this.userRepository = userRepository;
+    }
+
+    public String getCurrentUser(UserPrincipal currentUser) throws JsonProcessingException {
+        UserSummary userSummary = new UserSummary(
+                currentUser.getId(),
+                currentUser.getUsername(),
+                currentUser.getName()
+        );
+
+        return mapper.writeValueAsString(userSummary);
+    }
+
+    public String retrieveUserProfile(String username) throws JsonProcessingException {
+        User user = userRepository.findByUsername(username)
+                .orElseThrow(() -> new ResourceNotFoundException("User", "username", username));
+
+        UserProfile profile = new UserProfile(
+                user.getId(),
+                user.getUsername(),
+                user.getName(),
+                user.getEmail(),
+                user.getPassword(),
+                user.getDevice().getDeviceId(),
+                user.getJoinedAt().getTime()
+        );
+
+        return mapper.writeValueAsString(profile);
+    }
+
+    public UserAvailability checkEmailAvailability(String email) {
+        if (userRepository.existsByEmail(email)) {
+            return new UserAvailability(false);
+        }
+        return new UserAvailability(true);
+    }
+
+    public UserAvailability checkUsernameAvailability(String username) {
+        if (userRepository.existsByUsername(username)) {
+            return new UserAvailability(false);
+        }
+        return new UserAvailability(true);
+    }
+}