2022-04-07(목)

Jeongyun Heo·2022년 4월 7일
0

애플리케이션 아키텍처

91-미니프로젝트3 / 1 페이지

① standalone
App ---데이터I/O---> 메모리(RAM)
데이터를 메모리(RAM)에 저장
컴퓨터 끄면 데이터 다 날아감

App ---데이터I/O---> 파일
각자 자기의 파일을 다룬다
파일 공유에 관련돼서
각각의 사용자가 데이터를 공유하려면
파일을 어떻게 공유할까

App ---데이터I/O---> 공유HDD(=공유폴더)
파일 동시 접근 문제
• 데이터 변경/삭제에서 결함 발생
• 접근 권한 제어?
• 데이터 중복 관리? 데이터 동기화

동기화(synchronous) => 일치하게 하다

직원 정보는 인사 시스템에서만 등록, 수정, 삭제한다
회계 시스템에서도 직원 정보를 등록, 수정, 삭제하게 되면
서로 일치하지 않는 상황이 발생할 수 있다 (동기화 되지 않는 문제)

91-미니프로젝트3 / 2 페이지

② Client/Server

DBMS 도입

App ---데이터I/O---> DBMS ---데이터I/O---> 파일

Data I/O 대행
동기화 관리
사용권한 관리

체계적으로 데이터 공유

SQL 규칙에 맞춰서 명령을 던져야 한다
JDBC API
JDBC API 규칙에 따라서 구현한 것 -> JDBC Driver

Application 기능 변경 -> 재설치 (uninstall → install)

글로벌 비즈니스 가속화
→ 경쟁 심화
→ 제품 출시 기간이 짧아짐
→ 업무 조직의 변경이 잦아짐
→ 업무 변경이 잦아짐
→ S/W 변경이 잦아짐
→ 재설치가 잦아짐
→ 유지보수 어려움

91-미니프로젝트3 / 3 페이지

클라이언트와 서버로 쪼갠다
낮은 성능의 H/W 여러 개를 묶어 높은 성능을 내는 컴퓨터로 만드는 기술들이 등장함으로써 비용이 낮아졌기 때문에 가능했다

어플리케이션(App.)을 쪼개서 서버에서 실행한다(Application Server)
ClientApp을 둔다
ClientApp이 Application Server를 통해서 작업을 요청한다
ClientApp : UI 제공. 사용자의 입력을 받고 결과를 출력하는 일만 한다.
Application Sever : 업무 작업 수행
ClientApp과 Application Server 둘 사이에 통신을 한다
Application Server와 DBMS 사이에도 통신을 한다

ClientApp ---작업 요청---> Application Sever
ClientApp: UI 제공
Application Server: 업무 작업 수행

Application Sever ---데이터 처리 요청---> DBMS
DBMS: 데이터 처리

DBMS ---데이터I/O---> 파일

어느 관점에서 보느냐에 따라 client가 되고 server가 된다
상대적임

기능 변경 -> 서버쪽만 변경하면 된다 -> 유지보수가 쉽다

모든 프로그램을 서버에서 실행한다?

높은 하드웨어 성능 요구?
• 그리드 컴퓨팅 등장
• 분산 컴퓨팅 등장
• 블레이드 서버 등장
낮은 성능의 H/W 여러 개를 묶어 높은 성능을 내는 컴퓨터로 만드는 기술
→ 비용이 낮아짐

낮은 성능의 H/W 여러 개를 묶어 높은 성능을 내는 컴퓨터로 만드는 기술들이 등장함으로써 비용이 낮아졌기 때문에 가능했다

91-미니프로젝트3 / 4 페이지

Application Sever 한 단계 더 나아가
여기다가 웹 기술을 결합을 시킨다
WAS 등장

웹 브라우저와 웹 서버 사이의 통신은 HTTP가 담당
웹 기술 적용

네트워킹 프로그램을 짤 필요 없다
네트워킹 + 멀티스레드 프로그래밍을 할 필요가 없다
웹 서버가 대체하기 때문

③ Client/Server + Web = WAS

91-미니프로젝트3 / 4 페이지

웹 기술 적용

Client/Server 기술에다가 웹 기술을 결합을 시킴 -> WAS 등장

WAS (Web Application Server)

③ Client/Server + Web 기술 = WAS (Web Application Server)
Web Browser <---HTTP---> Web Server
• ClientApp을 개발할 필요가 없다 => 웹브라우저 사용
• 네트워킹 + 멀티스레드 프로그래밍을 할 필요가 없다 => 웹 서버 사용
• 이기종 플랫폼(OS, 프로그래밍 언어) 간에 연동이 쉽다

✨ 웹 기술을 적용하면서 개발자가 얻는 이점
① ClientApp을 개발할 필요가 없다 => 웹 브라우저 사용
② 네트워킹, 멀티스레드 프로그래밍을 할 필요가 없다. => 웹 서버 대체
③ 이기종 플랫폼 간에 연동이 쉽다 (클라이언트와 서버 간에 OS가 달라도 된다, 프로그래밍 언어가 달라도 된다, 웹 브라우저 뿐만 아니라 모바일 App (안드로이드(자바/코틀린), iOS(Swift/Objective-C))

표준 프로토콜 HTTP, 표준 파일 포맷 XML, JSON 형식으로 데이터를 주고받고
이 규칙에 따르기만 한다면 클라이언트 프로그램을 뭐로 짜든지 서버 프로그램을 뭐로 짜든지 상관없다. 이렇게 어플리케이션 아키텍처가 발전하게 됨.

웹 애플리케이션

91-미니프로젝트3 / 5 페이지

웹 애플리케이션 : 웹 서버가 실행하는 애플리케이션

Web Browser (Client)

Web Browser ---> HTTP 요청/응답 ---> Web Server ---> 실행 ---> App

웹 서버는 원래 정적 자원 로딩하는 용도로 만든 거임.. 프로그램을 실행하기 위해 만든 게 아니었음

웹 서버는 App을 실행하는 기능이 없다
=> 해결책
웹 서버에 그런 일을 하는 플러그인을 장착하여 수행

웹 서버의 고유 기능 -> 정적 자원 로딩
정적 자원 (static resource) : html, css, js, png, jpg 등등
정적 자원은 매번 실행할 때마다 똑같은 결과가 나옴
결과가 수시로 변하는 요청을 동적 페이지 요청이라고 한다.

자바 웹애플리케이션 표준 제작 기술 등장

Web Browser와 Web Server.. 둘 사이는 HTTP 프로토콜에 맞춰서 요청과 응답을 한다.
자바 애플리케이션 (Java App.) 을 웹 서버가 실행을 해야 하는데 웹 서버는 특정 언어의 프로그램을 실행하도록 만들어져 있지 않다.

Web Browser <---HTTP---> Web Server ---실행---> Java App

정적 자원 (static resource)
매번 실행할 때마다 똑같은 결과
.html
.css
.js
.png
.jpg
.gif

웹 서버는 App을 실행하는 기능이 없다.
해결책
웹 서버에 그런 일을 하는 플러그인을 장착하여 수행
물론 웹 서버를 만드는 개발자들이 플러그인을 장착하여 웹서버의 기능을 자유롭게 확장할 수 있도록 프로그램을 짰기 때문에 가능한 것이다.

웹 서버마다 플러그인을 장착하는 방법이 다르다!
예) Apache, NginX, IIS 등

웹 애플리케이션 제작 기술 - CGI

91-미니프로젝트3 / 6 페이지

CGI 프로그래밍

Web Browser ---HTTP 요청/응답---> Web Server + App. 실행 플러그인 ---실행---> C/C++ App

🔷 CGI (Common Gateway Interface)
웹 서버와 애플리케이션 사이에 데이터를 주고받는 표준 기술

웹 애플리케이션 제작 기술 - 서버 스크립팅

91-미니프로젝트3 / 7 페이지

🔷 script: C/C++보다 좀 더 가벼운 문법을 가진 프로그래밍 언어
예) javascript, vbscript, php, perl 등

🔷 scripting: script로 프로그램을 짜는 것

Web Browser ---HTTP 요청/응답---> Web Server + App. 실행 플러그인 ---실행---> 서버 스크립팅 엔진 ---> 서버 스크립트

서버 스크립팅 엔진 예 : NodeJS, PHP 엔진, Perl 엔진, ASP, ...
서버 스크립트 예 : hello.php, hello.pl, hello.js, hello.asp

C, C++은 원래 하드웨어를 제어하기 위해 등장했다.

C/C++ ⇒ H/W를 제어하기 위해 등장 ⇒ 메모리 주소를 다루는데 특화되었다 ⇒ 포인터

웹 애플리케이션은 주로 웹페이지(HTML, CSS, JavaScript)를 다룬다
⇒ 즉 문자열을 주로 다룬다
⇒ C/C++ 언어가 불편하다

C/C++ CGI 프로그램 ⇒ 문자열을 다루는 문법이 불편
⇒ 웹 애플리케이션은 주로 웹페이지(HTML, CSS, JavaScript)를 다룬다
⇒ 즉 문자열을 주로 다룬다
⇒ C/C++ 언어가 불편하다
⇒ 문자열을 다루기 쉽고, 소스 변경 즉시 실행할 수 있는 스크립트류의 언어를 사용하게 되었다

웹 애플리케이션 제작 기술 - 자바 웹애플리케이션

91-미니프로젝트3 / 9 페이지

Web Browser -> Web Server -> JVM -> Java App.

Web Server -> Java App. (예 - Hello.class)
다이렉트로 실행 안 됨
⇒ why? 가상 기계어이기 때문
• 진짜 기계어가 아니기 때문
• Bytecode(p-code)이다

자바 웹 애플리케이션 제작 표준 기술 "등장"

91-미니프로젝트3 / 10 페이지

웹 서버와 자바 프로그램 사이에 연동 기술 필요

일반적인 자바 프로그램이 아니라 웹 서버와 연동하는 자바 프로그램이다.
웹 서버와 연동하는 데 사용할 특별한 도구(API)가 필요!

웹 서버와 연동하는 데 필요한 기능
① 웹 서버와 Java App. 사이에 데이터를 주고 받을 도구가 필요
② Java App.의 객체를 생성하고 실행을 시켜줄 도구가 필요
③ HTTP 웹 기술을 다룰 도구가 필요
=> 특정 회사나 특정 개발자에 종속되지 않는 표준 기술이 필요
=> Servlet/JSP 기술 등장

JVM + (객체 생성, 실행, 객체 관리)
웹 애플리케이션 제작에 유용한 도구

웹 서버와 Java App. 사이에 데이터를 주고받을 때 사용할 도구가 필요

JVM + 도구

JVM을 바로 실행할 수가 없으니까

• 웹서버와 자바 App. 사이에 데이터를 주고 받을 도구가 필요
• 자바 App의 객체를 생성하고 실행을 시켜줄 도구 필요
• HTTP 웹기술을 다룰 도구가 필요
→ 특정 회사나 특정 개발자에 종속되지 않는 표준 기술이 필요
⇒ Servlet/JSP 기술 등장

자바 웹 애플리케이션 아키텍처

91-미니프로젝트3 / 11 페이지

Web Browser -> Web Server -> Java App. 관리자 + JVM

Java App. 관리자 = Servlet Container
Java App. = Servlet

Java App. = Servlet : Servlet API 규칙에 따라 만든 Java 프로그램

Java App. 관리자 = Servlet Container : Java App.(Servlet) 객체를 생성하고 실행

JVM은 자바를 실행

Hello.class에 excute() 라는 메서드가 있다고 하자
JVM은 얘를 실행할 수 있을까?

엔진 : 단순 실행
컨테이너 : LifeCycle 관리 (생성에서 소멸까지 관리)

Engine : 단순 실행
Container : lifecycle 관리

Servlet Container : Servlet 생성에서 소멸까지 관리

JVM이 Servlet Container를 실행

서블릿 컨테이너와 서블릿

JVM은 자바를 실행

Hello.class에 excute() 라는 메서드가 있다고 하자
JVM은 얘를 실행할 수 있을까?

이클립스 보면 앎

객체를 생성
객체를 생성해라, 뭐해라, 뭐해라... 관리자가 있어야 될 거 아님
JVM이 App.class에 있는 main() 메서드를 실행시킨다
App.class가 컨테이너이다.

JVM은 바이트코드를 실행시키는 거
바이트코드를
도우미 클래스가 필요... 그게 App.class

서블릿 프로그래밍

서블릿 : 웹서버에 상관없이 동일한 방법으로 웹애플리케이션을 제작할 수 있게 해주는 기술

Web Browser -> Web Server -> Servlet Container -> Servlet

Servlet Container ----(객체 생성 → 호출)---> Servlet

Servlet Container을 제작해야 되나 Servlet을 제작해야 되나?
Servlet Container는 이미 제작된 컨테이너가 많이 있다
예) Tomcat, Resin, Jetty, Udertow
Servlet을 제작하면 된다
Servlet API를 사용하여 제작 규칙에 따라 웹 애플리케이션을 작성한다.

서블릿 컨테이너와 서블릿

Servlet Container ----호출---> Servlet

<<interface>> Servlet ---Servlet 구현---> .class
Servlet 인터페이스의 규칙에 따라 클래스를 만들어야 한다
그래야만 Servlet Container가 호출할 수 있다

Servlet Container 설치 필요
Tomcat 서버 설치

0개의 댓글