spring

스프링 프레임워크의 핵심 컴포넌트와 패턴 이해하기

개발만파볼까 2023. 10. 24. 01:29
728x90
반응형
SMALL

#### 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
}
728x90
반응형
LIST