1. 서버 구축과 프로토콜 이해

1-1. 서버 구축과 클라이언트 - 서버 관계 이해

  • 서버는 클라이언트에게 네트워크를 통해 서비스를 제공하는 컴퓨터를 말한다.
  • 클라이언트의 요청이 서버에 전달되면, 서버는 응답을 생성하여 클라이언트에게 전달한다.
  • 하나의 요청에 대해 하나의 응답이 생성된다.
  • 서버는 항상 켜져 있어야 하며, 요청에 대한 응답이 언제든지 올 수 있어야 한다.
  • 서버는 외부에서 처리하며, 로컬 환경에서 수행하기 어려운 작업을 보다 효율적으로 처리할 수 있다.

백엔드(Backend)와 서버(Server)

  • 역할: 백엔드는 클라이언트(애플리케이션, 브라우저 등)의 요청을 컴퓨터가 수행할 수 있도록 하는 작업을 담당한다.
  • 서버의 지속성: 서버는 클라이언트의 요청에 지속적으로 응답할 수 있어야 하므로, 365일 24시간 동안 다운되지 않고 전원이 켜져 있어야 한다.
  • 서버 다운:
    • 서버가 다운되었다는 것은 장애나 에러 등으로 인해 서버가 클라이언트의 요청을 처리할 수 없는 상황을 의미한다.
  • 운영 체제: 서버는 주로 리눅스(Linux)나 서버용 윈도우 운영 체제(OS)를 사용한다.
  • 운영 환경: 대부분의 서버는 CLI (Command Line Interface) 환경에서 운영되며, GUI 환경은 필요하지 않다.
    • 서버는 클라이언트의 요청에 대해 안전하게 응답하기만 하면 되므로, GUI가 필요 없고, GUI 운영에 소모되는 리소스를 줄일 수 있다.

1-2. 서버 구축 방법과 프로토콜 이해

프로토콜 (Protocol)

  • 사람 간 대화에서 공용 언어(예: 영어)를 사용하듯, 컴퓨터 간에도 서로 이해할 수 있는 언어, 즉 프로토콜이 필요하다.
  • 사전적 정의 : 프로토콜은 정보를 주고받는 양식과 규칙의 체계이다.
  • 쉽게 말해, 컴퓨터 네트워크에서 컴퓨터가 정보를 주고받기 위해 약속한 규칙이다.
  • 프로토콜 예시: HTTP, HTTPS, FTP, SSH, SMTP 등.

HTTP 프로토콜

  • HTTP: Hypertext Transfer Protocol
  • 인터넷에서 데이터를 주고받기 위한 프로토콜이다.(약속)
  • 클라이언트는 서버에 자원을 요청(request)하고, 서버는 이를 처리하여 응답(response)한다.
  • 서버 구축에는 직접 서버를 만드는 방법(자신의 컴퓨터를 직접 서버로 구축)과 임대(호스팅)하는 방법이 있다.
  • 임대 방식에는 서버 호스팅과 웹 호스팅이 있으며, 각각의 장단점이 있다.
  • 서버 호스팅은 전체 서버를 통째로 빌리는 방식이며, 웹 호스팅은 일부분만 빌리거나 통째로 빌리는 방식이다.
  • 클라우드 방식은 외부의 인터넷에 접속하여 서버를 이용하는 방식이다.
  • 서버 호스팅 vs 웹 호스팅

    • 서버 호스팅
      • 자체적인 관리 필요
      • 컴퓨터의 작동 환경을 마음껏 유동적으로 설정 가능
      • 웹 호스팅에 비해 가격이 비쌈

    • 웹 호스팅
      • 서버 호스팅에 비해 가격이 저렴
      • 서버 자체를 웹 호스팅 사에서 운영, 쉽게 이용이 가능함
      • 트래픽, 용량 등 사용상의 제약이 있을 수 있음

1-3. 서버의 중요성과 클라우드 이용의 장점

  • 서버는 네이버나 구글과 같은 대형 서비스에서 높은 가용성을 제공하여, 서비스가 중단되는 일이 거의 없어 사용자에게 안정적인 접속을 가능하게 한다.
  • 클라우드 이용은 좀 더 효과적인 서버 구축이 가능하며, 용량 제약 없이 접근할 수 있다.
  • 클라우드는 여러 기능을 제공하며, 업무 용량 제한 없이 이용할 수 있다.
  • 서버는 개인의 컴퓨터가 아닌 클라우드를 이용하므로, 효율성이 높다.


2. 클라우드 컴퓨팅과 AWS

2-1. 클라우드 컴퓨팅의 이해

  • 클라우드 컴퓨팅은 인터넷을 통해 서버 및 기타 리소스를 임대해주는 서비스이다. 클라우드 상에 서버를 구축할 수 있다.
  • 이는 가상화 기술의 한 형태로, 물리적으로 없는 서버를 소프트웨어로 대체하여 만든 것이다.
  • 클라우드 서버를 사용하면 물리적인 서버가 필요 없지만, 네트워크를 통해 가상 서버에 접근할 수 있다.
  • 이는 본래의 컴퓨터 1대에 해당하며, 클라우드 서버를 이용하면 본래의 컴퓨터는 필요 없어질 수 있다.
  • 로컬 환경과 클라우드 서버 환경은 별개로 생각할 필요가 있다.

클라우드 (Cloud)

  • 클라우드는 언제, 어디서든 인터넷을 통해 접속 가능한 환경이다.
  • EX ) Microsoft Office 365, Dropbox, Google Apps 등

클라우드 컴퓨팅 (Cloud Computing)

  • 클라우드 컴퓨팅은 서버, 네트워크 등의 인프라 전체를 임대해주는 서비스이다.
  • 클라우드에 구축된 인프라를 활용하는 서비스이다.
  • 가상화 기술을 사용해 원하는 대로 서버를 구축하고 운영할 수 있다.
  • 주요 서비스 : AWS, Microsoft Azure, GCP, NCP 등

가상화

  • 가상화는 클라우드에서 가장 중요한 기술이다.
  • 실체가 없는 것을 의미하지 않으며, 컴퓨터가 필요한 물리적 장치를 소프트웨어로 대체하는 기술이다.
  • 메모리, 하드디스크, 운영체제(OS) 등이 포함된다.

클라우드 서버

  • 클라우드 서버는 실제 물리적인 컴퓨터가 아닌 가상 머신(VM)으로 서버를 운영하는 방식이다.
  • 프로그램으로 가상의 컴퓨터(서버)를 생성하여 이용하는 방법이다.
  • 사용자는 서버를 관리할 수 있는 root 권한을 가진다. (root 권한은 모든 권한을 가진 계정)

클라우드 서버의 장점

  • 클라우드 서버는 짧은 시간 안에 서버를 쉽게 생성할 수 있다.
  • 물리적인 컴퓨터의 한계를 넘어 무한대의 저장공간을 이용할 수 있다.
  • 이론적으로 접속량이 많아도 다운되지 않는 서버를 만들 수 있다.

클라우드 유형

1. 퍼블릭 클라우드

  • 클라우드 서버 또는 호스팅 공급자가 소유하고 관리한다.
  • 사용한 만큼만 서비스 요금을 지불한다.

2. 프라이빗 클라우드

  • 기업 내부에 전용 클라우드 센터를 만든다.
  • 조직이 서비스를 운영하며, 조직 외부 사용자는 접근할 수 없다.

3. 하이브리드 클라우드

  • 퍼블릭 클라우드와 프라이빗 클라우드를 결합한다.
  • 애플리케이션이 가장 적절한 위치에서 실행될 수 있도록 한다.

이 벨로그에서는 AWS (Amazon Web Service)를 이용할 것이다.
🔗 AWS사이트


📌 AWS

2-2. AWS의 소개

  • AWS는 아마존에서 제공하는 웹 서비스이며, 클라우드 컴퓨팅 플랫폼을 제공한다.
  • AWS는 여러 기능을 제공하며, 특히 AI와 클라우드 서버가 대표적이다.
  • AWS는 회원 가입 후 무료로 체험할 수 있는 프리티어 기능을 제공한다.
  • 프리티어는 1년 동안 750시간만 무료로 제공되며, 이후에는 요금이 발생한다.
  • AWS의 서비스 중 하나인 EC2는 프리티어 제공 범위에 속하는 가장 낮은 T2 인스턴스를 사용할 수 있다.
    🔗 프리티어 설명 링크

2-3. AWS의 기능과 활용

  • AWS는 서버 구축 외에도 다양한 기능을 제공한다.
  • AWS는 제품, 컴퓨팅, 데이터, 스토리지, 콘텐츠 전송, 다운로드 등을 포함한다.
  • AWS의 AI 기능은 인공지능 분야에서 중요한 역할을 한다.
  • AWS는 여러 AI 기능과 제품, 콘텐츠 전송 등을 제공하며, 이를 통해 프로젝트 개발에 활용할 수 있다.
  • AWS는 AWS 프리티어의 무료 체험을 제공하며, 이후 요금이 발생한다.

3. 서버 구축과 웹 서버의 구성

Elastic Compute Cloud (EC2)

  • 서비스 개요: 독립된 컴퓨터를 임대해주는 클라우드 서비스.

특징

  • 유연한 자원 조절: 컴퓨팅 요구에 따라 자원을 쉽게 조정할 수 있다.
  • 간편한 설정: 몇 번의 클릭으로 컴퓨터를 구성할 수 있다.
  • 비용 효율성: 사용한 만큼만 지불하는 모델이다.

🔗EC2생성하러가기

⬇️ EC2생성 순서 ⬇️

여기서 포트 설정을 해주고 싶다면?

3-1. 서버 구축과 EC2의 이해

  • 서버 구축을 위해 EC2라는 무료로 제공되는 서버를 생성해야 하며, 750시간만 사용 가능하다.
  • 서버 사용 시간은 월 750시간이며, 1년 동안 유효하고, 인스턴스 생성이 필요하다.
  • 서울 지역의 IP를 사용하며, 사용 지역(ex. 서울)을 지정할 필요가 있다.
  • AWS 계정으로 서버를 생성하면, 서울에 위치한 인스턴스에서 접근할 수 있다.

3-2. 웹 서버의 구성 요소

  • 웹 서버는 클라이언트 측에서 HTTP 요청을 받아 처리하고 전달하는 역할을 한다.
  • 웹 서버는 정적 파일과 웹 서버 소프트웨어(예: 아파치, Nginx, 윈도우 서버 등)로 구성된다.
  • 아파치는 가장 오래된 오픈 소스 웹 서버이다.
  • 웹 서버를 구성하는 요소들은 클라이언트의 요청에 응답하고, 해당 파일을 전달한다.

3-3. 웹 서버의 구축과 로그인

  • 서버 구축 과정에서 복사, 키(키페어 or SSH키) 등이 중요하며, 저장소와 PuTTY 등을 다운로드 받아 설치해야 한다.
    (PuTTY는 주로 Windows에서 사용되는 SSH 클라이언트이지만, macOS에서는 기본적으로 Terminal을 사용하여 SSH 접속을 할 수 있다.)
  • PuTTY는 서버에 접속하기 위해 필요한 클라이언트 소프트웨어이다. 서버에 접속하기 위해 필요한 프로그램을 다운로드 받아 설치한 후, 로그인과 사용을 진행한다.
  • 웹 서버 구축이 완료되면 로그인과 사용을 위한 서버 접속이 가능하다.

서버접속 ( Mac 기준 )

  1. SSH 디렉토리 생성
mkdir ~/.ssh
  1. SSH 디렉토리 권한 설정 - 디렉토리의 권한을 소유자만 접근할 수 있도록 설정한다.
chmod 700 ~/.ssh
  1. 개인 키 파일 복사
cp 현재경로/파일명.pem ~/.ssh/
  1. 개인 키 파일 권한 설정 - 개인 키 파일의 권한을 소유자만 접근할 수 있도록 설정한다.
chmod 400 ~/.ssh/파일명
  1. SSH 설정
  • SSH 접속을 더 쉽게 하기 위해 ~/.ssh/config 파일을 편집하여 호스트 별칭을 설정할 수 있다.
vi ~/.ssh/config
  • 위 명령어를 입력하면 아래와 같은창이 나오는데, 아래와 같은 내용을 추가한다:
    Host 접속명 #추후 ssh 접속명으로 아래 명령 실행
        HostName HOST 주소(IP주소)
        User ubuntu
        IdentityFile ~/.ssh/파일명.pem
    • 모두 작성 완료 후 esc ⇒ :wq 입력
  1. 소유자에게 읽기, 쓰기 권한
    chmod 600 ~/.ssh/config

  2. SSH 접속 시도

ssh -i pem경로 ubuntu@Ip주소

or

ssh 접속명

FileZilla

https://filezilla-project.org/

FileZilla는 오픈 소스이자 크로스 플랫폼 소프트웨어로, 자유롭게 사용할 수 있는 FTP 클라이언트이다.

FTP (File Transfer Protocol)란?
- FTP는 파일 전송만을 위한 인터넷 프로토콜이다.
- 대량의 파일을 네트워크를 통해 주고받을 때 사용하는 서비스이다.


📌 서버 설정

웹 서버 (Web Server)

  • 웹 서버는 클라이언트의 HTTP 요청을 받아 다양한 처리를 수행한다.
  • 정적 파일을 전달하는 서버를 웹 서버라고 한다.

정적 파일 (Static File)이란?

  • 정적 파일은 이미지, CSS, JavaScript 파일 등과 같이 변경되지 않는 파일이다.
  • 클라이언트가 요청할 때 변하는 내용 없이 응답하는 파일이다.

주요 웹 서버 소프트웨어

  • Apache (아파치): 오픈 소스 웹 서버 소프트웨어로 널리 사용된다.
  • Nginx (엔진 엑스): 경량화된 웹 서버로, 높은 성능을 제공한다.
  • IIS (윈도우 서버): 마이크로소프트의 웹 서버 소프트웨어로 Windows 환경에서 사용된다.

4. 서버 향상을 위한 apache 설치와 보안

4-1. apache 설치 및 포트 허용

  • apache는 HTTP 프로토콜을 이용한 웹 개발 도구이다.
  • apache는 많은 운영 체제에서 실행 가능하며, ubuntu에서도 사용된다.
  • apache를 설치하기 위해서는 sudo apt-get update 명령어를 통해 패키지 설치가 필요하다.
  • sudo apt-get install apache2 명령어를 통해 apache를 설치할 수 있다.
  • 포트 80번을 허용하여 apache가 실행될 수 있도록 설정해야 한다.
    cd /var/www 명령어를 입력해서 해당 경로로 이동하고 ls 명령어를 입력하면 /var/www 안에 html 파일이 생성됨을 볼 수 있다.

/var/www 로 이동하는 이유

cd /var/www명령어로 이동하는 이유는 Apache의 기본 웹 서버 루트 디렉토리가/var/www/html이기 때문이다. Apache가 설치되면 이 경로 아래에 기본적으로 index.html` 파일이 생성된다. 이 파일은 웹 서버가 시작될 때 기본적으로 제공하는 HTML 페이지이다.

여기서 :

  • ls 명령어를 입력하면 /var/www 디렉토리 내의 파일 및 폴더 목록을 보여준다. 일반적으로 html이라는 하위 디렉토리가 있으며, 그 안에 Apache가 제공하는 기본 HTML 파일이 위치해 있다.
  • /var/www/html로 이동하는 것은 Apache가 클라이언트 요청에 응답하기 위해 사용할 웹 콘텐츠를 관리하기 위함이다. 이 디렉토리 내의 파일들을 수정하거나 새로운 파일을 추가함으로써 웹사이트의 내용을 변경할 수 있다.

4-2. 보안 그룹과 인바운드 규칙

  • 보안 그룹을 통해 apache의 보안성을 높일 수 있다.
  • 보안 그룹에서 22번 포트가 열려 있으며, SSH를 통해 접근할 수 있다.
  • 해당 보안 그룹에 추가 규칙을 설정하여 80번 포트를 열어주는 것이 가능하다.
  • 80번 포트에서 실행되는 apache 서버가 제대로 작동하려면 위와 같은 설정이 필요하다.
  • 인바운드 규칙 설정을 통해 apache 서버가 특정 포트를 항상 실행시키도록 보호할 수 있다.

4-3. 파일 다운로드 및 권한 변경

  • 다운로드 폴더에 있는 apache 관련 파일을 이용해 apache를 제어할 수 있다.
  • 권한을 변경하면 해당 폴더의 모든 권한이 변경되며, 권한 변경을 위해 사용할 수 있는 강력한 명령어를 통해 이루어진다.
  • 777 권한을 통해 폴더의 모든 권한을 변경하거나 추가로 권한을 부여할 수 있다.
    sudo chmod 777 html
  • 다운로드 폴더의 권한을 777로 변경하면, 해당 폴더의 모든 파일이 그 권한을 가질 수 있다.
  • 변경된 권한으로 인해 원하는 파일을 다른 폴더로 이동하여 다운로드할 수 있다.
    ( service --status-all 명령어로 현재 실행 중인 모든 서비스의 상태를 확인해보기 )

sudo service apache2 stop - Apache 웹 서버를 중지하는 역할

sudo apt-get remove apach2* - 웹 서버와 관련된 패키지를 제거하는 역할



5. IP 주소와 도메인

IP (Internet Protocol)

  • 인터넷에서 데이터를 주고받기 위한 통신 규약이다. (약속)
  • 스마트폰과 컴퓨터, 운영체제 및 프로그램마다 언어가 다르므로, 네트워크 통신을 위해 공통된 프로토콜이 필요하다.

IP 주소

  • IP 통신에 필요한 고유 주소이다. (Adress)
  • 데이터를 주고받기 위해 사용되는 주소이다. (Address)
  • 내 IP 주소 확인 방법 명령어:
    • Windows: ipconfig
    • Mac: ifconfig | grep inet

5-1. IP 주소의 구성

  • IP 주소에는 IPV4와 IPV6 같은 형식이 있다.
  • IPV4는 32비트로 이루어져 있으며, 8비트씩 끊어 총 4개의 숫자로 구성된다.
  • 각 숫자는 0부터 255까지의 값을 가지며, 십진법으로 표현된다.
  • IPV6는 IPV4가 고갈되어 나온 것으로, 128비트로 구성된다.
  • IPV6는 16진수로 표현되며, 유동 IP와 고정 IP 모두에 사용할 수 있다.

5-2. IP 주소의 종류

  • IPV4는 공인 IP(공개 주소)와 사설 IP(개인 주소)로 사용되며, IPV6는 개인 및 공인 IP로 모두 사용된다.
  • 공개된 주소는 검색과 접근이 가능하고, 개인이 사용하는 주소는 가상이나 로컬에서만 사용된다.
  • 인터넷 주소를 확인할 수 있는 도구로 'IP 주소 확인 도구'과 '도메인'이 있다.
  • '사설 IP'는 개인이나 로컬, 가상 등 여러 곳에서 사용되며, '도메인'은 이름과 전체 주소로 구성된다.
  • 공인 IP vs 사설 IP

    공인 IP (Public IP)
    • 외부에 공개되어 있는 IP
    • 서버 구축을 사용하고 우리가 서버에서 사용하는 것도 공인 IP
    • 공개되어 있기 때문에 누구나 검색, 접근 가능
    • 전세계에서 어떤 주소도 중복되지 않음

    사설 IP (Private IP)
    • 로컬 IP, 가상 IP 라고 불리며, 특정 네트워크 안에서만 사용되는 외부에서 접근할 수 없는 IP
    • 큰 단위로 공인 IP 를 할당하고 그 안에 있는 PC나 가정/회사 내에서만 통신하는 IP 할당
    • IPv4 주소 부족 문제를 해결 하기 위해 등장했던 방안 중 하나
    • 사내 LAN 이나 가정 LAN에서 사용되는 IP 주소

유동 IP vs 고정 IP

유동 IP
• 변하는 IP IP 주소를 임시로 발급
• 기기에 고정적으로 IP를 부여하지 않고 IP 갱신주기가 되었을 때 기기를 껐다 켰을때 남아 있는 IP를 골라 기기에 IP를 할당해주는 것

고정 IP
• 변하지 않고 고정적으로 부여된 IP
• 사용자가 직접 IP 주소를 입력해 주소를 설정하는 방식
• IP를 한 번 부여 받으면 반납 전까지 해당 IP를 할당

5-3. 도메인의 역할과 DNS

웹 브라우저를 통해 특정 사이트를 진입할 때, IP 주소를 대신해 사용하는 주소이다.
(숫자로 이루어진 IP 주소를 기억하기 어려워 IP 주소에 이름을 부여함)

EX )
네이버는 도메인 이름으로도 접속할 수 있고, IP 주소로도 접속할 수 있음
• Domain: www.naver.com
• IP: 223.130.195.200

  • 도메인은 이름, 전체 주소, 요청 경로, 파라미터 등을 포함한다.
  • 도메인 정보를 확인할 수 있는 서비스 제공업체(호스팅센터 등)가 있다.
  • 도메인을 구매하면, 호스팅센터에서 도메인 정보를 제공받을 수 있다.
  • URL은 전체 주소, 도메인, 요청 경로, 파라미터, 정보 등을 포함한다.
  • DNS는 도메인을 실제 IP 주소로 반환하는 도구이다.

    DNS (Domain Name System)

    IP 주소와 도메인 주소의 연결

    • 숫자로 이루어진 IP 주소는 외우기 어렵기 때문에, 사람들이 기억하기 쉬운 도메인 주소를 사용한다.
    • 도메인 주소는 특정 IP 주소와 연결되어 있다. 사용자가 도메인 주소를 검색하면, 해당 IP 주소로 변환되어 연결된다.
      1. 사용자가 브라우저에 URL을 입력한다.
      2. DNS는 도메인명에 연결된 IP 주소를 확인하여 브라우저에 전달한다.
      3. 브라우저는 전달받은 IP 주소로 서버에 접속(요청)한다.
      4. 서버는 클라이언트에게 응답한다.
      이렇게 IP 주소와 도메인 주소가 상호작용하여 웹사이트에 접근할 수 있도록 한다.

6. 웹서버 설정

6-1. Apache 웹서버 한계 보완

  • Apache 웹서버의 한계를 보완하기 위해 Nginx를 사용한다.
  • Apache 웹서버는 HTML 콘텐츠를 제공하며, 이해하기 쉽게 만들어준다.
  • Apache 웹서버는 사용자 접속량이 1만 이상일 경우 한계가 있다.
  • Nginx는 Apache 웹서버의 한계를 보완하고 사용자 접속량을 늘려준다.
  • Nginx 설치 시 Apache 웹서버와 동일하게 설치해야 한다.

6-2. Nginx 설치

  • 터미널에 들어가 Apache 웹서버를 중단하고 재설정이 필요하다. (위에 중단, 재설정 명령어 적어놓음)
  • Apache 웹서버를 중단한 후, '디폴트 파일'을 백업하고 '업로드' 명령을 실행한다.
  • '디폴트 파일'을 복제하여 다른 위치에 저장하는 명령어이다.
  • '디폴트 파일'은 '업로드' 명령을 통해 다른 곳에 저장할 수 있다.
  • '디폴트 파일'은 '디렉토리'로 분류되며, 웹 서버에서 제공하는 파일 외에 웹 프로젝트 등록 시 사용된다.

6-3. 웹 서버 구성

  • Apache 웹서버에 설정 파일과 웹 서버 등록 파일을 저장한다.
  • 웹 서버 구성 파일을 저장하고, 해당 파일은 웹 프로젝트 등록 시 사용된다.
  • 웹 프로젝트 등록 시 '디폴트 파일'을 백업하고, '업로드' 명령을 실행한다.
  • '업로드' 명령을 통해 웹 프로젝트 등록 파일을 웹 서버에 저장한다.

Ubuntu에서 Nginx 설치 방법

  1. 터미널 열기
    • SSH로 서버에 접속하거나 로컬에서 터미널을 실행.
    • apt-get : 우분투, 데비안의 리눅스에서 사용하는 패키지 관리 도구
  2. 패키지 목록 업데이트
    sudo apt-get update
  3. Nginx 설치
    sudo apt-get install nginx

Nginx 설정

sites-available 디렉토리

  • 서버에 호스팅할 수 있는 여러 웹 사이트 설정 파일이 저장
  • 각 설정 파일은 하나의 가상 호스팅을 정의하며, 이를 통해 서로 다른 도메인 또는 서브도메인에 대한 웹 사이트 구성
  • 실제로 웹 서버가 사용하는 설정 파일이 아닌, 사용 가능한 설정 목록을 나타냄 (작성만 하는 곳)

    sites-enabled 디렉토리
  • sites-available에서 작성한 실제로 활성화되는 가상 호스팅 설정 파일이 있는곳
  • 모든 설정 파일들은 심볼릭 링크(Symbolic Link)로 sites-available 디렉토리에 있는 설정 파일과 연결됨
  1. 기존 사이트(default파일) 설정 백업 (선택)

    sudo cp -r /etc/nginx/sites-available/ /etc/nginx/sites-available-origin
    sudo cp -r /etc/nginx/sites-enabled/ /etc/nginx/sites-enabled-origin
    
    • Nginx의 기본 사이트 설정을 백업한다. sites-availablesites-enabled 폴더를 각각 origin으로 복사하여 원본을 보존한다.
    • cp : copy의 줄임말
    • -r : 하위 디렉토리까지 모두 복사
  2. 기본 사이트 설정 삭제 (선택)

    sudo rm /etc/nginx/sites-available/default
    sudo rm /etc/nginx/sites-enabled/default
    • 기본으로 제공되는 Nginx 설정 파일을 삭제한다. 이 파일은 일반적으로 기본 페이지를 제공하므로, 커스터마이즈한 설정으로 대체할 때 필요하다.
  3. 새로운 설정 파일 생성

    ```bash
    sudo vi /etc/nginx/sites-available/test
    ```
    
    - `test`라는 이름의 새로운 사이트 설정 파일을 생성하고 편집하기 위해 `vi` 에디터를 열어준다.(확장자가 .conf 생성) 이 파일에서 사용자 정의 설정을 추가할 수 있다.

  4. 사이트 활성화 (심볼릭 파일 생성)

    sudo ln -s /etc/nginx/sites-available/test /etc/nginx/sites-enabled/test
    • sites-enabled 디렉토리에 새로운 설정 파일에 대한 심볼릭 링크를 생성한다. Nginx는 이 디렉토리의 설정 파일만 읽으므로, 활성화하는 과정이다.
  5. Nginx 설정 테스트 (심볼릭 완성 후 nginx 문법 확인)

    ```bash
    sudo nginx -t
    ```
    
    - Nginx 설정 파일의 문법 오류를 체크하는 명령어이다. 오류가 없으면 “successful” 메시지가 출력된다.

  6. Nginx 재시작

    sudo systemctl restart nginx
    • Nginx 서비스를 재시작하여 변경된 설정을 적용한다.

Node.js 및 PM2 설치

  1. Node.js 설치

    sudo apt-get install -y nodejs
    • Node.js를 설치하는 명령어이다. y 옵션은 사용자 입력 없이 자동으로 설치를 진행하게 한다.
  2. npm 설치

    sudo apt-get install -y npm
    • Node.js 패키지 관리자인 npm을 설치하는 명령어이다.
  3. npm 버전 확인 (선택)

    npm -v
    • 설치된 npm의 버전을 확인하는 명령어이다.
  4. PM2 설치

    ```bash
    sudo npm i -g pm2
    ```
    
    - PM2는 Node.js 애플리케이션의 프로세스 관리 도구이다. (어플리케이션을 쉽게 관리 할 수 있게 해줌)
    - `g` 옵션은 전역(global)으로 설치하게 하여, 어디서든 사용 가능하게 한다.

7. 엔진 파일 편집

7-1. 파일 편집 준비

  • 기존 폴더에서 '엔진엑스' 폴더로 경로를 이동하였다.
  • '엔진엑스' 폴더에 '화이트 어베일러블' 경로를 생성하였다.
  • '화이트 어베일러블'에 '디렉토리 추가' 명령어로 경로를 생성하였다.
  • 새로운 파일 이름은 '어베일러블'로 지정하였다.
  • '디폴트' 파일은 삭제하였다.

7-2. 파일 추가 및 수정

  • '디폴트' 파일의 제목을 '어베일러블'로 변경하였다.
  • 새로운 파일은 '엔진엑스' 폴더의 '화이트 어베일러블' 경로로 이동하였다.
  • '화이트 어베일러블' 경로에 '코드' 폴더를 생성하였다.
  • '코드' 폴더에 '텍스트' 파일을 생성하였다.
  • '텍스트' 파일에 '3', '4'를 입력하였다.

7-3. 노드 설치 및 확인

sudo apt-get install-t modejs

  • 'Node.js' 프로젝트를 설치한다.
  • 노드 상태를 확인하는 명령어로 'node -v' 명령어를 사용하였다.
  • 노드 버전을 확인하는 명령어로 '노드 버전 확인' 명령어를 사용하였다.
  • 노드 설치 및 확인은 노드 설치 프로세스의 중요한 단계이므로 기억해야 한다.

8. S3 서비스 소개

8-1. S3 서비스 개요

  • DB나 파일 저장소 같은 공간을 제공하고, 저장과 이용을 용이하게 한다.
  • '버킷'과 '다양한 오브젝트 키'라는 두 가지 서비스를 제공한다.
  • 버킷은 디렉토리이며, 객체는 파일 형태로 키와 밸류 형태로 저장된다.
  • 객체 검색 시 키를 통해 저장된 디렉토리부터 파일명까지 접근하여 파일을 찾을 수 있다.
  • 'S3' 인스턴스를 생성할 때 '버킷'을 먼저 생성하고, '다양한 오브젝트 키'를 통해 객체를 찾을 수 있다.

8-2. 버킷 생성과 관리

  • 로그인 후 'S3'에서 버킷을 생성한다.
  • '버킷' 이름을 지정할 때 규칙을 설정할 수 있다 (소문자, 숫자, 점 등).
  • 모든 사람에게 저장 권한을 허용하고, 'JSON'으로 버킷 정책을 작성한다.
  • 'JSON' 정책에서 '어떤 사람에게 저장 권한을 허용할 것인지'를 설정한다.
  • 허용 권한을 '기본 허용'으로 설정하고, '모두에게 저장 권한을 허용'으로 설정한다.

8-3. 객체 업로드

  • '버킷'을 통해 '사진' 파일을 업로드한다.
  • 업로드 후 '객체 개요' 창을 통해 '객체 URL'을 확인할 수 있다.
  • 'S3 버킷'에 '사진' 파일을 업로드하면 객체가 생성된다.

9. S3 이용 및 업로드 과정

Simple Storage Service (S3)

  • 내구성과 확장성이 뛰어난 스토리지 서비스이다.
  • 안전하고 무제한 저장: 안전한 Object 스토리지 제공.
  • 편리한 UI: 어디서나 쉽게 데이터 저장 및 불러오기 가능.

🔗S3생성하러가기

(생성순서 이미지 삽입)

S3 특징

  • 무한한 저장 용량: 무한대의 객체를 저장 가능, 스토리지 관리 필요 없음.
  • 개별 인증 설정: 버킷마다 인증 시스템을 설정하여 보안 강화.
  • 버전 관리: 실수로 인한 데이터 손실 시 복원 가능.
  • 사용 기반 요금: 실제 사용량에 따라 요금이 책정됨.

S3 용어

Bucket

  • S3에서 생성되는 최상위 디렉토리와 객체를 저장하는 컨테이너

    Object
  • S3에서 저장되는 데이터로 파일과 메타데이터로 이루어져 있다.

    Key
  • 객체를 찾기 위해 사용하는 고유 식별자로 “디렉토리 + 파일명” 으로 명명

    Region
  • 클라우드 서비스 제공업체가 데이터 센터를 운영하는 지리적 위치로, 사용자에게 낮은 지연 시간과 데이터 주권을 제공한다.

9-1. S3에 업로드하기

  • S3에 업로드하려는 객체의 주소를 제공하여 파일 이름을 확인한다.
  • 주소가 있으면 이 주소로 이미지를 불러올 수 있다.
  • 코드에서 경로를 통해 해당 파일을 가져오면 된다.
  • 사용자 추가 및 권한 설정이 필요하다.
  • 사용자 추가를 위해 사용자 생성을 요청하고, 이에 성공하면 사용자 정보가 생성된다.

9-2. 사용자 생성 및 권한 설정

  • 사용자 생성을 위해 '아마존 S3'를 클릭한 후 '추가' 버튼을 눌러 사용자 정보를 생성한다.
  • '아마존 S3'에서 '시크릿 키'와 '액세스 키'를 생성한다.
  • '시크릿 키'와 '액세스 키'는 복사하여 저장해야 한다.
  • 저장한 키를 통해 로그인하여 '아마존 S3'에 접근할 수 있다.

9-3. 업로드 완료 및 S3 이용

  • 업로드가 완료된 후 S3에 접근하여 권한 설정을 통해 사용자 및 객체에 접근 가능하게 한다.
  • AWS 모듈에서 제공하는 기능으로 S3에 권한 설정이 가능하다.
  • 주로 사용자의 편집을 통해 '객체 소유권'을 활성화하여 다른 사람이 소유할 수 있게 한다.
  • 이 권한을 설정하려면 해당 주소로 직접 접근하여 '시크릿 키'와 '액세스 키'를 저장해야 한다.

10. 서버와 인덱스를 활용한 파일 업로드 방법

10-1. 서버와 인덱스 환경 설정

  • 2개의 버전을 동시에 사용하면서 조정이 필요하다.
  • 과거에 발생한 에러들을 수정해야 한다.
  • 뷰 폴더, 인덱스 파일, 기타 필요한 파일을 생성해야 한다.
  • 서버 구성을 위해 AWS에 파일을 업로드해야 한다.
  • AWS에 업로드하기 전에 인덱스에서 파일 업로드 구성을 완료해야 한다.

10-2. 파일 업로드 요청 작성

  • 이벤트 객체를 통해 파일 업로드 요청을 생성하고 보낼 데이터를 준비해야 한다.
  • 파일 업로드 요청 처리를 위해 트라이-캐치 문을 사용해야 한다.
  • 트라이-캐치 메소드를 통해 에러를 처리하고 결과값을 도출해야 한다.
  • 요청 데이터에 파일 업로드를 위한 키와 값을 담아야 한다.
  • AWS에 업로드 요청을 보내기 위해 헤더를 설정해야 한다.

10-3. 서버에서의 파일 처리

  • AWS에 업로드 요청을 보내기 위해 서버에서 이미지를 받아와야 한다.
  • AWS에 연결하기 위해 콘솔 출력을 활용해야 한다.
  • AWS에 업데이트를 진행하고, 액세스 키 ID를 입력해야 한다.
  • 이를 통해 서버에 이미지를 업로드하고, 결과를 반환받아야 한다.
  • 업로드 결과를 검토하고, 콘솔 출력을 통해 에러를 수정하고 관리해야 한다.

11. 인스턴스 생성

11-1. 인스턴스 설정

  • Multer를 S3에 설정한다.
  • Multer 기본 설정에서 저장소를 S3로 지정한다.
  • S3 안에 버킷을 생성한다.
  • public read를 설정하여 업로드한 파일이 공개되도록 한다.
  • 콘텐츠 타입을 파일 필드 이름으로 지정한다.

11-2. 업로드 과정

  • 파일을 선택한 후 업로드 버튼을 눌러 인스턴스를 생성한다.
  • S3에 버킷 정보와 인스턴스 생성 정보를 입력한다.
  • 인스턴스의 키 값을 복사하여 입력한다.
  • 인스턴스 생성 및 설정이 완료된 후, 버킷에 파일을 업로드한다.

11-3. 인스턴스 확인

  • 라우터에서 파일 업로드 경로로 들어가면, 업로드된 파일의 필드 이름을 확인할 수 있다.
  • 파일의 이름이 키 값으로 사용되는 것을 확인할 수 있다.
  • 라우터의 클라이언트 프로토콜을 통해 이미지를 확인할 수 있다.
  • 이미지 접근을 위해 서버 터미널에서 정보를 클라이언트로 전송한다.
profile
킵고잉~

0개의 댓글