HTTP
네트워크의 핵심은 "요청"하고 "응답" 받기이다. 자유롭게 요청을 보낸다면 응답을 해주는 쪽에서 요청에 대한 정확한 응답을 내려주기 힘들 것이다. 컴퓨터는 정확히 알려주지 않으면 모르기 때문이다. 제대로 된 응답을 받기 위해 제대로 된 요청을 보내야 했다. 이를 위해 만들어진 규약이 HTTP이다.
Web Server
HTTP 요청에 대해 정적인 데이터와 동적인 데이터를 응답받을 수 있다. 정적인 데이터의 경우 Web Server에서 처리를 하며 동적인 데이터의 경우 WAS(Web Application Server)에서 처리를 해준다. WAS도 정적인 페이지를 처리를 해줄 수 있지만 정적, 동적 페이지를 분리를 해서 각 서버에서 응답을 해주는 것이 효율이 좋다. 정적인 데이터를 응답해 주는 데에 WAS에서 동적인 데이터를 처리해 주는 로직을 거치면 비용과 시간이 더 들기 때문에 그런 것 같다.
Apache Tomcat
Apache Tomcat은 Apache(Web Server) + Tomcat(WAS)로 이루어진 서버이다. 정적인 데이터를 받은 경우 Apache에서 처리를 하고 동적인 데이터를 받은 경우 Apache가 Tomcat에 넘겨 처리를 하여 클라이언트에게 응답을 내려준다.
Spring Boot가 나온 이유
Spring의 핵심 기능인 AOP, IOC/DI 등을 사용하기 위해 너무 많은 XML 설정들이 필요했다. Spring Boot는 이러한 설정들을 간편하고 쉽게 사용할수 있도록 자동화했다. 또한 외부 라이브러리, 하위 프레임워크 등의 의존성 관리를 쉽게 만들었다. 무엇보다 기존 Spring에서는 Tomcat을 별도로 설치하여 사용해야 했지만, Spring Boot는 내장 Apach Tomcat을 가지고 있어 편리하게 서버를 띄울 수 있게 했다. 이처럼 Spring의 불편한 부분들을 개선하고자 Spring Boot가 나온 것이다.
Application.properties
이 설정 파일은 Spring Boot에서 자동 설정한 것들을 변경할 수 있도록 제공된다. 또한 그 이외에 DB 정보, API KEY 같은 환경 변수를 설정할 수 있게 해준다.
[ 의문 ]
왜 요즘은 yaml이나 yml을 사용하는 것인가? 알아보고 작성을 해야겠다.
Spring MVC?
Spring MVC의 경우 기본적으로 Controller, Model, View로 이루어져 있으며, Controller는 Model과 View 사이를 다리 역할을 해 요청에 대한 응답을 Client에게 응답을 내려주는 역할을 한다. Model의 경우에는 요청에 대한 응답 데이터로 보면 된다. View의 경우 요청에 대한 응답 화면으로 보면 된다.
Dispatcher Servlet?
Controller와 Client 사이에는 Dispatcher Servlet이 있다. Dispatcher Servlet은 Front Controller 패턴을 적용한 것으로 요청에 대한 처리를 중계해주는 역할을 한다. 첫 번째 Handler Mapping에서 요청에 맞는 Controller을 얻어온다. 두 번째 해당하는 Controller에 요청해 Model과 Logical View Name을 받는다. 세 번째 앞의 두 데이터로 View로 변환하는 View Resolver에 요청한다. 마지막으로 그 결과를 View 보내고 Client에 응답을 한다.
[ 요즘은? ]
Front-End : View Resolver, View 부분 담당
Back-End : Controller, Model 부분 담당
느낀 점
다른 언어에서 자바로 넘어와서 제일 먼저 한 것이 프로젝트였다. 계속해서 실전만 하다 보니 기초에 대해서 부족했구나를 오늘 느꼈던 것 같다. 그리고 이런 기초들에 대해서 공부를 하다보니 그동안 내가 짰던 코드들에 대해서도 이해가 간다. 이런 부분들이 오늘 너무 재미있었다. 내일도 추가적으로 보면서 내가 이해한 부분들에 대해서 작성을 할 것이다. 그리고 그런 부분들을 코드 작성에 대한 이유가 되게 만들고 싶다. 이유 없는 구조, 코드 사절이고 싶다.
'개발일지 > TIL' 카테고리의 다른 글
[230625] 네트워크와 Java Spring 기본 개념 이해하기 (3) (0) | 2023.06.25 |
---|---|
[230624] 네트워크와 Java Spring 기본 개념 이해하기 (2) (0) | 2023.06.24 |
[ 230622 ] 제대로 이해하고 하자 (0) | 2023.06.22 |
[ 230621 ] 공공데이터 포털 200만건 데이터 DB에 넣기 (0) | 2023.06.21 |
[ 230620 ] HttpServletRequest의 InputStream 문제 (0) | 2023.06.20 |