스프링의 특징
POJO지원
스프링은 별도의 API를 이용하여 애플리케이션 코드를 따로 작성하지 않는 정책을 쓰기 때문에 인터페이스를 반드시 구현해야 한다거나 HttpServlet 클래스를 상속하지 않아도 된다.
의존성 주입
스프링은 의존성 주입(객체 주입)을 통해 강력한 기능을 가진다.
기존에 필요할때 마다 class를 생성하던 것과 다르게 스프링에서는 참조변수만 준비해두면 스프링 컨테이너가 알아서 객체를 참조변수에 주입한다.
결합도
A a = new A(); 강결합
a의 값을 바꾸려면 코드 자체를 다시 써야하기 때문에 결합도가 높다.
B a = new A(); 약결합
A가 B를 상속받았을 경우에 다형성을 이용해서 B 데이터타입을 가지는 A의 주소를 a에 넣을수 있다.
이로 인해 강결합 보다는 좀 더 느슨한 결합의 형태이다.
AOP지원
스프링에서는 AOP라는것을 지원하는데 이는 프로그램의 시작과 끝에 web.xml을 통해서 로그를 찍던 기존 방식과 달리 프로그램 실행중일 때 파일을 오갈때 마다 AOP의 기능을 이용해서 로그를 찍을수 있게 할 수 있다.
AOP를 이용해서 주로 로깅, 트랜잭션 관리, 보안등의 시스템 서비스를 수행한다.
일관성 있는 모듈의 트랜잭션 지원
트랜잭션은 최소 단위의 작업으로서 어떤 작업 프로세스를 하나로 묶어 실행하다가 작업이 하나라도 실패하면 모두 실패처리 되고(rollback 처리), 전체 작업이 성공하면 성공 처리 되는 논리적인 작업의 묶음이다.
이는 원자성을 보장한다고 볼수있다.
스프링 MVC
웹 애플리케이션의 모델, 뷰, 컨트롤러 사이의 의존 관계를 스프링 컨테이너가 관리한다.
기존의 JSP에서는 뷰 → 컨트롤러 → 모델 → 뷰의 순서로 프로그램이 진행되었지만
스프링에서는 중간중간마다 프런트 컨트롤러라는것을 두고, 모든 흐름은 프런트 컨트롤러를 거치게 만든다.
스프링 MVC 구성요소
구성 요소 | 설명 |
디스패처 서블릿 | 웹에서 요청을 전달받고, 전달 받은 요청을 컨트롤러에 전달하고, 컨트롤러가 반환한 값을 뷰에 전달하여 알맞은 응답을 생성한다. |
핸들러 매핑 | 클라이언트가 요청한 URL을 어떤 컨트롤러가 처리할지 결정한다. |
컨트롤러 | 클라이언트의 요청을 처리한 후 결과를 반환한다. 응답 결과에서 보여 줄 데이터를 모델에 담아 전달한다. |
모델 앤 뷰 | 컨트롤러가 처리한 결과 정보와 뷰 선택에 필요한 정보를 담는다. |
뷰 리졸버 | 컨트롤러의 처리 결과를 보여 줄 뷰를 결정한다. |
뷰 | 컨트롤러의 처리 결과 화면을 생성한다. 주로 JSP 파일로 클라이언트에 응답 결과를 전송한다. |
스프링 MVC의 흐름
요청자 | 내용 | 대상 |
클라이언트 | 처리 요청(URL) | 디스패쳐 서블릿 |
디스패쳐 서블릿 | URL과 매핑되는 컨트롤러 검색 요청 | 핸들러 매핑 |
핸들러 매핑 | URL과 매핑되는 컨트롤러 결과 반환 | 디스패쳐 서블릿 |
디스패쳐 서블릿 | 처리요청 | 컨트롤러 |
컨트롤러 | ModelANDView(처리결과) 반환 | 디스패쳐 서블릿 |
디스패쳐 서블릿 | 결과를 보여 줄 view 검색 요청 | 뷰 리졸버 |
뷰 리졸버 | 결과를 보여 줄 view 반환 | 디스패쳐 서블릿 |
디스패쳐 서블릿 | 응답 생성 요청 | 뷰 |
뷰 | 처리 결과 반환 | 디스패쳐 서블릿 |
디스패셔 서블릿 | 처리 결과 응답 | 클라이언트 |
JSP와는 다르게 중간중간에 디스패쳐 서블릿이 관여하게 된다.
'프로그래밍 공부' 카테고리의 다른 글
2025.03.11 스프링 공부 (0) | 2025.03.11 |
---|---|
2025.03.10 스프링 공부 (0) | 2025.03.10 |
2025.03.04 SQL 공부 (0) | 2025.03.04 |
2025.02.28 SQL 공부 (0) | 2025.02.28 |
2025.02.27 SQL 공부 (0) | 2025.02.27 |