포스트

Day63 Java프로그래밍 기초(웹프로그래밍)

웹프로그래밍

기존 myapp 프로토콜

  • 기존 프로젝트는 전용 프로토콜을 사용하여 클라이언트-서버간 통신을 수행한다.
  • 현 프로젝트에는 유효한 기술이지만, 범용성적인 측면에서 효용성이 떨어진다.
  • 보편적인 기술을 적용하는 것이 범용성, 보편성을 충족 시킬 수 있다.
  • 보편적인 기술을 적용하여 클라이언트와-서버가 통신 하도록 하는 프로그래밍을 웹프로그래밍이라고 한다.

image

웹 애플리케이션 아키텍처 및 구동 원리

웹 서버(Web Server)

  • 정의
    • 웹 서버는 클라이언트(브라우저)에서 요청한 정적 콘텐츠(HTML, CSS, 이미지, JavaScript 파일 등)를 제공하는 서버이다.
    • 웹 서버는 주로 HTTP 프로토콜을 사용하여 클라이언트와 통신하고, 클라이언트의 요청을 처리하여 정적 파일을 전달하는 역할을 수행한다.
  • 기능
    • 정적 콘텐츠 제공: HTML, 이미지, CSS, JavaScript 파일과 같은 정적 리소스를 클라이언트에 전달.
    • 로드 밸런싱: 여러 서버 간의 트래픽을 분배하는 기능을 제공하여, 높은 트래픽을 효율적으로 처리.
    • HTTP 요청 처리: 클라이언트에서 들어오는 HTTP 요청을 받아 그에 따른 응답을 반환.

웹 애플리케이션 서버(Web Application Server, WAS)

  • 정의:
    • 웹 애플리케이션 서버는 동적인 콘텐츠를 생성하는 서버로, 웹 서버와는 달리 복잡한 비즈니스 로직을 처리하고, 데이터베이스와 통신하며, 사용자의 요청에 따라 동적 페이지(예: JSP, PHP, ASP.NET) 및 애플리케이션 로직을 수행한다.
    • 웹 애플리케이션 서버는 웹 서버와의 통합 기능도 제공하며, 주로 서블릿이나 JSP 등의 기술을 사용하여 웹 애플리케이션을 동작하게 한다.
  • 기능:
    • 동적 콘텐츠 생성: 클라이언트의 요청에 따라 사용자 맞춤형 동적 콘텐츠를 생성.
    • 비즈니스 로직 처리: 복잡한 비즈니스 로직을 수행하고, 이를 통해 요청에 따른 데이터를 가공하여 클라이언트에 응답.
    • 데이터베이스 연동: 데이터베이스와의 상호작용을 통해 데이터의 CRUD 작업을 수행.

웹 서버와 웹 애플리케이션 서버의 차이점

항목웹 서버(Web Server)웹 애플리케이션 서버(WAS)
주요 역할정적 콘텐츠(HTML, 이미지, CSS 등)를 제공동적 콘텐츠 처리 및 비즈니스 로직 수행
주요 기능HTTP 요청 처리, 정적 리소스 제공, 로드 밸런싱서블릿, JSP 처리, 데이터베이스 연동, 트랜잭션 관리
주로 사용하는 콘텐츠정적 콘텐츠 (HTML, CSS, JavaScript, 이미지)동적 콘텐츠 (서블릿, JSP, PHP, ASP.NET)
대표적인 예Apache HTTP Server, Nginx, Microsoft IISTomcat, JBoss, WebLogic, WebSphere
연동 가능성보통 웹 애플리케이션 서버와 함께 사용 (WAS와 연동 가능)자체적으로 웹 서버 기능도 포함
복잡성단순: 정적 파일을 전달하는 데 중점복잡: 비즈니스 로직, 데이터베이스 연동, 동적 콘텐츠 처리
응용 프로그램 처리직접적인 응용 프로그램 처리 기능 없음웹 애플리케이션 및 비즈니스 로직 처리

웹 서버와 웹 애플리케이션 서버의 관계

  • 웹 서버는 주로 정적 콘텐츠를 제공하는 역할에 중점을 둡니다. 웹 서버는 클라이언트의 요청에 따라 HTML 파일이나 이미지와 같은 정적 파일을 전송한다.
  • 웹 애플리케이션 서버(WAS)동적 콘텐츠를 처리하며, 사용자 요청에 따라 비즈니스 로직을 처리하고, 필요한 데이터를 가공하여 클라이언트에 동적인 페이지를 전달한다.
  • 실제로 웹 서버와 WAS는 종종 함께 사용되며, 웹 서버가 정적 콘텐츠를 처리하고, 동적 콘텐츠 요청을 WAS로 전달하는 형태로 사용된다.

image

Web Application Server의 구조

클라이언트 계층 (Web Browser)

  • 웹 브라우저(Web Browser) 는 클라이언트 측에서 사용자가 상호작용하는 요소이다.
  • 브라우저는 HTTP 프로토콜을 통해 서버로 요청을 보내고 결과를 받는다.

웹 서버(Web Server)

  • 웹 서버(Web Server) 는 웹 브라우저로부터 들어오는 HTTP 요청을 받아 처리한다.
  • 웹 서버는 주로 정적 콘텐츠(HTML, CSS, 이미지)를 제공하는 역할을 하지만, 동적 요청은 WAS로 전달한다.
  • HTTP 요청이 웹 서버로 전달되고, WAS로 전달된다.

웹 애플리케이션 서버(Web Application Server, WAS)

  • WAS는 웹 서버로부터 동적 요청을 받아, 내부의 비즈니스 로직을 처리하는 계층으로 전달한다. Tomcat 같은 웹 서버가 이 역할을 수행한 후, 요청을 WAS로 넘겨 처리한다.

애플리케이션 계층 (Java Application)

  • WAS 내에서 비즈니스 로직Java Application에 의해 처리된다. 이는 Java로 작성된 서버 애플리케이션으로서, 클라이언트의 요청에 따라 데이터를 처리하고, 로직을 수행한다.

데이터 처리 및 응답 흐름

  • Java Application에서 요청을 처리한 후, execute 과정이 일어나고 그 결과가 클라이언트에게 Return을 통해 응답한다.
  • 이 응답은 WAS를 통해 다시 웹 서버로 전달되며, 최종적으로 클라이언트인 웹 브라우저로 반환된다. 이때 HTTP 응답을 통해 처리된 결과가 클라이언트에 전달된다.

image

Web Developer

  • WAS와 상호 통신하는 JavaApp을 개발하는 개발자를 웹프로그래밍 개발자라고 한다.
  • WAS와 JavaApp이 상호 통신을 하기위해서는 JavaEE 기술명세에 따라 작성을 해야한다.

image

JavaEE 기술 명세

  • 기업용 App 제작을 위해 다양한 기술을 모은 버전이다.
  • 다양한 애플리케이션 서버 환경에서 작동하며, 대규모, 확장 가능한, 신뢰성 있는 애플리케이션을 쉽게 구축할 수 있도록 여러 기술 명세를 제공한다.
대표기술내용
Servlet/JSP- WebApplication 제작기술
EJB- 분산 컴포넌트 제작기술
Web Service- 웹 기반 분산컴포넌트 제작기술
Authentication & Deployment- 관리 및 보안 기술


JavaEE 기술 명세와 항목 기술/ 구현 서버

  • 항목 기술은 다음과 같다.
구분ServletJSPELEJB
Java EE 5ver 2.5ver 2.1-ver 3.0
Java EE 6ver 3.0ver 2.2ver 2.2ver 3.1
Java EE 7ver 3.1ver 2.3ver 3.0ver 3.2
Java EE 8ver 4.0ver 2.3ver 3.0ver 3.2
  • 구현서버 버전은 다음과 같다.
구분서버WebLogicWebSphereJEUSTomcat
Java EE Ver510.36.1, 7.06.06.0
Java EE Ver611g, 12c7.0, 8.07.07.0
Java EE Ver712c, 12.28.5, 9.08.08.0
Java EE Ver812.2.1, 14.19.0.x8.1, 8.28.5, 9.x
  • 이처럼 버전 별로 다르기 때문에

서블릿 컨테이너와 서블릿

서블릿(Servlet)

  • 서블릿자바로 작성된 서버 측 컴포넌트로, 클라이언트의 HTTP 요청을 처리하고, 그 결과로 HTTP 응답을 생성하는 역할을 한다.
  • 서블릿은 동적인 웹 콘텐츠를 생성하는 데 사용되며, 자바의 클래스로 구현된다.

서블릿 컨테이너(Servlet Container)

  • 서블릿 컨테이너는 서블릿을 관리하고 실행하는 환경을 말한다. Java EE 표준을 따르며, 서블릿의 생명 주기(생성, 초기화, 요청 처리, 종료)를 관리한다.
  • 서블릿 컨테이너는 HTTP 요청을 받아 서블릿으로 전달하고, 서블릿의 응답을 클라이언트로 돌려보낸다.
  • 또한, 서블릿 컨테이너는 멀티스레딩, 세션 관리, 보안 등의 기능을 제공하여 서블릿이 효율적으로 작동할 수 있도록 지원한다.

서블릿과 서블릿 컨테이너의 관계

  • 서블릿은 서블릿 컨테이너 안에서 실행됩니다. 서블릿 컨테이너는 서블릿을 생성하고, 초기화하며, 클라이언트의 HTTP 요청을 서블릿에 전달하고, 서블릿이 생성한 HTTP 응답을 클라이언트에게 다시 전송하는 역할을 한다.
  • 서블릿의 생명 주기(생성, 초기화, 서비스 요청 처리, 종료)는 서블릿 컨테이너에 의해 제어된다. 서블릿 컨테이너가 없다면, 서블릿은 독립적으로 동작할 수 없다.

image

JAVA EE / Jakarta EE

  • 과거에는 Oracle이 관리했으나, 2017년에 Eclipse Foundation으로 이관되면서 Jakarta EE로 이름이 변경되었다.
  • Jakarta EE는 엔터프라이즈급 애플리케이션 개발에 필요한 확장된 기능을 제공하며, 웹 애플리케이션, 대규모 분산 시스템, 트랜잭션 처리, 메시징 등의 기능을 포함한다.
  • JavaEE 버전에 따라 SpringBoot(Tomcat)버전이 다르다.

image

Tomcat 설치 및 구동

  • tomcate서버의 구조는 다음과 같다.

image

Tomcat 서버 구조

  • Web Brower : 유저에게 UI를 출력하는 곳이다. 정적자원을 실행하는 주체이다.
  • Mini Web Server : 정적자원을 관리하는 곳이다.
  • Web Container(Servlet Container) : Servlet을 구축하는 환경이다. Application에 명령을 호출한다.
  • Java App : Servlet을 수행하며 동적자원을 관리한다.

image

Tomcat 서버 실행

  • tomcat mini web sever는 개발용으로는 적합하나, 성능이 제한된다.
  • web server는 NginX와 같은 외부 서버를 혼용해서 사용한다.

image

웹 프로젝트 생성 및 구동

  • Tomcat server 실행 방법은 간접실행과 직접실행이 있다.
  • 간접실행 : Tomcat Embedded서버를 통해 서버를 구동하는 방식.
  • 직접실행 : .war파일을 tomcat서버 파일에 옮기거나 Eclipse임시폴더로 구동하는 방식.

image image

웹애플리케이션 + 톰캣서버 배치

  • 웹애플리케이션 + 톰캣서버 : 라이브러리를 통해서 Tomcat Embedded Server를 구축 하여 jar파일을 생성한다.

image

  • Tomcat Embedded Server 구축 코드는 다음과 같다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
import java.io.File;
import org.apache.catalina.WebResourceRoot;
import org.apache.catalina.connector.Connector;
import org.apache.catalina.core.StandardContext;
import org.apache.catalina.startup.Tomcat;
import org.apache.catalina.webresources.DirResourceSet;
import org.apache.catalina.webresources.StandardRoot;

public class App {
  public static void main(String[] args) throws Exception {
    System.out.println("서버 시작!");

    // 톰캣 서버를 구동시키는 객체 준비
    Tomcat tomcat = new Tomcat();

    // 서버의 포트 번호 설정
    tomcat.setPort(8888);

    // 톰캣 서버를 실행하는 동안 사용할 임시 폴더 지정
    tomcat.setBaseDir("temp");

    // 톰캣 서버의 연결 정보를 설정
    Connector connector = tomcat.getConnector();
    connector.setURIEncoding("UTF-8");

    // 톰캣 서버에 배포할 웹 애플리케이션의 환경 정보 준비
    StandardContext ctx = (StandardContext) tomcat.addWebapp("/", // 컨텍스트 경로(웹 애플리케이션 경로)
        new File("src/main/webapp").getAbsolutePath() // 웹 애플리케이션 파일이 있는 실제 경로
    );
    ctx.setReloadable(true);

    // 웹 애플리케이션 기타 정보 설정
    WebResourceRoot resources = new StandardRoot(ctx);

    // 웹 애플리케이션의 서블릿 클래스 등록
    resources.addPreResources(new DirResourceSet(resources, // 루트 웹 애플리케이션 정보
        "/WEB-INF/classes", // 서블릿 클래스 파일의 위치 정보
        new File("bin/main").getAbsolutePath(), // 서블릿 클래스 파일이 있는 실제 경로
        "/" // 웹 애플리케이션 내부 경로
    ));

    // 웹 애플리케이션 설정 정보를 웹 애플리케이션 환경 정보에 등록
    ctx.setResources(resources);

    // 톰캣 서버 구동
    tomcat.start();

    // 톰캣 서버를 구동한 후 종료될 때까지 JVM을 끝내지 말고 기다린다.
    tomcat.getServer().await();

    System.out.println("서버 종료!");
  }
}
  • 코드의 구조는 다음과 같다.

image


직접배치

  • 직접배치 하는 방법은 표준 웹프로젝트 구조를 참고하여 직접 war파일을 옮기는 방법과 Eclipse에서 지원하는 자동 배치하는 방법이 있다.
  • 프로젝트 하위 폴더에 webapp에서 정적자원을 관리하고, WEB-INF에서 동적 파일 및 설정 파일 관리한다.

image

  • Maven 표준 웹 프로젝트 구조를 참고하여 war파일을 생성한다.
  • 생성된 war파일을 tomcat 서버 webapps에 놓는다.

image

  • 서버를 실행하면 war파일의 압축이 풀리면 app폴더가 생성 된다.

image

Eclipse 배치

  • Eclipse에서 설정에서 서버를 설정한다.
  • 서버를 추가하고, 서버를 구축할 java프로젝트를 선택한다.
  • 서버를 Pulishgkaus Eclipse임시 배치 폴더에 웹프로젝트가 생성된다.

image

image

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.