거누의 개발노트
[Spring] MVC 패턴 (ORM, SQL) - 회고 본문
Spring 프레임워크로 간단한 웹 서버를 구현해 보고있다.
처음으로 JPA를 사용해봤고 정리해봤다.
https://geonoo.tistory.com/147?category=1077864
ORM은 RDB의 테이블을 객체로 매핑하는 기술로 해당 기술을 이용한 대표적인 라이브러리가 JPA가 있다.
쉽게 설명해서 웹 서비스를 개발 할 때 SQL문을 필수적으로 작성해야 했다.
데이터베이스의 데이터를 꺼내오거나 수정하거나 해야 했으니까...
하지만 JPA를 사용하므로서 대부분의 SQL문은 작성하지 않아도 되게 되었다.
(SQL은 관계형 데이터베이스 관리 시스템의 데이터를 관리하기 위해 설계된 특수 목적의 프로그래밍 언어)
MVC 패턴
MVC 는 Model, View, Controller의 약자 입니다. 하나의 애플리케이션, 프로젝트를 구성할 때 그 구성요소를 세가지의 역할로 구분한 패턴이다.
사용자가 웹 브라우저를 통해서 URL을 호출하면 Controller에서 요청들을 받고 그안에서 로직이나 데이터가 필요하다면 Model에서 호출해서 모델에 구성된 로직이나 데이터베이스에 접근해서 데이터를 가져온다.
가져온 데이터를 다시 Controller가 받게되고 그 데이터를 VIEW에게 보내주고 VIEW는 최종적으로 사용자에게 데이터와 로직이 적용된 화면을 제공한다.
MVC패턴은 처음부터 Model, View, Controller가 나누어져 있지는 않았다고 한다.
위 그림의 방식이 Model 1 방식인데 View와 Controller를 JSP에서 모두 구현하는 구조이다.
MVC Model1 구조는 흐름이 단순하기 때문에 개발이 쉽고 중소형 프로젝트에 적합하다.
하지만 프로젝트의 규모가 커질수록 유지보수가 어려워지고, View와 Controller가 하나의 JSP에 합쳐져 있기때문에 프론트엔드 개발자와 백엔드 개발자의 협업에 어려움이 있었다.
그래서 Controller와 View를 분리된 방식이 model2 방식이다.
Controller와 View를 분리함으로써 클라이언트의 요청처리 부분과 응답처리 부분을 분리하여 각 로직을 독립적으로 수행할 수 있게 되었다.
그래서 이제는 프론트개발 따로 백엔드 영역 따로 개발이 가능해졌다.
물론 JSP를 사용하는 곳은 줄어들고 있지만 MVC 패턴은 비슷하게 가져가고 있다.
Model
Model은 데이터베이스와 연동하여 사용자의 입출력 데이터를 내부 로직으로 처리하는 역할을 한다.
자세히는 데이터를 추출하고, 저장하고, 삭제하고, 업데이트하는 역할을 수행한다.
다시말해서, 모델은 컨트롤러가 호출을 하면 DB와 연동하여 사용자의 입출력 데이터를 다루는 일과 같은 데이터와 연관된 비즈니스 로직을 처리하는 역할을 한다.
Controller
Controller는 Model과 View 사이를 이어주는 인터페이스 역할을 한다.
쉽게 말해 사용자가 접근한 URL에 따라 사용자의 요청사항을 파악한 후에 그 요청에 맞는 데이터를 Model을 의뢰하고, 데이터를 View에 반영해서 사용자에게 알려주는 역할을 하는것이다.
View
View는 클라이언트 측 기술은 HTML/CSS/Javascript들을 모와둔 컨테이너이며, 사용자가 볼 결과물을 생성하기 위해 모델로부터 정보를 얻어온다.
View는 사용자에게 보여주는 화면(UI)이 해당되고, 사용자와 상호작용을 하며 컨트롤러로부터 받은 모델의 결과값을 사용자에게 화면으로 출력하는 일을 한다.
회고
처음 시작하는 일은 먼가 벅차고 어렵다고 느낀다.
신기하게도 하루가 지나면 어느정도 적응해서 또 달려나가고 있다.
모르는 부분도 많고 해야할 일도 많지만 알고리즘 공부할 때보다 재밌게 공부하고 있다.
회고 끝.
'Spring' 카테고리의 다른 글
Controller, Service, Repository (0) | 2022.06.07 |
---|---|
[Spring] Spring Data JPA 기본 사용법 ( JpaRepository ) (1) | 2022.06.05 |
[Spring] Java Persistence API - JPA (0) | 2022.06.04 |
Spring Boot 셋팅 - IntelliJ IDEA (0) | 2022.06.03 |
[Spring] 빌드? 빌드도구? - gradle, maven (0) | 2022.06.03 |