GOORM-DEEP DIVE 백엔드 3회차 회고 DAY10

Cori1304·2025년 3월 11일
0

GOORM-DEEPDIVE

목록 보기
9/19

글을 쓰게된 배경

부트캠프에서 처음으로 java수업을 받고 있기에 기록하는 게 좋다고 생각했고, 수업이 있는 날이면 매일 글을 쓰려고 합니다. 쵀대한 몰랐거나 필요하다고 생각되는 내용 위주로 기록할 예정입니다. (제가 게을러서 이러한 시도를 성공한 적이 없기에 이번 부트캠프 목표 중 1가지입니다. 할 수 있도록 화이팅!!)


Thread

Thread는 프로세스 내에서 실행되는 작은 실행 단위입니다.
Java에서는 멀티스레딩(Multithreading) 을 사용하여 여러 작업을 동시에 실행할 수 있습니다.

Thread 사용 이유

  1. 멀티태스킹 가능(한 번에 여러 작업을 수행할 수 있음)
    ex) 음악을 들으면서 문서 편집
  2. 백그라운드 작업 처리 (파일 다운로드, 데이터베이스 처리 등)
    ex) 채팅 앱에서 메시지를 주고받을 때 서버와 통신
class MyThread extends Thread {
    private String name;

    public MyThread(String name) {
        this.name = name;
    }

    public void run() {
        for (int i = 1; i <= 3; i++) {
            System.out.println(name + " 실행 중: " + i);
            try { Thread.sleep(500); } catch (InterruptedException e) {}
        }
    }
}

public class MultiThreadExample {
    public static void main(String[] args) {
        MyThread t1 = new MyThread("스레드 1");
        MyThread t2 = new MyThread("스레드 2");

        t1.start();
        t2.start();
    }
}

아래와 같은 결과가 출력됨

스레드 1 실행 중: 1
스레드 2 실행 중: 1
스레드 1 실행 중: 2
스레드 2 실행 중: 2
스레드 1 실행 중: 3
스레드 2 실행 중: 3

Servlet

자바 서블릿(Java Servlet)은 자바를 사용하여 웹페이지를 동적으로 생성하는 서버측 프로그램 혹은 그 사양을 말하며, 흔히 "서블릿"이라 불린다 (위키피디아)
즉 서블릿은 클라이언트의 동적인 웹페이지 요청을 처리하기 위해 만들졌다.

주요 특징

  1. 서버에서 실행되는 자바 프로그램: HTML 페이지를 동적으로 생성하거나 데이터를 처리하는 역할
  2. 쓰레드 기반: 하나의 서블릿 객체가 여러 요청을 처리(CGI 방식보다 효율적)
    새로운 요청이 들어오면 새로운 스레드를 생성하여 처리 메모리 절약 & 성능 향상
    => 즉 요청마다 다른 스레드(Thread) 가 실행됨
  3. 클라이언트 요청을 동적으로 처리 데이터베이스와 연동하여 사용자 맞춤형 콘텐츠 제공 가능하고 정적인 HTML 페이지와 달리 동적인 웹 페이지 생성 가능
  4. HTTP 프로토콜 지원: HttpServlet을 확장하여 GET, POST 요청을 쉽게 처리할 수 있음.
  5. 플랫폼 독립적 : Java로 작성되므로 OS에 관계없이 실행 가능, 다양한 웹 서버에서 실행 가능 (예: Tomcat, Jetty, WebLogic 등)
  6. 서블릿 컨테이너(Servlet Container)에서 실행: 서블릿 자체는 웹 서버에서 직접 실행되지 않음, 서블릿 컨테이너(예: Tomcat, Jetty)가 서블릿을 관리하고 실행하며 클라이언트 요청을 받아 적절한 서블릿을 호출
  7. 영속성 없음 (Stateless) : 기본적으로 각 요청은 독립적이며, 이전 요청과 상태를 공유하지 않음.

클라이언트가 "HelloServlet"에 요청하면 "Hello, Servlet!"을 응답하는 서블릿 예제

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/HelloServlet") // 서블릿 URL 매핑
public class HelloServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        out.println("<h1>Hello, Servlet!</h1>");
    }
}

알게된것

nest.js에서 사용되는 controller와 비슷한 역할을 하는 것과 java가 계속 진화해온 것들에 대한 역사를 알게 되어서 재미있다. (근데 수업 진도를 빠르게 나가서 얇고 넓게 배워서 모르고 넘어가는 부분이 있어서 새로운 개념을 배우는 것이 너무 힘들다....)

참고 자료

https://sgcomputer.tistory.com/226
https://sgcomputer.tistory.com/226

<이미지 출처>

profile
개발 공부 기록

0개의 댓글

관련 채용 정보