3계층 구조(3-tier architecture)
- 개념
- 소프트웨어 개발에서 규모있고 유지보수 가능한 애플리케이션을 만들 때 흔히 사용하는 디자인 패턴
- 하나의 애플리케이션을 세 개의 구분되는 티어로 나눈다.
- 구성
- 프레젠테이션 계층 (또는 사용자 인터페이스(UI))
- 사용자 인터페이스를 담당. 애플리케이션과의 상호작용을 담당
- 주로 웹 서버, 웹 페이지 또는 모바일 앱으로 구성됨.
- 애플리케이션 계층 (또는 비즈니스 로직)
- 애플리케이션의 비즈니스 로직을 담고있다.
- 비즈니스 로직 : 특정 비즈니스 목표를 달성하기 위해 데이터를 처리하고 조작하는 방법을 결정하는 규칙 및 프로세스를 일컫는 말.
- 데이터를 가공하고 조작하는 일, 비즈니스 규칙을 만드는 일, 프레젠테이션 계층과 데이터 계층 간의 소통을 돕는 일을 당담
- 애플리케이션의 비즈니스 로직을 담고있다.
- 데이터 계층 (또는 저장소)
- 앱의 데이터를 관리하는 일을 담당.
- 데이터 베이스 서버 또는 기타 데이터 저장 시스템으로 구성됨.
- 프레젠테이션 계층 (또는 사용자 인터페이스(UI))
SSL (Secure Socket Layer)
- 개념
- 웹사이트와 브라우저 사이(또는 두 서버 사이)에 전송되는 데이터를 암호화하여 인터넷 연결을 보호하기 위한 표준 기술
- 특징
- 기본적으로 공개 키와 대칭 키 암호화를 통해 클라이언트와 서버 간에 전송되는 데이터를 암호화한다.
- 발급받은 인증서는 보통 공개 키 파일과 CA의 디지털 서명이 포함하고 있다.
- HTTPS에 사용되며 암호화를 통해 기존 HTTP 프로토콜보다 한층 강화된 보안을 제공한다.
- 이후에 SSL에서 버전업 된 TLS (Transport Layer Security)가 발표되었다.
- 일반적으로 Certificate Authority (CA)에서 인증서를 발급받지만 OpenSSl을 통해 self-signed 인증서를 발급받을 수 있다.
OpenSSL
- 개념
- 네트워크를 통한 데이터 통신에 쓰이는 프로토콜인 TLS와 SSL의 오픈 소스 구현판
.crt
확장자의 공개 키 파일과.key
확장자의 개인 키 파일이 생성된다.- 인증서 속성
CN
: CommonNameOU
: OrganizationalUnitO
: OrganizationL
: LocalityS
: StateOrProvinceNameC
: CountryName
HTTPS (Hypertext Transfer Protocol Secure)
- 개념
- 인터넷을 통한 보안 통신에 사용되는 프로토콜
- HTTP 프로토콜에 SSL/TLS 암호화 프로토콜이 결합된 방식
- 서버와 클라이언트 간에 전송되는 데이터가 암호화되어 도청 및 변조로부터 더 안전하게 보호됨
- 동작 과정
- 서버는 암호화에 사용되는 공개 키를 포함하는 SSL/TLS 인증서를 클라이언트에게 보낸다.
- 클라이언트는 CA(인증 기관)의 서명을 확인하고 인증서가 취소되지 않았는지를 확인하여 인증서의 신뢰성을 확인한다.
- 클라이언트는 대칭 암호화 키를 생성하고 서버의 공개 키를 사용하여 암호화한다.
- 암호화된 대칭 키는 서버로 다시 전송되며, 서버는 개인 키를 사용하여 복호화한다.
- 이제 클라이언트와 서버는 동일한 대칭 키를 공유하고 데이터를 암호화하고 복호화하는 데 사용할 수 있다.
hosts
- 개념
- 특징
- 브라우저에서 호스트명으로 입력을 하면 시스템이 해당 파일에서 일치하는 IP 주소가 있는지 찾고 해당 IP를 이용해 서버에 연결한다.
- 로컬 머신에서 웹사이트를 테스트하거나 특정 웹사이트를 다른 IP 주소로 리다이렉트해서 블로킹하는데 유용하다.
PID1
- 개념
- UNIX 계열 운영체제에서 첫 번째로 시작된 프로세스를 일컫는 말.
- 시스템 내의 다른 모든 프로세스들의 부모 프로세스가 되며, 특별한 역할을 지닌다.
- 도커에서
- 컨테이너가 시작될 때 가장 먼저 시작되는 프로세스
- 컨테이너 내에서 동작하는 모든 프로세스를 관리할 책임이 있다.
- 주로 Dockerfile에 정의된 entrypoint 명령에 해당한다.
Dumb-init
- 개념
- 단순한 프로세스 관리/init 시스템
- 컨테이너 내에서 PID1 처럼 동작하도록 디자인되었다.
- 목적
- 프로세스 수거 문제를 해결하기 위해 사용된다.
- 프로세스 수거 문제(process reaping problem)
- PID1 또는 메인 프로세스가 시그널을 제대로 처리하도록 디자인되지 않은 경우 자식 프로세스를 수거하지 못할 수 있다. 이로 인해 좀비 프로세스가 생겨난다.
- 프로세스 수거 문제(process reaping problem)
- 컨테이너로 전달되는 시그널(SIGTERM, SIGINT 등)을 컨테이너의 메인 프로세스에게로 포워딩해주는 역할.
- 컨테이너가 중지될 때, 컨테이너가 제대로 꺼지고 자원이 회수되는 것을 보장한다.
- 그밖에도 좀비 프로세스를 수거하거나(reaping) 메인 프로세스가 시작되기 전에 환경 변수를 설정하는 등의 역할을 한다.
- 프로세스 수거 문제를 해결하기 위해 사용된다.
su 명령어
개념
- substitute user
- 한 유저에서 다른 유저로 변경하는 명령어
사용법
- 방법 1
1
su [username]
- 현재 경로와 환경에서 새로운 셸을 로그인한다.
- 방법 2
1
su - [username]
- 대상 유저의 설정으로 완전히 변경한다.
- 경로 또한 해당 유저의 홈 디렉토리로 변경된다.
sudo와 su의 차이
- 두 명령어 모두 현재 유저의 권한을 높여주는 명령어이다.
- su는 대상 계정의 암호를 필요로 한다.
- sudo는 현재 유저의 암호를 필요로 한다.
sudo -i
vs su -
sudo -i
- 명령어나 셸을 루트 권한으로 실행하는 명령어
su -
- 사용자에게 전체 로그인 환경을 제공한다.
- 시스템 관리 작업을 위한 환경을 설정하는데 유용하다.
CGI
- Common Gateway Interface
- 웹서버와 외부 프로그램을 연결해주는 표준화 된 프로토콜
- 각 요청이 들어올 때마다 새로운 프로세스를 생성한다.
- 서버에 부하가 발생할 수 있다.
FastCGI
- Fast Common Gateway Interface
- 웹 애플리케이션의 성능과 확장성을 향상시키기 위해 CGI에서 확장됨.
- 한 개의 프로세스만 만들어서 요청을 전달한다.
- 프로세스를 생성하는 데 따른 오버헤드를 크게 줄일 수 있으므로 응답 시간이 빨라지고 서버 확장성이 향상됨.
PHP-fpm (FastCGI Process Manager)
- 요청받은 PHP 파일을 가져오는 역할
- 동작 방식
- 클라이언트(브라우저)가 PHP 파일을 요청한다.
- 서버는 요청을 받고 이를 FPM에 전달한다.
- FPM은 PHP 스크립트를 실행하고 결과를 서버에 돌려준다.
- 서버는 받은 결과를 클라이언트에게 준다.