나다.
이 글이 뭐하는 글이냐면
[Spring] Spring Framework의 탄생과 기능 (上)
나다. 이 글이 뭐하는 글이냐면 우리는 자바를 통해 웹 프로젝트를 제작할 때 Spring이라는 프레임워크를 사용한다. 아주 오래된 시스템의 경우 스트럿츠2 라는 프레임워크를 사용하는 시스템이
no-brain-dev.tistory.com
이전 글에 이어 Spring 기능에 대해 설명하는 글임.
딱히 상편에서 하편으로 이어지는 구성은 아니기 때문에 굳이 상편으로 돌아가서
읽고 와야 할 필요는 없지만 한 번에 많이 쓰기 귀찮아서 두편으로 쪼개놨다.
상편도 궁금하면 가서 보셈. ^오^
MVC란 무엇인가.
지나가다 한 번쯤 MVC라는 말을 들어 본 적이 있는가.
MVC는 (Model - View - Controller)의 약자로 Spring에서 사용되는 정형화된
웹 개발 패턴이라 보는 것이 맞겠다.
MVC는 "Model1"과 "Model2"로 나뉘는데 웹 개발에서 사용하는 방식은 "Model2"를 사용한다.
이 둘을 구분하는 방법은 클라이언트에서 보낸 요청을 처리하는 방식에 따라 나뉘는 것인데
JSP를 예로 들었을 때
Model1의 경우
클라이언트의 요청에 JSP가 스스로 별도의 Service Class를 통해 처리 후 결과를 출력함.
예) 클라이언트가 다음과 같은 문구를 달라고 요청할 때 JSP에서 Service Class에 해당 결과를 도출하도록 요청하며
결과를 출력한다.
Model2의 경우
클라이언트의 요청을 수용하기 위한 담당일진 Controller를 포함하고 있다.
JSP(클라이언트 요청) → Controller → Service → Dao → Database ← 역순으로 응답.
다음이 가장 정형화된 Model2 패턴이다.
위의 그림과 같이 절차에 따라 진행되는 것이 Model2 패턴의 특징인데 간단히 표로 정리해 보자.
Model | Service,Dao,Dto, etc | 실질적 비즈니스 로직을 가지고 있음. |
View | JSP | 얘는 그냥 보여주는 거만 신경쓰면 됨. |
Controller | Sevlet Controller | 사용자의 요청이 어떤 비즈니스 로직을 요구하는지 판단하고 뿌려줌. |
다음과 같은 표로 정리될 수 있다.
예를 들어 여러분이 바지없는 변태의 나라에서 상의만 파는 옷가게의 주인이라고 치자.
@Controller
public class 옷가게Controller {
@Autowired
옷가게Service service;
@GetMapping("/상의목록") // 클라이언트에서 상의목록 이라는 URI로 요청
public String 상의목록(Model model){
List<상의> 목록 = service.상의목록가져오기(); // 옷가게Service의 상의목록가져오기 메소드 호출
Model.addAttribute("목록", 목록) // 응답에 목록을 포함시킴.
return "목록보여주는페이지"; // 가져온 목록 응답
}
}
@Service
public class 옷가게Service {
@Autowired
옷가게Dao dao;
public List<상의> 상의목록가져오기() {
return dao.상의목록가져오기(); // dao의 데이터에 접근할 메소드 호출 후 Controller에 반환
}
}
@Repository
public class 옷가게Dao {
@Autowired
SqlSession sqlSession;
public List<상의> 상의목록가져오기() {
return sqlSession.selectList("옷가게창고.상의목록가져오기"); // SQL Mapper 생략
}
- 클라이언트에서 "상의목록" 이라는 URI로 요청했다.
- Controller는 "상의목록" 이라는 요청에 응답을 수행할 메소드를 동작시킨다.
- 상의목록이라는 메소드는 옷가게Service의 상의목록가져오기 메소드를 호출한다.
- 옷가게Service의 상의목록가져오기 메소드는 옷가게Dao의 상의목록가져오기 메소드를 호출한다.
- 옷가게Dao의 상의목록가져오기 메소드는 SqlSession을 통해 데이터베이스에 쿼리문을 전송 후
결과를 옷가게Service에게 반환한다. - 옷가게Service는 옷가게Dao에서 반환 받은 결과를 Controller에 반환한다.
- Controller는 Model을 통해 반환받은 결과를 담아 JSP로 던진다.
- JSP는 반환받은 결과를 포함해 사용자에게 페이지를 보여준다.
다음과 같이 MVC2 모델의 경우 서로가 정해진 역할만을 수행하며 내가 호출하는 메소드가 어떤 작동을하는지 알 필요없이 분리된 상태로 결과만 받는 형태로 진행되기 때문에 유지보수가 쉬워진다.또한 JSP에 더 이상 Model1과 같이 Controller에 들어갈 코드들이 들어가지 않는다는점에서 Front와 Back을 정확히 나눌 수 있다는 장점이 있다.
정리하자면
- Front / Back 분리로 분업이 용이해짐.
- JSP 코드가 X같이 더러워지는 것을 어느정도 방지 가능.
- Controller / Service / Dao와 같이 각자의 기능이 분리된 상태로 유지보수에 강해짐.
- 핵심로직을 Service에 집어넣고 쓰면 되니 확장성이 강해짐.
위와 같은 강점을 가지고 있다는 것이다.
"근데 Dao가 뭐임?"
Dao란 Data access object의 약자로 순수하게 데이터베이스에 접근하여 sql문의 실행에만 관여하는객체를 의미한다.Dao는 어떠한 부가기능을 가져서는 안되며 순수하게 데이터 요청에 따른 CRUD에만 동작해야 한다.
쉽게 말해서 Dao에서 +1을 한다든지 또는 어떤 값을 바꾸는 행위를 해서는 안 된다.
이런 건 Service에서 핵심 로직으로 수행하고 Dao에 데이터베이스에 반영하도록 요청하는 것이 옳다.
Spring Framework의 구조도
framework
1.명사 (건물 등의) 뼈대[골조]
2.명사 (판단·결정 등을 위한) 틀
3.명사 체제, 체계
Spring Framework 또한 존X 많은 구성요소들이 하나로 뭉쳐 체계를 이루고 있는 것인데
그 구조도를 보면 다음과 같다.
인체구조도와 비슷한 느낌으로 Spring 또한 여러 요소들이 모여 하나의 체계를 이루고 있는데
간단하게 하나씩 알아보자
1. Spring Core
하단 Spring Core에 보면 Bean container라고 적혀있는 것을 볼 수 있다.
맞다. Spring Core가 스프링의 심장이라고 보면 된다.
Bean container를 통해 객체의 라이프사이클을 관리하기 때문이다.
상편에 라이프사이클과 관련된 IOC에 대해 적어놨으니 읽어보시기 바람.
2. Spring AOP
Spring AOP는 공통 로직과 핵심 로직을 분리시켜 중복 로직을 제거하고
관점에 따른 분리를 통해 유지보수에 용이하게 하는데 상편에 AOP 있으니 보시기 바람.
3. Spring ORM
ORM(Object relational mapping)은 객체와 데이터베이스를 맵핑해주는 것으로
Mybatis, Hibernate(JPA), 등과 같은 도구를 사용 할 수 있도록 지원한다.
4. Spring DAO
Dao란 Data access object의 약자로 순수하게 데이터베이스에 접근하여 sql문의 실행에만 관여하는
객체를 의미한다. JDBC Support를 통해 추상화 계층을 지원한다.
5. Spring Web
일반적인 Web개발에 필요한 기능을 지원한다.
6. Spring Context
Spring Framework에서 제공하는 context 설정 파일로 Validation, EJB 등의 서비스를 포함한다.
7. Spring Web MVC
Spring Framework는 Model2 형식의 웹 애플리케이션을 만들 수 있도록 지원하는데 JSP를 포함한 다른
뷰 기술을 지원한다.
위와 같이 볼 수 있겠다.
내용이 복잡해 한꺼번에 다 담지 못하니 이 정도로 이해해주십사 한다.
혹여나 내용에 틀린 점이 있다면 그건 제가 허접이라 그런 것이니 너그럽게 용서하셈. ^오^...
그럼 좋은 하루 보내시길.
'Spring' 카테고리의 다른 글
[Spring] Spring Framework의 탄생과 기능 (上) (2) | 2023.01.23 |
---|---|
[Spring] .properties와 .yml의 작성법에 대해 알아보자. (0) | 2022.12.15 |
Spring Boot 3.0버전 나옴 ㅋㅋ (0) | 2022.12.13 |