본문 바로가기

CS지식

운영체제와 WAS 정리

반응형

유닉스(Unix)

  • 중, 대형 서버 시스템에 가장 많이 이용되는 OS
  • 고성능, 고가용성의 운영체제
  • 예) IBM(AIX), HP(HP-UX), SUN(Soralis)

리눅스(Linux)

  • 1991년 리누스 토발즈(Linus Torvalds)가 중,대형 기종에서만 작동하던 유닉스를 PC에서도 동작할 수 있게 만든 OS
  • 특징
    • 프로그램 소스코드를 무료로 공개하여 사용자는 원하는 대로 특정 기능을 추가함 (오픈소스)
    • 어느 플랫폼에서도 포팅이 가능함
    • 현재는 개인 PC, 기업의 중대형 컴퓨터, 임베디드 기기, 모바일 기기에서도 리눅스가 동작

리눅스 구성

  • 리누스 토발즈가 1991년에 리눅스 커널 0.01버전을 작성
  • 1992년에 0.02버전을 내놓으면서 인터넷에 소스코드를 공개, 이것이 리눅스 시초
  • 통상적인 리눅스는 토발즈가 만든 커널에 컴파일러, 셸, 기타 프로그램이 조합된 배포판
  • 배포판은 전 세계적으로 수백 가지가 넘지만 모두 토발즈가 제작한 커널을 사용하며 대표적인 것이 우분투리눅스

※ 쉘 : 커널과 사용자간의 인터페이스로서 중간매개의 역할을 담당함

 

 


리눅스 배포 정책

  • 리눅스는 무상으로 배포 운영
  • 대표적인 리눅스 배포판

유상 배포 리눅스

  • 기업의 경우 유지보수와 패키지 추가 지원을 위해 서비스 비용을 지불하고 사용함

예 ) RedHat Linux

 


커널

  • 커널의 구성
    • 안정 버전(stable version) : 이미 검증된 개발 완료 코드로 구성
    • 메인라인 버전(mainline version) : 토발즈가 개발 중인 버전, 안정 버전이 나오기 전에 추가된 기능을 미리 접하고 싶을 때 사용
    • 프리패치 버전(prepatch version) : 안정 버전이 나오기 전에 추가된 버전을 미리 접하고 싶을 때 사용

커널 버전 업그레이드

파일 이름에 붙은 숫자 5.1.15에서

5는 주버전(major version), 1은 부버전(minor version), 15는 패치버전(patch version) 의미


데비안 리눅스와 우분투 리눅스

  • 데비안 리눅스
    • 유명한 리눅스 배포판 중 하나이며 1993년에 이언 머독(Ian Murdock)이 창시한 데비안 프로젝트(Debian Project)에서 시작
    • 데비안 리눅스의 정식 버전은 1996년 1.1버전(코드명 Buzz)으로 시작, 2019년 10버전 발표
    • 패키지 설치와 업그레이드가 상당히 단순하고 apt 프로그램을 이용하여 소프트웨어 설치나 업데이트가 자동으로 진행됨
  • 우분투 리눅스
    • 데비안 리눅스를 기초로 유니티(unity) 데스크톱 환경을 사용하는 리눅스 배포판
    • 첫 버전을 출시한 이후 계속 업그레이드됨, 인기 리눅스 배포판 중 하나
    • 기본적으로 우분투 데스크톱과 우분투 서버를 배포

웹서버의 장점과 역할

역할

정적, 동적 컨텐츠를 제공해주며,

클라이언트가 브라우저 주소창에 url를 입력하여 어떤 페이지에 요청하게 되면

http 요청을 받아들여 HTML 문서와 같은 정적인 컨텐츠를 사용자에게 전달해주는게

가장큰 역할이다.

장점

  1. 정적인 콘텐츠 static Resource 빠른 처리가능. - Static Resource
  2. was의 서버주소가 노출이 되지않아 보안이 강화됨. port번호를 숨길수있음. - Security
  3. 방화벽 바깥에 Web Server를 두고 WAS, DB서버를 방화벽 안쪽에 위치시킴
  4. 여러 was의 업무를 분배하여 효율적인 자원관리가능 - Load Balancing예 ) 필요한 이유에 대해 사람들이 기차표를 예매하러고 몰려들때 ( 코레일 )
  5. 서버가 처리해야할 업무, 요청을 여러 대의 서버로 나누어 처리하는 것을 의미

WAS란

Web Application aRchive

  • 애플리케이션 실행을 위한 컴파일된 모든 클래스파일, 설정파일들이 모두 포함

 

WAS의 주요임무는 동적인 요청을 받아서 처리해주는 서버

  1. 업무 처리하는 비즈니스 로직 수행

WAS 또한 웹서버와 동일하게 HTTP 기반으로 동작함.

웹서버가 할수있는 기능을 WAS에서도 처리가능하지만 비즈니스 로직 을 처리하여

동적인 컨텐츠를 전달할 수 있다. 주로 데이터베이스 서버와 같이 수행됨.

주요기능

  1. 프로그램 실행 환경 및 DB 접속 기능 제공
  2. 여러 트랜잭션 관리 기능

웹 서버와 WAS를 구분하는 이유

결론적으로 목적이 다르다.

Web Server → 정적 데이터를 처리하는 서버

WAS → 동적 데이터 위주로 처리하는 서버

웹 서버가 필요한 이유

웹 서버에서는 정적 컨텐츠만 처리하도록 기능을 분배하여 서버 부담을 줄임

WAS가 필요한 이유

WAS를 통해 요청에 맞는 데이터를 DB에서 가져와 비즈니스 로직에 맞게 그때마다 결과를 만들고

제공하면서 자원을 효율적으로 사용 가능

WAS로 웹 서버 역할까지 수행 ?

자원 이용의 효율성 및 장애 극복, 배포 및 유지 보수의 편의성 때문에

웹 서버와 WAS를 분리하여 사용한다.


웹서버 & WAS 연결

1. Web Server와 WAS의 중간다리 mod_jk 설치

apt-get install libapache2-mod-jk*

2.mod-jk 설정 파일에 Tomcat들의 별명 지어주고 정보를 설정

vi /etc/libapache2-mod-jk/workers.properties


workers.tomcat_home=/var/lib/tomcat9
workers.java_home=/usr/lib/jvm/default-java

worker.list = was1, was2

worker.was1.port=8080(해당 port)
worker.was1.host=127.0.0.1(해당 ip)
worker.was1.type=ajp13

worker.was2.port=8080(해당 port)
worker.was2.host=ip2(해당 ip)
worker.was2.type=ajp13

 

3.Web Server apache에 apache-tomcat connector에 설정된

tomcat으로 요청을 보내도록 설정 ( 별명 사용 )

vi /etc/apache2/site-available/000-default.conf

<VirtualHost *:80>
	ServerName 127.0.0.1
	ServerAdmin webmaster@localhost

	DocumentRoot /var/www/html
	JkMount /app1/* was1
	JkMount /app2/* was2
</VirtualHost>

 

2번째 단계에서 mod-jk로 설정한 WAS 정보를 000-default.conf에서 JkMount로 연결

  • JkMount /app1/ was1*
  • localhost/app1/* 에 대한 요청은 was1에 요청
  • JkMount /app2/ was2*
  • localhost/app2/* 에 대한 요청은 was2에 요청

4.Was tomcat에 apache에서 오는 요청 받으라고 설정

AJP1.3 프로토콜로 연결된 Port 8009로 오는 요청 받기 설정

  • 8009번 포트 : apache2와 Tomcat9을 이어주는 mod-jk의 포트
vi /etc/tomcat9/server.xml

<Connector protocol="AJP/1.3"
address="0.0.0.0"
port="8009"
redirectPort="8443"
packetsize="65536"
secretRequired="false"
/>

AJP ( Apache Jserv Protocol )

AJP는 웹 서버 뒤에 있는 WAS으로 부터 웹 서버로 들어오는 Request를 위임 할 수 있는

Binary Protocol

 


mod-jk

mod-jk는 Apache와 Tomcat을 연동하기 위한 모듈이다.

역할

  • 웹 서버(Apache)에 전송된 Request
  • mod_jk는 URL과 Port를 확인하여 WAS로 해당 Request 전송
  • 해당 WAS에 설정된 AJP Port를 통해 WAS는 Reqeust를 수신받아 동작

따라서 mod_jk가 중간 역할 및 Load Balancer 역할을 수행하여 웹 서버 하나로 다중 WAS를 구현할 수 있게 된다.


AJP와 mod-jk를 통한 Web Server ↔ WAS 통신

1. workers.properties에 연동할 톰캣의 정보 (host, port, type 등)을 작성해줌

2. 연동할 톰캣의 정보를 가진 properties파일은 생성 했으면 아파치가 실행할때 참조하는 000-default.conf파일에 이를 명시해주어야한다.

  • JkMount 이 부분에서 어떤 URL로 오는 경우, 어떤 worker(톰캣)가 처리하는지 결정하는 것을 설정 한다. JkMount 뒤에 오는 /*은 모든 url의 요청을 의미한다.

즉, 모든 url의 요청에서 서블릿 관련 처리가 필요하다면, workers.properties에 명시된 worker(WAS)에게로 넘기겠다. 라는 의미가 된다.

톰캣이 여러대인 경우 workers.list의 각 worker이름에 따라서 설정한다.

 

3. 톰캣 설정 - server.xml

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" address="localhost"/>

AJP 커넥터에 등록한 Apache - workers.properties의 정보가 일치해야됨.

 

 

4. 설정후 Apache, Tomcat9 재기동

systemctl restart apache2
systemctl restart tomcat9

 


3 tier 아키텍쳐의 세가지 구성요소 및 설명

3 tier 아키텍쳐

웹 서버를 WAS 앞에 두고, 필요한 WAS들을 웹서버에 플러그인 형태로 설정하면

효율적인 분산 처리가 가능

         프레젠테이션 tier      서비스 로직tier       DB tier
            Apache                   WAS                DB

세가지 구성요소 : 웹 서버 - 웹 어플리케이션 서버 - 데이터 베이스

 

3 tier architecure의 동작

  • 클라이언트에서 웹서버로 요청
  • 웹서버에서 요청 받음
  • 분배되어 있는 WAS 중 요청 URL에 맞는 WAS에 요청 전달
  • WAS에서 DB에 접근하여 데이터 받아옴
  • WAS에서 동적 자원을 처리하여 정적인 자원으로 만들고 웹서버로 전달
  • 웹서버는 클라이언트 측에 만들어진 정적 자원 response

Load Balancing ( 로드 밸런싱 )

여러 대의 서버를 두고 서비스를 제공하는 분산 처리 시스템이 필요한 기술

( 하나의 웹 서버가 여러 개의 WAS에게 업무를 분배 )

Scale-up

서버 자체의 성능을 확장하는 것. 비유하자면 CPU가 i3인 컴퓨터를 i7으로 업그레이드하는 것과 같다.

 

Scale-out

기존 서버와 동일하거나 낮은 성능의 서버를 두 대 이상 증설 하여 운영하는 것을 의미한다.

CPU가 i3인 컴퓨터를 여러 대 추가 구입해 운영하는 것 에 비유할 수 있다.

=> 이 경우, 여러 대의 서버로 트래픽을 균등하게 분산해주는 로드밸런싱이 반드시 필요하다!!


Load Balancer 방식 두가지

1. 라운드 로빈 방식 ( Round Robin )

요청을 순차적으로 각 서버에 균등하게 배분하는 방식

예 ) 1,2,3번 서버가 있을때 클라이언트가

첫번째 요청시 1번서버로, 두번째 요청시 2번서버에 할당하는 순차적으로 배분하는 방식

할당된 3서버로 요청한뒤 4번째 요청시 1번서버로

장점 - 구현이 매우 간단하며, 서버 간에 균등한 부하 분산이 가능

단점 - 각 서버의 처리 능력이 다를 경우 효율적인 부하 분산 어려움

2. 웨이티드 로딩 방식 ( Weighted )

각 서버의 처리 능력이나 현재 상태 등을 고려해서 서버에 가중치를 부여하고,

이 가중치에 따라 요청을 분배하는 방식

load balancer설정 쪽 lbfactor의 설정이 가중치를 뜻한다.

보통은 모두 1로설정하여 균등하게 요청에 대한 가중치를 지정하지만,

특정 tomcat에 더 많은 부하를 넣고자 한다면 이를 수정하여 사용함.

 

 

반응형

'CS지식' 카테고리의 다른 글

[Java] 디자인패턴  (2) 2024.08.04
클라우드 ( AWS ) 지식  (1) 2024.08.02
네트워크 CS지식  (2) 2024.08.01
동시성 제어 - 뮤텍스와 세마포어  (3) 2024.07.31
데이터베이스 CS 지식  (5) 2024.07.30