작성한 부스트코스 후기입니다.
여러분들의 성원에 더 노력하는 부스트코스가 되겠습니다.
감사합니다.
******************************************
(본문 내용)
저번에 REST API 에 대해 알아봤는데
Spring 프레임워크라는 것을 통해 API를 개발 할 수 있다.
이어서 오늘은 Spring의 개념과 특징에 대해 알아보려 한다
https://www.edwith.org/boostcourse-web/lecture/20655/
01.Spring Framework 란?
우선 프레임워크의 개념을 알고가자
[프레임워크 의 개념]
뼈대, 틀 이라는 말 과 같은 의미이고
우리가 어플리케이션을 개발할 때 구축을 도와주는 일종의 틀 , 도구 라고 생각하면 쉽다.
많은 프레임워크들 이 있고 , 그 중 스프링은 자바를 기반으로 한 프레임워크로 api를 개발시 필요한 모듈을 사용하여 개발하기 편리한 도구이다.
스프링이 제공하는 기능들이 여러가지 있다
02. 스프링의 특징, IoC 와 DI
스프링 하면 IOC ,DI 라는 큰 특징이 먼저 떠오르는데
처음에 아무리 읽고 읽어도 와닿지가 않았다
당장은 이해가 안되더라도 나중에 직접 사용하면서 '아~'할 때 가 참 많은 것 같다
지금 완벽하게 이해하지 못해도 파악만 하고 유의하는 것이 중요한 것 같다.
[IoC: Inversion of Control]
해석하면 '제어의 역전' 이란 뜻이다.
보통 개발자가 프로그램을 만들고 이런경우는 주체가 개발자이며 개발자가 프로그램을 주도한다 라고 말할 수 있는데
IoC는 그 반대의 경우에 해당함으로 제어가 역전된 상황이다 라고 말하는 것이다.
그렇다면 프로그램이 주도한다는 것인데 이게 무슨말인가?
어렵게 생각 할 필요없이
스프링 프레임워크에선 여러 모듈을 제공하여 어플리케이션 구축을 도와준다
한마디로 프레임워크가 지원하는 일들이 많을 수록 개발자가 프레임워크에 의존해서 개발한다 라는 의미이다. 그래서 제어의역전 이라고 말한다
[컨테이너]
여기서 객체를 생성하거나 없애는 등의 생명 주기 를 스프링 프레임워크가 담당해주고 , 생성된 객체에 기능을 제공하는데
컨테이너에 관한 자세한 설명은 부스트코스에서 잘 설명해 주었다.
컨테이너(Container)
컨테이너는 인스턴스의 생명주기를 관리하며, 생성된 인스턴스에게 추가적인 기능을 제공합니다.
예를 들어, Servlet을 실행해주는 WAS는 Servlet 컨테이너를 가지고 있다고 말합니다.
WAS는 웹 브라우저로부터 서블릿 URL에 해당하는 요청을 받으면, 서블릿을 메모리에 올린 후 실행합니다.
개발자가 서블릿 클래스를 작성했지만, 실제로 메모리에 올리고 실행하는 것은 WAS가 가지고 있는 Servlet 컨테이너입니다.
Servlet컨테이너는 동일한 서블릿에 해당하는 요청을 받으면, 또 메모리에 올리지 않고 기존에 메모리에 올라간 서블릿을 실행하여 그 결과를 웹 브라우저에게 전달합니다.
컨테이너는 보통 인스턴스의 생명주기를 관리하며, 생성된 인스턴스들에게 추가적인 기능을 제공하는 것을 말합니다.
[DI: Dependency Injection]
의존성 주입 이라는 뜻을 이야기한다
클래스 사이의 의존 관계를 이야기하는데
의존성 이라는 말이 좀 생소하지만 한 클래스가 어떤 클래스를 필요로 할 때 삽입 , 연결을 도와준다라는 의미로 해석하면 좋다
03. Spring MVC란?
[MVC의 개념]
MVC는 Model-View-Controller의 약자이다
우리가 스프링을 이용하여 개발을 할 때 이 mvc패턴을 따라 개발하게 된다.
m 은 모델 , v는 뷰 , c 는 컨트롤러 를 뜻한다.
Model : 모델은 뷰가 렌더링하는데 필요한 데이터입니다. 예를 들어 사용자가 요청한 상품 목록이나, 주문 내역이 이에 해당합니다.
View : 웹 애플리케이션에서 뷰(View)는 실제로 보이는 부분이며, 모델을 사용해 렌더링을 합니다. 뷰는 JSP, JSF, PDF, XML등으로 결과를 표현합니다.
Controller : 컨트롤러는 사용자의 액션에 응답하는 컴포넌트입니다. 컨트롤러는 모델을 업데이트하고, 다른 액션을 수행합니다.
왜 이 패턴으로 나누냐? 분리된것이 무슨 의민가?
모델은 객체를 표현한 부분 ,뷰는 사용자가 브라우저로 보여지는 부분, 컨트롤러는 api와 로직이 작성되어 있다
세가지로 나누는 이유는 로직과 뷰 가 섞여져 있다면 오류 발생률이 높다.
예를 들어서 뷰에대한 코드와 + DB에 값을 넣는 코드를 묶어서 코딩하게되면
새로고침할 때마다 같은 값이 중복해서 들어가는 기이한 현상을 볼 수 있다.
사용자에게 보여지는 화면 따로, 로직 따로 구분해서
수정 및 작업을 수월하게 하고자 함에 있다.
한마디로 유지보수를 하고자 함이다.
[모델]
모델은 데이터를 의미한다
만약 우리의 DB에 학생이름 학생나이 학생부서 라는 값을 이룬 테이블을 사용한다면
class Student {
string name;
string age;
string major;
....
}
이런 식으로 해당 데이터를 가지고 있는 것을 모델이라고 한다
주의할점은
*모델은 사용자가 원하는 모든 데이터를 갖고 있어야한다
생략되거나 누락할 경우 데이터를 모아 놓았다는 의미가 사라진다.
* 뷰와 컨트롤러가 하는 일을 몰라야한다.
데이터 변경이 일어났을 때 모델에서 화면 UI를 직접 조정해서 수정할 수 있도록 뷰를 참조하는 값을 가지면 안 된다는 말이다
[뷰]
뷰는 화면, 인터페이스다
정보를 출력하고 입력받는 곳이다
*모델이 가진 정보를 따로 저장하면 안된다
뷰에서 데이터 값을 직접 따로 저장하거나 수정하면 안된다
뷰는 값을 보여주는 역할을 할 뿐이다! 데이터를 처리하는 것은 로직에 해당됨으로 뷰가 하는 일이 아니다
*변경에 대한 처리방법을 구현해야 한다
모델과 같이 변경이 일어났을 때 이른 누군가에게 변경을 알려줘야 하는 방법을 구현해야 한다. 뷰에서는 화면에서 사용자가 화면에 표시된 내용을 변경하게 되면 이를 모델에게 전달해서 모델을 변경해야 하기 떄문에 그 작업을 하기 위해 변경 통지를 구현해야 한다
[컨트롤러]
데이터와 사용자를 연결해주는 다리역할이다
정보 저장 ,수정 등에 대한 처리를 컨트롤러에서 다루는 것이다.
*모델 과 뷰에 대해 인지해야 한다
모델이나 뷰는 서로의 존재를 몰라야 하지만 ,변경 사항에 대해 외부로 알리면서 통신해야한다
수신하는 방법만 가지고 있는데 이를 컨트롤러가 중재하기 위해 모델과 그에 관련된 뷰에 대해서 당연히 알아야한다
한마디로 분리하되 소통을 해야하는 구조 이다.
*모델이나 뷰의 변경을 보고해야 한다
모델이나 뷰의 변경 통지를 받으면 이를 해석해서 각각의 해당 부분에 통지를 해야 한다
이런 부분을 로직으로 처리하는데 사용자의 요청을 받으면 인식하고 그에 따라 값 처리를 하는 부분이 컨트롤러 라는 이야기다.
따라서 메인 로직은 컨트롤러가 담당한다
자세한 스프링 사용법과 데이터베이스(JDBC)에 관한 내용은 부스트코스에 자세히 설명되어있으니
차례대로 실습하면 도움이 될 것 같다
참고:https://m.blog.naver.com/jhc9639/220967034588
[출처] [부스트코스: 웹프로그래밍] Spring 과 MVC 패턴|작성자 짜장
******************************************