[SW 코칭 - WEB MVC] 1주차

hyelim·2023년 8월 21일
0

SW 코칭 회고

목록 보기
1/5
post-thumbnail

아직 작성중인 글입니다 :) 불완전한 내용이 포함되어 있을 수 있습니다 ✔️

엔터프라이즈 자바와 자바 플랫폼 이해하기

Java™ Platform, Standard Edition(Java SE) 및 Java Platform, Enterprise Edition(Java EE)은 Java 프로그래밍 언어로 애플리케이션 서버를 프로그래밍하기 위해 폭넓게 사용되는 플랫폼

Java SE

Java Platform, Standard Edition(Java SE)은 추상 Java 플랫폼을 기술하는 스펙

자바의 표준 플랫폼이자 핵심기능을 제공, 데스크톱의 다양한 환경에서 사용

가장 기본이 되는 표준 에디션인 자바 플랫폼이다. 보통 JavaSE Development Kit, 줄여서 JDK를 설치 받아서 사용할 수 있다.
java.lang.*, java.io.*, java.util.* 등등 java 프로그래밍 언어를 배울때 사용하는 대부분의 패키지가 이에 속한다

Java EE, 엔터프라이즈 자바

  • Java SE를 기반으로 다계층, 앤터 프라이즈 애플리케이션 개발환경을 제공
  • 엔터 프라이즈 애플리케이션에 필요한 확장성, 신뢰성, 보안성등을 제공하는 자바 플랫폼이자 프레임워크이다.
  • 대규모, 네트워크, 다계층 애플리케이션을 더 쉽고 안전하고 탄탄하게 구축할 수 있도로 도와준다.
  • 웹을 통한 UI, 시스템 통합을 위한 리모팅, 선언적 트랜잭션 처리등 전체 애플리케이션 스택을 제공해준다.
  • 다양한 자바 명세 요청서를 바탕으로 작성된 표준 API의 모음이다

자바 플랫폼

스프링 프레임워크의 특징 알아보기

스프링에 대해 알아보자

스프링이란 자바 엔터프라이즈 개발을 편하게 해주는 오픈소스 경량급 애플리케이션 프레임워크라고 한다

스프링의 변천사

자바를 이용해 비즈니스 서비스를 개발할 때 비즈니스 로직 뿐만 아니라 트랜잭션, 보안 등 로우레벨의 로직까지 작성해야하는 부담감을 없애고자 EJB(Enterprise Java Beans)를 만들었다고 한다.
EJB를 사용하면서 로우레벨의 로직 개발에 대한 수고를 덜 수 있었지만, 한 두가지 기능을 사용하기 위해 거대한 EJB를 상속받거나 implements 하게 되어 가벼운 서비스조차도 무겁게 만들어졌고, 다른 기능으로 대체하기 위해선 전체 코드를 수정해야 하는 문제점이 발생하였다.
이에 JAVA의 기본 개념인 객체지향에 집중하고, 특정 클래스나 라이브러리에 종속되지 않는 POJO 구성으로 코드를 작성한다면 이런 문제점을 해결할 수 있을 것이라고 생각했다.
이런맥락에서 Spring은 POJO 방식을 기반으로 한 웹 프레임워크이고, IoC와 DI, AOP 등 Spring의 주요 기술을 활용해 POJO 기반의 구성을 이루게 되었다.

스프링이 하는 일

웹 기술 빠르게 훑어보기

HTTP

인터넷 상에서 클라이언트와 서버가 자원을 주고 받을 때 쓰는 통신 규약

HTTP Method

HTTP request, response

HTTP 상태코드

요청에 대한 응답상태이며 웹 브라우저는 상태코드에 따라 동작방식을 결정한다

MIME 타입

서버 또는 클라이언트에 전송된 리소스 유형을 알려주기 위한 매커니즘

자바 웹 기술 빠르게 훑어보기 (Jakarta Servlet / JSP)

Jakarta Servlet과 JSP는 웹 애플리케이션을 개발하는데 필수적인 요소입니다. 서블릿은 웹 애플리케이션의 컨트롤러로서 요청을 처리하고, JSP는 뷰를 생성하는 역할
이때 서블릿은 WAS(Web Application Server)의 서블릿 컨테이너 안에서 동작하게된다

자바 서블릿의 동작과정

웹서버, 애플리케이션 서버, 웹 애플리케이션 서버, 서블릿 컨테이너

웹서버: 정적 데이터를 처리하는 서버

  • HTTP 프로토콜을 기반으로 하여 클라이언트의 요청을 서비스하는 기능을 담당
  • ex. Apache, Nginx
  • 정적인 컨텐츠 제공하기에 WAS를 거치지 않고, 바로 요청한 컨텐츠를 제공할 수 있다.
  • 동적인 컨텐츠 제공을 위한 요청 전달로도 사용되고, 요청을 WAS에 보내고, WAS가 처리한 결과를 클라이언트에게 전달한다.

애플리케이션 서버: 서버 사이드 코드를 이용하여 동적인 컨텐츠를 만드는 서버 ( ⊃ WAS)

  • WAS 가 여기에 포함된다

웹 애플리케이션 서버(WAS): 다양한 서버 내 알고리즘, 비즈니스 로직, DB 조회 등 클라이언트 요청에 따라 동적인 컨텐츠를 제공하는 서버, 프로그램

  • 웹 서버에서 요청을 받고, 이를 WAS로 보내 로직(알고리즘, DB 연결 등)을 수행하고 그 결과를 다시 웹 서버로 보내 최종적으로 클라이언트에게 보내주는 것
  • 웹 서버(Web Server) + 웹 컨테이너(Web Container)를 결합한 서버
  • WAS 는 J2EE 스펙을 구현하여, 서블릿이나 JSP 로 작성된 애플리케이션을 실행하는 스프트웨어이다.

    WAS 가 웹 서버의 역할까지 수행하면 되는거 아닌가?? 아니다!

    1. 기능을 분리하여 서버 부하를 방지한다. 정적 콘텐츠까지 WAS 가 처리하면 처리 속도가 너무 느려진다
    2. 물리적으로 분리하여 보안을 강화시킨다. (SSL 대한 암복호화 처리에 Web Server를 사용한다)
    3. 여러 대의 WAS를 연결해 로드 밸런싱 용도로 사용할 수 있다.
    4. 여러 언어의 웹 어플리케이션 서비스가 가능하다.

    즉, 자원 이용의 효율성 및 장애 극복, 배포 및 유지보수의 편의성을 위해 Web Server, WAS를 각기 사용한다.

서블릿 컨테이너: 서블릿과 JSP 같은 Java 웹 컴포넌트를 관리하고 실행하는 환경을 제공

서블릿 컨테이너는 서블릿을 담고 관리해주는 컨테이너
위에서 설명한 WAS 는 서블릿 컨테이너를 포함한다.

두 가지 스프링 웹 애플리케이션 스택 이해하기

절대 다수의 웹 애플리케이션의 서블릿 스택이 쓰이지만
메시징 기반의 서비스, 채팅 애플리케이션, 주식 애플리케이션(비트코인) 등에는 리액티브 스택이 유리하다고 한다

스프링 웹 MVC 특징 알아보기

리플렉션 API with Annotation

  • 객체를 통해 클래스의 정보를 분석해내는 프로그램 기법이다
  • 기본적으로 제공하는 자바의 API로, 자바의 Reflection은 클래스, 인터페이스, 메서드들을 찾을 수 있고, 객체를 생성하거나 변수를 변경할 수 있고, 메서드를 호출할 수 도 있습니다.
  • 리플렉션은 런타임에 특정 클래스, 메서드, 필드 등의 정보에 접근할 수 있도록 하는 Java의 API이다.

    스프링에서 @Controller, @Service, @Repository 등의 어노테이션만 붙이면, Bean Factory에서 알아서 해당 어노테이션이 붙은 클래스를 생성하고 관리해주는데, 개발자들이 Bean Factory에 해당 클래스들을 알려준 적이 없는데 어떻게 해당 클래스를 인지하는 것일까?

여기서 리플렉션 API 의 개념이 사용된다. 컴파일 이후 런타임에 해당 어노테이션이 붙은 클래스들을 탐색하고 발견한다면, 리플렉션을 통해 해당 클래스의 인스턴스를 생성하고 필요한 필드를 주입하여 Bean Factory에 저장해두어 인지한다고 한다.
아래와 같이 애노테이션과 리플렉션 API가 작동한다.

스프링 부트

웹 자동 구성

개발자는 호환성을 고려해 시스템을 설계할 줄 알아야한다. 즉 애플리케이션 스택을 조립해야한다. 하지만 너무 오래걸리고 복잡하기 때문에 스프링부트가 이러한 기능을 해준다

스프링 웹 애플리케이션은 프론트 컨트롤러 패턴과 mvc 아키텍쳐 패턴으로 동작하고 전자는 모든 요청을 받아 후자를 통해서 요청을 처리한다. 이 프론트 컨트롤러의 스프링 컨트롤러의 이름은 dispatcher servlet 이고, 루트 URL 로 접근하면 dispatcher servlet가 활성화되면서 요청을 받아 내부에서 처리해 줄 수 있는 MVC를 찾고 없으면, 404 not found를 낸다.

설정정보를 통한 로그 레벨 설정

trace, debug, info, warn, error

profile
기록용

0개의 댓글