SKSDUD

[Framework 개요] Spring, Servlet에 대해... 본문

CodeStates/Section 02

[Framework 개요] Spring, Servlet에 대해...

NYinJP 2023. 2. 3. 15:42

Framework의 개념

소프트웨어의 구체적인 부분에 해당하는 설계와 구현을 재사용이 가능하게끔 일련의 협업화된 형태로
클래스들을 제공하는 것

결국 애플리케이션 개발 프로그래밍을 하기 위한 어떠한 틀이나 구조를 제공하여 개발자의 기본 틀 설계와 구현시의 수고를 덜어주는 것이다.

 

장점
  • Framework는 애플리케이션 간의 통신, 데이터 저장소에 데이터 저장하기 등의 다양한 기능들을 라이브러리 형태로 제공하기 때문에 개발자가 애플리케이션의 핵심 로직에 집중할 수 있도록 한다.
  • 정해진 규약이 있기 때문에 규약에 맞게 코드를 작성하면 문제점 파악이 빠르고 유지보수를 쉽게 할 수 있다.
단점
  • 내가 사용하고자 하는 Framework의 학습이 필요하다. 곧 Framework의 각 규약에 대한 공부.
  •  자유롭고 유연한 개발이 어렵다. 자유롭고 유연한 개발을 위해 Framework를 사용하지 않거나 변경하기 위해서는 엄청난 시간과 노력이 필요하다!

Framework와 Library의 차이

Library는

애플리케이션을 개발하는 데 사용되는 일련의 데이터 및 프로그래밍 코드입니다.

애플리케이션을 개발할 때 필요한 기능을 미리 구현해놓은 집합체.

 

Frame 위에 다양한 라이브러리들을 얹어서 애플리케이션을 만든다. 애플리케이션에 대한 제어권 차이로 둘을 구분합니다. Library는 애플리케이션 흐름의 주도권이 개발자에게 있는 반면, Framework은 애플리케이션 흐름의 주도권이 개발자가 아닌 Framework에 있다. IoC(Inversion Of Control, 제어의 역전)


Spring Framework란?

Spring Framework의 장점

  • POJO(Plain Old Java Object)기반의 구성
  • DI(Dependency Injection)지원
  • AOP(Aspect Oriented Programming) 지원
  • Java언어를 사용함으로써 얻는 장점

자바는 정적 언어 타입으로 변수와 메서드의 입/출력에 어떤 자료형을 갖는지 강제합니다. 

이는 협업 시, 다른 사람이 작성한 코드에 대해서 수정, 보완이 용이하고 웹 서버를 구축하는 데에 있어서 런타임에 발생하는 오류들을 사전에 방지할 수 있습니다. 


✔ 정적 타입 언어 VS 동적 타입 언어

정적언어

타입이란 한글로 해석하면 자료형입니다. 자바에는 기본 8가지 기본 자료형이 있고 이외에는 참조형으로 구분합니다.

자바의 기본 자료형 1 byte 2 byte 4 byte 8 byte
논리형 boolean      
문자형   char    
정수형 byte short int long(접미사 L)
실수형     float(접미사 f) double

정적언어란 위에서 언급한 '타입' 즉, 자료형을 컴파일 시에 결정하는 것 입니다. C, C#, C++, Java등이 대표적인 정적 타입 언어입니다. 변수에 들어갈 값의 형태에 따라 자료형을 지정해줘야 합니다. 컴파일 시에 알맞은 자료형이 아니라면 컴파일 에러가 발생합니다.

장점 
컴파일 시에 타입에 대한 정보를 결정하기 때문에 속도가 빠르고
타입 에러로 인한 문제점을 초기에 발견할 수 있어 코드의 안정성이 높아집니다.
또한, 위에서 설명한 웹 서버 개발에 있어서 장점도 존재합니다. 

 

동적언어

JavaScript, Ruby, Python, SmallTalk 등이 동적 타입 언어에 해당합니다. 

컴파일 시 변수의 자료형을 정하는 것이 아니라 실행 시에 결정합니다. 자료형 없이 변수를 선언합니다.

장단점
많은 선택의 여지가 있고 자료형 고민이 없는 쉬운 개발이 가능합니다.

배우기 쉽지만 실행 도중 변수에 예상치 못한 타입이 들어와 타입에러가 발생할 수 있습니다. 

자료형을 쓰냐? 정적 타입 언어 안쓰냐? 동적 타입 언어

말이 어렵다고 겁먹지 않기

 


Spring Framework를 배우는 이유

Spring boot 까지의 개발방식 변화

0️⃣ JSP(Java Server Page)을 이용한 애플리케이션 개발
View 쪽 페이지의 코드와 서버쪽 코드가 섞여있는 형태의 개발 방식입니다.
➡ java코드와 html/Javascript 코드가 뒤섞여 있음

1️⃣ Using Servlet
Spring을 사용한 웹 요청을 처리할때에도 내부적으로 Servlet을 사용한다.
서블릿이란? 클라이언트 웹 요청 처리에 특화된 Java 클래스의 일종이다. 
여기서는 Servelt을 위한 코드가 클라이언트 코드로부터 분리되어 별도의 Java 클래스로 관리할 수 있게 되었다는 의미다.

3️⃣ Spring MVC를 이용한 애플리케이션
서블릿 방식의 코드에서 개발자가 작성해줘야 했던 로직을 Spring에서 알아서  처리해준다! 코드가 아주 간결해짐.

4️⃣ Spirng boot의 탄생
Spring의 복잡한 설정 작업마저도 Spring이 대신 처리를 해주기 때문에 개발자는 애플리케이션의 핵심 비즈니스 로직에만 집중할 수 있게 되었다. 

💭 Servlet의 개념(다시 공부!)

자바 웹 서버로 웹 페이지를 제공할 때, 동적인 데이터를 제공하는 것을 도와주는 자바 클래스의 일종이다.

서블릿은 GCI와 달리(각 요청에 대한 프로세스를 각각 만들어 처리하는 것. 대량의 트래픽이 들어올 경우 처리하기가 어렵다) 프로세스 하나가 있고 그 내부에서 스레드 풀이라는 스레드들이 생성될 수 있는 공간을 만들어 스레드로 처리한다. 또한 스레드 풀은 스레드의 개수를 지정하여 일정 이상의 요청이 들어왔을 때는 대기하도록 하여 대량의 요청이 들어올 때도 안정성 있게 처리할 수 있다. 

 

서블릿 개발 흐름

  1. 개발자가 자바 서블릿 소스코드(.java)를 작성한다. 
  2. 해당 자바 서블릿 소스가 빌드시 컴파일되며 서블릿 클래스(.class)가 된다.
  3. 해당 자바 서블릿 클래스가 톰캣과 같은 서블릿 컨테이너에 등록된다.
  4. 클라이언트가 특정 경로에 대한 HTTP Request를 보낸다.
  5. HTTP Request에 상응하는 서블릿이 실행된다.
  6. 서블릿 메소드(비즈니스 로직)가 실행된다.
  7. DB 연동 작업이 있는 경우 DB 연동이 되어 데이터를 CRUD한다.
  8. 완성된 데이터를 클라이언트에게 반환해준다.

서블릿 컨테이너란?

서블릿들의 생성, 실행, 파괴를 담당합니다.

서블릿을 가지고 있는 서블릿들을 위한 상자입니다.

 

웹 서버가 하는 일

웹 서버는 데이터를 전송하기 위해 HTTP 프로토콜을 사용합니다.
일반적인 상황에서 사용자는 브라우저에 URL(https://sksdud14.tistory.com)을 입력합니다.
그리고 사용자는 웹페이지를 얻게 됩니다.
웹서버가 하는 일은 웹페이지를 사용자에게 전송하는 것입니다.

서블릿 컨테이너는 클라이언트의 request를 받고 response를 위해 웹 서버와 소켓을 만들어 통신합니다. 

 

<참고사이트 : 블로깅의 신을 본 느낌이다. 와우>

 

서블릿 컨테이너(Servlet Container) 란?

서블릿들을 위한 상자(Container) 입니다.

velog.io

 

'CodeStates > Section 02' 카테고리의 다른 글

코딩 테스트 준비  (0) 2023.01.19
자료구조 - 트리, 그래프, 이진트리  (0) 2023.01.17
[Section 02] 자료구조 - 스택, 큐  (0) 2023.01.16
[Section02] JSON과제  (0) 2023.01.16
[Section 2] 2학년 시작, 재귀함수  (0) 2023.01.12