자바(Spring Framework 기반)에서의 Controller, Service, DAO 구조는 계층형 아키텍처 (Layered Architecture) 를 따르는 전형적인 설계입니다. 각 계층은 역할이 분리되어 유지보수성과 재사용성이 높습니다.
🧭 전체 흐름 설명
1. Controller (컨트롤러)
클라이언트 요청을 받아 처리하고, 응답을 반환
Service 계층을 호출
2. Service (서비스 인터페이스)
비즈니스 로직을 정의 (인터페이스만 정의)
실제 로직은 ServiceImpl에서 구현
3. ServiceImpl (서비스 구현체)
Service 인터페이스를 구현
DAO 계층을 호출하여 데이터베이스 작업 수행
4. DAO (데이터 접근 인터페이스)
5. DAOImpl (DAO 구현체)
📁 디렉토리 구조 예시
com.example.demo
├── controller
│ └── UserController.java
├── service
│ ├── UserService.java
│ └── UserServiceImpl.java
├── dao
│ ├── UserDAO.java
│ └── UserDAOImpl.java
└── model
└── User.java
💻 예제: 사용자 이름 조회 (UserController → UserService → UserDAO)
📌 1. User.java (모델)
public class User {
private int id;
private String name;
// 생성자, getter, setter
public User(int id, String name) {
this.id = id;
this.name = name;
}
public int getId() { return id; }
public String getName() { return name; }
}
📌 2. UserDAO.java (DAO 인터페이스)
public interface UserDAO {
User findUserById(int id);
}
📌 3. UserDAOImpl.java (DAO 구현체)
import java.util.HashMap;
import java.util.Map;
public class UserDAOImpl implements UserDAO {
private static final Map<Integer, User> userDb = new HashMap<>();
static {
userDb.put(1, new User(1, "Alice"));
userDb.put(2, new User(2, "Bob"));
}
@Override
public User findUserById(int id) {
return userDb.get(id);
}
}
📌 4. UserService.java (서비스 인터페이스)
public interface UserService {
String getUserNameById(int id);
}
📌 5. UserServiceImpl.java (서비스 구현체)
public class UserServiceImpl implements UserService {
private final UserDAO userDAO = new UserDAOImpl();
@Override
public String getUserNameById(int id) {
User user = userDAO.findUserById(id);
return user != null ? user.getName() : "사용자 없음";
}
}
📌 6. UserController.java (컨트롤러)
import java.util.Scanner;
public class UserController {
private final UserService userService = new UserServiceImpl();
public void getUserName() {
Scanner scanner = new Scanner(System.in);
System.out.print("사용자 ID를 입력하세요: ");
int id = scanner.nextInt();
String name = userService.getUserNameById(id);
System.out.println("사용자 이름: " + name);
}
public static void main(String[] args) {
UserController controller = new UserController();
controller.getUserName();
}
}
✅ 실행 결과 예시
사용자 ID를 입력하세요: 1
사용자 이름: Alice
🧩 요약
| 계층 | 클래스 | 역할 |
|---|---|---|
| Controller | UserController | 클라이언트 요청 처리 |
| Service | UserService, UserServiceImpl | 비즈니스 로직 처리 |
| DAO | UserDAO, UserDAOImpl | DB 접근 로직 처리 |
| Model | User | 데이터 객체 |
이 구조는 Spring Framework에서도 동일하게 사용되며, 각 계층은 @Controller, @Service, @Repository 등의 애너테이션으로 정의됩니다.