프로젝트를 구성할 때 Model,Controller,View의 역할로 구분하는 패턴
Model
: 데이터를 담는 곳 , Controller에서 View로 데이터를 전달하기 위한 일시적인 데이터 저장소Controller
: 요청을 처리하는 곳 → 중간 관리자@Controller
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/users")
public String getUsers(Model model) {
// 엔티티에서 데이터베이스로부터 사용자 목록을 가져옴
List<User> users = userService.getAllUsers();
// 모델에 사용자 데이터를 담아 뷰로 전달
model.addAttribute("users", users);
return "userList"; // userList.jsp 혹은 userList.html로 이동
}
}
View
: 사용자가 보는 화면, 즉 input text, check box와 같은 사용자 인터페이스 요소를 의미 → 데이터를 기반으로 사용자들이 볼 수 있는 화면DAO (Data Access Object)
: 데이터 베이스에 접근하기 위한 객체DTO (Data Transfer Object):
계층 간 데이터 교환을 하기 위해 사용하는 객체 → 로직을 가지지 않는 순수한 데이터 객체(getter & setter 만 가진 클래스)VO (Value Object)
: 값 오브젝트로써 값을 위해 쓰임 오직 read-OnlyIOC(Inversion of Control,제어의 역전
): 제어의 흐름을 개발자가 직접 관리하지 않고 프레임워크나 컨테이너가 대신 관리하는 것DI(Dependency Injection,의존성 주입)
: 객체가 다른 객체에 의존할 때 이를 외부에서 주입해주는 방식public class Car {
private Engine engine;
// 생성자를 통해 의존성을 주입
public Car(Engine engine) {
this.engine = engine;
}
}
public class Car {
private Engine engine;
// 세터를 통해 의존성 주입
public void setEngine(Engine engine) {
this.engine = engine;
}
}
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
}
@Component
애노테이션이 있으면 스프링 빈으로 자동 등록@Component
를 포함하는 @Controller
, @Service
, @Repository
애노테이션도 스프링 빈으로 자동 등록@Configuration
과 @Bean
애노테이션을 이용해 스프링 빈을 등록@Configuration
public class AppConfig {
@Bean
public UserService userService() {
return new UserService();
}
}