#### 1. Model (모델)
- **내용**: 모델은 MVC 패턴에서 데이터를 처리하는 컴포넌트입니다. 이는 데이터베이스와 상호 작용하고, 데이터를 처리하여 컨트롤러에 전달합니다. 모델은 비즈니스 로직과 애플리케이션 데이터 상태를 관리합니다.
public class User {
private String username;
private String password;
// getters and setters
}
#### 2. Controller (컨트롤러)
- **내용**: 컨트롤러는 사용자의 요청을 받아 처리하는 컴포넌트입니다. 이는 사용자의 입력을 받고, 모델과 뷰를 조작하여 사용자에게 적절한 응답을 반환합니다. 스프링에서는 `@Controller` 어노테이션을 사용하여 컨트롤러 클래스를 정의합니다.
@Controller
public class UserController {
@Autowired
private UserService userService;
@PostMapping("/login")
public String loginUser(@ModelAttribute User user) {
if (userService.validateUser(user)) {
return "success";
} else {
return "failure";
}
}
}
#### 3. Service (서비스)
- **내용**: 서비스는 비즈니스 로직을 수행하는 컴포넌트입니다. 이는 모델과 컨트롤러 사이의 중간 계층으로, 데이터 처리와 비즈니스 로직의 실행을 담당합니다. 서비스는 재사용 가능한 비즈니스 로직을 제공하여, 컨트롤러의 코드를 간결하게 유지할 수 있게 돕습니다.
@Service
public class UserService {
@Autowired
private UserDao userDao;
public boolean validateUser(User user) {
User storedUser = userDao.getUserByUsername(user.getUsername());
return storedUser.getPassword().equals(user.getPassword());
}
}
#### 4. DTO (Data Transfer Object)
- **내용**: DTO는 계층 간 데이터를 전송하는 객체입니다. 이는 주로 데이터베이스와 비즈니스 로직 사이, 혹은 네트워크를 통한 서비스 간 통신에서 사용됩니다. DTO는 데이터를 캡슐화하여 전송하는 데 사용되며, 일반적으로 로직을 포함하지 않고 순수한 데이터 객체로 사용됩니다.
public class UserDto {
private String username;
private String password;
// getters and setters
}
#### 5. DAO (Data Access Object)
- **내용**: DAO는 데이터베이스와의 상호작용을 담당하는 객체입니다. 이는 데이터베이스 쿼리를 실행하고, 결과를 반환하는 메서드를 포함합니다. DAO는 데이터베이스 접근 로직과 비즈니스 로직을 분리하여, 코드의 유지보수를 용이하게 합니다.
public interface UserDao {
User getUserByUsername(String username);
}
#### 6. VO (Value Object)
- **내용**: VO는 값 객체를 의미합니다. 이는 변경 불가능하며, 데이터를 저장하는 데 사용됩니다. VO는 주로 DTO와 비슷한 역할을 하지만, DTO와 달리 VO는 불변의 특성을 가집니다. VO는 데이터의 일관성과 안정성을 보장하는 데 도움을 줍니다.
public final class Address {
private final String city;
private final String street;
public Address(String city, String street) {
this.city = city;
this.street = street;
}
// getters
}
'spring' 카테고리의 다른 글
스프링 프레임워크 vs FastAPI: 장단점 비교 분석 (0) | 2024.01.18 |
---|---|
ThreadLocal: 자바 멀티스레딩 환경에서의 데이터 격리와 안전성 (1) | 2024.01.14 |
스프링에서의 빈(Bean) 생성과 관리 (0) | 2023.09.12 |
스프링에서 빈(Bean)과 싱글턴 패턴: 오브젝트 매퍼를 어떻게 관리할까? (0) | 2023.09.12 |
스프링 부트에서 클라이언트 요청부터 응답까지: AOP와 인터셉터의 역할 (0) | 2023.08.12 |