의미 : Shared Pool Memory 크기를 의미한다. Physical Plan, Data Dictionary 정보를 Working Thread 간 공유하기 위해 쓰이는 메모리 영역의 크기
분석 : 사이즈가 클수록 성능이 좋지만, 전체 TSM 크기 내에서 Shared Pool, Buffer Cache, Redo Log Cache의 크기를 조율해야 하기 때문에 적절하게 크기를 조절해주어야 한다. [사이즈가 작을 경우; 적재 가능한 DD/PP가 적다. → 디스크 I/O 증가 → 성능 감소] [사이즈가 클 경우; 적재 가능한 DD/PP가 많다. → 디스크 I/O 감소 → 성능 향상]
DB Cache Size (= Buffer Cache Size)
의미 : DB Buffuer Cache의 크기, 디스크로부터 읽어들인 데이터 블록을 담고 있는 버퍼
분석 : 크기가 클수록 성능이 좋다. [사이즈가 작을 경우; 적재 가능한 데이터 블록의 수가 적다 → Hit율 감소 & 디스크 I/O 증가 → 성능 감소] [사이즈가 클 경우; 적재 가능한 데이터 블록의 수가 많다. → Hit율 증가 & 디스크 I/O 감소 → 성능 향상]
Log Buffer Size (= Redo Log Buffer Size)
의미 : Redo Log Buffer Cache의 크기로, DML에 의한 변경 사항을 저장하고 있는 Redo Log Buffer
분석 : 크기가 클수록 성능이 좋다. [사이즈가 작을 경우; LGWR에 의해 디스크에 많이 쓰인다. → 디스크 I/O 증가 → 성능 감소] [사이즈가 클 경우; LGWR에 의해 디스크에 적게 쓰인다. → 디스크 I/O 감소 → 성능 향상]
DB Block Size
의미 : 데이터베이스 블록 크기
분석 : 적절한 크기 설정이 필요하다. [사이즈가 작을 경우; 여러 블록에 데이터가 쪼개서 저장 → 데이터 단편화 증가 → 디스크 I/O 증가 → 성능 감소] [사이즈가 클 경우; 하나의 블록에 데이터 저장 가능 → 데이터 단편화 감소 → 디스크 I/O 감소 → 성능 향상 (but, 공간 낭비가 발생할 수 있다. 조각화 문제]
2. SGA Stat
Buffer Cache Hit Ratio
의미 : DB Buffer Cache 에서 원하는 데이터를 찾은 비율
분석 : 높을수록 성능이 좋은 것 [Hit율이 높은 경우; 메모리에서 원하는 데이터를 많이 찾음 → 디스크 I/O 감소 → 성능 향상] [Hit율이 낮은 경우; 메모리에서 원하는 데이터를 적게 찾음 → 디스크 I/O 증가→ 성능 감소]
SQL Cache Hit Ratio
의미 : Shared Pool Memory 내의 SQL Cache(PP Cache)에서 SQL Plan을 찾은 비율
분석 : 높을수록 성능이 좋은 것 [Hit율이 높은 경우; 메모리에서 원하는 SQL Plan을 많이 찾음 →디스크 I/O 감소 → 성능 향상] [Hit율이 낮은 경우; 메모리에서 원하는 SQL Plan을 적게 찾음→디스크 I/O 증가 → 성능 감소]
Dictionary Cache Hit Ratio
의미 : Shared Pool Memory 내의 Data Dictionary에서 원하는 DD 정보를 찾은 비율
분석 : 높은수록 성능이 좋은 것 [Hit율이 높은 경우; 메모리에서 원하는 DD 정보를 많이 찾음→디스크 I/O 감소 → 성능 향상] [Hit율이 낮은 경우; 메모리에서 원하는 DD 정보를 적게 찾음→디스크 I/O 증가 → 성능 감소]
In-Memory Sort
의미 : 메모리에서 정렬이 일어난 횟수의 비율(메모리 정렬 수 / 총 정렬 수)
분석 : 높은수록 성능이 좋은 것 [높은 경우; 정렬이 메모리에서 많이 일어남 → Temp Tablespace에서 정렬이 적게 일어남 → 디스크 I/O가 적게 일어났다는 것 → 성능 향상] [낮은 경우; 정렬이 메모리에서 적게 일어남→ Temp Tablespace에서 정렬이 많이 일어남→ 디스크 I/O가 많이 일어났다는 것→ 성능 감소]
Shared Cache Free Space
의미 : Shared Memroy에서 남은 여유 공간의 크기를 의미
분석 : 높을수록 성능 측면에서 좋음 [여유 공간이 많다; 낭비되고 있는 메모리 영역이 많다. → 그러나 추후 DD, PP가 적재되어 디스크 I/O가 줄어든다. → 메모리 용량 효율 측면에서는 나쁘지만, 디스크 I/O 측면에서는 좋다.] [여유 공간이 적다; 낭비되고 있는 메모리 영역이 적다.→ 그러나 추후 DD, PP가 적재되어 디스크 I/O가 증가한다.→ 메모리 용량 효율 측면에서는 좋지만, 디스크 I/O 측면에서는 나쁘다.]
3. Tablespace Usage
Tablespace Usage
의미 : 전체 테이블스페이스 사용량을 의미
분석 : 테이블스페이스 사용량이 90%가 넘으면 디스크 공간이 매우 부족한 상태이기 때문에 디스크 증설, 테이블스페이스 분할, 불필요한 데이터 제거 등의 조치를 취해야 한다. 사용량이 100%가 되면 DBMS가 멈추며 장애가 발생한다.
Undo Usage Free
의미 : Undo 테이블스페이스에서 사용가능한 공간 비율
분석 : 클수록 좋다. Undo Segmet가 덮어씌어질 가능성이 낮아지며, 복구 가능성/롤백 가능성이 증가하게 된다. 또한 트랜잭션이 많아 Undo Segment를 모두 사용하게 되어 트랜잭션이 중지될 가능성이 낮다.
Temp Usage
의미 : Temp 테이블스페이스에서 사용중인 공간 비율
분석 : 사용량이 낮을수록 좋다. Temp Tablespace 사용량이 낮다는 것은 그만큼 부하가 큰 작업을 수행중인 트랜잭션이 많다는 것이다.
4. Object 점검
Invalid Object 개수
의미 : Invalid Object(정상적으로 컴파일 되지 않은 객체)의 수 점검 ( STATUS='INVALID' )
분석 : 적을수록 좋다. Invalid Object가 있다는 것은 정상적이지 않은 객체가 있다는 것으로, 원인을 파악하고 해결해야 한다. (rebuild, recompile)
통계정보수집 점검
의미 : 통계정보(Optimizer가 실행계획을 세울 때 참조하는 정보) 수집 확인
분석 : 통계정보는 optimizer가 실행계획을 작성할 때 참조하는 정보로 성능 최적화에 영향을 주기 때문에 최신상태를 유지할 수록 좋다.
NOCYCLE 시퀀스 점검
의미 : NOCYCLE 옵션인 시퀀스 중 LAST_NUMBER 값이 MAX_VALUE 90% 이상 도달한 시퀀스의 수를 점검
분석 : Nocycle 시퀀스 90% 도달한게 많다는 것은 에러날 확률이 높은 시퀀스가 많다는 것이다. MAX_VALUE를 더 높여주는 등의 조치 필요
Recyclebin 점검(건수, 사이즈)
의미 : Recyclebin 에 저장된 삭제된 Segment의 수와 사이즈 점검
분석 : Recyclebin에 DROP된 데이터가 저장된다. Recyclebin을 purge해줘야 디스크에서 완전삭제 되며 purge 전에는 계속 쌓인다. (테이블스페이스 부족한 경우도 내부적으로 삭제됨) 주기적으로 recyclebin을 purge 해줘야 한다.
5. Instance 점검
Session Usage
의미 : 현재 접속한 세션 수 / 인스턴스에 최대로 접속할 수 있는 세션 수
분석 : 작을수록 좋다. 현재 접속한 세션의 수가 MAX_SESSION에 가까워 지면 새로운 세션이 불가능하게 되며 에러가 발생할 수 있다.
6. Redo Swtich Stat
Max Count / Day
의미 : 하루 최대 로그 스위치 발생 횟수
분석 : Max count가 Avg Count보다 많이 크다면 일별 log swtich 횟수를 확인하고 특정 날짜에 많이 발생한 원인을 파악해야 한다.
Avg Count / Day
의미 : 하루 평균 로그 스위치 발생 횟수
분석 : 평균적으로 log switch 수가 크다면 log switch가 적게 일어나도록 redo member의 크기를 증가시키는 등의 조치를 취한다. 수가 작다면 redo member의 크기가 너무 큰건 아닌지 확인하고 사이즈를 줄이는 등 조절할 필요가 있다.
Avg Size(MB) / Day
의미 : 하루 평균 로그 스위치 사이즈
분석 : 하루 평균 로그 스위치 수와 함께 봐야 한다. (1) 로그 스위치 횟수 작으면서 사이즈는 크다면 리두 로그 파일이 매우 커서 로그 스위치가 적은 빈도로 일어나고 있을 가능성이 있다. 한번에 대량의 로그가 디스크에 기록되게 된다. →리두 로그 멤버의 크기를 감소시키는 등 균형을 맞춰줘야 한다. (2) 로그 스위치 횟수가 크면서 사이즈가 작다면 리두 로그 파일이 매우 작아서 자주 일어나고 있을 가능성이 있다. 적은 파일의 데이터를 자주 쓰게 되면서 리두 로그 파일을 자주 교체하게 되며 오버헤드 발생 및 성능 저하 가능성이 높다. → 리두 로그 멤버의 크기를 증가시키는 등 균형을 맞춰줘야 한다.
대전제는 '그 시스템은 무엇을 하는 시스템인가?'를 생각하는 것이다. 거기에서 더 나아가 어떤 네트워크가 필요한지 생각한다.
시스템 구성에 따라 필요한 네트워크 구성도 달라진다. 예를들어, 웹 브라우저로 조작할 수 있는 일정 관리 앱을 만들고 싶다고 가정한다. 웹 애플리케이션 A를 회사 내에서만 사용하고 싶다면 사내 랜상에 웹 서버와 DB서버를 구축해서 설치해야 한다. 사용자 규모에 따라서는 웹 서버와 DB 서버를 서버 한 대에서 동작시킬 수도 있다.
한 권으로 끝내는 네트워크 기초 129p
웹 애플리케이션 A를 SaaS로 제공하고 여러 회사에서 인터넷으로 이용하려면, 웹 서버는 인터넷에 공개하지만, DB 서버는 보안 관점에서 인터넷을 거치지 않고 웹 서버와 통신해야 한다.
또 SaaS로 제공하는 경우 사내에서 이용할 때보다 부하가 걸려 더 높은 가용성이 요구된다.
따라서 웹 서버는 한 대가 아니라 여러 대를 준비해서 서버에 집중되는 부하를 분배하거나, DB 서버도 여러 대에 동일한 데이터를 보유하여 데이터 손상이 일어나지 않도록 해야 한다.
한 권으로 끝내는 네트워크 기초 130p
이처럼 어떤 시스템을 만드는지 어느 정도 규모인지에 따라 필요한 네트워크 형태가 달라진다. 시스템 요구사항에 맞는 네트워크를 결정하고 만드는 것이 네트워크를 설계하고 구축할 때 중요하다고 할 수 있다.
6.1.2. 네트워크 설계와 구축(물리 인프라 편)
네트워크 설계의 각 프로세스는 시스템 설계와 크게 다르지 않다. 먼저 요건을 정의하고 어떤 시스템을 만들지, 그 시스템을 위해 어떤 네트워크를 만들지를 결정한 후 그 내용에 따라 기본 설계와 상세 설계를 한다.
기본 설계에서는 요건 정의에서 결정한 내용을 바탕으로 네트워크를 구축하면서 기본적인 사항을 정리한다. 상세 설계에서는 기본 설계에서 정리한 내용을 기반으로 '어떤 기기(서비스)를 사용하여 만드는가' 처럼 구현 방식의 세부 사항을 담는다. 이들 설계는 설계 리뷰를 거쳐 다듬은 후 구축 단계에 들어간다.
요건 정의 - 기본 설계 - 상세 설계 - 설계 리뷰
웹 애플리케이션 A를 SaaS로 제공하는 경우를 예로 들어 구축해보자.
현재 데이터 센터에 랙(전용 선반)을 빌리고 서버와 네트워크 장비를 구입하고 인터넷 회선도 계약한 상태이다. 대략 네트워크 구성을 정했으면 네트워크 구성도로 나타내본다.
네트워크 구성도에는 물리 설계도와 논리 설계도가 있다. 물리 설계도에는 네트워크 기기가 포트별로 어디로 접속하는지와 기록한 포트 표나 랙의 어느 위치에 어떤 기기를 넣을지 기록한 랙 구성도, 케이블을 연결할 곳, 종류, 색 등 정보를 정리한 케이블 결선 표 등이 있다.
물리 설계도에 따라 네트워크 기기와 서버를 랙에 마운트하고 네트워크 케이블이나 전원 케이블 등을 연결한다.
논리 설계도에서는 네트워크 회선의 랜간 라우팅이나 방화벽 규칙 설정, 어드레싱 등을 실시하고, 설계한 내용을 그림으로 나타낸다.
한 권으로 끝내는 네트워크 기초 133p
현장에서 직접 랙에 마운트한 기기에 네트워크를 설정할 수 있고, 네트워크가 미리 설정된 기기를 데이터 센터에 보내고 현장에서는 동작만 확인하는 경우도 있다.
6.1.3. 네트워크 설계와 구축(클라우드 서비스 편)
이번에는 클라우드(IaaS)를 사용하여 같은 방식으로 네트워크를 구축해보자. AWS환경에서 구축하는 경우를 예로든다.
IaaS에서는 사업자가 제공하는 가상화 기반에 시스템을 구축한다. 서버와 네트워크 모두 가상으로 만들어진다. 물리 네트워크는 사람이 기기 설치나 초기 설정 등을 수작업으로 해야 하지만, 클라우드에서는 기기 설치를 대신하여 인스턴스(AWS에서는 가상 서버를 '인스턴스'라고 함) 생성, 초기 설정 같은 모든 작업을 웹 브라우저의 제어판에서 할 수 있다.
IaaS에서 시스템을 구축하는 흐름은 다음과 같다.
서브넷 생성
가상 서버 생성
보안 그룹 설정
Elastic IP 설정
차례대로 살펴보자.
1️⃣ 서브넷 생성(퍼블릭 서브넷, 프라이빗 서브넷)
AWS에서는 서브넷 단위로 네트워크 세그먼트를 나누어 작성한다. 구체적으로는 인터넷에 공개한느 서버를 두는 서브넷(퍼블릭 서브넷)과 인터넷에 공개하지 않는 서버를 두는 서브넷(프라이빗 서브넷)을 생성한다.
가용성을 생각해서 각 서버를 가용 영역(availability zone)(데이터 센터에 해당) 2개로 나누어서 배치하고 각 가용 영역에 퍼블릭 서브넷과 프라이빗 서브넷을 2개씩 총 4개를 배피한다.
2️⃣ 가상 서버(인스턴스) 생성
AWS에서는 가상 서버를 인스턴스라고 한다. 여기에서는 EC2 서비스를 이용하여 웹 서버의 인스턴스를 생성한다. 또 RDS라고 하는 DB 서버 전용 인스턴스를 만들 수 있는 서비스도 있기 때문에 DB서버의 인스턴스는 이곳을 통해서 생성한다.
3️⃣ 보안 그룹 설정
AWS에는 보안 그룹이라는 서버에 연결하는 방화벽과 같은 것이 있다. 필요한 포트만 외부에서 보내는 통신을 통과하도록 작성해서 인스턴스에 할당한다.
4️⃣ Elastic IP설정
Elastic IP란 인스턴스에 결합하는 고정 글로벌 IP이다. 외부에 공개할 웹 서버 인스턴스로 설정한다.
가상화 기반에 설정하는 것이므로 물리적인 작업이 발생하지 않는다. 설정 작업은 웹 브라우저에서 완결된다. 명령어나 정의 파일을 이용함으로써 정형화 및 자동화할 수도 있다.
클라우드는 매우 편리하지만, 물리적인 시스템의 네트워크 구조나 원리 원칙을 이해해야 더욱더 폭넓게 대응하는 엔지니어가 될 수 있다.
6.2. 웹 신뢰성을 높이는 기술
6.2.1. 웹 신뢰성이란?
시스템에 장애가 발생해도 서비스를 지속해서 제공하는 것이 중요하며, 이런 사고방식을 장애 대응 설계(design for failure)라고 한다.
- 로드 밸런싱(처리 분배)
6.2.2. 대칭 키 암호 방식과 공개 키 암호 방식
통신을 할 때 보내는 삶과 받는 사람 사이에서 누군가가 통신 내용을 도청할 수도 있다. 그래서 제삼자가 보더라도 알 수 없도록 암호화할 필요가 있다. 암호화된 것을 원래대로 되돌려서 읽을 수 있는 상태로 만들려면(복호화) 열쇠가 필요하다.
암호화와 복호화 메커니즘에는 세 가지 방식이 있다.
1️⃣ 대칭 키 암호 방식
대칭 키 암호 방식이란 암호화와 복호화에 같은 키(대칭 키)를 이용하는 방식이다. 이 방식은 집 문을 여닫을 때 같은 키를 사용하는 것과 비슷하다. 파일 암호화 등에 자주 이용되는 방식으로, 프로세스는 아래와 같다.
1. 수신자가 발신자에게 키를 건네주고, 수신자도 같은 키를 가지고 있다.
2. 발신자는 암호 키로 암호화한 파일을 수신자에게 보낸다.
3. 수신자는 가지고 있던 같은 키로 파일을 복호화한다.
대칭 키 암호 방식의 문제점은 키를 안전하게 교환하기가 어렵다는 것이다.
2️⃣ 공개 키 암호 방식(비대칭키 암호화 방식)
공개 키 암호 방식은 암호화와 복호화에 별도의 키를 사용하는 방식이다.
암호화에 사용되는 것은 공개 키, 복호화에 사용되는 것은 비밀 키라고 한다.
1. 수신자가 발신자에게 공개 키를 건네준다.
2. 발신자는 공개 키로 암호화한 파일을 수신자에게 보낸다.
3. 수신자는 비밀 키로 파일을 복호화한다.
이 방식은 공개 키로 암호화한 데이터를 복호화할 수 잇는 것은 비밀키를 가진 사람뿐이라는 것이 핵심이다. 키 교환이 간편하고, 암호화가 필요한 데이터를 처리하기 전에 키를 배포하고 취득할 수 있다.
3️⃣ 두 가지 방식을 함께 사용
웹 사이트 암호화에 사용되는 SSL/TLS 통신은 대칭 키 암호 방식과 공개 키 암호 방식을 함께 사용한다.
1. 클라이언트가 서버로 접속 요청
2. 서버가 클라이언트에게 공개키 제공
3. 클라이언트에서 통신용 대칭키를 생성
4. 생성된 대칭키를 서버의 공개키를 활용하여 암호화
5. 암호화된 공개키를 서버로 전송
6. 서버에서 비밀키로 복호화
7. 대칭키를 기반으로 암호 통신을 진행
SSL/TLS 통신을 시작할 때 서버가 클라이언트에 공개 키를 전달하는데, 인증 정보나 공개 키 정보를 하나로 모은 것이 SSL/TLS 서버 인증서 이다. 서버는 SSL/TLS 서버 인증서로 클라이언트에 인증 정보나 공개 키 정보를 세트로 건네주고, 클라이언트는 건네받은 SSL/TLS 서버 인증서로 접속 상대의 정보를 확인하고 통신한다.
6.2.3. 상시 SSL화
상시 SSL/TLS 화란 웹 사이트 전체를 HTTPS화(암호화)하는 것이다. 보통 상시 SSL화라고 하는 경우가 많다.
실제 프로토콜은 SSL의 진화형인 TLS를 상요하지만, 일반적으로 알려진 용어가 SSL이므로 SSL/TLS를 단순히 SSL로 부른다.
이전에는 웹 사이트 전체를 암호화하려면 느려진다는 인식이 일반적이었으나, 최근에는 다음과 같은 이유로 상시 SSL화가 권장되는 추세이다.
1️⃣ HTTP/2에서는 표시 속도가 오히려 빨라진다.
HTTP/2 라는 새로운 프로토콜에서는 이전 HTTP 버전의 문제점이 개선되어 통신 효율이 높아졌다. 클라이언트와 서버 사이의 통신을 암호화하는 사양이 표준으로 정해져 있어 HTTP/2에 대응하려면 상시 SSL화가 필요하고, 이로써 응답 속도 향상을 기대할 수 있다.
2️⃣ SEO의 장점이 있다.
SEO(Search Engine Optimization)는 검색 엔진 최적화로 번역되며, 검색 결과에서 웹 사이트가 좀 더 상위에 표시되게 하는 일련의 대책을 SEO 대책이라고 한다. 오늘날 검색 엔진의 점유율은 구글이 앞도적으로 우위에 있으며, 구글에서는 상시 SSL화를 검색 결과의 평가 기준 중 하나로 삼고 있으며, SEO 대책의 일환으로 상시 SSL화가 되기도 한다.
3️⃣ HTTP일 때 웹 사이트를 열면 현재 웹 브라우저에 경고가 표시된다.
HTTP 웹 사이트를 열면 주소창에 '주의 요함'이라는 경고가 표시된다. 크롬 56부터는 HTTP 페이지에 ID나 패스워드 같은 기밀 정보를 입력하는 폼이 있을 때 보안 경고가 표시되었지만, 지금은 HTTP 웹 사이트 모두에서 경고가 표시된다.
6.2.4. 부하 분산
웹 사이트의 내장애성이나 처리 능력을 높이고자 웹 서버 한 대가 아니라 여러대로 웹 사이트를 호스팅하기도 한다. 이 경우 액세스를 분산해서 할당하는 것을 부하 분산이라고 한다.
DNS 서버 설정이나 전용 기기 및 소프트웨어의 도입, 서비스 등을 이용하여 부하 분산할 수 있다.
1️⃣ DNS 라운드 로빈
DNS 라운드 로빈은 DNS 시스템을 사용해서 요청을 서버 여러 개로 분산하는 방식이. 한 호스트 이름에 IP주소를 여러 개 설정함으로써 요청받은 DNS 서버는 차례대로 IP주소를 반환한다.
DNS 라운드 로빈은 특별한 장비나 소프트웨어를 쓰지 않고도 부하를 분산할 수 있다. 그러나 단점도 존재한다.
DNS 서버가 각 서버를 모니터링해서 동적으로 할당하는 것은 아니기 때문에 다운된 서버의 IP를 반환하는 경우가 있다. 또 서버의 부하 상태와 상관없이 균등하게 할당되므로 처리 능력이 낮은 서버와 처리 능력이 높은 서버에 고르게 할당되면 퍼리 능력이 저하된 서버는 처리 한계에 도달할 가능성도 있다.
2️⃣ NAT형
NAT형이란 VIP라는 가상 IP 주소에 대한 요청을 실제 서버 여러 대에 할당하는 방식이다.
하드웨어/소프트웨어 등으로 제공되는 일반적인 로드 밸런서(L4 스위치/L7 스위치라고도 함)에서 채용된다.
3️⃣ GSLB
글로벌 서버 로드 밸런싱(Global Server Load Balancing)은 여러 위치를 가로지르는 부하 분산을 실현하는 방식이다.
예를 들어 서울과 부산에 있는 데이터 센터에 서버를 설치하고 정상일 때는 양쪽 모두에 요청을 할당하고, 어느 한쪽에 장애가 발생했을 때는 장애가 일어난 데이터 센터 쪽 서버에는 할당하지 않게 하는 등 DNS 라운드 로빈에서 문제였던 '장애가 발생한 서버에도 할당할 수 있는 문제점'을 해결하였다.
이처럼 여러 서버에서 서비스를 제공함으로써 가용성과 성능을 향상시키거나 재해나 장애를 대비하는 등 부하 분산은 웹 사이트 신뢰성 향상에 연결된다.
6.2.5. 리버스 프록시
리버스 프록시란 웹 서버 대신에 클라이언트의 액세스를 받는 프록시 서버의 일종디ㅏ. 보통 웹 사이트와 동일한 네트워크에 설치된다.
프록시란 대리나 대행이라는 뜻으로, 프록시 서버는 클라이언트 쪽에 설치되어 클라이언트가 웹 서버에 액세스하는 것을 중계하는 역할을 한다. 즉 웹서버에 액세스 하는 것을 대행한다.
리버스 프록시는 서버 쪽에 설치되어 서버에 대한 요청을 받아 배후에 있는 서버에 넘겨주는 데 사용된다. 즉, 웹 서버가 받을 요청을 대신해서 받는다.
프록시 서버와 리버스 프록시 서버는 모두 캐시 기능을 제공한다. 이미 요청이 있었던 것을 일정 시간 캐시해 두고, 캐시에 일치하는 것은 웹 서버 대신에 프록시 서버(리버스 프록시)가 응답한다. 이렇게 함으로써 웹 서버의 대한 부담을 줄일 수 있다.
리버스 프록시는 캐시 기능 이외에도 부하 분산 기능, WAF7를 제공하여 웹 사이트의 신뢰성 향상에 기여한다.
6.2.6. CDN
CDN(Content Delivery Network)은 동일한 콘텐츠를 많은 배포처, 예를 들어 많은 사용자의 PC나 휴대 전화에 효율적으로 배포하고자 할 때 사용된다. 주로 웹 사이트에 있는 많은 이미지나 동영상 등 용량이 큰 데이터를 많은 서버와 네트워크 대역을 이용하여 클라이언트에 전달하는 데 사용된다. 또한 윈도우와 휴대 전화 운영 체제 업데이트 등도 CDN을 이용하여 효율적으로 전송할 수 있다.
배포처에 가까운 네트워크(커스터머 에지)에 콘텐츠를 배포하는 서버(에지 서버)를 배치해서 구성한다. 에지 서버는 원본 데이터를 가진 서버(오리진 서버)의 데이터 사본을 캐시로 가지고 있다가, 오리진 서버를 대신해서 클라이언트 요청에 응답한다.
사용자 가까이에 있는 서버에서 배포하고, 또 서버 여러 대에서 배포함으로써 더 빠르고 부하에 강한 시스템을 실현했다.
효율적인 배포 외에 DDos 공격에 대한 대책으로도 사용된다.
아래는 대표적인 CDN 서비스이다.
Akamai
엔터프라이즈급 CDN으로 유명하다.
Amazon CloudFront
AWS 서비스 중 하나로 제공되는 CDN 서비스이다.
Cloudflare
주로 개인용으로 무료 플랜이나 소액 플랜을 갖춘 것으로 알려진 CDN 서비스이다. CDN을 기본으로 하면서 보안이나 DDos 공격 대책에 사용한다.
Fastly
다른 CDN에서는 어렵다고 여기는 동적 콘텐츠 캐시 등 독자적인 기능을 제공하는 CDN 서비스이다.
클라우드(클라우드 컴퓨팅)는 컴퓨터를 이용하는 형태 중 하나로, 인터넷 등 네트워크를 통해 서버가 제공하는 서비스를 주의 기기(컴퓨터, 휴대전화 등)를 통해 이용하는 것을 의미한다.
컴퓨터 세계에서 클라우드라는 단어는 복잡하게 연결되는 인터넷을 구름에 비유하여 표현하는데에서 시작되었다.
5.1.2. 클라우드의 종류
클라우드는 제공 범위에 따라 몇 가지로 분류된다. IaaS(Infrastructure as a Service)는 컴퓨터나 네트워크를 가상으로 만들어서 이용하는 형태이다. PaaS(Platform as a Service)는 데이터베이스나 애플리케이션을 실행할 수 있는 환경 등을 서비스로 제공하는 형태이다. IaaS와 조합해서 이용하는 경우도 많다.
한 권으로 끝내는 네트워크 기초 113p
SaaS(Software as a Service)는 완제품 소프트웨어를 네트워크로 서비스하는 형태이다.
한 권으로 끝내는 네트워크 기초 114p
소프트웨어를 구입해서 이요할 때와 차이점은 아래 표와 같다.
구분
요금 체계
제공 범위
이용 방법
버전 업
패키지 소프트웨어
제품 구매
소프트웨어 사용권
컴퓨터에 소프트웨어 설치
새 버전 구매
SaaS
월 또는 연간 요금
소프트웨어 및 서비스
인터넷을 경유해서 이용
자동으로 업데이트
IaaS, Paas, Saas 차이점
5.1.3. 클라우드의 편의성
클라우드가 없던 시절에는 새로운 인터넷 서비스를 시작하려면 우선 서버로 사용할 컴퓨터를 사거나 빌려야만 했다. 그렇기에 초기 투자가 필요했고, 실제로 사용하기까지 시간이 걸렸다. 또한, 서비스가 확대되면 이에 맞춰 컴퓨터 자원을 확장시켜야 했으며 즉각적으로 늘릴 수도 없었다. 그리고 서비스를 중단하면 소유하던 컴퓨터가 남게된다.
클라우드는 이러한 문제를 해결한다.
- 곧바로 사용한다 : 웹 브라우저에서 서버를 생성할 수 있고, 명령어로 자동화할 수도 있다.
- 사용한 만큼만 돈이 든다 : 초기 비용이 들지 않고 시간 단위로 과금된다.
- 쉽게 늘리고 줄일 수 있다 : 소유하지 않고 사용한다.
이처럼 '소유'에서 '이용'으로 변화함에 따라 편리함을 누릴 수 있게 되었다.
5.2. 클라우드 서비스와 호스팅 하우징
5.2.1. 대표적인 클라우드 서비스
Amazon Web Services
아마존 웹서비스(AWS, Amazon Web Service)는 아마존이 제공하는 클라우드 플랫폼(IaaS, PaaS)이다. 아마존은 매우 많은 서비스를 제공하는 것으로 유명하며, 그중에서도 대표적인 것은 EC2(가상 서버), S3(오브젝트 스토리지), RDS(관계형 데이터베이스 서비스) 등이다.
Microsoft Azure/Microsoft 365
마이크로소프트 애저(Microsoft Azure)는 마이크로소프트가 제공하는 클라우드 플랫폼(IaaS, PaaS)이다. 또한 마이크로소프트는 애저 외에도 Microsoft 365라는 오피스 제품의 구독 서비스(SaaS)를 제공한다.
마이크로소프트는 전통적으로 오피스 스위츠나 기업용 서버에 강하며, 애저와 Microsoft 365의 매출을 합산하면 클라우드 서비스의 매출이 세계 1위이다.
Google Cloud Platform
구글 클라우드 플랫폼(GCP, Google Cloud Platform)은 구글이 제공하는 클라우드 플랫폼(IaaS, PaaS)이다. 구글 내부에서 사용하는 것과 동일한 서비스 플랫폼을 제공하는 것이 특징이다. 다른 클라우드 플래솦ㅁ과 마찬가지로 가상 서버나 객체 스토리지, 관계형 데이터베이스 서비스를 제공하는 한편, 쿠버네티스(Kubernetes)의 개발원이라는 점에서 컨테이너용 플랫폼 서비스에 강하다.
Firebase
파이어베이스(Firebase)는 2011년에 파이어베이스사가 개발한 서비스로, 2014년에 구글에 인수되어 현재 GCP 기능 중 하나로 자리잡았다. Mobile Backend as a Service(mBaaS)로 부르는 서비스로 데이터베이스, 스토리지, 메시징 등 모바일 애플리케이션에 필요한 기능을 서버로 의식하지 않고 사용할 수 있는 것이 특징이다.
Heroku
헤로쿠(Heroku)는 Platform as a Service(PaaS)로 웹 서버나 데이터베이스 같은 웹 서비스를 공개하는 데 필요한 모든 것을 미리 준비해 주는 서비스이다. 서버, OS, 데이터베이스, 프로그램 실행 환경 등 웹 애플리케이션을 공개하는 데 필요한 기능을 세트로 제공하는 것이 특징이다.
KT 클라우드
통신 사업자이자 데이터 센터 사업자인 KT의 클라우드 인프라 서비스는 가격면에서 경쟁력이 있다. 국내 클라우드 제공사 중 매출 규모가 가장 크고, 공공 기관 전용 클라우드 서비스인 G-클라우드를 출시하고 헌법 재판소 등 다수 공공 기관에 클라우드 서비스를 제공하며 사업 영역을 확대하고 있다.
네이버 클라우드 플랫폼
라인, 네이버 웹툰 등 자회사들이 네이버 클라우드 플랫폼을 이용하고 있고, SK텔레콤, LG U+등 대기업도 네이버 클라우드 플랫폼 서비스를 도입했다. 국내 사업자 중 최대 보안 인증을 확보하여 공공 기관 전용 서비스를 출시하는 등 일반 기업 이외에도 공공, 금융, 의료 분야로도 사업 영역을 확대하고 있다.
5.2.2. 호스팅, 하우징
호스팅은 호스팅 사업자가 서버를 보유하고 사용자에게 대여하는 서비스를 총칭한다. 호스팅에는 렌탈 서버, 전용 서버, VPS(Virtual Private Server)등이 있다.
렌탈 서버는 물리 서버 한 대를 여러 사용자가 함께 사용하는 형태이다. 사용자들은 서버의 하드웨어 리소스뿐만 아니라 OS도 함께 사용한다. 이 때문에 렌탈 서버에서는 애플리케이션을 직접 설치할 수 없고, 렌탈 서버에서 제공하는 웹 서버나 애플리케이션이 동작할 수 있는 환경 및 데이터베이스를 이용한다. 각 사용자의 데이터는 논리적으로 분리되어 있어 다른 사용자의 데이터는 볼 수 없다.
전용 서버는 물리 서버 한 대를 점유할 수 있는 서비스이다. 한 대를 통째로 자신의 서버로 사용할 수 있으므로 다른 사용자의 부하 영향을 받지 않고 OS나 애플리케이션도 자유롭게 설치할 수 있다.
VPS는 렌탈 서버와 전용 서버의 장점을 취한 서비스로, 물리 서버 한 대를 여러 사용자가 공용하지만 가상화 기술을 이용해서 가상 서버를 물리 서버 안에 많이 만들 수 있다. VPS에서 제공되는 환경은 전용 서버와 동일하고, OS 및 애플리케이션을 자유롭게 설치할 수 있다.
호스팅 서비스는 서비스 제공 사업자가 물리 서버의 하드웨어 유지 보수 및 운용을 한다.
하우징은 데이터 센터 사업자가 랙(전용 선반)을 대여해 주고, 랙 안에 사용자가 직접 구매한 네트워크 기기나 서버 등을 탑재한다. 경우에 다라서는 사용자가 네트워크 회선을 끌어올수 있는 서비스도 있다.
5.3. 네트워크와 애플리케이션
5.3.1. 일반적인 웹 DB 시스템
대표적인 콘텐츠 관리 시스템(CMS, Content Management System)인 워드프레스 환경을 예로 들어 네트워크 애플리케이션이 어떻게 구성되는지 살펴보자.
워드프레스를 동작시키려면 웹 서버와 DB서버가 필요하다. 그리고 워드프레스는 PHP로 만들어졌기 때문에 PHP 실행 환경도 필요하다.
5.3.2. 구성하는 소프트웨어
OS
프로그램을 실행하려면 우선 기반이 되는 OS가 필요하다. OS에는 다음과 같은 것들이 존재한다.
윈도우(Windows)
마이크로소프트에서 개발한 OS로, 개인용 컴퓨터에서 압도적인 점유율 보유하며, 서버 용도로는 윈도 서버(Windows Server) 에디션이 있다.
리눅스(Linix)
리눅스는 주로 인터넷을 위한 서버 용도로 널리 사용되는 OS이다. 리눅스는 비영리 커뮤니티에서 개발한 것이 특징으로, 무료로 사용할 수 있는 배포판, 기업이 서비스를 제공하는 대신 라이선스를 사서 이용하는 배포판 등 여러 종류가 있다.
맥오에스(macOS)
애플에서 만드는 컴퓨터인 Mac 시리즈에 탑재되는 OS로 예전에는 서버 용도로 사용했지만, 현재는 일반 컴퓨터용으로만 사용한다.
웹 서버 소프트웨어
웹 서버는 OS에 웹 서버 소프트웨어를 설치하고 동작시켜 서버 기능을 한다. 웹 서버 소프트웨어로는 다음과 같은 것들이 있다.
아파치(Apache)
Apache의 정식 명칭은 Apache HTTP Server이지만, 보통 아파치라고 한다.
전 세계에서 가장 많이 사용하는 웹 서버 소프트웨어로, 대규모 상용 웹 사이트부터 개인용 서버까지 폭넓게 이용된다.
엔진엑스(Nginx)
아파치보다 나중에 생긴 웹 서버로, 동작이 빠르고 기능이 풍부하여 최근 들어 채요 사례가 증가하고 있다.
IIS(Internet Information Services)
마이크로소프트의 웹 서버 소프트웨어로, 윈도나 윈도 서버 위에서 동작한다.
DB 서버 소프트웨어
MySQL
MySQL은 세계에서 가장 널리 사용되는 오픈소스 RDBMS이다.
MariaDB
MySQL에서 파생된 소프트웨어로, MySQL과 독립적으로 계속 개발하고 있는 DB Server의 하나이다.
오로라(Aurora)
AWS의 관계형 데이터베이스 서비스인 Amazon RDS 중에서 선택 가능한 RDBMS로, MySQL과 호환성을 강조하면서도 더 뛰어난 성능을 발휘하는 것이 특징이다.
PostgreSQL
오픈 소스 RDBMS이며, MySQL 다음으로 점유율이 높은 DB 서버 소프트웨어이다. PostgreSQL은 신뢰성을 중요시한다고 알려져 비웹 계열 시스템에서 채용하는 예도 많다.
Oracle
오픈 소스가 아닌 RDBMS로, RDBMS 시장 점유율이 가장 높은 상용 DB 서버 소프트웨어이다.
프로그래밍 언어
PHP
동적 웹 페이지 생성 툴을 기원으로 한 프로그래밍 언어로 웹 애플리케이션 개발에 유용한 기능이 풍부하게 들어 있는 것이 특징이다.
Ruby
일본에서 개발된 프로그래밍 언어로, Ruby on Rails라는 웹 애플리케이션 프레임워크를 사용하여 복잡한 웹 애플리케이션을 개발한다.
ASP.NET
프로그래밍 언어가 아니라 웹 애플리케이션 프레임워크의 명칭이다. 비주얼 베이직(Visual Basic)이나 C# 등 주로 마이크로소프트가 제공하는 프로그래밍 언어를 사용할 수 있다.
어떤 OS, 어떤 웹 서버 소프트웨어, 어떤 DB 서버 소프트웨어, 어떤 프로그래밍 언어를 선택할지는 조건에 따라 달라진다.
워드프레스는 DB서버 소프트웨어로 MySQL, 프로그래밍 언어로 PHP를 사용하므로 이 두가지는 고정되어 있다. 그러나 OS나 웹 서버 소프트웨어에 대해서는 특별히 정해진 바가 없다.
시스템을 구축하고 운용하는 엔지니어가 보유한 스킬에 따라 선택하는 것이 일반적이다.
그 밖에 고려할 수 있는 요소는 비용이다. 상용 제품을 사용하는 WISA와 비교하면 LAMP, LEMP는 OSS를 사용하므로 비용을 절감할 수 있다.
라우터는 쉽게 말해서 네트워크와 네트워크를 연결하는 것이다. 가정이나 소규모 사무실의 라우터를 생각해보자. 가정이나 소규모 사무실에서 라우터는 컴퓨터 여러 대로 회선 하나를 함께 사용하는 기능을 제공한다.
컴퓨터를 인터넷 회선에 직접 연결하면 연결된 컴퓨터만 외부 네트워크에 접속할 수 있다. 라우터를 이용하면 여러 대의 컴퓨터는 물론, 휴대 전화나 태블릿 등도 인터넷 회선을 공용하여 외부 네트워크에 접속할 수 있다.
라우터에 연결할 때 유선 랜뿐만 아니라 무선 랜을 사용하는 경우도 있다.
회선으로 접속하는 외부 네트워크로 인터넷을 가장 쉽게 생각할 수 있다. 소규모 사무실도 거점이 많은 회사의 한 거점이 될 때는 다른 거점과 VPN으로 접속하기도 한다.
또 라우터에는 DHCP 서버기능이 있어 정해진 범위 안에서 컴퓨터에 IP 주소를 할당하여 충돌이 일어나지 않게 관리한다. 네트워크에 따라서는 DHCP 서버 기능을 사용하지 않고, 모든 IP를 수동으로 관리하는 경우도 있다.
4.1.2. 스위치
L7스위치는 응용 계층의 내용까지 해석해서 데이터를 배분한다. 특정 사용자와 서버의 연결(세션)을 유지하는 기능은 L7 스위치가 구현한다.
4.2. 방어를 위한 네트워크 기기
4.2.1. 방화벽과 UTM
방어를 위한 네트워크 기기로 대표적인 것이 방화벽(firewall)이다. 방화벽은 네트워크가 연결되는 장소에서 통과시켜서는 안되는 통신을 차단하는 시스템이다.
방화벽이 발전한 형태가 UTM(Unified Threat Management)이다. UTM이란 방화벽, VPN, 안티바이러스, IDS/IPS, 콘텐츠 필터링, 안티스팸, 애플리케이션 컨트롤 등의 기능을 한 기기에서 한꺼번에 제공하는 것이다. 이를 시큐리티 어플라이언스 제품이라고도 한다.
나중에 나오는 WAF(Web Application Firewall)는 조금 성격이 다른 보안 제품이기 때문에 UTM에 포함되지 않는 경우가 많다.
** 콘텐츠 필터링은 데이터 손실을 방지하고자 특정 유형, 파일, 프로토콜 명령 등에 기반하여 트래픽을 차단한다.
방화벽 기능 자체는 지금도 유용하지만, 좀 더 다각적으로 위협에 대처하고자 UTM이 만들어졌다. 최근에는 통신을 애플리케이션 단위로 제어하는 기능을 가진 것도 있다.
예시
웹 사이트와 사용자 속성에 근거한 통신 제어
예) 마케팅 부서의 SNS에 대한 참조와 투고는 허가하고, 타 부서의 참조와 투고는 금지한다.
웹 사이트와 행동에 근거한 통신 제어
예) 웹 메일에서 파일 첨부를 금지한다.
웹 브라우저를 사용하지 않는 HTTP/HTTPS 통신 제어
채팅앱이나 파일 교환앱의 통신을 차단한다.
최근에는 많은 애플리케이션이 웹을 기반으로 동작하며, 웹 애플리케이션 이외에도 통신에 HTTP/HTTPS를 이용하는 사례가 증가한 것이 이런 기능이 등장한 배경이다. 따라서기존 프로토콜 기반의 패킷 필터링으로 할 수 없는 제어를 하여 보안을 강화할 필요가 있다.
4.2.2. WAF(Web Application Firewall)
WAF는 웹 사이트의 앞쪽에 배치하여 웹 사이트 및 웹 애플리케이션 등을 노린 공격을 방어하는 보안 대책이다.
WAF로 방어할 수 있는 주된 공격으로는 SQL 인젝션이나 XS, 패스워드 리스트 공격 등을 들 수 있다. WAF 종류에는 다음과 같은 것들이 있다.
어플라이언스 WAF
하드웨어 어플라이언스를 설치하는 형태의 WAF이다.
소프트웨어 WAF
서버에 소프트웨어를 설치하고 운영하는 형태의 WAF이다. (1)웹 서버에 직접 설치하고 운영하는 것과 (2)웹 서버와는 별도의 서버에 설치하여 리버스 프록시로 운영하는 것이 있다.
클라우드형 WAF
클라우드 서비스로 제공되는 형태의 WAF이다. 웹 사이트에 대한 액세스는 일단 클라우드형 WAF를 경유하여 웹 서버에 도달한다.
WAF를 이용할 때 주의
모든 WAF에서 공통인 것은 도입할 때 사전 검증을 철저히 하는 것이다. 도입 후에도 애플리케이션이 정상적으로 동작하는지, 응답에는 문제가 없는지 등을 확인해야 한다.
4.2.3. IDS/IPS
IDS(Intrusion Detection System)(침입 탐지 시스템)와 IPS(Intrusion Prevention System)(침입 방지 시스템)는 네트워크에서 침입을 탐지하고 방지하는 데 이용되는 시스템이다. 모두 보호 대상에 대한 침입을 탐지하는 데 사용된다.
IDS는 '탐지'와 '통지'를 하고, IPS는 '탐지'와 '통지' 및 '방지'를 한다고 할 수 있다. 이 둘을 거의 구별하지 않고 IDS/IPS 처럼 병기하는 경우도 많다.
IDS/IP의 탐지 방법에는 시그니처(signature)형과 어노멀리(anormaly)형 두 종류가 있다.
시그니처형이란 알려진 공격 패턴 등 비정상적인 통신 패턴을 데이터베이스에 보관하고, 통신 내용이 일치하는 경우에 비정상으로 판단하는 탐지방법이다.
어노멀리형은 반대로 정상적인 통신 패턴을 데이터베이스에 보관하고, 통신 내용이 비정상이라고 의심되는 경우에 부정으로 판단하는 탐지 방법이다.
시그니처형은 비정상인 패턴을 매칭하므로 오탐지가 적지만, 데이터베이스에 등록되지 않은 알려지지 않은 부정 액세스 패턴은 탐지할 수 없는 단점이 있다.
어노멀리형은 미지의 공격도 어느 정도 탐지할 수 있다는 장점이 있지만, 시그니처형보다 오탐지가 많아진다는 단점이 있다.
4.2.4. 각각의 관계성
방화벽은 3계층/4계층 수준에서 방어하는 기본적인 보안 시스템이고, IDS/IPS는 좀 더 애플리케이션에 가까운 방어를 주로 하는 등 각각 특성이 다르다. 따라서 필요에 따라 같이 사용하는 것이 좋다.
방화벽은 가장 기본적인 보안 시스템으로 반드시 사용한다.
IDS/IPS는 필요에 따라 이용 여부를 결정한다.
방어 대상이 웹 애플리케이션이라고 확실히 정해져 있다면 WAF를 병용하는 것도 고려한다.
4.3. 소프트웨어로 조작하는 네트워크
4.3.1. SDN
SDN(Software Defined Network)이란 소프트웨어를 이용하여 유연하게 정의할 수 있는 네트워크를 만드는 기술 혹은 그런 콘셉트를 의미한다.
물리적인 네트워크에서는 네트워크 기기나 서버를 추가하거나 네트워크 구성을 변경할 때 실제로 기기를 설치하거나 케이블을 꽂고 빼는 작업이 필요하다. 그리고 공유기와 스위치, 방화벽 등 설정도 각각 변경해야 한다.
SDN에서는 SDN컨트롤러라는 소프트웨어로 논리적인 네트워크를 한곳에서 집중 관리한다. 네트워크를 한곳에 모아서 관리하면 개별적으로 기기를 일일이 설정하지 않아도 되니 효율이 높아진다.
OpenFlow
SDN의 구체적인 구현으로 알려진 기술 중 하나가 바로 오픈프로(OpenFlow)이다. 기존 네트워크 기기에서는 경로 제어와 데이터 전송이 한 네트워크 장비로 구현되어 있다. 각각의 네트워크 기기가 설정에 따라 경로를 제어하고 데이터를 전송하면 부분적인 장애에 강하다는 장점이 있지만, 네트워크 전체에서 본 경로 선택이나 통합적인 관리가 어렵다는 문제점을 안고 있다.
오픈플로는 경로를 제어하는 오픈플로 컨트롤러와 실제 데이터를 전송하는 오픈플로 스위치로 구성되어 있으며, 네트워크를 전체적으로 보았을 때 경로 선택이나 통합적인 관리를 할 수 있다.
오픈플로를 구현하는 방식에는 오버레이 방식과 홉 바이 홉 방식 두 종류가 있다.
오버레이 방식은 가상 서버를 오픈플로를 지원하는 가상 스위치와 연결하여 물리 서버를 걸친 가상 랜을 구성하는 것이다. 기존 네트워크 기기 등을 활용하면서 도입할 수 있다는 장점이 있지만, 네트워크 전체를 보았을 때 세밀하게 경로를 제어할 수 없다는 단점이 있다.
홉 바이 홉 방식은 네트워크 기기도 오픈플로를 지원하는 기기를 이용함으로써 오픈플로가 지향하는 전체 기능을 활용하는 것이 목표이다.
4.3.1. SD-WAN
SD-WAN은 SDN을 랜뿐만 아니라 왠으로도 확대하려는 것이며, 소프트웨어로 자동화된 도입과 운용이 가능한 왠이다.
SD-WAN은 다음과 같은 세 가지 특징이 있다.
소프트웨어로 집중 관리
신규 거점 도입의 용이성
가상화 기반이나 IaaS형 클라우드와의 친화성
기존 왠은 기기마다 설정하여 접속했지만, SD-WAN은 SDN과 마찬가지로 소프트웨어 컨트롤러로 집중적으로 관리하는 것이 목표이며, 단일 관리 화면에서 각종 설정을 할 수 있다. 또 새롭게 접속 거점을 추가할 때도 현장에 네트워크 엔지니어가 가지 않고 도입할 수 있다.