20210210(수) - jungcow/42Cursus GitHub Wiki

1. 학습날짜

  • 2021-02-10(수)

2. 학습시간

  • 13:00 ~ 19:00(스터디룸) / 22:00 ~ 00:00 (집)

3. 학습범위 및 주제

  • nginx 서버 설치
  • php 연동

4. 동료 학습 방법

5. 학습 목표

  • 데비안 os에 nginx 웹서버 설치 및 php 연동하여 웹 띄우기

6. 과제 제출 repository 주소

7. 상세 학습 내용

서버 와 클라이언트

→ 클라이언트: 정보를 요청하는 쪽

→ 서버: 정보를 제공하는 쪽

HTTP

: Hypertext Transfer Protocol

→ 브라우저같은 응용프로그램을 통해 클라이언트와 서버 사이에 정보를 주고 받기 위한 프로토콜

→ 즉, 요청은 어떤 방식을 사용해서, 응답은 어떤 방식으로 해야하는지 정해놓은 약속

Web server

: HTTP Server 라고 한다.

→ 웹브라우저의 카운터 파트너

→ 서버쪽에서 정보를 제공해주는 소프트웨어를 의미

→ ex) 아파치(Apache)

Nginx

  • 웹서버 중 하나

  • 개발된 목적: 아파치(Apache)의 C10K 문제(한 시스템에 동시접속자 수가 1만명이 넘을 때)를 해결하기 위해

  • 특징: 비동기, Event-Driven 구조로 만든 웹 서버 SW.

  • 사용 예 : OSI 7 6레벨인 Presentation Layer에서 NGINX 같은 웹 서버가 HTTP 통신을 제공하게 된다.

  • 단어 설명:

    비동기: 데이터를 처리하는 방식 중 하나.

    • 다른 작업이 끝나기를 기다리지 않음, 그 시간 동안 다른 작업을 진행
    • 자원을 효율적으로 사용 가능.

    event-driven 구조: event-driven 프로그래밍을 다른 말로 asynchronous model 이라고 한다.

    • 이벤트 기반 프로그래밍 → 이벤트가 일어나야 다음 어떤 것을 실행할 지 또는 어떤 순서로 진행할 지 결정됨

    ※ 참고 : https://www.tutorialspoint.com/concurrency_in_python/concurrency_in_python_eventdriven_programming.htm

https://sleepyeyes.tistory.com/73

위 링크를 순서대로 참고하면 된다.

보충 설명

1. PHP-FPM이란?

: 빠른 php언어 번역기

: PHP FastCGI Process Manger 의 약자로, CGI보다 빠른 버전.

→ CGI란? : Common Gateway Interface,

  1. 정적 페이지가 아닌 동적 페이지를 위한 양방향 정보교환을 위해 필요함
  2. 웹서버(정보제공측)와 클라이언트(정보이용측)간에 필요한 정보교환을 가능하게 해주는 일종의 웹인터페이스(일종의 프로그램).
  3. 웹 서버에서 요청을 받아 외부 프로그램에 넘겨주면, 외부 프로그램은 그 파일을 읽어 html로 변환하는 단계를 거치는 것.

⇒ 아래 자료를 참고하면 CGI에 대해서 더 자세한 내용을 알 수 있다.

※ 참고: https://www.linux.co.kr/unixwebhosting/cgi/cgi01.htm

→ Fast CGI는 요청할때마다 이미 생성된 프로세스를 가지고 구동하기 때문에 처리가 CGI보다 빠릅니다

2. PHP-FPM이 왜 필요한가?

→ 아파치(Apache)는 php모듈이 있기에 처리가 가능

→ 하지만, nginx는 php-fpm 을 따로 설치하여 연동을 시켜줘야 한다.


1. debian:buster 이미지로 docker 을 실행시켰다.

→ apt install nginx로 nginx를 설치하려고 하자 다음과 같은 오류 발생

E: Unable to locate package nginx

[사진]

→ 이 때, 포트 80번으로 포워딩 해주는 이유는 nginx 기본 포트가 80번이기 때문이다.

2. 위 문제 해결 방법

a. 스펠링 체크 → 정확하게 쳤었다.

b. 만약 이 시스템을 설치 후에 처음 이용하는 것이라면 (sudo) apt update 를 이용해서 repository cache를 업데이트 해줘야함

Basically, the ‘apt update’ command builds a local cache of available packages.

→ install 명령어는 apt 패키지 매니저에서 그 버전 정보와 패키지를 가져오기 위해 cache를 살핀다.

→ 그리고 이 저장소를 네트워크를 통해서 다운로드하게 된다.

→ 만약에 패키지가 cache에 없다면, 내 system은 이걸 설치하지 못할 것.

→ 만약 리눅스 시스템을 새로이 설치했다면, cache는 비어있을 것이다.

⇒ 따라서, 처음 사용하는 거라면, apt update를 바로 해줘야 한다.

※ 처음 사용한 것이 아니더라도, apt cache를 update 시켜주는 것은 항상 좋다.

즉, apt-get update && apt-get upgrade 이 두개를 패키지 설치전에 미리 해놓아야 한다.

위 방법으로 해결 함

c. 위로 해결 안된다면, package가 사용중인 리눅스 버전에서 사용가능한 것인지 확인해야 한다.

: 보통 패키지를 다운받을 땐 웹사이트에 나와있는 그대로를 따라하는 것일 텐데, 왜 웹사이트에서 소개하고 있는 방식에선 잘 되는데, 내 시스템에서는 왜 안될까??

※ 참고: https://itsfoss.com/unable-to-locate-package-error-ubuntu/

localhost:80 으로 실행한 결과

[사진]

php 설정 중 short_open_tag 를 on으로 변경하는 이유

<?php ?>대신 <? ?> 로 짧게 쓸 수 있다.

→ php 5.4.0 이전에는 <? echo.<?= 으로 쓸 수 있다.

8. 학습에 대한 총평

  • nginx 와 php의 개념에 대해 학습한 후 두개를 같이 설치 후 연동시켜 연동 된 모습을 보면서 학습을 진행하니 확실히 더욱 어떻게 쓰이는지 어떨 때에 사용해야하는지에 대한 개념이 잘 잡히게 되었다. 이런식으로 하나하나 하위 개념들을 잡고 서로 엮어서 어떻게 동작하는지를 살펴보며 학습을 진행해야겠다.

9. 다음 학습 계획

  • mysql에 대해서
  • phpMyAdmin 에 대해서
  • exam02 printf 로직 다시 짜기
⚠️ **GitHub.com Fallback** ⚠️