Inception 개념정리

개발새발·2022년 10월 27일
0

42Cursus

목록 보기
25/29
post-thumbnail
post-custom-banner

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

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

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

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

6. CGI & Fast CGI

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

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

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

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

 

Reference

profile
블록체인 개발 어때요
post-custom-banner

0개의 댓글