@LEELEE
dev note
@LEELEE
  • 분류 전체보기 (29)
    • Project (10)
    • Study (19)
      • Java (9)
      • Spring (3)
      • Test (2)
      • DB (2)
      • Infra (1)
      • ETC (2)
      • CS (0)
    • 노트 (0)

인기 글

최근 글

태그

  • DB
  • 예외처리
  • Java
  • PS
  • 이펙티브자바
  • was
  • 객체지향
  • Til
  • AWS
  • springboot
  • Leetcode
  • HTTP
  • 배포자동화
  • test
  • oracle
  • Spring
  • transaction
  • PostgreSQL
  • junit
  • Redis
전체 방문자
오늘
어제
hELLO · Designed By 정상우.
@LEELEE

dev note

Project

1. JAVA로 아주 간단한 WAS와 Spring MVC Framework 만들기

2023. 1. 4. 23:32
  1. WAS란
  2. 네트워크 연결 (with Socket) 구현
  3. Servlet Container & Spring Container 구현
  4. Servlet 구현
  5. MVC 구현

 

프로젝트 목적

WAS와 Spring MVC Framework는 자바를 배우고 나서부터 사용해 왔지만 대략적인 구조만 알고 있었다.

구조로 인한 에러를 여러 번 겪다 보니 언젠간 직접 구조를 만들면서 학습해 봐야겠다고 생각했다.

하지만 뭐부터 해야 할지 막막함이 커 시작하기까지 오랜 시간이 걸렸다.

이 학습 프로젝트가 누군가의 막막함을 해소하는 데 작게나마 도움이 되었으면 좋겠다.

 

 

구현 코드

 

GitHub - leelee31/was: WAS 구조와 Spring MVC 동작 학습용 프로젝트

WAS 구조와 Spring MVC 동작 학습용 프로젝트. Contribute to leelee31/was development by creating an account on GitHub.

github.com

 

WAS란

*잠깐 알아두어야 할 것

웹은 인터넷에 연결된 컴퓨터를 통해 사람들이 데이터를 주고받는 공간이며 HTTP라는 통신 규약을 통해 데이터를 주고받는다.

 

Web Server

  • 클라이언트의 요청에 따라 정적인 자원Resource를 전달한다
  • Nginx와 Apache HTTP Server 등의 소프트웨어가 있다

여기서 말하는 정적인 자원들이란 html, css, js, 이미지, 영상 파일 등을 의미한다.

 

 

WAS

정적인 게 있으니 동적인 무언가도 있을 거란 추측을 할 수 있다.

  1. 요청 -> 요청한 파일을 찾아서 전달할 준비 -> 결과 응답
  2. 요청 -> 코드로 만들어진 작업 실행 -> 결과 응답

"동적인 무언가"는 1번처럼 어딘가에 저장된 파일을 전달하는 게 아니라, 2번처럼 코드로 만들어진 작업을 실행하는 것을 의미한다.

그리고 동적인 처리를 하는 서버가 바로 WAS(Web Application Server)이다.

 

자바 사용자들에게 가장 친숙한 Tomcat이 바로 WAS의 한 종류이다.

 

 

톰캣엔 웹 서버 기능이 포함되어 있어 Tomcat + DB만 있어도 웹 애플리케이션을 만들 수 있다.

다만 고려해야 할 점이 있다.

  • 클라이언트 요청이 많을 경우 톰캣에 과부하
  • 동적인 처리는 정적 자원 전달 처리에 비해 비용이 비쌈

따라서 서비스 규모가 좀 크다면

  • Web Server - Tomcat 구조

웹 서버를 톰캣 앞에다 두어 정적 처리와 동적 처리 역할을 분리하여 트래픽 과부하를 피할 수 있다.

 

 

Servlet Container

그렇다면 톰캣은 어떻게 동적 처리를 지원할까?

Servlet을 관리하여 지원한다. 톰캣은 서블릿을 관리하므로 Servlet Container라고도 한다.

Apache Tomcat® 소프트웨어는 자카르타 서블릿(Servlet), 자카르타 서버 페이지(JSP), 자카르타 표현 언어, 자카르타 웹소켓, 자카르타 주석 및 자카르타 인증 사양의 오픈 소스 구현체입니다.

 

 

Servlet

*잠깐 알아두어야 할 것

우리가 처음 자바로 무언가를 만들고 기동할 때 맨 처음 main() 메서드가 실행된다.

독립 자바 프로그램에서는 main() 메서드가 Entry Point인 셈이다.

톰캣으로 웹 애플리케이션을 만들어 본 경험이 있다면 main() 메서드가 없어도 프로그램이 실행된다는 걸 알고 있을 것이다.

서블릿 컨테이너로 만든 프로그램에서는 서블릿이 main() 메서드와 같은 엔트리 포인트 역할을 한다.

 

그렇다면 클라이언트 요청이 들어오면 어떤 일이 일어나길래 서블릿이 그런 역할을 하는 걸까?

  1. 클라이언트로부터 요청이 들어와 연결이 되면
  2. 서블릿 컨테이너는 Thread를 생성하고
  3. 쓰레드는 요청에 매핑된 서블릿을 호출

 

여기서 중요한 포인트 두 가지가 있다.

  1. 클라이언트 요청이 동시에 여러 개 들어올 때마다 서블릿을 생성할까?
  2. 클라이언트 요청이 동시에 여러 개 들어올 때마다 쓰레드를 생성할까?

 

1 -> 서블릿은 엔트리 포인트의 역할이므로 요청마다 생성할 필요 없이 기능 당 하나만 있으면 된다.

따라서 서블릿은 Singleton으로 관리된다.

 

2 -> 쓰레드 생성에 제한이 없을 경우 CPU와 메모리에 과부하가 걸릴 수 있다.

또한 컨텍스트 스위칭 비용이 많이 든다.

따라서 쓰레드는 Thread Pool을 이용하여 관리된다.

 

 

저작자표시 비영리 (새창열림)

'Project' 카테고리의 다른 글

3. JAVA로 아주 간단한 WAS와 Spring MVC Framework 만들기  (0) 2023.01.10
2. JAVA로 아주 간단한 WAS와 Spring MVC Framework 만들기  (0) 2023.01.07
커피 주문 서비스를 객체 지향으로 설계해보기 with Java  (0) 2022.10.19
4. AWS + Spring Boot + React 프로젝트 근데 이제 배포 자동화를 곁들인  (0) 2022.03.27
3. AWS + Spring Boot + React 프로젝트 근데 이제 배포 자동화를 곁들인  (0) 2022.03.25
    'Project' 카테고리의 다른 글
    • 3. JAVA로 아주 간단한 WAS와 Spring MVC Framework 만들기
    • 2. JAVA로 아주 간단한 WAS와 Spring MVC Framework 만들기
    • 커피 주문 서비스를 객체 지향으로 설계해보기 with Java
    • 4. AWS + Spring Boot + React 프로젝트 근데 이제 배포 자동화를 곁들인
    @LEELEE
    @LEELEE

    티스토리툴바