📚 Layered Architecture란?
- 애플리케이션을 서로 다른 역할을 맡는 계층들(Layers)로 나누어 구조화한 아키텍처
- 각 계층은 고유한 책임을 가지며, 서로 역할 분리가 되어 있어 유지 보수와 확장성이 좋아짐
❗기존 MVC 패턴의 문제점

Controller 하나가 너무 많은 일을 함🧭 Layered Architecture 구조

> Layered Architecture 적용

1. Presentation Layer (프레젠테이션 계층)

📍 Controller
Service에 넘기고, 응답을 사용자에게 반환@Controller, @RestController🗒️ 예시 코드
@RestController
public class UserController {
private final UserService userService;
@GetMapping("/users")
public List<UserResponseDto> getUsers() {
return userService.getAllUsers();
}
}
2. Business Layer (비즈니스 계층)

📍 Service
Repository 호출@Service🗒️ 예시 코드
@Service
public class UserService {
private final UserRepository userRepository;
public List<UserResponseDto> getAllUsers() {
return userRepository.findAll().stream()
.map(UserResponseDto::fromEntity)
.collect(Collectors.toList());
}
}
3. Data Access Layer (데이터 접근 계층)

📍 Repository
@Repository🗒️ 예시 코드
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
}
4. DTO (Data Transfer Object)

📍 계층 간 데이터 전달용 객체
Controller ↔ Service ↔ Repository 간 데이터 교환에 사용RequestDto: 요청 데이터 담음ResponseDto: 응답 데이터 담음🗒️ 예시 코드
public class UserResponseDto {
private String username;
private int age;
public static UserResponseDto fromEntity(User user) {
return new UserResponseDto(user.getUsername(), user.getAge());
}
}
🧩 용어 정리
| 용어 | 설명 |
|---|---|
| MVC | Model-View-Controller 패턴. 초창기 웹 구조 방식 |
| Entity | DB 테이블과 매핑되는 클래스 (JPA에서 주로 사용) |
| DAO | Data Access Object. Repository와 같은 의미로 쓰이는 경우 많음 |
| DTO | Data Transfer Object. 계층 간 데이터 전달용 객체 |
📌 Controller → Service → Repository → DTO 흐름