fstab으로 스왑메모리 추가 설정

fstab 파일을 사용하여 Ubuntu 서버의 스왑 메모리를 현재 1GB에서 4GB로 늘리는 방법에 대해 문의 주셨습니다.

스왑 메모리는 물리적 RAM(메인 메모리)이 부족할 때, 하드 디스크의 특정 공간을 마치 RAM처럼 사용하는 가상 메모리 공간입니다. 시스템이 사용 가능한 물리적 RAM보다 더 많은 메모리를 필요로 할 때, 비활성 데이터를 스왑 공간으로 옮겨 물리적 RAM을 확보하게 됩니다. 이를 통해 애플리케이션 충돌을 방지하고 시스템 안정성을 높일 수 있습니다 .

일반적으로 서버의 물리적 메모리 양에 따라 적절한 스왑 공간을 설정합니다. 예를 들어, 4GB RAM을 가진 서버는 8GB 정도의 스왑 공간을 설정하는 것이 일반적이지만, 서버 메모리가 크다면 항상 RAM의 두 배로 설정할 필요는 없습니다 .

먼저 현재 시스템에 설정된 스왑 공간의 크기를 확인.

sudo swapon --show

또는

free -h

free -h 명령어의 출력에서 “Swap:” 라인을 확인하여 현재 스왑 메모리 사용량과 총 크기를 파악할 수 있습니다.

1GB 스왑을 4GB로 늘리는 단계

기존 1GB 스왑 파일이 /swapfile에 있다고 가정하고, 이를 4GB로 늘리는 절차는 다음과 같습니다. 기존 스왑을 비활성화하고, 새로운 4GB 스왑 파일을 생성한 다음, 이를 활성화하고 영구적으로 적용하는 순서로 진행.

⚠️ 주의사항: 스왑 공간을 비활성화하기 전에 현재 시스템의 물리적 메모리에 여유 공간이 충분한지 확인하는 것이 중요합니다. free -m 명령어로 Mem: free 부분을 확인하여 현재 스왑이 사용 중인 공간보다 여유 물리 메모리가 더 많은지 확인하세요. 그렇지 않으면 시스템 성능 저하 또는 충돌이 발생할 수 있습니다 .


1단계: 기존 스왑 비활성화 및 삭제 (기존에 /swapfile이 1GB인 경우)

먼저 현재 활성화된 스왑 파일을 비활성화합니다.

sudo swapoff /swapfile

이 명령어는 /swapfile 경로의 스왑 사용을 중단시킵니다. 기존 스왑 파일이 다른 이름이거나 여러 개라면, swapon --show 명령으로 확인한 정확한 경로를 사용해야 합니다.

비활성화 후 기존 스왑 파일을 삭제합니다.

sudo rm /swapfile

2단계: 새로운 4GB 스왑 파일 생성

dd 명령어를 사용하여 4GB 크기의 빈 파일을 생성합니다.

sudo dd if=/dev/zero of=/swapfile bs=1M count=4096
  • if=/dev/zero: 널(0) 바이트를 읽어옵니다.
  • of=/swapfile/swapfile이라는 이름으로 파일을 생성합니다.
  • bs=1M: 한 블록당 1메가바이트(MB)로 설정합니다.
  • count=4096: 4096개의 블록을 생성하므로, 총 4096 MB = 4 GB 크기의 파일이 만들어집니다  .

3단계: 스왑 파일 권한 설정

생성된 스왑 파일의 보안을 위해 소유자만 읽고 쓸 수 있도록 권한을 설정합니다.

sudo chmod 600 /swapfile

이 권한 설정은 다른 사용자가 스왑 파일에 접근하는 것을 막아 보안을 강화합니다.


4단계: 스왑 영역으로 설정

mkswap 명령어를 사용하여 생성된 파일을 스왑 영역으로 포맷합니다.

sudo mkswap /swapfile

이 명령어는 리눅스가 /swapfile을 스왑 공간으로 인식할 수 있도록 준비시킵니다.


5단계: 스왑 활성화

새로 설정한 스왑 파일을 즉시 활성화합니다.

sudo swapon /swapfile

6단계: /etc/fstab에 스왑 파일 등록 (영구 적용)

재부팅 시에도 스왑 파일이 자동으로 활성화되도록 /etc/fstab 파일에 등록해야 합니다  . 텍스트 에디터(예: nano 또는 vi)를 사용하여 fstab 파일을 엽니다.

sudo nano /etc/fstab

파일 맨 아래에 다음 줄을 추가합니다.

/swapfile swap swap defaults 0 0

파일을 저장하고 종료합니다 (Ctrl+XYEnter for nano).


7단계: 스왑 공간 확인

모든 절차를 마친 후, free -h 명령어를 다시 실행하여 스왑 공간이 4GB로 늘어났는지 확인합니다.

free -h

출력된 “Swap:” 라인에서 총 스왑 공간이 4.0G로 표시되면 성공적으로 적용된 것입니다.

n8n Docker 시작과 업데이트

Starting n8n

From your terminal, run the following commands, replacing the <YOUR_TIMEZONE> placeholders with your timezone:

docker volume create n8n_data
docker run -it --rm \ --name n8n \ -p 5678:5678 \
-e GENERIC_TIMEZONE="<YOUR_TIMEZONE>" \
-e TZ="<YOUR_TIMEZONE>" \
-e N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true \
-e N8N_RUNNERS_ENABLED=true \
-v n8n_data:/home/node/.n8n \
docker.n8n.io/n8nio/n8n

Updating n8n

You can also use the command line to pull the latest, or a specific version:

# Pull latest (stable) version
docker pull docker.n8n.io/n8nio/n8n
# Pull specific version
dockerpull docker.n8n.io/n8nio/n8n:1.81.0
# Pull next (unstable) version
docker pull docker.n8n.io/n8nio/n8n:next

After pulling the updated image, stop your n8n container and start it again. You can also use the command line. Replace <container_id> in the commands below with the container ID you find in the first command:

# Find your container ID
docker ps -a
# Stop the container with the `<container_id>`
docker stop <container_id>
# Remove the container with the `<container_id>`
docker rm <container_id>
# Start the container
docker run --name=<container_name> [options] -d docker.n8n.io/n8nio/n8n

Docker 설치 방법 for n8n

1. 사전 준비 사항

n8n을 Docker로 설치하기 전에 다음 사항들을 준비.

  • Ubuntu 서버: 최소 2GB 이상의 메모리(RAM)를 권장합니다.
  • 사용자 권한sudo 권한을 가진 사용자 계정이 필요합니다.

2. Docker 및 Docker Compose 설치

n8n을 Docker 컨테이너로 실행하려면 먼저 Docker와 Docker Compose를 설치해야 합니다.

  1. Ubuntu 패키지 목록 업데이트 및 필수 패키지 설치:
    • sudo apt update
    • sudo apt install ca-certificates curl gnupg lsb-release
  2. Docker 공식 GPG 키 추가 및 저장소 설정:
    • sudo mkdir -p /etc/apt/keyrings
    • curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  3. Docker 설치:
    • sudo apt update
    • sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
      • 참고: n8n 공식 문서에서는 docker-compose v2 사용을 권장하며, 위 명령어는 docker compose (v2)를 설치합니다 .
  4. Docker 서비스 시작 및 부팅 시 자동 실행 설정:
    • sudo systemctl start docker
    • sudo systemctl enable docker
  5. 현재 사용자를 Docker 그룹에 추가 (선택 사항)sudo 없이 Docker 명령을 사용하고 싶다면 실행합니다.
    • sudo usermod -aG docker $USER
    • newgrp docker # 그룹 변경 적용 (재로그인 필요할 수 있음)
  6. Docker 설치 확인:
    • docker run hello-world
    • Hello from Docker! 메시지가 출력되면 성공입니다.

리버스 프록시(Reverse Proxy) 설정: 특정 포트로 동작하는 앱을 443번(HTTPS) 포트로 서비스하는 방법

Apache 설정에서 특정 포트(5678번)로 동작하는 애플리케이션을 443번(HTTPS) 포트를 통해 서비스하도록 연결하는 방법으로 주로 리버스 프록시(Reverse Proxy) 설정을 통해 구현할 수 있습니다.

리버스 프록시는 Apache 서버가 클라이언트로부터 요청을 받아 백엔드 서버(이 경우, 5678번 포트에서 동작하는 n8n)로 전달하고, 백엔드 서버의 응답을 다시 클라이언트에게 전달하는 방식입니다. 이를 통해 443번 포트로 접속하면 내부적으로 5678번 포트의 서비스에 접근할 수 있게 됩니다.

1. 필요한 Apache 모듈 활성화

리버스 프록시 기능을 사용하려면 몇 가지 Apache 모듈을 활성화해야 합니다. 터미널에서 다음 명령어를 실행해주세요.

bash

sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2enmod proxy_wstunnel # n8n과 같은 웹소켓 기반 앱에 필요
sudo a2enmod ssl           # HTTPS 사용을 위해 필요 (Let's Encrypt 설치 시 이미 활성화되었을 수 있습니다)
sudo a2enmod headers       # 프록시 헤더 조작을 위해 필요
sudo a2enmod rewrite       # 필요에 따라 리디렉션 등을 위해 필요

모듈 활성화 후 Apache를 재시작합니다.

bash

sudo systemctl restart apache2

2. 가상 호스트(Virtual Host) 설정 수정

SSL 인증서가 적용된 도메인의 가상 호스트 설정 파일(일반적으로 /etc/apache2/sites-available/your-domain-le-ssl.conf 또는 default-ssl.conf)을 수정해야 합니다. 퐁코님이 Let’s Encrypt를 설치하셨다면 해당 설정 파일에 HTTPS(*:443) 관련 내용이 포함되어 있을 것입니다.

sudo nano /etc/apache2/sites-available/your-domain-le-ssl.conf 파일을 열어 다음 내용을 <VirtualHost *:443> 블록 안에 추가합니다.

예시: n8n 서비스를 리버스 프록시하는 경우

apache

<VirtualHost *:443>
    ServerName your-domain.com          # 실제 도메인으로 변경해주세요 (예: n8n.your-domain.com)
    ServerAlias www.your-domain.com     # 필요한 경우 추가

    # 기존 DocumentRoot 설정은 그대로 유지하거나 제거할 수 있습니다.
    # 만약 특정 경로(예: /n8n)로 접근할 경우에만 n8n으로 프록시하려면,
    # 해당 경로에 대한 DocumentRoot는 필요 없습니다.

    # SSL 설정 (Certbot이 자동으로 추가한 내용)
    # SSLCertificateFile /etc/letsencrypt/live/your-domain.com/fullchain.pem
    # SSLCertificateKeyFile /etc/letsencrypt/live/your-domain.com/privkey.pem
    # Include /etc/letsencrypt/options-ssl-apache.conf

    # 프록시 설정
    ProxyRequests Off
    ProxyPreserveHost On

    # HTTP 헤더 설정: 백엔드 앱이 HTTPS로 요청 받았음을 알 수 있도록 합니다.
    RequestHeader set X-Forwarded-Proto "https"

    # 웹소켓 프록시 설정 (n8n처럼 웹소켓을 사용하는 애플리케이션에 필수)
    # 클라이언트가 요청하는 경로에 따라 5678번 포트로 프록시
    # ProxyPassMatch ^/(.*)$ ws://localhost:5678/$1   # 웹소켓 연결
    ProxyPass /ws/ ws://localhost:5678/ws/          # n8n의 웹소켓 경로 예시 (변경될 수 있음)

    # HTTP(s) 요청 프록시 설정
    # 모든 요청을 5678번 포트로 전달
    ProxyPass / http://localhost:5678/
    ProxyPassReverse / http://localhost:5678/

    # 또는 특정 경로만 프록시하는 경우 (예: your-domain.com/n8n 으로 접근 시)
    # ProxyPass /n8n/ http://localhost:5678/
    # ProxyPassReverse /n8n/ http://localhost:5678/
    # ErrorDocument 404 /404.html (필요에 따라)

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    # n8n과 같은 애플리케이션에서는 CORS 관련 설정이 필요할 수 있습니다.
    # Header set Access-Control-Allow-Origin "*"
</VirtualHost>

설명:

  • ServerName your-domain.com: 이 가상 호스트가 응답할 도메인 이름을 설정합니다. 예를 들어 n8n을 n8n.your-domain.com으로 접근하게 할 것이라면 해당 서브도메인을 여기에 명시하고, DNS 설정도 맞추어야 합니다.
  • ProxyRequests Off: 이 Apache 서버를 포워드 프록시로 사용하지 않음을 명시합니다. 보안상 항상 Off로 두는 것이 좋습니다.
  • ProxyPreserveHost On: 클라이언트가 요청한 Host 헤더를 백엔드 서버(5678번 포트)로 그대로 전달합니다. 백엔드 애플리케이션이 호스트 이름에 따라 동작하는 경우 중요합니다.
  • RequestHeader set X-Forwarded-Proto "https": 클라이언트가 HTTPS로 요청했음을 백엔드 서버에 알려줍니다. 백엔드 애플리케이션에서 요청 프로토콜을 확인해야 할 때 유용합니다.
  • ProxyPass / http://localhost:5678/your-domain.com으로 들어오는 모든 요청(/)을 http://localhost:5678/로 프록시합니다.
  • ProxyPassReverse / http://localhost:5678/: 백엔드 서버에서 보내는 응답 헤더(예: LocationContent-LocationURI)에 있는 URL을 Apache의 URL에 맞게 다시 작성하여 클라이언트에게 올바른 경로를 보여주도록 합니다.
  • ProxyPass /ws/ ws://localhost:5678/ws/: n8n과 같은 애플리케이션은 웹소켓(WebSocket)을 사용하여 실시간 통신을 합니다. mod_proxy_wstunnel 모듈을 사용하면 ws:// 또는 wss:// 스키마로 웹소켓 연결을 프록시할 수 있습니다. n8n의 기본 웹소켓 경로는 ws/ 일 가능성이 높지만, 정확한 경로를 확인해주세요. 

3. Apache 설정 적용 및 재시작

파일을 저장한 후 Apache 설정에 문법적 오류가 없는지 확인합니다.

bash

sudo apachectl configtest

Syntax OK 메시지가 나타나면 Apache 서비스를 재시작하여 변경 사항을 적용합니다.

bash

sudo systemctl restart apache2

이제 웹 브라우저에서 https://your-domain.com (또는 설정한 서브도메인)으로 접속하시면 5678번 포트에서 동작 중인 n8n 서비스에 연결되는 것을 확인하실 수 있습니다.

apache 설치 후 Let’s Encrypt 무료SSL/TLS 인증서 설치

Let’s Encrypt는 무료, 자동, 공개 SSL/TLS 인증서를 제공하는 서비스이며, Certbot은 이 인증서의 발급 및 갱신 과정을 자동화해주는 도구다.

1. Certbot PPA 추가 및 업데이트

Certbot의 최신 버전을 사용하기 위해 PPA(Personal Package Archive)를 추가하는 것이 좋습니다.

sudo add-apt-repository ppa:certbot/certbot
sudo apt update

2. Certbot 및 Apache 플러그인 설치

이제 Certbot과 Apache와의 연동을 위한 플러그인을 설치합니다.

sudo apt install certbot python3-certbot-apache -y

python3-certbot-apache 패키지는 Certbot이 Apache 서버 구성을 자동으로 조정할 수 있도록 도와줍니다.  

3. Apache 가상 호스트(Virtual Host) 설정 확인

Certbot이 올바르게 작동하려면, Apache 가상 호스트 설정 파일(*.conf 파일, 일반적으로 /etc/apache2/sites-available/)에 웹사이트의 ServerName 또는 ServerAlias 지시어가 올바르게 설정되어 있어야 합니다. 이 지시어는 Certbot이 인증서를 발급받을 도메인 이름을 식별하는 데 사용됩니다.

예시 (/etc/apache2/sites-available/your-domain.conf):

apache

<VirtualHost *:80>
    ServerAdmin webmaster@your-domain.com
    ServerName your-domain.com      # 실제 도메인으로 변경해주세요.
    ServerAlias www.your-domain.com # 실제 도메인으로 변경해주세요.
    DocumentRoot /var/www/html/your-domain # 실제 웹사이트 경로로 변경해주세요.
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

위 설정은 HTTPS를 적용할 도메인(예: your-domain.com)과 www.your-domain.com을 ServerName과 ServerAlias에 명시한 예시입니다.  Certbot 실행 전에 Apache 설정을 확인하시고, 변경사항이 있다면 Apache를 재시작해주세요.

sudo systemctl restart apache2

에러 발생시,

systemctl status apache2.service
sudo a2enmod proxy
sudo a2enmod proxy_http
# 다른 프록시 기능(예: 웹소켓)이 필요하다면 다음 모듈도 활성화할 수 있습니다.
# sudo a2enmod proxy_wstunnel
sudo a2enmod headers
sudo a2enmod rewrite
sudo systemctl restart apache2

4. SSL 인증서 발급

이제 Certbot을 사용하여 SSL 인증서를 발급받을 수 있습니다.

sudo certbot --apache

이 명령어를 실행하면 Certbot이 Apache 설정을 분석하고 다음과 같은 질문을 할 것입니다:

  • 이메일 주소 입력: 만료 알림 및 보안 관련 통지를 받을 이메일 주소를 입력합니다.
  • 약관 동의: Let’s Encrypt 서비스 약관에 동의합니다.
  • 도메인 선택: Certbot이 Apache 설정에서 찾은 도메인 목록이 표시됩니다. 이메일 주소 및 약관에 동의하면 목록이 나오는데, 인증서를 적용할 도메인을 선택하거나 모두 적용하려면 Enter를 누릅니다.
  • HTTP 리디렉션 설정: 웹사이트로의 HTTP(80) 접근을 HTTPS(443)로 자동 리디렉션할지 물어봅니다. ‘2: Redirect’를 선택하여 항상 HTTPS로 접속하도록 설정하는 것이 좋습니다.

성공적으로 완료되면, Certbot은 Apache 설정을 자동으로 업데이트하고 인증서를 설치했다는 메시지를 보여줄 것입니다.  

5. SSL 설치 확인

웹 브라우저를 열고 https://your-domain.com (실제 도메인 주소로 변경)으로 접속해 보세요. 주소창에 자물쇠 아이콘이 나타나고, 웹사이트가 HTTPS로 안전하게 연결되었음을 확인할 수 있습니다.

6. 자동 갱신 설정

Let’s Encrypt 인증서는 90일마다 갱신해야 합니다. Certbot은 이 갱신 과정을 자동으로 처리해주는 cron 작업이나 systemd 타이머를 자동으로 설정합니다.

갱신 프로세스가 올바르게 작동하는지 테스트하려면 다음 명령어를 실행할 수 있습니다:

sudo certbot renew --dry-run

이 명령어는 실제 갱신 없이 갱신 프로세스를 시뮬레이션합니다. 오류 없이 성공하면 자동 갱신이 올바르게 설정된 것입니다.

Ubuntu에 Apache 설치

우분투에 Apache를 설치하는 단계는 다음과 같다.

1. 패키지 목록 업데이트

가장 먼저, 시스템의 패키지 목록을 최신 상태로 업데이트하여 최신 버전의 Apache를 설치할 수 있도록 준비합니다.

bash

sudo apt update

2. Apache2 웹 서버 설치

이제 Apache2를 설치할 차례입니다. 다음 명령어를 사용하여 설치를 진행할 수 있습니다.

bash

sudo apt install apache2 -y

이 명령어는 apache2 패키지를 설치하며, -y 옵션은 설치 중 확인 메시지에 자동으로 ‘예’라고 응답하도록 합니다.  

3. Apache2 서비스 상태 확인

설치가 완료되면 Apache2 서비스가 제대로 실행되고 있는지 확인해야 합니다. 다음 명령어로 상태를 점검할 수 있습니다.

bash

sudo systemctl status apache2

정상적으로 실행 중이라면 ‘active (running)’ 메시지를 확인할 수 있습니다.

4. 방화벽 설정 (UFW)

우분투에서 UFW(Uncomplicated Firewall)를 사용하고 있다면, 외부에서 웹 서버에 접근할 수 있도록 HTTP(80번 포트) 및 HTTPS(443번 포트) 트래픽을 허용해야 합니다.

먼저, 사용 가능한 UFW 애플리케이션 프로파일을 확인합니다:

bash

sudo ufw app list

일반적으로 다음과 같은 프로파일을 볼 수 있습니다:

  • Apache (HTTP 80번 포트만 허용)
  • Apache Full (HTTP 80번 포트와 HTTPS 443번 포트 모두 허용)
  • Apache Secure (HTTPS 443번 포트만 허용)

원하는 프로파일을 선택하여 허용합니다. 대부분의 경우 Apache Full을 권장합니다.

bash

sudo ufw allow 'Apache Full'

변경사항을 적용하기 위해 UFW를 재로드하거나 활성화합니다:

bash

sudo ufw enable

(UFW가 비활성화된 경우에만 실행합니다.)

5. 웹 브라우저를 통한 설치 확인

Apache가 정상적으로 설치되었는지 최종 확인하는 단계입니다. 웹 브라우저를 열고 서버의 IP 주소를 입력하여 접속해 봅니다.

예: http://서버_IP_주소 

정상적으로 Apache가 설치되었다면 “Apache2 Ubuntu Default Page”라는 문구가 포함된 기본 웹페이지가 나타날 것입니다.

6. (선택 사항) 웹사이트 홈 디렉터리 변경

기본적으로 Apache의 웹사이트 홈 디렉터리는 /var/www/html입니다. 만약 다른 경로를 사용하고 싶다면 /etc/apache2/sites-available/000-default.conf 파일을 수정하여 변경할 수 있습니다.  

파일을 열고 DocumentRoot 설정을 변경한 후 Apache 서비스를 재시작하면 됩니다.

bash

sudo nano /etc/apache2/sites-available/000-default.conf

DocumentRoot /var/www/html 부분을 원하는 경로로 변경하고 저장한 후 Apache를 재시작합니다.

bash

sudo systemctl restart apache2

이 단계들을 통해 우분투 시스템에 Apache 웹 서버를 성공적으로 설치하고 구성하실 수 있다

아마존 AWS 프리티어 계정 종료후 새 계정으로 이전하는 방법

LINUX/Ubuntu 환경에서 1년 마다 이전하는 방법을 적어봅니다.

  1. 기존 프러티어 인스턴스에서 AMI 생성 및 공유
  2. 새 계정에서 AMI 공유 선택후 인스턴스 시작
  3. 기존 계정의 Route 53에 등록된 도메인이나 호스팅영역을 이전

다른 AWS 계정으로 이전

다른 AWS 계정으로 EC2 인스턴스를 이전하려면, 원본 계정에서 AMI를 생성한 후 대상 계정과 공유하는 방법을 사용한다.

  • AMI 공유 및 이전 단계:
    1. 원본 계정 (A 계정)에서 AMI 생성 및 공유:
      • 위 1단계와 같이 원본 계정에서 EC2 인스턴스의 AMI를 생성합니다.
      • 생성된 AMI를 선택하고 ‘작업’ > ‘AMI 권한 수정’을 선택합니다.
      • ‘공유’ 탭에서 ‘AWS 계정 추가’를 선택하고 대상 계정의 AWS 계정 ID를 입력합니다. ‘추가’ 버튼을 클릭하여 공유를 완료합니다 .
      • 이렇게 하면 원본 계정의 AMI가 대상 계정과 공유됩니다 .
    2. 대상 계정 (B 계정)에서 AMI 사용:
      • 대상 계정으로 로그인합니다.
      • EC2 대시보드에서 좌측 메뉴의 ‘AMI’로 이동합니다.
      • ‘개인 이미지’ 드롭다운 메뉴에서 ‘나와 공유된 이미지’를 선택합니다. 공유된 AMI가 목록에 나타납니다.
      • 해당 AMI를 선택하고 ‘인스턴스 시작’ 버튼을 클릭하여 새로운 EC2 인스턴스를 시작합니다 .

호스팅 영역 이전

새 계정에서 호스팅 영역을 새롭게 생성한다. 이 때 이전하는 도메인의 호스팅 영역에 기본적으로 생성되는 레코드인 SOA, NS를 확인한다. 이후 나머지 A레코드들을 수동으로 추가한다.

  • 생성된 NS 레코드 값을 기존 도메인 회사에 공유 및 편집 단계:
    1. hosting.kr에 등록된 기존 도메인의 NS 리스트 4개를 수정하여 변경
    2. 기존 계정의 나머지 A 레코드들을 복사하여 subdomain명, IP주소에 입력하여 수정한다.
    3. 기존 호스팅 영역은 삭제한다.
    4. URL 연결이 안된다면, 새 계정의 보안그룹을 수정한다.

MongoDB 구성과 사용자 추가

MongoDB 구성

MongoDB 구성 파일은 /etc 디렉토리에 있으며 mongod.conf라는 이름을 가지고 있습니다. 파일은 YAML 형식을 사용합니다.

기본 구성 설정은 대부분의 경우에 충분합니다. 그러나 운영 환경의 경우 다음과 같이 보안 섹션의 보완을 해제하고 액세스 제어를 사용하는 것이 좋습니다:

sudo nano /etc/mongod.conf

# /etc/mongod.conf
# security:
#  authorization: enabled

권한 부여 옵션은 데이터베이스 리소스 및 작업에 대한 사용자의 액세스를 규제하는 역할 기반 액세스 제어(RBAC)를 활성화합니다. 이 옵션을 활성화하지 않으면 각 사용자는 모든 데이터베이스에 액세스할 수 있으며 모든 작업을 수행합니다.

구성을 변경할 때마다 변경 내용을 적용하려면 mongod 서비스를 다시 시작해야 합니다:

sudo systemctl restart mongod

최신 MongoDB 버전에서 사용할 수 있는 구성 옵션에 대한 자세한 내용은 구성 파일 옵션 설명서 페이지를 참조하십시오.

관리 MongoDB 사용자 만들기

MongoDB 인증을 사용하도록 설정한 경우 MongoDB 인스턴스에 액세스하고 관리할 수 있는 관리 사용자를 만들어야 합니다.

몽고 셸에 액세스:

mongosh

MongoDB 셸 내부에서 다음 명령을 입력하여 관리 데이터베이스에 연결합니다:

use admin

# switched to db admin

다음 명령을 실행하여 관리 사용자를 만듭니다:

db.createUser(
  {
    user: "myMongoAdmin",
    pwd: passwordPrompt(),
    roles: [
      { role: "userAdminAnyDatabase", db: "admin" },
      { role: "readWriteAnyDatabase", db: "admin" }
    ]
  }
)

관리자 이름을 myMongoAdmin이라고 지었습니다. 원하는 대로 불러주세요. passwordPrompt() 방식 대신 명확한 텍스트 비밀번호를 입력할 수도 있지만, 비밀번호를 화면에 표시하는 것은 권장되지 않으며, 쉘 이력에도 저장됩니다.

비밀번호를 입력하고 입력 후 “Enter”(입력)를 누르라는 메시지가 표시됩니다. 안전한 비밀번호를 설정하는 것을 잊지 마십시오:

Enter password

# ********{ ok: 1 }

“ok: 1″은 명령이 성공적으로 실행되었음을 의미합니다.

작업이 완료되면 다음과 같이 몽고 셸을 종료합니다:

quit()

변경 내용을 테스트하려면 이전에 작성한 관리자를 사용하여 MongoDB 셸에 액세스합니다:

mongo -u myMongoAdmin -p --authenticationDatabase admin

정확한 비밀번호를 입력하면 MogoDB 쉘로 연결됩니다.

“admin” 데이터베이스로 전환하고 show users를 실행하여 모든 사용자와 역할에 대한 정보를 가져옵니다:

use admin

# switched to db admin

예제에서 사용자는 한 명뿐입니다:

show users

# In our example, we have only one user:
# 
# [
#   {
#     _id: 'admin.myMongoAdmin',
#     userId: new UUID("a00ab5ca-5c1f-4a3b-8f67-be8a79c7649c"),
#     user: 'myMongoAdmin',
#     db: 'admin',
#     roles: [
#       { role: 'userAdminAnyDatabase', db: 'admin' },
#       { role: 'readWriteAnyDatabase', db: 'admin' }
#     ],
#     mechanisms: [ 'SCRAM-SHA-1', 'SCRAM-SHA-256' ]
#   }
# ]

Ubuntu 20.04 및 22.04에서 MongoDB를 설치 및 구성하는 방법을 안내해 드렸습니다. 이 항목에 대한 자세한 내용은 MongoDB Manual을 참조하십시오.

MongoDB 설치 error 발생과 대처

아래와 같은 mongoDB 설치하는 과정에서 생긴 에러에 대한 수정방법과 대처압나다,

wget -qO – https://www.mongodb.org/static/pgp/server-6.0.asc | sudo apt-key add – Warning: apt-key is deprecated. Manage keyring files in trusted.gpg.d instead (see apt-key(8)).

apt-key 명령어는 더 이상 사용되지 않으며, 최신 버전의 Ubuntu에서는 다른 방식으로 PGP 키를 추가해야 합니다. apt-key 대신 trusted.gpg.d 디렉토리를 사용하여 키를 관리할 수 있습니다.

다음은 wget을 사용하여 MongoDB PGP 키를 추가하고, MongoDB를 설치하는 방법입니다.

1. PGP 키 다운로드 및 추가

먼저, MongoDB의 PGP 키를 다운로드하여 /usr/share/keyrings 디렉토리에 저장합니다.

wget -qO - https://www.mongodb.org/static/pgp/server-6.0.asc | sudo tee /usr/share/keyrings/mongodb-archive-keyring.gpg > /dev/null

2. MongoDB 저장소 추가

다음으로, MongoDB 저장소를 추가합니다. 여기서는 signed-by 옵션을 사용하여 PGP 키를 지정합니다.

echo "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-archive-keyring.gpg ] https://repo.mongodb.org/apt/ubuntu $(lsb_release -cs)/mongodb-org/6.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list

3. 패키지 목록 업데이트 및 MongoDB 설치

패키지 목록을 업데이트하고 MongoDB를 설치합니다.

sudo apt-get update
sudo apt-get install -y mongodb-org

4. MongoDB 서비스 시작

MongoDB 서비스를 시작하고, 시작 여부를 확인합니다.

sudo systemctl start mongod
sudo systemctl status mongod

5. MongoDB 서비스 자동 시작 설정

서버가 부팅될 때 MongoDB가 자동으로 시작되도록 설정합니다.

sudo systemctl enable mongod

위 단계를 따라 하면 최신 방식으로 MongoDB를 설치하고 PGP 키를 추가할 수 있습니다. apt-key 경고 메시지를 피하고, 키를 안전하게 관리할 수 있습니다.

하지만 이 방법으로도 오류가 게속된다면 다음 대처 방안을 참고해 주세요.

MongoDB 설치, 설정 그리고 백엔드 프로그램 연결

MongoDB 설치 및 설정 가이드

1. MongoDB 설치

Windows
  1. MongoDB 설치 파일 다운로드
  2. 설치 파일 실행
    • 다운로드한 설치 파일을 실행하고 설치 과정을 따릅니다.
    • 설치 시 “Complete” 설치 옵션을 선택합니다.
    • “Install MongoDB as a Service” 옵션을 선택하여 MongoDB를 서비스로 실행되도록 설정합니다.
  3. 환경 변수 설정
    • MongoDB의 bin 디렉토리를 시스템 환경 변수 PATH에 추가합니다. (기본 설치 경로: C:\Program Files\MongoDB\Server\X.X\bin)
  4. MongoDB 서비스 시작
    • Windows 서비스 관리 도구에서 MongoDB 서비스를 시작합니다.
macOS
  1. Homebrew로 MongoDB 설치
    • Homebrew가 설치되어 있지 않다면 Homebrew 웹사이트를 참조하여 설치합니다.
    • 터미널을 열고 다음 명령어를 입력하여 MongoDB를 설치합니다.bash코드 복사brew tap mongodb/brew brew install mongodb-community@6.0
  2. MongoDB 서비스 시작
    • 다음 명령어를 입력하여 MongoDB 서비스를 시작합니다.bash코드 복사brew services start mongodb/brew/mongodb-community
Linux (Ubuntu)
  1. MongoDB 패키지 관리용 GPG 키 추가bash코드 복사wget -qO - https://www.mongodb.org/static/pgp/server-6.0.asc | sudo apt-key add -
  2. MongoDB 리포지토리 추가bash코드 복사echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/6.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list
  3. MongoDB 설치bash코드 복사sudo apt update sudo apt install -y mongodb-org
  4. MongoDB 서비스 시작bash코드 복사sudo systemctl start mongod

2. MongoDB 설정

  1. MongoDB 설정 파일 수정 (선택 사항)
    • 기본 설정으로 충분하지 않은 경우 설정 파일 (/etc/mongod.conf)을 수정할 수 있습니다.
    • 설정 파일의 기본 위치는 다음과 같습니다.
      • Windows: C:\Program Files\MongoDB\Server\X.X\bin\mongod.cfg
      • macOS: /usr/local/etc/mongod.conf
      • Linux: /etc/mongod.conf
  2. MongoDB 서비스 재시작
    • 설정 파일을 수정한 경우 MongoDB 서비스를 재시작합니다.
    bash코드 복사sudo systemctl restart mongod

3. MongoDB 연결

  1. MongoDB Compass 설치 (선택 사항)
  2. MongoDB 연결 테스트
    • 터미널에서 다음 명령어를 입력하여 MongoDB 셸에 접속할 수 있는지 확인합니다.
    bash코드 복사mongo

4. Node.js 애플리케이션과 MongoDB 연결

  1. MongoDB Node.js 드라이버 설치
    • 프로젝트 루트 디렉토리에서 다음 명령어를 입력하여 MongoDB Node.js 드라이버를 설치합니다.
    • npm install mongoose
  2. MongoDB 연결 설정 (backend/app.js)
    • backend/app.js 파일에서 MongoDB에 연결하는 코드를 작성합니다.
    javascript코드 복사const express = require('express'); const mongoose = require('mongoose'); const bodyParser = require('body-parser'); const cors = require('cors'); const app = express(); require('dotenv').config(); // Middleware app.use(bodyParser.json()); app.use(cors()); // MongoDB 연결 mongoose.connect(process.env.MONGO_URI, { useNewUrlParser: true, useUnifiedTopology: true, }).then(() => { console.log('MongoDB connected'); }).catch((err) => { console.error('MongoDB connection error:', err); }); // 라우트 설정 const userRoutes = require('./routes/userRoutes'); const bookRoutes = require('./routes/bookRoutes'); const transactionRoutes = require('./routes/transactionRoutes'); app.use('/api/users', userRoutes); app.use('/api/books', bookRoutes); app.use('/api/transactions', transactionRoutes); // 서버 시작 const PORT = process.env.PORT || 5000; app.listen(PORT, () => console.log(`Server running on port ${PORT}`));
  3. 환경 변수 설정 (.env 파일)
    • 프로젝트 루트 디렉토리에 .env 파일을 생성하고 MongoDB 연결 문자열을 추가합니다.
    bash코드 복사MONGO_URI=mongodb://localhost:27017/your_projec_name JWT_SECRET=your_jwt_secret
  4. 백엔드 서버 실행
    • 백엔드 서버를 시작하여 MongoDB와의 연결을 확인합니다.
    bash코드 복사cd backend node app.js

5. MongoDB 연결 확인

  1. 서버 로그 확인
    • 서버가 시작되면서 “MongoDB connected” 메시지가 출력되는지 확인합니다.
  2. 데이터베이스 확인
    • MongoDB 셸 또는 MongoDB Compass를 사용하여 your_projec_name 데이터베이스가 생성되었는지 확인합니다.

이 과정을 통해 MongoDB를 설치하고 설정하여 Node.js 애플리케이션과 연결할 수 있습니다. MongoDB와의 연결이 성공적으로 이루어지면, 데이터 모델을 정의하고 CRUD 작업을 수행할 수 있습니다.

error: Content is protected !!