스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술을 듣고 (김영한님)

 

 

1. 들어가며

 

들은지 한 학기가 지나서 정리하는 김영한 스프링 MVC 1편 강의입니다. 오랜만에 정리하려고 살펴보면서 전체적으로 모두 복습도 해야했고 그 김에 2회독을 한 셈이 되었으니 오히려 좋다고 할 수 있을 것 같습니다..

지금까지 세 개의 강의를 정리했는데 사실 강의 내용을 그대로 쓰는 것은 지양하고 있습니다. 강의 내용을 그대로 옮긴다면 김영한님께 죄송한 일이라 생각이 들고, 무엇보다 "직접 강의 듣기"라는 가장 좋은 방법을 두고 블로그 글을 볼 필요는 없다고 생각합니다. 이 글에서 다루고 있는 것은 강의에서 어떤 것을 가르쳐 주는지를 통해 들을 지에 대한 판단과, 추후 복습을 위해 정리한 것입니다!

 

2. 강의 내용

 

2.1 웹 어플리케이션이란?

 

한때 면접 단골 질문으로 알려졌던 것 중 하나가 웹 서버와 WAS의 차이가 무엇이라고 생각하시나요? 

 

강의에서는 이 면접 질문에 대해 보다 개념적으로 접근해서 자세하게 설명해줍니다. 왜 정적인 파일을 제공하는 웹 서버가 필요한지, WAS와는 어떻게 다른지에 대해서. 그리고 Spring 같은 프레임워크는 거기서 어떤 역할을 하고 왜 필요했는지에 대해 설명해주고 있습니다. 관련하여 추가적으로 좋은 글이 있어 첨부합니다.

 

https://velog.io/@jimin_lee/Nginx%EC%99%80-Gunicorn-%EB%91%98-%EC%A4%91-%ED%95%98%EB%82%98%EB%A7%8C-%EC%8D%A8%EB%8F%84-%EB%90%A0%EA%B9%8C

 

Nginx와 Gunicorn 둘 중 하나만 써도 될까?

Flask나 Django로 만든 파이썬 앱을 배포할 때, 보통 Nginx와 Gunicorn과 자기 앱을 연결해서 배포하는 게 정석처럼 여겨

velog.io

 

 

2.2 서블릿

 

서블릿이란 웹 어플리케이션을 구현할 때 비즈니스 로직에만 집중할 수 있게 제반 사항을 갖춰주는 웹 기술입니다. 구체적으로는

 

1.웹 서버와의 통신 지원

2. 서블릿 생명 주기 관리

3. 멀티스레드 지원 및 관리

등의 일을 하고 있습니다. 예를 들어 socket을 직접 열고 listen 하는 web proxy server를 c를 통해 직접 만들어 보셨다면 그리 유쾌한 경험은 아니라는 걸 모두 기억하실 것 같습니다. 반복되는 코드가 많고 깔끔한 코드를 짜기 쉽지 않습니다. 그래서 모듈화를 한다면?  그게 서블릿이 됩니다!

 

이런 서블릿을 지원하는 WAS 중 하나가 Tomcat이고 이 Tomcat을 spring에서는 기본 WAS로 사용하고 있습니다. 하지만 서블릿과 JAVA 코드만으로 모든 문제가 해결될까요? 강의에서는 실제로 이 서블릿과 Java 코드로 웹 서버를 구현하면서 그 불편한 코드 구조를 보여주고 있습니다. 

 

2.3 템플릿 엔진, Spring MVC의 등장

 

그 불편한 코드 구조라는 것은 결국 서블릿을 사용하는 곳에서 data를 받아오고, 비즈니스 로직을 수행하고, html을 만들어서 보내는 모든 일을 했다는 점입니다. 뒤의 두 가지는 서로에게 영향을 잘 주지 않을 뿐더러 각자 변경되는 시점이 다를 때가 많습니다. 그래서 역할 분리를 위해 Spring MVC와 템플릿 엔진이 등장합니다. 템플릿 엔진은 많은 언어에서 사용하고 있으니 넘어가고 Spring MVC는 어떤 걸까요?

 

MVC란 Model, View, Controller입니다.

 

컨트롤러: HTTP 요청을 받아서 파라미터를 검증하고, 비즈니스 로직을 실행한다. 그리고 뷰에 전달할 결과 데이터를 조회해서 모델에 담는다.

 

모델: 뷰에 출력할 데이터를 담아둔다. 뷰가 필요한 데이터를 모두 모델에 담아서 전달해주는 덕분에 뷰는 비즈니스 로직이나 데이터 접근을 몰라도 되고, 화면을 렌더링 하는 일에 집중할 수 있다.

 

: 모델에 담겨있는 데이터를 사용해서 화면을 그리는 일에 집중한다. 여기서는 HTML을 생성하는 부분을 말한다.

 

다만 컨트롤러에서 비즈니스 로직까지 담당한다고 했지만 그렇다면 컨트롤러에서 너무 많은 역할을 담당하므로 보통 서비스 계층을 또 두어서 비즈니스은 빼두는 편입니다.

 

그리고 4강에서는 이 Spring MVC의 초기 형태와 어떻게 발전해왔는지 직접 하나씩 개선해보며 설명하고 있습니다. 그렇게 마지막에 도달한 스스로 만든 MVC 프레임워크는 Spring MVC와 흡사해서 Spring 내부 구조에 대해 더 자세하게 이해할 수 있습니다.

 

3. 나가며

 

그 외의 내용은 Spring MVC를 사용하는 방법에 대해 손으로 따라가며 해보는 방식으로 구성이 되어 있습니다. Spring의 튜토리얼은 좋은 것들이 많이 있고 굳이 여기 정리하지 않더라도 좋은 자료가 있다고 생각합니다. 그런 강의들 중에서 김영한님의 강의가 매력이 있는 것은 매 강의마다 느끼지만 개념적으로 부족했던 부분을 다 채워주기 때문이라고 생각합니다.