2월 13, 2024

웹 서버와 WAS 처리 프로세스

 지난 포스트에서 미들웨어 솔루션의 한 가지 유형으로 WAS (Web Application Server)에 대하여 알아보았다. WAS 이외에 다른 미들웨어 솔루션에 대해 알아보고 싶다면 아래 링크를 참고하자. 

https://www.programmingstory.com/2024/02/middleware.html


상세한 웹 서버와 WAS 처리 프로세스에 대해서는 다루지 않았기에 이번 포스팅에서 다루어보도록 하겠다. 

 


웹서버와 WAS 처리 프로세스

 

 

웹 서버와 WAS 처리 프로세스를 한 눈에 정리하자면 위 그림과 같다. 위 그림에 표시된 1,2,3,4,5의 과정으로 프로세스가 이루어지는데 각각의 프로세스에 대해 잘 알아보도록 하자.

 

1. 먼저 웹 브라우저가 웹 서버에 페이지를 요청한다. (웹 브라우저 -> 웹 서버)

2. 요청받은 웹 서버는 웹 브라우저의 요청을 받아서 요청된 페이지의 로직 및 DB와의 연동을 위해 애플리케이션 서버에 처리르 요청한다. (웹 서버 -> WAS)

3. 웹 애플리케이션 서버는 DB와의 연동이 필요하면 DB와 데이터의 처리를 수행한다. (WAS -> DB, DB -> WAS)

4. WAS는 로직 및 DB 작업 처리 결과를 웹 서버에게 보낸다. (WAS -> 웹 서버)

5. 웹 서버는 결과를 다시 웹 브라우저에 응답한다. (웹서버 -> 웹 브라우저)

 



웹 애플리케이션 서버가 웹 서버와 구별되는 가장 큰 차이점은 동적 서버 컨텐츠를 수행할 수 있는 기능이다. 웹 서버는 웹 브라우저의 요청을 받아 HTTP를 통해 웹 브라우저에서 요청하는 HTML 문서나 object를 전송해주는 서버이다. WAS는 HTTP 세션 처리를 위한 웹 서버 기능뿐만 아니라 민감한 기업 업무까지 자바, 컴포넌트 기반으로 구현이 가능하다. 


2월 13, 2024

미들웨어(Middleware) 솔루션에 대해 알아보자

 미들웨어 (Middleware) 라는 개념도 정보처리기사 중 소프트웨어 설계 과목에 잘 등장하는 개념이다. 미들웨어의 개념과 솔루션 유형에 대해 알아보도록 하자.


먼저, 미들웨어란 컴퓨터와 컴퓨터 간의 연결을 안전하고 용이하게 할 수 있도록 해주고 이에 대한 전반적 관리를 도와주는 소프트웨어라고 할 수 있다. 더 자세히 설명하자면, 미들웨어란 서로 다른 프로토콜이나 시스템 운영체제, 데이터베이스와 어플리케이션 사이의 통신을 지원해주는 소프트웨어를 지칭하고 어플리케이션이 특정 정보 시스템 환경에서 작동할 수 있도록 지원해주는 역할을 한다고 생각하면 된다. 


이러한 미들웨어 솔루션에는 다양한 유형이 있다. 어떠한 것이 미들웨어 솔루션에 속하며, 각각의 솔루션의 특징을 간략히만 알아두자.



1) RPC ( Remote Procedure Call ) : 원격 프로시저 호출

응용 프로그램의 procedure를 사용하여 원격 procedure를 로컬 procedure처럼 호출하는 방식의 미들웨어를 뜻한다. 즉, 원격임에도 불구하고 로컬처럼 procedure를 호출할 수 있도록 도와주는 미들웨어라고 생각하면 된다.


2) DB 미들웨어

DB와의 통신을 위해서는 DB 솔루션 업체에서 제공되는 어플과 DB 간의 통신이 가능해야 하는데, DB 미들웨어가 이를 도와준다. DB 미들웨어란 DB 솔루션 업체에서 제공하는 애플리케이션과 DB 사이의 원활한 통신을 목적으로 하는 미들웨어이다.


3) MOM ( Message-oriented Middleware ) : 메세지 지향 미들웨어

메세지 지향 미들웨어는 말 그대로 메세지 기반의 메시지 전달 방식 미들웨어이다. 또한, 메시지 전달 방식 중 비동기형 전달방식을 택하고 있어 서로 다른 이기종 분산 DB 시스템의 데이터 동기를 위하여 주로 사용된다.


4) TP ( Transaction Processing) : 트랜잭션 처리 모니터

온라인 업무에서 트랜잭션을 처리, 감시하는 미들웨어로, 분산 환경의 핵심 기술인 분산 트랜잭션을 처리하기 위한 미들웨어이다. 분산 트랜잭션을 처리하는 만큼 주로 사용자가 많고 안정적이면서도 즉각적인 처리가 필요한 업무 프로그램 개발에 많이 사용된다.


5) Legacyware : 레거시웨어

레거시웨어란 기존의 애플리케이션이나 DB 기반에 새로운 업데이트된 기능을 추가하고자 할 때 사용하는 미들웨어이다. 


6) ORB ( Object Request Brokers) : 객체 기반 미들웨어

객체 기반 미들웨어는 CORBA 표준 스펙을 구현한 객체 지향 미들웨어로, 이를 사용하여 다양한 기반으로 구축된 컴퓨터 간의 프로그램과 데이터의 교환/변환이 편리하게 이루어질 수 있도록 지원한다.

 

7) WAS ( Web Application Server)

한국어로도 웹 애플리케이션 서버라고 불리며, 서버계층에서 애플리케이션이 동작할 수 있는 환경을 제공하고 안정적인 트랜잭션을 처리/관리하며, 다른 이기종 시스템과의 애플리케이션 연동을 지원하는 미들웨어이다. WAS와 웹 서버가 동작하는 처리 프로세스에 대해 다음 포스팅에서 자세하게 다루었으니 참고하면 좋을 것 같다.



정보처리기사에서는 질문에 특정 미들웨어 솔루션의 특징을 물어보고, 답으로 해당 솔루션의 이름을 골라야 하는 문제들이 자주 출제되었다. 따라서 종류가 많더라도 각각의 미들웨어 솔루션의 이름과 특징을 연결지을 수 있어야 할 것이다. 



8월 30, 2023

[Spring] JNDI를 사용한 DataSource 검색/ JNDI 정의, JDBC와 다른 장점

Spring에서 JNDI를 사용하여 DataSource를 검색할 수 있는 방법에 대해 알아보도록 하겠다.

 

1. JNDI란?

JNDI는 Java Naming and Directory Interface의 약자로, Java 언어를 사용하여 작성된 application에 이름 지정 및 디렉토리 기능을 제공해주는 API이다. 

 

우리가 흔히 알고 있는 JDBC와의 다른 점은 무엇일까?

JDBC는 DB에서 정보를 가져올 떄마다 매 번 DB연결을 열고, 닫고의 과정을 거치게 된다. 각 어플리케이션을 사용할 때마다 DB객체를 생성하고, connection을 연결하며 다 사용하면 connection을 종료하는 과정을 매번 거쳐야 하기 때문에 효율이 매우 떨어지는 방식이다. 이러한 이유로 상용되는 어플리케이션에서는 JDBC의 방식을 사용하지 않고 Pool 방식을 사용한다. 그리고 이러한 Pool 방식을 사용하는 예시로 JNDI 방식이 있다. 

 

JNDI는 어플리케이션이 아닌 WAS에 DB 커넥션 객체를 미리 네이밍해두는 방식인데 WAS 단에 미리 네이밍을 해둠으로써 DB 설정 정보를 파악하기 용이하며 효율적인 DB 커넥션 풀 방식을 이끌어낼 수 있다. 


 

2. JNDI기반으로 DataSource 검색하는 예시 

JNDI를 사용하여 DataSource를 검색하는 예시 코드를 살펴보자.

 

먼저 DB에 대한 이름 설정을 아래 web.xml 코드에서 설정해준다. 리소스에 대한 이름 등록은 <res-ref-name> 태그에서 해주게 된다. 

<resource-ref>
  <description>DataSource using JNDI example</description>
  <res-ref-name>jdbc/mydatabase</res-ref-name>
  <res-type>javax.sql.DataSource</res-type>
  <res-auth>Container</res-auth>
</resource-ref>

 

같은 xml 파일 또는 외부 설정 xml 파일에서 JNDI를 사용하여 검색을 수행할 수 있다. 

<jee:jndi-lookup id="dataSource" 
	jndi-name="jdbc/mydatabase" resource-ref="true" />

JNDI DatasSource 검색을 위해서는 jee 네임스페이스를 응용프로그램 안에서 정의해야 하며 

위 코드에서 볼 수 있듯이 jee:jndi-lookup 요소를 사용해야 한다.

 

위에서 id 특성은 해당 DataSource의 Bean이 노출될 ID를 지정하는 것이고 위 코드에서는 dataSource라는 아이디로 노출될 수 있도록 지정한 것이다. 

resource-ref="true"

위 코드는 해당 객체가 resource로서 응용프로그램 단위뿐 아니라 나아가 서버 scope에서 전역적으로 사용될 수 있게 한다는 뜻이다. 

 

위 설정을 지정하면 Spring에서는 JNDI 이름에 공통적으로 표준 접두사인

java:comp/env/

를 덧붙이게 되고 그러면서 전체 JNDI full 이름은 

java:comp/env/jdbc/mydatabase

가 되는 것이다. 


이렇게 JNDI 구성 방식을 사용하면 DataSource를 한 번만 만들고 여러 응용 application 프로그램 사이에 연결 풀을 공유하도록 할 때 효율적이고 용이하다는 장점이 있다.

 

또한 DB 연결 정보를 어플리케이션 단으로부터 독립시켜 구성할 수 있기 때문에 보안에도 안전하다.