Inception 개념정리

개발새발·2022년 10월 27일

42Cursus

목록 보기
25/29
post-thumbnail

Inception

본 프로젝트의 개요와 프로젝트를 진행하기 위한 개념 확립

1. Docker

Docker, Dockerfile, Docker Compose에 관한 개념 설명은 다음의 글에 정리해 두었다.

도커와 컨테이너 이해하기

1-1. Dockerfile 작성법

  • FROM : Docker Base Image (기반이 되는 이미지, <이미지 이름>:<태그> 형식으로 설정)
  • MAINTAINER : 메인테이너 정보 (작성자 정보)
  • RUN : Shell Script 또는 명령을 실행
  • CMD : 컨테이너가 실행되었을 때 명령이 실행
  • LABEL : 라벨 작성 (docker inspect 명령으로 label 확인할 수 있습니다.)
  • EXPOSE : 호스트와 연결할 포트 번호를 설정
  • ENV : 환경변수 설정
  • ADD : 파일 / 디렉터리 추가
  • COPY : 파일 복사
  • ENTRYPOINT : 컨테이너가 시작되었을 때 스크립트 실행
  • VOLUME : 볼륨 마운트
  • USER : 명령 실행할 사용자 권한 지정
  • WORKDIR : "RUN", "CMD", "ENTRYPOINT" 명령이 실행될 작업 디렉터리
  • ARG : Dockerfile 내부 변수
  • ONBUILD : 다른 이미지의 Base Image로 쓰이는 경우 실행될 명령 수행
  • SHELL : Default Shell 지정

1-2. docker-compose.yaml 작성법

version : 도커 컴포즈 버전

services : 애플리케이션을 구성할 서비스 목록 (컨테이너를 실행할 때 필요한 정보 명시)
	서비스이름 : (아래의 목록은 순서가 상관없음)
        build : 빌드할 Dockerfile의 경로
        image : 컨테이너를 올릴 때 사용할 이미지
        command : 컨테이너에서 수행할 명령어
        ports : 포트포워딩 지정
        working_dir : 작업할 경로
        container_name : 컨테이너 이름
        volumes : 마운트할 볼륨
        environment : 컨테이너에서 사용될 환경변수
        networks : 사용할 네트워크 정의
        depends_on : 실행순서를 보장받고 싶을 때 사용

volumes : 미리 생성해두고 컨테이너에서 불러와서 사용할 볼륨
    볼륨 이름 (볼륨 이름만 명시하면 기본 옵션을 사용)
    driver
    driver_opts 드라이버 옵션 설정

networks : 컨테이너 간 네트워크 설정
    네트워크 이름

 

3. Nginx

3-1. Nginx란?

  • 가볍고 높은 성능을 가진 Web Server
  • HTTP Server로 활용되며 정적 파일들을 처리하기 위해 사용
  • Reverse Proxy Server로 활용됨
  • 80번 포트로 들어오는 내용을 3000, 4000, 9000 등의 다른 포트로 분산 시켜줌
  • 비동기 이벤트 구조를 기반으로 동작

3-2. nginx.conf 구조

  • listen

    • 해당 포트로 들어오는 요청을 해당 server {} 블록의 내용에 맞게 처리하겠다는 뜻
  • server_name

    • 호스트 이름 지정
    • 가상 호스트가 있는 경우 해당 호스트명을 넣으면 되고, 로컬에서 작업하고 있는 내용을 nginx를 통해 띄우려고 하는 경우에는 localhost라고 적으면 됨
  • error_page

    • 요청 결과의 http 상태코드가 지정된 http 상태코드와 일치할 경우 해당 url로 이동
    • 보통 403, 404, 502 등의 에러처리를 위해 사용
  • location

    • 처음 요청이 들어왔을 때 보여줄 페이지들이 속해있는 경로와 초기 페이지인 index 지정
    • url로 접속했을 경우 index.html, index.htm으로 정의된 파일들을 보여줌

4. self-signed SSL 인증서 생성

HTTPS(Hypertext Transfer Protocol over Secure Socket Layer)는 SSL위에서 돌아가는 HTTP의 평문 전송 대신 암호화된 통신을 하는 프로토콜이다. 이런 HTTPS를 통신을 서버에서 구현하기 위해서는 신뢰할 수 있는 상위 기업이 발급한 인증서가 필요한데 이런 발급 기관을 CA(Certificate Authority)라고 한다. CA의 인증서를 발급받는 것은 무료가 아니다. self-signed SSL 인증서는 자체적으로 발급받은 인증서이며, 로그인 및 기타 개인 계정 인증 정보를 암호화한다. self-signed SSL 인증서를 만드는 방법 중 하나는 무료 오픈소스인 openssl을 이용해 만드는 것이다. HTTPS를 위해 필요한 개인키(.key), 서면요청파일(.csr), 인증서파일(.crt)을 openssl이 발급해준다.

 

5. Wordpress

WordPress는 오픈 소스 블로그 소프트웨어이며 템플릿 시스템을 사용한다. PHP와 HTML 코드 편집 없이도 다시 정리할 수 있는 위젯이 포함되어 있고, 테마도 설치해 자유롭게 전환할 수 있다. 테마 안의 PHP와 HTML 코드는 좀 더 세분화된 맞춤 페이지를 위해 편집할 수 있다.

또한 통합 링크 관리 체계가 갖추어져 있어, 검색 엔진에 친화적이고, 깔끔한 퍼머링크 구조와, 기사에 여러 카테고리를 설정할 수 있는 것을 물론, 여러 명의 저자를 설정할 수 있고, 기사와 포스트에 태그를 지원한다. 또한 트랙백과 핑백 표준을 지원하며 마지막으로 사용자와 개발자는 리치 플러그인 아키텍처를 통해 기능을 확장할 수 있다.

또한 WP-CLI는 PHAR로 작성된 유틸리티로써 명령어로 Wordpress 를 관리할 수 있는 유틸리티이다.

플러그인 관리, 워드프레스 업그레이드등의 관리 작업을 커맨드로 실행할 수 있으므로 자동화된 관리가 가능하며 다수의 워드프레스 사이트를 손쉽게 운영할 수 있는 장점이 있다.

6. CGI & Fast CGI

CGI는 Common Gateway Interface의 약자로 웹서버와 외부 프로그램을 연결해주는 표준화된 프로토콜이다. 웹서버로 요청이 들어왔을 때 그것이 웹서버가 처리 할 수 없는 정보일 때 그 정보를 처리 할 수 있는 외부 프로그램을 호출해서 외부 프로그램이 처리한 결과를 웹서버가 받아서 브라우저로 전송하는 것이다. 외부 프로그램은 C, C++, Perl, PHP, Python 등 어떤 언어로든 작성될 수 있는데, 이것이 가능한 것은 웹서버와 외부 프로그램 사이에 통용되는 공통의 규칙이 정의되어 있기 때문이다.

Apache, Nginx 등의 웹 서버를 쓰고 PHP 프로그래밍이나 Python 프로그래밍 등의 여러가지 언어를 쓰는데 이것들이 문제 없이 communication 할 수 있는 것은 그 사이에 CGI라는 표준이 있기 때문이다. 그렇기 때문에 Apache에 PHP가 붙기도 하고 Apache에 Python이 붙기도 하고 Nginx에 PHP가 붙기도 하고 Nginx에 Python이 붙기도 하는 것이다.

하지만 CGI는 하나의 request 당 하나의 process가 배정되는 속도의 한계가 있었고 이를 개선한 것이 FastCGI다. FastCGI는 여러 개의 request가 들어와도 이미 만들어져있는 process를 공유해서 처리하기 때문에 process를 생성하고 삭제하는데 소요되는 리소스, 시간 등이 절약된다.

PHP-FPM는 PHP FastCGI Process Manager의 약자로 PHP를 FastCGI 모드로 동작하게 해준다. 하나의 process로 여러 개의 request들을 처리해주는 manager인 것이다.

 

Reference

profile
블록체인 개발 어때요

0개의 댓글