2021.04.27 ~ 2021.05.03
침입 차단 소프트웨어가 설치되어 내부와 외부 네트워크 사이에서 일종의 게이트 역할을 수행하는 호스트. 보호해야할 네트워크에 접근하기 위해 유일하게 외부에 노출되는 호스트를 말한다.
WAS나 DBMS 서버 등은 외부에 노출되어서는 안된다. 따라서 이번 서버들은 사설망에 위치시키고 IP 또한 public이 아닌 private IP로 접근하도록 해야한다.
이때 bastion 서버를 public subnet에 두어 public IP로 접근할 수 있도록 하고, 내부 서버들은 bastion 서버를 통해서만 접근한다.
이를 위해 bastion 서버에는 여러 보안 관련 처리를 해줘야한다.
참고
베스천 호스트
쓰레드 덤프 -> 프로세스에 속한 모든 쓰레드의 상태를 기록해놓은것. 직접 실행시킨 Java 응용 프로그램의 쓰레드와 JVM 내부적으로 존재하는 쓰레드로 나뉘게 됨.
쓰레드 덤프를 통해 어플리케이션에 발생한 문제를 분석하거나, 성능 최적화에 필요한 정보들을 보여준다.
쓰레드 덤프 분석
쓰레드 상태
[쓰레드이름 우선순위 쓰레드ID 쓰레드상태]로 쓰레드 정보가 나타난다.
참고
스레드 덤프 분석하기
컨테이너 기반의 오픈소스 가상화 플랫폼이다.
컨테이너는 격리된 공간에서 프로세스가 동작하는 기술을 말한다.
다양한 프로그램(백엔드 프로그램, DB서버 등), 실행 환경을 컨테이너로 추상화하고 동일한 인터페이스를 제공하여 프로그램의 배포 및 관리를 단순하게 해주는 것이다.
컨테이너는 이미지를 실행한 상태라고 볼 수 있다.
이미지는 컨테이너 실행에 필요한 파일과 설정 값 등을 포함하고 있는 것으로 상태 값을 가지지 않고 변하지 않는다.
같은 이미지에서 여러개의 컨테이너를 생성할 수 있으며 컨테이너의 상태가 바뀌거나 컨테이너가 삭제되더라도 이미지는 그대로 남아있다.
이미지는 컨테이너를 실행시키기 위한 모든 정보를 가지고 있기 때문에, 따로 의존성을 설치하거나 할 필요가 없다. 미리 만들어 놓은 이미지를 다운받고 컨테이너를 만들면 된다.
서버와 서버 사이에서 중간 다리 역할을 한다. 보안상 이유로 직접 통신할 수 없는 두 서버 사이에서 대신 통신을 수행해주는 것을 말한다.
프록시 서버를 클라이언트와 원격 리소스 사이에 위치시키는 방법이다. 프록시 서버는 클라이언트가 요청한 리소스를 원격 리소스에서 가져와 클라이언트에게 응답해준다. 캐시를 이용하여 다음 요청시 캐시된 데이터를 제공해주기도 한다.
Forward Proxy는 대역폭을 감소시킬 수 있고, 접근 정책 구현에 있어 다루기 쉬우면서 비용도 저렴하여 기업 환경에서 많이 사용한다.
프록시 서버를 인터넷 리소스 또는 인트라넷 리소스 앞에 위치시키는 방법이다. 보안 때문에 사용하는 방법이다.
보통 기업 네트워크 환경에서는 내부 네트워크(WAS, DB서버)와 외부 네트워크 사이에 DMZ라고 부르는 구간이 존재한다. DMZ에는 메일 서버, 웹 서버, FTP 서버 등 외부 서비스를 제공하는 서버가 위치하게 된다.Reverse Proxy를 DMZ에 두고 실제 서비스 서버는 내부망에 위치시킨다.
WEB(Apache, nginx) - WAS(Tomcat)으로 분리된 구조에서 WEB부분이 Reverse Proxy라고 볼 수 있다.(한 서버에 WEB, WAS가 둘 다 존재한다면 reverse proxy라고 볼 수 없다.)
보안성 향상, 확장성 향상, 웹 가속(압축/SSL 처리로 백엔드 리소스 확보/캐싱)의 이점이 있다.
참고
포워드 프록시(forward proxy) 리버스 프록시(reverse proxy) 의 차이
Reverse Proxy, Forward Proxy (프록시란?)
로드밸런싱은 여러 서버에 작업량을 분산시켜 웹 사이트, 애플리케이션, DB, 다른 서비스들의 성능과 신뢰성을 향상시키기 위한 인프라이다.
로드밸런싱(Load Balancing) vs 리버스 프록시(Reverse Proxy)
경량 웹 서버이다. 더 적은 자원으로 더 빠르게 서비스한다. 클라이언트의 요청에 맞게 정적 파일을 응답해주는 HTTP 웹 서버로 활용할 수도 있고, Reverse Proxy로 활용하여 WAS의 부하를 줄여주는 로드 밸런서로 활용되기도 한다.
Event-Driven 구조로 동작하며 비동기 방식으로 요청들을 동시에 수행할 수 있다. 한 개 또는 고정된 프로세스만 생성해서 사용한다. 새로운 요청이 들어오더라도 새로운 프로세스와 스레드를 생성하지 않는다. 따라서 단일 서버에서도 수만 개의 동시 연결을 처리할 수 있다.
Nginx는 하나의 Master Process와 여러 Worker Process로 구성되어 있다. Master는 설정 파일을 읽기, 유효성 검사, Worker 프로세스 관리의 역할을 한다. Worker는 모든 요청을 처리한다.
참고
Nginx란 무엇인가?
백그라운드에서 돌린다는 의미
분명 로컬에서는 잘 나왔던 이미지 파일이 aws에 올렸을 때 잘 나오지 않았다. 원인은 대소문자 구분을 해주지 않았던 것..
DDoS(다수의 악의적인 사용자가 특정 사이트에 동시 접속하여 과도한 트래픽을 일으켜 정상적인 서비스를 방해하는 크래킹의 일종)
공격받는 지점을 줄인다.(어플리케이션에 도달할 수 있는 가능한 트래픽의 유형을 줄인다.)
- ex. 80과 443 포트만 오픈한다.
- bastion 서버 사용: 22번 포트에 대해 공격을 받아도 SSH 서비스 부분만 장애 발생. service 서버는 영향을 받지 않는다.
EBS 디스크는 확장가능한 볼륨이다. 1) EBS 볼륨확장, 2) 파일 시스템 확장 과정을 거쳐야한다.
[EBS 볼륨 확장]
1. EC2 -> Elastic Block Store -> 볼륨
2. 원하는 볼륨 선택 후 오른쪽 클릭 '볼륨 수정'
3. 원하는 용량 적어준 후 '수정' 클릭
-> 이 과정을 지나고나면 전체 드라이브의 용량이 늘어난다. 하지만 전체 드라이브가 커진 것이지, 스토리지의 용량이 자동으로 커지진 않는다.
[파일 시스템 확장 과정]
lsblk -> 어떤 파티션의 크기를 조정해야 하는지 확인
df -h -> 디스크 용량 확인
sudo growpart [디바이스 이름][파티션 번호] -> 파티션 크기 조정 ex) sudo growpart /dev/xvda 1
sudo resize2fs /dev/xvda1 -> 파일 시스템 확장
CPU가 포화상태면 처리하지 못하고 대기하는 프로세스가 발생하기 때문에
실행속도 저하, 프로그램 다운, 정상적으로 동작하지 않음 등의 문제가 발생할 수 있을 것 같습니다.
속도가 느려지고 더 이상 파일을 저장할 수 없습니다.
임시 파일이나, 사용자가 저장해놓은 사진 같은 지워도 아무런 문제 없는 파일들부터 지우면 좋을 것 같습니다.
필터링을 통한 검열.
로드밸런싱을 이용한 분산 부하.