Servlet

j0yy00n0·2025년 3월 12일

2025.03.11

스레드, 네트워크, Servlet

스레드

프로세스(Process)

실행중인 프로그램

  • 프로그램이 실행 될 때 마다 개별적으로 생성
  • 하나의 프로세스 = 할당 받은 자원(프로그램 수행 함에 있어 필요한 데이터, 메모리 등) + 하나 이상의 Thread

스레드(Thread)

프로세스 내에서 할당 된 자원을 이용해 실제 작업을 수행하는 작업의 단위

  • 모든 프로세스는 하나 이상의 스레드를 가지며 각각 독립적인 작업 단위를 가진다.

메인 스레드와 프로세스 종료

  • 모든 자바 프로그램은 메인 스레드가 main() 메소드를 실행하며 시작
  • main 메소드의 첫 번째 코드부터 아래로 순차적 실행, return 구문을 만나게 되면 종료
  • 필요에 의해 작업 스레드를 만들어 코드를 병렬로 실행할 수 있다.

멀티 Process & 멀티 Thread

  • 멀티 프로세스(Process) : 각각의 프로세스를 독립적으로 실행
  • 멀티 스레드(Thread) : 하나의 프로세스 내에서 여러 스레드가 동시에 작업 수행

싱글 Thread 와 멀티 Thread

  • 싱글 Thread : 메인 스레드 하나만 가지고 작업을 처리 -> 순차적 진행
  • 멀티 Thread : 메인 스레드 외에 추가적인 스레드를 이용하여 병렬적으로 작업 처리
  • 멀티 Thread 장점!
    • 자원을 보다 효율적으로 사용 가능
    • 사용자에 대한 응답성 향상
    • 분리된 작업으로 코드가 간결
  • 멀티 Thread 단점!
    - 동기화 주의 필요
    - 교착 상태 발생 주의
    - 프로그래밍 시 고려 해야 할 사항 다수
  • run() : run() 코드 실행, 단일 스레드 메서드
    run() 메소드는 main() 메소드 위에 쌓이게 된다.
  • start() : run() 코드 실행, 멀티 스레드 메서드
    start() 메소드가 새로운 Thread 를 생성하고 그 위에 run() 가 쌓이게 된다.

스레드 생성방법

객체 생성 후 Thread 타입의 인스턴스로 변환 후 Thread / Runnable 사용

  • Thread 클래스 상속 받는 방법
  • Runnable 인터페이스 상속 받는 방법

Thread Controll

스레드를 어떤 순서로 동작 시킬 지 결정하는 것

우선 순위 방식 (Priority)

  • 우선 순위가 높은 스레드가 작업 시간을 더 많이 가지게 하도록 하는 스케줄링 방식
  • 스레드에 1 ~ 10 까지 우선 순위 번호 부여 가능하다. (default = 5)

순환 할당 방식 (Round-Robin)

  • 시간 할당량(Time Slice) 를 지정하여 하나의 스레드를 정해진 시간만큼 실행
  • JVM 에 의해 정해지며 Code Controll 불가

네트워크

네트워크

여러 대의 컴퓨터를 통신 회선으로 연결한 것

Server

서비스를 제공하는 컴퓨터(프로그램)

  • 클라이언트의 연결을 수락하고 Request 내용을 처리 후 Response

Client

서비스를 제공 받는 컴퓨터(프로그램)

  • 서버의 DATA를 필요로 하는 모든 Application

Socket Programming

Socket Programming

소켓을 이용한 통신 프로그래밍

  • Socket : 프로세스 간의 통신에 사용되는 양쪽 끝 단

TCP

  • 데이터 전송 속도가 느림
  • 정확하고 안정적으로 Data를 전달할 수 있다.
  • 연결 지향적 프로토콜
  • TCP Socket Programming
    - 클라이언트와 서버 간의 1:1 소켓 통신
    • 서버가 먼저 실행되어 클라이언트의 요청을 기다린다.

UDP

  • 데이터 전송 속도가 빠름
  • 신뢰성 없는 Data를 전송할 수 있다.
  • 비연결 지향적 프로토콜
  • UDP Socket Programming
    - 연결 지향적이지 않다.
    • 요청을 받아 줄 의무가 없고 전달하는 것에 목적

Servlet

Server-Client-Model

  • 서버는 특정한 서비스를 제공하는 컴퓨터를 의미
  • 클라이언트는 이러한 서비스를 이용하는 사용자를 의미

Server 종류

Web Server

웹 브라우저와 Http 프로토콜을 사용하여 사용자의 요구에 따른 특정한 서비스를 제공하는 서버

DataBase Server

발생하는 Data를 저장, 열람, 추가, 수정, 삭제

Web의 통신 구조

Web-Server

사용자에게 HTML 페이지나 이미지를 HTTP 프로토콜을 사용하여 웹 브라우저에 제공하는 서버

  • 내부의 내용이 이미 만들어져 있는 정적인 요소들을 화면에 보여주는 역할(HTML,이미지,CSS,JavsScript 등)
  • Web Server 의 종류 : Apache, Microsoftlls, Nginx
  • ex) 네이버 첫 화면

Was-Server

Web Application Server

  • 사용자가 요청한 서비스의 결과를 스크립트 언어로 가공
  • 가공하여 생성한 동적인 페이지를 사용자에게 보여주는 역할
  • Was Server 의 종류 : tomcat, WildFly, Jeus
  • ex) 네이버 로그인, 검색 결과 페이지, 회원가입 ...

Web

장점

  • 요청에 대한 결과 페이지만 전송하기 때문에 빠른 처리 속도
  • HTML 같은 단순한 문서로 작성하기 때문에 구현이 간단

단점

  • 이미 구현된 정보만 보여주기 때문에 한정적인 서비스
  • 문서의 내용이 변경되면 직접 수정해야 함 -> 변경 내용 반영 시 어려움

Was

  1. client(사용자)
  • 사용자가 웹사이트에 접속하여 web 서버에 요청을 보냄
  1. Web Server(웹 서버)
  • client 요청을 받아 정적 콘텐츠 제공
  • 동적인 요청 -> Was로 전달
  1. Was Server(웹 애플리케이션 서버)
  • web 서버로 받은 요청을 Servlet Container(서블릿 컨테이너) or JSP Container(JSP 컨테이너)에서 처리. Was Server -> Container(Servlet Container + JSP Container)
  • 데이터베이스와 연동하여 필요한 데이터를 가져오거나 비즈니스 로직을 실행
  1. 프로그램 실행
  • WAS 멀티 스레딩 방식으로 여러 사용자의 요청을 동시에 처리
  • 사용자 요청이 많아도 동시에 여러 개의 프로세스를 실행하여 빠르게 응답

장점

  • 여러 데이터를 활용할 수 있기 때문에 서비스의 다양성이 증대
  • 문서의 내용이 변경 될 경우 직접 수정하지 않는다 -> 추가, 수정, 삭제 등이 편함

단점

  • 데이터를 처리하여 결과를 응답하기 때문에 처리 속도가 느릴 수 있다.
  • 변경 서비스에 대한 소스 코드를 직접 작성해야 하기 때문에 구현 난이도가 높다.

Container

Servlet Container

  • 서블릿의 생명 주기를 관리 -> 초기화, 생성, 소멸
  • HttpServletRequest(사용자한테 요청을 받았을 때), HttpServletResponse(사용자한테 응답을 해줄 때) 객체를 생성
  • 요청에 따라 멀티스레딩 구성, 전송 방식에 따라 동적으로 페이지 구성 작업 진행. 정적로딩 처리!!

JSP Container

  • JSP 파일을 Java 코드로 변경 해주고, Class 파일로 전환하여 메모리 공간에 로드
  • 로드 후에 실행 가능하게 만드는 작업을 진행한다 -> Serlvet 화
  • 처리 결과를 HTML 파일로 만들어주는 작업 진행. 동적로딩 처리!!

서블릿 라이프사이클

  • 서버가 start 될 때 인스턴스를 생성하고 init()를 호출
  • public void init(ServletConfig config) throws ServletException : 서블릿 최초 요청 시에만 동작하는 메소드
  • public void destroy() : 컨테이너가 종료될 때 호출되는 메소드이며 주로 자원을 반납하는 용도로 사용
  • public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException : 서블릿 컨테이너에 의해 호출되며 최초 요청 시에는 init() 이후에 동작하고, 두 번째 요청부터는 init() 호출 없이 바로 service()를 호출

서블릿 라이프 사이클 확인 방법

  • .xml 이용

    - servlet-class 부분에 디렉토리 주소를 넣어서 연결 및 요청
    - servlet-name : 서블릿의 논리적인 이름을 지정
    - load-on-startup : 서버 시작 시 서블릿을 즉시 로드하도록 설정

    - servlet-mapping : 특정 URL을 위에서 정의한 서블릿과 연결, /xml-lifecycle로 들어오는 요청이 LifeCycleTestServlet에서 처리됨을 의미
    - servlet-class : 서블릿 클래스의 전체 패키지 경로를 지정하는 요소, 실제 요청을 처리하는 서블릿 클래스를 지정
    - url-pattern : 클라이언트가 요청하는 URL과 서블릿을 연결하는 역할, 어떤 URL이 해당 서블릿과 매핑될지를 결정

  • Annotation 이용

Annotation(애노테이션)

자바 코드에 추가적인 메타데이터(설명)를 제공하는 기능

  • 컴파일러에게 정보 제공
    - @Override
    • @Deprecated
  • 런타임(실행 중)
    - @WebServlet
    • @SpringBootApplication
  • 코드를 자동으로 생성하거나 설정을 단순화
    - @Getter, @Setter

컴파일러 관련 애노테이션

@Override : 메서드가 부모 클래스의 메서드를 오버라이딩하고 있음을 명시.
@Deprecated : 해당 코드가 더 이상 사용되지 않음을 알림.
@SuppressWarnings : 컴파일러 경고를 무시

런타임(실행 중) 사용하는 애노테이션

@WebServlet : 서블릿을 정의하는 데 사용, .xml 파일을 사용하지 않고 설정가능

  • @WebServlet(value = "/서블릿이 처리할 URL 패턴 지정", loadOnStartup =1)
    - loadOnStartup : 서블릿의 로드 순서를 지정하는 옵션(숫자가 낮을 수록 우선순위가 높음)
    @Entity : JPA 엔티티 클래스로 설정
    @SpringBootApplication : 스프링 부트 애플리케이션의 시작점

자동 코드 생성을 활용한 애노테이션

@Getter : 자동으로 Getter 메서드 생성
@Setter : 자동으로 Setter 메서드 생성
@ToString : toString() 메서드 자동 생성

참고

profile
잔디 속 새싹 하나

0개의 댓글