Coding/Server

[내일배움캠프] Spring 입문

kangplay 2025. 3. 25. 15:06

Web Application

  • Web Server
    • 웹 서버는 HTTP 기반으로 동작하며, 정적 리소스(HTML, CSS, JS, 이미지 등)을 제공한다.
    • 예) nginx, apache
  • WAS(Web Application Server)
    • WAS는 HTTP 기반으로 동작하며 웹 서버의 기능을 포함한다. 추가적으로 코드를 실행해서 애플리케이션 로직을 수행하고 DB와 상호작용하여 동적 컨텐츠를 생성한다.
    • 예) tomcat, jetty, undertow

 

💘 Web Server와 WAS의 차이점
실제로는 웹 서버도 애플리케이션 로직을 포함할 수 있다. WAS는 애플리케이션 코드를 실행하는 것에 더욱 특화되어 있다. 자바에서는 서블릿 컨테이너 기능을 제공하면 WAS이다. 
WAS만 사용하면 서버 과부하 발생 가능성이 높아지고, WAS에 장애가 생기면 오류 페이지를 클라이언트에게 응답할 수 없다. 따라서 정적 리소스는 웹 서버에서 처리하고, 웹 서버는 애플리케이션 로직이 필요한 요청만 WAS에 전달하는 것이 올바르다.

Servlet

Servlet이란, HTTP 프로토콜 기반 요청 및 응답을 처리하는 데 사용된다. 즉, Java 기반 웹 애플리케이션에서 요청을 받아 동적인 페이지 등의 응답을 생성하는 역할이다. 

  • 서버와 tcp/ip 연결
  • http 요청 메시지 분석 및 읽기
  • 비즈니스 로직 실행 -> 이 부분만 개발자가 구현하도록!
  • http 응답 메세지 생성
  • 응답 전달
  • 연결 종료

ExampleServlet에서 비즈니스 로직 처리

서블릿 컨테이너가 서블릿 객체를 싱글톤으로 관리(초기화, 생성, 관리, 호출 종료)하는 역할을 수행한다. 또한, 동시 요청에 대한 처리를 위해 멀티 스레드를 지원한다.

Multi Thread

WAS는 여러 개의 요청을 동시에 처리하기 위해 멀티 스레드를 지원한다. 이때, 스레드의 생성 비용은 매우 비싸므로, 요청마다 스레드를 생성하면 응답 속도가 느려진다. 또한, 너무 많은 스레드 생성 시 서버가 죽을 수 있다. 

WAS는 스레드 풀에 여러 스레드를 미리 생성해두고 요청이 들어올 때마다 할당하고 반환하는 과정을 거친다.

 

개발자는 멀티 스레드 관련 코드를 신경쓰지 않아도 된다. 하지만, 멀티 스레드 환경이므로 싱글톤 객체(서블릿, 스프링 빈)는 주의해서 사용해야 한다.

스레드가 모두 실행중일 때, 새로 들어온 요청에 대기시키거나 거절한다.

SSR과 CSR

  • SSR이란, 서버에서 동적으로 HTML을 만들어 클라이언트에게 제공하는 기술로, 개발자 개발자 영역에 속한다. Java에서는 JSP, Thymeleaf가 대표적으로 사용된다.
    • 모든 요청에 대해 서버가 페이지를 렌더링해야하므로, 서버의 부하가 크게 증가할 수 있다.
    • SEO는 검색 엔진에서 상위에 노출될 수 있도록 최적화하는 과정으로, SSR은 완전한 HTML을 응답하므로 크롤러가 HTML을 분석하는 SEO에 유리하다.
  • CSR이란, 웹 브라우저에서 자바스크립트를 사용해 동적으로 HTML을 생성해서 적용하는 기술로 프론트 엔드 개발자 영역에 속하는 React, Vue가 대표적으로 사용된다.
    • 초기 로딩 시 필요한 모든 자바 스크립트 파일을 다운로드하고 실행해야 하므로, 초기 로딩 시간이 길다. 하지만, 초기 로딩 후에는 서버와의 통신 없이 빠르게 페이지 간 전환이 가능하다. 

Spring Framework

  • 프레임 워크, 라이브러리
    • 프레임워크는 애플리케이션을 개발할 때 전체적인 구조(Frame)를 잡기 위해 사용하는 것으로, 기본적으로 프레임워크 내에서 사용하는 라이브러리들이 존재한다.
    • 라이브러리는 개발을 진행하는 과정에서 필요한 기능을 구현하기 위해 사용하는 것으로, 클래스, 함수 등을 모아 놓은 코드의 모음이다.

  • Annotation
    • 어노테이션은 코드에 메타데이터를 추가할 수 있는 기능을 제공하며 컴파일러와 런타임에 특정 동작을 트리거하기 위해 사용된다. 내장 어노테이션 뿐만 아니라, 개발자가 필요에 따라 사용자 정의 어노테이션을 생성할 수 있다.
    • 예를 들어, 롬복 라이브러리의 @Getter, @Setter, @ToString, @NoArgsConstructor, @Data 등은 모두 각 클래스, 생성자, 객체 등을 자동으로 생성해준다.
  • Spring Framework 특징
    • Spring 프레임워크는 서버 성능, 안정성, 보안 문제를 고도화된 수준으로 해결해줌으로써, 개발자가 비즈니스 로직 개발에 집중할 수 있게 되었다.
    • Java 언어의 가장 큰 특징인 객체 지향 언어 특징을 살려낸 프레임워크이다.

  • Spring Boot
    • Spring Boot는 스프링 프레임워크를 기반으로 하여 간편하고 신속하게 애플리케이션을 개발할 수 있도록 도와주는 도구이다.
    • 스프링 프레임워크는 초기 설정과 구성 파일이 복잡하고 방대했다.
    • 스프링 부트는 자동 구성 기능을 제공하여, 개발자가 복잡한 설정을 직접 처리할 필요가 없다.
      • @SpringBootApplication만으로 내장 서버가 실행
      • spring-boot-starter-web을 포함하면 Spring MVC가 web.xml 설정 없이 자동 설정
      • 데이터베이스 설정 yml 파일 참고하여 자동으로 구성
  • 빌드
    • 빌드는 소스 코드를 실행 가능한 소프트웨어로 변환하는 전체 과정으로, 컴파일뿐만 아니라 링크(컴파일된 파일들을 jar로 합침), 패키징(리소스 파일 등을 모아 배포 가능하도록 구성), 배포 과정까지 포함된다.
    • Gradle은 강력한 성능으로 빌드를 자동화하여 쉽게 관리할 수 있도록 도와주는 도구이다.
      • plugins: 인텔리제이 우측에 있는 task를 실행
      • dependencies: 프로젝트에서 사용하는 라이브러리나 패키지 관리
        • implementation: 컴파일, 런타임 시점 모두 사용
        • compileOnly: 컴파일 시점에만 사용
        • runtimeOnly: 런타임 시점에만 사용
        • tesetplementaion: 테스트 시점에만 사용
      • repositories: 라이브러리가 저장된 위치를 정의하고 저장소에서 라이브러리를 가져옴.