diff --git a/src/main/java/com/aolda/itda/config/AuthInterceptor.java b/src/main/java/com/aolda/itda/config/AuthInterceptor.java
index b0767e3536368cbba238138a57eb5fe9e61a8500..7c9f87f59927421bd074b1985e7faac7645e8a84 100644
--- a/src/main/java/com/aolda/itda/config/AuthInterceptor.java
+++ b/src/main/java/com/aolda/itda/config/AuthInterceptor.java
@@ -59,7 +59,8 @@ public class AuthInterceptor implements HandlerInterceptor {
         /* 프로젝트 리스트 조회 */
         List<String> projects;
         if (authService.isAdmin(Map.of("id", userId, "token", token))) {
-            projects = authService.getAllProjects(token);
+            projects = authService.getAllProjects(token).stream().map(IdAndNameDTO::getId)
+                    .toList();
         }
 
         else {
diff --git a/src/main/java/com/aolda/itda/controller/main/MainController.java b/src/main/java/com/aolda/itda/controller/main/MainController.java
new file mode 100644
index 0000000000000000000000000000000000000000..7b22923994abcc4d5d43e77b21f7bf30f466bb0d
--- /dev/null
+++ b/src/main/java/com/aolda/itda/controller/main/MainController.java
@@ -0,0 +1,33 @@
+package com.aolda.itda.controller.main;
+
+import com.aolda.itda.service.main.MainService;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import jakarta.servlet.http.HttpServletRequest;
+import lombok.RequiredArgsConstructor;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+import java.util.Map;
+
+@RestController
+@RequestMapping("/api")
+@RequiredArgsConstructor
+public class MainController {
+
+    private final MainService mainService;
+
+    @GetMapping("/projects")
+    public ResponseEntity<Object> projects(HttpServletRequest request) throws JsonProcessingException {
+        return ResponseEntity.ok(mainService.getAllProjects((Map<String, String>) request.getSession().getAttribute("user")));
+    }
+
+    @GetMapping("/main")
+    public ResponseEntity<Object> mainInfo(@RequestParam String projectId, HttpServletRequest request) {
+        return ResponseEntity.ok(mainService.getMainInfo(projectId, (List<String>) request.getAttribute("projects")));
+    }
+
+}
diff --git a/src/main/java/com/aolda/itda/dto/main/MainInfoDTO.java b/src/main/java/com/aolda/itda/dto/main/MainInfoDTO.java
new file mode 100644
index 0000000000000000000000000000000000000000..6de5fdfbdcf5f79a2e68a02fe39e2a4481327a70
--- /dev/null
+++ b/src/main/java/com/aolda/itda/dto/main/MainInfoDTO.java
@@ -0,0 +1,20 @@
+package com.aolda.itda.dto.main;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+@JsonInclude(JsonInclude.Include.NON_NULL)
+public class MainInfoDTO {
+
+    private Long routing;
+    private Long forwarding;
+    private Long certificate;
+
+}
diff --git a/src/main/java/com/aolda/itda/service/AuthService.java b/src/main/java/com/aolda/itda/service/AuthService.java
index 8bc68362fce6fff386e72d6a4ac4f06687cb1972..a222e289e1535a22955f14238429c1a30f7677e0 100644
--- a/src/main/java/com/aolda/itda/service/AuthService.java
+++ b/src/main/java/com/aolda/itda/service/AuthService.java
@@ -297,7 +297,7 @@ public class AuthService {
 
     }
 
-    public List<String> getAllProjects(String token) throws JsonProcessingException {
+    public List<IdAndNameDTO> getAllProjects(String token) throws JsonProcessingException {
         String url = keystone + "/projects";
         HttpHeaders headers = new HttpHeaders();
         headers.set("X-Auth-Token", token);
@@ -312,10 +312,12 @@ public class AuthService {
         JsonNode node = objectMapper.readTree(res.getBody());
         ArrayNode arrayNode = (ArrayNode) node.get("projects");
 
-        List<String> lists = new ArrayList<>();
+        List<IdAndNameDTO> lists = new ArrayList<>();
 
         for (JsonNode assignment : arrayNode) {
-            lists.add(assignment.path("id").asText());
+            String projectId = assignment.path("id").asText();
+            String projectName = assignment.path("name").asText();
+            lists.add(new IdAndNameDTO(projectId, projectName));
         }
 
         return lists;
diff --git a/src/main/java/com/aolda/itda/service/main/MainService.java b/src/main/java/com/aolda/itda/service/main/MainService.java
new file mode 100644
index 0000000000000000000000000000000000000000..2c36ac84ff2e02f7812037198abf4719110c6cae
--- /dev/null
+++ b/src/main/java/com/aolda/itda/service/main/MainService.java
@@ -0,0 +1,61 @@
+package com.aolda.itda.service.main;
+
+import com.aolda.itda.dto.PageResp;
+import com.aolda.itda.dto.auth.IdAndNameDTO;
+import com.aolda.itda.dto.main.MainInfoDTO;
+import com.aolda.itda.repository.certificate.CertificateRepository;
+import com.aolda.itda.repository.forwarding.ForwardingRepository;
+import com.aolda.itda.repository.routing.RoutingRepository;
+import com.aolda.itda.service.AuthService;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+import java.util.Map;
+
+@Service
+@Transactional
+@RequiredArgsConstructor
+public class MainService {
+
+    private final AuthService authService;
+    private final RoutingRepository routingRepository;
+    private final ForwardingRepository forwardingRepository;
+    private final CertificateRepository certificateRepository;
+
+    /* 메인 페이지에 필요한 정보 반환 */
+    public MainInfoDTO getMainInfo(String projectId, List<String> projects) {
+
+        /* 프로젝트 권한 검증 */
+        authService.validateProjectAuth(projects, projectId);
+
+        /* 카운팅 */
+        Long routing = (long) routingRepository.findByProjectIdAndIsDeleted(projectId, false).size();
+        Long forwarding = (long) forwardingRepository.findByProjectIdAndIsDeleted(projectId, false).size();
+        Long certificate = 0L;
+
+        return MainInfoDTO.builder()
+                .routing(routing)
+                .forwarding(forwarding)
+                .certificate(certificate)
+                .build();
+    }
+
+    /* 접근 가능한 프로젝트 조회 */
+    public PageResp<IdAndNameDTO> getAllProjects(Map<String, String> user) throws JsonProcessingException {
+
+        List<IdAndNameDTO> projects;
+        if (authService.isAdmin(user)) {
+            projects = authService.getAllProjects(user.get("token"));
+        }
+
+        else {
+            projects = authService.getProjectsWithUser(user);
+        }
+
+        return PageResp.<IdAndNameDTO>builder()
+                .contents(projects).build();
+    }
+}