-
스프링과 스프링 부트의 차이 ( + JVM, WAS 정리)Java Web Programming 2022. 10. 2. 11:36
스프링은 자바로 웹 어플리케이션을 만들 수 있는 프레임워크이다.
웹 프로그래밍을 할 수 있는 언어별 프레임워크는 아래와 같다.
언어 - 프레임워크
java - spring
python - Django(장고)
Ruby - Ruby on Rails
Javascript - Node.js
많은 국내외 기업이 서비스를 만들 때 스프링을 사용하고 있고, 자바 백엔드 개발자는 대부분 스프링을 사용한다.
- 스프링은 자바 객체와 라이브러리를 관리해준다.
- 톰캣 같은 WAS(Web Application Server)가 내장되어 있어, 자바 웹 어플리게이션을 구동한다.
* Static Page는 항상 동일한 페이지를 반환한다. 왜냐하면 컴퓨터에 저장되어 있는 파일의 경로를 받아서 일치하는 컨텐츠만 반환하기 때문이다. 반대로 Dynamic Pages는 전달되는 인자에 따라서 서로 다른 페이지를 반환한다. 즉, 웹 서버에 의해서 실행되는 프로그램을 통해서 만들어진 결과물이라 할 수 있다. 그 프로그램은 JVM(Java Virtual Machine)이다. 어떤 동작을 해야하는지는 Servlet이라는 WAS 위에서 돌아가는 자바 프로그램에 구현되어 있다.
* JVM(Java Virtual Machine)은 자바를 실행하기 위한 가상 컴퓨터이다. 자바라는 언어는 OS에 종속적이지 않다. 따라서 종속되지 않고 실행하기 위해서는 OS 위에서 자바를 실행시켜줄 무언가가 필요한데, 이게 JVM이다. 자바 소스코드 자체는 CPU가 인식하지 못한다. 따라서 기계어로 컴파일을 해줘야 하는데, 우선 자바는 JVM이라는 가상머신을 거칠 것이기 때문에 자바 컴파일러가 소스코드를 JVM이 인식할 수 있는 자바 바이트코드(Java bytecode)로 변환해준다. 그리고 JVM이 이 바이트코드를 OS가 인식할 수 있는 기계어로 변환해주는 것이다.
* Web Server는 하드웨어적인 의미로는 서버가 설치되어 있는 컴퓨터를 뜻하고, 소프트웨어적으로는 웹 브라우저 클라이언트로부터 HTTP 요청을 받아서, static contents(html, jpg, css 등)을 제공하는 프로그램을 뜻한다. 따라서 웹서버 자체는 정적인 컨텐츠만을 제공하기 때문에, 동적인 컨텐츠를 제공하기 위해서는 클라이언트의 요청을 받아서 WAS에 보내고, WAS가 처리한 결과를 다시 클라이언트에게 응답하는 과정이 필요하다. 즉, WAS는 DB 조회나 다양한 로직 처리를 요구하는 동적인 컨텐츠를 제공하기 위해 만들어진 어플리케이션 서버이다. WAS는 웹 서버와 웹 컨테이너로 이루어져 있다. Container는 JSP, Servlet을 실행시킬 수 있는 소프트웨어를 뜻한다.
* 정리하면, 웹 서버로는 정적인 파일들을 어플리케이션 서버까지 가지 않고 앞단에서 빠르게 보내주기만 하는 기능이다. 그리고 클라이언트의 요청에 맞는 동적인 파일들은 어플리케이션 서버를 이용해서 그때 그때마다 결과를 만들어서 응답하기 때문에, 자원을 효율적으로 사용할 수 있게 된다. 웹 서버만 사용한다면, 모든 가짓수의 요청과 결과값을 미리 만들어놓고 있어야 하기 때문에 비효율적이다.
다시 스프링으로 돌아와서,
- 제어의 역전(IOC, Inversion of Control), 객체의 생성을 특별한 관리위임 주체에게 맡기는 것이다. 따라서 클래스 내부에서 직접 객체를 생성하는 것이 아니라, 스프링에게 제어를 위임하여 스프링이 만든 객체를 주입받아 사용하는 구조이다. 스프링에서는 모든 의존성 객체를 스프링이 실행될 때 만들어주고 필요한 곳에 주입해주는 방식. 이러한 방식을 의존성 주입(DI, Dependency Injection)이라고 한다. 이렇게 하는 이유는 외부인 스프링에서 객체를 생성하여 관리하는 경우, 변경사항이 생기더라도 주체와 객체가 서로에게 주는 영향이 적어지기 때문이고 이를 의존성이 줄어든다고 하는 것이다.
결국 스프링 부트는 복잡한 환경 세팅 없이 간단하게 스프링 프로젝트를 만들 수 있도록 도와주는 역할을 한다. 개발을 직접 해보면 실제 프로젝트 전에 개발을 위한 세팅 작업에 많은 시간과 에너지가 소모된다는 것을 느낄 수 있는데, 그 자원을 효율적으로 쓸 수 있도록 도와준다는 측면에서 매우 편리한 도구가 될 것 같다.
외부 참조 링크
https://melonicedlatte.com/2021/07/11/174700.html
스프링(Spring), 스프링 부트(Spring Boot)란? 개념 정리 - Easy is Perfect
melonicedlatte.com
https://gmlwjd9405.github.io/2018/10/27/webserver-vs-was.html
[Web] Web Server와 WAS의 차이와 웹 서비스 구조 - Heee's Development Blog
Step by step goes a long way.
gmlwjd9405.github.io
[JAVA] JVM이란? 개념 및 구조 (JDK, JRE, JIT, 가비지 콜렉터...)
JVM이란 무엇인가 Java Virtual Machine의 줄임말. 직역하면 '자바를 실행하기 위한 가상 기계(컴퓨터)'라고 할 수 있다. Java 는 OS에 종속적이지 않다는 특징을 가지고 있다. OS에 종속받지 않고 실행되
doozi0316.tistory.com
'Java Web Programming' 카테고리의 다른 글
노드js(node.js) 그리고 리액트(React)와 뷰(Vue) (0) 2022.10.03 자바 웹 개발자 취업을 위한 체크리스트 ( + UML, OOP, 상속, 캡슐화, 다형성 정리) (0) 2022.10.02 메이븐과 그래들 (0) 2022.10.02