728x90

 

n8n은 다양한 자동화 워크플로우를 쉽게 설정할 수 있는 툴입니다. 이 글에서는 Podman을 사용해 n8n을 설치하는 방법을 소개합니다.

docker가 아닌 Podman을 사용한 이유는 그나마 Podman이 루트리스로 보안성이 조금 더 좋고 이런저런 이슈들에서 더 자유롭기 때문입니다.

다만 윈도우 사용자에겐 그다지 추천하지 않습니다.

1. Podman 설치하기

먼저, Podman이 시스템에 설치되어 있어야 합니다. 아래는 UbuntuDebian에 Podman을 설치하는 방법입니다.

sudo apt update
sudo apt install -y podman
        

다른 운영 체제에 대한 설치 방법도 Podman 공식 문서에서 확인할 수 있습니다.

2. n8n 실행하기

Podman을 설치한 후, 아래 명령어를 사용해 n8n을 실행할 수 있습니다. 시간대를 서울로 설정하고, 기본 인증을 활성화하는 방법을 예시로 들겠습니다.

podman run -d \
  --name n8n \
  -e GENERIC_TIMEZONE="Asia/Seoul" \
  -e N8N_BASIC_AUTH_ACTIVE="true" \
  -e N8N_BASIC_AUTH_USER="admin" \
  -e N8N_BASIC_AUTH_PASSWORD="password" \
  --network host \
  -e N8N_HOST=192.168.x.x \        # 내부망 IP로 설정
  -e N8N_PROTOCOL=http \            # HTTP 사용
  -e N8N_PORT=5678 \                # 포트 설정
  -e N8N_SECURE_COOKIE=false \      # 보안 쿠키 비활성화
  --restart always \
  -p 5678:5678 \                    # 포트 매핑 (필수)
  n8nio/n8n:latest

옵션 설명:

  • -d: 백그라운드에서 컨테이너 실행
  • --name n8n: 컨테이너 이름을 n8n으로 지정
  • -e GENERIC_TIMEZONE="Asia/Seoul": n8n의 시간대 설정을 서울로 맞춤.
  • -e N8N_BASIC_AUTH_ACTIVE="true": n8n의 기본 인증 활성화.
  • -e N8N_BASIC_AUTH_USER="admin": 로그인 사용자 이름 설정.
  • -e N8N_BASIC_AUTH_PASSWORD="password": 로그인 비밀번호 설정.
  • -e N8N_HOST=192.168.x.x: 내부망 IP로 설정.
  • -e N8N_PROTOCOL=http: HTTP 프로토콜 사용.
  • -e N8N_PORT=5678: n8n이 실행될 포트 설정.
  • -e N8N_SECURE_COOKIE=false: 보안 쿠키 비활성화 (HTTPS를 사용하지 않는 경우에 유용).
  • --network host: 호스트 네트워크 사용 (내부망 IP 설정에 필요).
  • -p 5678:5678: 컨테이너 포트를 외부에 노출.
  • --restart always: 자동 재시작 설정.

 

 

3. n8n 실행 확인하기

컨테이너가 정상적으로 실행되면, 브라우저에서 http://<호스트 IP>:5678 주소로 접속할 수 있습니다. 기본 인증을 설정했으므로, 앞에서 설정한 adminpassword로 로그인해야 합니다.

4. Podman에서 실행 중인 컨테이너 관리

Podman에서 실행 중인 컨테이너를 관리하려면 아래 명령어들을 사용하면 됩니다.

  • 컨테이너 상태 확인: podman ps
  • 컨테이너 중지: podman stop n8n
  • 컨테이너 재시작: podman restart n8n
  • 컨테이너 삭제: podman rm n8n

5. 외부 데이터베이스 연결 (Optional)

n8n은 기본적으로 SQLite를 사용하지만, 외부 데이터베이스(MySQL, PostgreSQL 등)를 설정할 수 있습니다. 예를 들어, MySQL과 연결하는 방법은 아래와 같습니다.

podman run -d \
  --name n8n \
  -e DB_TYPE="mysql" \
  -e DB_MYSQLDB_HOST="mysql_host" \
  -e DB_MYSQLDB_PORT="3306" \
  -e DB_MYSQLDB_USER="n8n_user" \
  -e DB_MYSQLDB_PASSWORD="n8n_password" \
  -e DB_MYSQLDB_DATABASE="n8n_db" \
  -p 5678:5678 \
  --restart always \
  n8nio/n8n:latest
        

이 명령어는 MySQL 데이터베이스와 연결하여 n8n을 실행합니다.

이 글에서는 Podman을 사용해 n8n을 설치하고, 서울 시간대로 설정하는 방법을 소개했습니다. Podman을 사용하여 보다 안전하게 n8n을 실행할 수 있습니다.

728x90

'n8n' 카테고리의 다른 글

슬랙 대체 프로그램 추천  (0) 2025.02.11
728x90

 

MongoDB는 역할 기반 접근 제어(RBAC)를 사용하여 사용자의 권한을 세밀하게 설정할 수 있습니다. 이 포스팅에서는 MongoDB에서 제공하는 기본적인 권한 설정과 각 권한이 수행할 수 있는 작업을 설명합니다.

기본적으로 제공되는 MongoDB 역할

MongoDB는 다양한 내장 역할을 제공하여 데이터베이스 접근 및 관리를 제어할 수 있습니다. 각 역할은 특정 작업을 수행할 수 있는 권한을 정의합니다.

1. `read` 역할

설명: 데이터베이스에서 데이터를 읽을 수 있는 권한을 부여합니다.

  • 할 수 있는 작업: 데이터 조회 및 검색
  • 할 수 없는 작업: 데이터 수정, 삭제 불가

2. `readWrite` 역할

설명: 데이터를 읽고 쓸 수 있는 권한을 부여합니다.

  • 할 수 있는 작업: 데이터 조회, 삽입, 수정, 삭제
  • 할 수 없는 작업: 데이터베이스 구성 변경 불가

3. `dbAdmin` 역할

설명: 데이터베이스의 구성 및 관리 작업을 할 수 있는 권한을 부여합니다.

  • 할 수 있는 작업: 컬렉션 생성, 인덱스 관리, 데이터베이스 설정 변경
  • 할 수 없는 작업: 데이터 삽입/수정/삭제 불가

4. `userAdmin` 역할

설명: 데이터베이스 사용자 관리 권한을 부여합니다.

  • 할 수 있는 작업: 사용자 생성, 삭제, 권한 변경
  • 할 수 없는 작업: 데이터베이스의 데이터 수정 불가

5. `dbOwner` 역할

설명: 데이터베이스의 모든 작업을 할 수 있는 권한을 부여합니다.

  • 할 수 있는 작업: 모든 관리 작업을 수행할 수 있습니다.
  • 할 수 없는 작업: 다른 데이터베이스에 대한 관리 작업 불가

6. `clusterAdmin` 역할

설명: MongoDB 클러스터의 관리 권한을 부여합니다. 주로 복잡한 클러스터 관리 작업에 사용됩니다.

  • 할 수 있는 작업: 샤드 관리, Replica Set 관리 등
  • 할 수 없는 작업: 일반적인 데이터베이스 작업 불가

7. `root` 역할

설명: MongoDB의 전체 관리자 권한을 부여합니다.

  • 할 수 있는 작업: 거의 모든 작업을 할 수 있습니다.
  • 할 수 없는 작업: 없음

8. `readAnyDatabase` 역할

설명: 모든 데이터베이스에서 읽기 권한을 부여합니다.

  • 할 수 있는 작업: 모든 데이터베이스에서 데이터 읽기
  • 할 수 없는 작업: 데이터 수정, 삭제 불가

9. `readWriteAnyDatabase` 역할

설명: 모든 데이터베이스에서 읽기 및 쓰기 권한을 부여합니다.

  • 할 수 있는 작업: 모든 데이터베이스에서 데이터 읽기 및 쓰기
  • 할 수 없는 작업: 데이터베이스 관리 작업 불가

10. `backup` 역할

설명: 데이터베이스 백업 권한을 부여합니다.

  • 할 수 있는 작업: 백업 작업을 수행할 수 있습니다.
  • 할 수 없는 작업: 데이터 수정 불가

11. `restore` 역할

설명: 데이터베이스 복원 권한을 부여합니다.

  • 할 수 있는 작업: 복원 작업을 수행할 수 있습니다.
  • 할 수 없는 작업: 데이터 수정 불가

사용자 정의 역할 (Custom Roles)

MongoDB는 내장 역할 외에도 사용자 정의 역할을 생성하여, 특정 작업만 수행할 수 있도록 권한을 세부적으로 설정할 수 있습니다. 예를 들어, 특정 컬렉션에 대해 조회만 허용하는 역할을 만들 수 있습니다.

사용자 정의 역할 생성 예시

db.createRole({
  role: "readArticles",
  privileges: [
    {
      resource: { db: "mydb", collection: "articles" },
      actions: [ "find", "listIndexes" ]
    }
  ],
  roles: []
});
        

위 예시에서는 `mydb` 데이터베이스의 `articles` 컬렉션에서 **조회 및 인덱스 목록**만 가능한 사용자 정의 역할을 생성하는 코드입니다.

MongoDB의 권한 및 역할을 잘 활용하면 보안을 강화하고, 데이터베이스 접근을 효율적으로 관리할 수 있습니다. 이 포스트에서 소개한 내용을 바탕으로 여러분의 MongoDB 환경에 적합한 권한 설정을 적용해보세요.

728x90
728x90

 

Python 프로젝트에서 가상환경을 사용하면 각 프로젝트마다 독립적으로 패키지를 관리할 수 있어, 다른 프로젝트와의 충돌을 방지할 수 있습니다. 이번 글에서는 Python 가상환경을 만드는 방법과 활용 방법을 설명합니다.

1. 가상환경 만들기

가상환경을 만들려면 아래 명령어를 터미널에 입력합니다:


python3 -m venv <가상환경 이름>
    

예를 들어, `myenv`라는 이름의 가상환경을 만들고 싶다면 아래와 같이 입력합니다:


python3 -m venv myenv
    

이 명령어를 실행하면, `myenv`라는 디렉토리가 생성되고 그 안에 가상환경이 설정됩니다.

2. 가상환경 활성화

가상환경을 활성화하려면 운영 체제에 맞는 명령어를 사용합니다:

  • Linux/macOS: source myenv/bin/activate
  • Windows: .\myenv\Scripts\activate

가상환경을 활성화하면, 프롬프트 앞에 `(myenv)`처럼 가상환경 이름이 표시됩니다.

3. 가상환경 비활성화

가상환경을 비활성화하려면 아래 명령어를 입력합니다:


deactivate
    

이 명령어를 입력하면 가상환경이 비활성화되고, 시스템의 기본 Python 환경으로 돌아갑니다.

4. 가상환경에 패키지 설치

가상환경이 활성화된 상태에서 필요한 패키지를 설치할 수 있습니다. 예를 들어, `requests` 라이브러리를 설치하려면:


pip install requests
    

이 명령어를 통해 `requests` 라이브러리가 가상환경 내에 설치됩니다.

5. 가상환경에 설치된 패키지 목록 확인

가상환경에 설치된 패키지를 확인하려면 다음 명령어를 입력합니다:


pip list
    

6. 의존성 관리 (requirements.txt)

프로젝트에서 사용된 모든 패키지 목록을 `requirements.txt` 파일로 저장할 수 있습니다. 아래 명령어를 입력하여 현재 가상환경에 설치된 모든 패키지를 기록합니다:


pip freeze > requirements.txt
    

다른 환경에서 동일한 패키지들을 설치하려면 `requirements.txt` 파일을 사용해 아래 명령어로 설치할 수 있습니다:


pip install -r requirements.txt
    

결론

Python 가상환경을 사용하면 각 프로젝트마다 독립적인 패키지 환경을 유지할 수 있어 다른 프로젝트들과의 충돌을 방지할 수 있습니다. 위의 방법을 따라 가상환경을 만들고, 프로젝트에 맞는 패키지를 설치하고 관리해 보세요.

728x90

'Python' 카테고리의 다른 글

Python 3.13.2 설치하기 (Rocky Linux)  (0) 2025.02.08
파이썬으로 웹 크롤링하는 방법  (1) 2025.02.03
728x90

 

Python 3.13.2 버전이 출시되었으며, 이를 Rocky Linux에 설치하는 방법을 안내드립니다. Python을 소스 코드로 설치하는 방법을 사용하여 최신 버전을 손쉽게 설치할 수 있습니다.

1. 필수 패키지 설치

Python을 소스 코드에서 빌드하려면 몇 가지 개발 도구와 라이브러리들이 필요합니다. 먼저 필수 패키지들을 설치합니다:


sudo dnf groupinstall "Development Tools"
sudo dnf install gcc openssl-devel bzip2-devel libffi-devel
    

2. Python 3.13.2 소스 코드 다운로드

Python 공식 웹사이트에서 Python 3.13.2의 소스를 다운로드합니다:


cd /opt
sudo wget https://www.python.org/ftp/python/3.13.2/Python-3.13.2.tgz
    

3. 압축 해제 및 설치

다운로드한 파일의 압축을 풀고 설치를 진행합니다:


# 압축 해제
sudo tar xvf Python-3.13.2.tgz
cd Python-3.13.2

# 빌드 설정
sudo ./configure --enable-optimizations

# Python 빌드 및 설치
sudo make altinstall
    

`altinstall`을 사용하면 기존의 Python 버전과 충돌을 피할 수 있습니다. `--enable-optimizations` 옵션은 성능을 최적화하는데 사용됩니다.

make altinstall 완료까지는 상당한 시간이 소요될 수 있습니다.

4. 설치 확인

설치가 완료되면 Python 버전이 제대로 설치되었는지 확인합니다:


python3.13 --version
    

정상적으로 설치되었다면, Python 3.13.2 버전이 출력됩니다.

5. 기본 Python 버전 변경 (선택 사항)

기본 Python 버전으로 Python 3.13.2를 사용하고 싶다면 `alternatives` 명령어를 사용하여 변경할 수 있습니다:


# Python 3.13.2을 기본 python으로 설정
sudo alternatives --install /usr/bin/python3 python3 /usr/local/bin/python3.13 1
    

이렇게 하면 `python3` 명령어를 입력했을 때 Python 3.13.2가 실행됩니다.

결론

위 방법을 따라 Python 3.13.2를 Rocky Linux에 설치할 수 있습니다. 이 과정은 Python 소스 코드를 직접 빌드하여 설치하는 방법으로, 최신 버전의 Python을 쉽게 사용할 수 있게 해줍니다.

728x90

'Python' 카테고리의 다른 글

Python 가상환경 만들기  (0) 2025.02.08
파이썬으로 웹 크롤링하는 방법  (1) 2025.02.03
728x90

상황: 기존 Git 레포지토리를 다른 레포지토리로 옮기기

Git에서 작업 중인 레포지토리를 다른 레포지토리로 옮겨야 할 때, 새 레포지토리로 코드를 이동시키는 방법을 알아보겠습니다. 아래의 절차를 따라하면 기존 레포지토리를 새로운 레포지토리로 변경할 수 있습니다.

1. 새로운 레포지토리 만들기

먼저 새로운 GitHub, GitLab, Bitbucket 등에서 새로운 레포지토리를 생성합니다. 예를 들어, GitHub에서 새 레포지토리를 생성하고, URL이 https://github.com/username/new-repo.git과 같은 형태일 것입니다.

2. 기존 레포지토리에서 새로운 레포지토리로 푸시하기

기존 레포지토리에서 새로운 레포지토리로 코드를 옮기기 위해서는 기존 리모트 URL을 새 레포지토리 URL로 변경한 뒤, 변경 사항을 푸시합니다.

기존 레포지토리의 리모트 URL 변경

기존 레포지토리에서 리모트 URL을 새 레포지토리로 변경하려면 아래 명령어를 사용합니다:

git remote set-url origin https://github.com/username/new-repo.git

새로운 레포지토리로 푸시하기

변경 사항이 모두 커밋된 후, 새 레포지토리로 푸시합니다. 기본적으로 master 브랜치로 푸시하려면:

git push -u origin master

만약 다른 브랜치를 푸시하려면, 브랜치 이름을 지정해 줍니다:

git push -u origin <브랜치명>

새 레포지토리에서 확인

푸시가 완료되면 새로운 레포지토리 웹 페이지에서 코드가 제대로 올라갔는지 확인합니다.

3. 기존 레포지토리의 히스토리 그대로 새로운 레포지토리로 옮기기

기존 레포지토리의 전체 히스토리를 새로운 레포지토리로 그대로 옮기고 싶다면, 아래의 절차를 따릅니다:

    • 새 레포지토리 클론
git clone https://github.com/username/new-repo.git
    • 기존 레포지토리에서 새로운 레포지토리로 파일 복사

기존 레포지토리에서 새로운 레포지토리로 파일을 복사하고, 새로운 레포지토리에서 커밋을 진행합니다.

cp -r * /path/to/new-repository/
    • 새로운 레포지토리로 커밋 및 푸시
cd /path/to/new-repository
git add .
git commit -m "이전 레포지토리에서 코드 이동"
git push origin master

결론

이렇게 하면 기존 Git 레포지토리의 코드와 히스토리를 새로운 레포지토리로 옮길 수 있습니다. 이 방법을 통해 새로운 레포지토리로의 이동을 원활하게 진행할 수 있습니다.

728x90
728x90

 

파이썬으로 웹 크롤링하는 방법

파이썬을 사용하여 웹사이트에서 데이터를 크롤링하는 방법을 알아보겠습니다. 이 글에서는 BeautifulSouprequests 라이브러리를 사용하여 웹 페이지를 크롤링하는 방법을 다룹니다.

1. 필요한 라이브러리 설치

크롤링을 위해서는 requestsBeautifulSoup 라이브러리가 필요합니다. 아래 명령어로 라이브러리를 설치합니다:

pip install requests
pip install beautifulsoup4

2. 간단한 크롤러 코드 예시

다음은 간단한 웹 크롤러를 작성하는 예시입니다. 이 예시에서는 특정 웹 페이지에서 제목을 추출합니다.


import requests
from bs4 import BeautifulSoup

# 1. 웹 페이지 요청
url = "https://example.com"  # 크롤링할 웹 사이트 URL
response = requests.get(url)

# 2. 웹 페이지가 정상적으로 로드되었는지 확인
if response.status_code == 200:
    print("웹 페이지 로드 성공!")
else:
    print("웹 페이지 로드 실패!")

# 3. 페이지 내용 파싱
soup = BeautifulSoup(response.text, "html.parser")

# 4. 예시로 제목(tag <h1>) 추출
title = soup.find('h1')  # <h1> 태그에서 제목을 찾음
if title:
    print(f"페이지 제목: {title.text}")
else:
    print("제목을 찾을 수 없습니다.")
    

3. 주요 단계 설명

1. 웹 페이지 요청 (requests.get)

웹 페이지를 요청하여 서버로부터 HTML 데이터를 받아옵니다. requests.get(url)을 사용하여 페이지를 요청하고, 그 응답을 response 객체에 저장합니다.

응답의 상태 코드를 확인하려면 response.status_code를 사용합니다. response.text는 HTML 콘텐츠를 텍스트 형식으로 반환합니다.

2. BeautifulSoup로 HTML 파싱

BeautifulSoup은 HTML 구조를 트리 형태로 파싱하여 쉽게 데이터를 추출할 수 있도록 도와줍니다. 파싱한 HTML은 아래와 같이 저장합니다:

soup = BeautifulSoup(response.text, "html.parser")

3. 특정 데이터 추출

BeautifulSoup을 사용하여 HTML 구조에서 원하는 데이터를 추출할 수 있습니다. 예를 들어, 페이지에서 <h1> 태그를 찾거나, <a> 태그를 모두 찾을 수 있습니다.


# 모든 <a> 태그 추출
links = soup.find_all('a')

# 각 링크의 텍스트와 URL을 출력
for link in links:
    text = link.get_text()  # 링크 텍스트
    href = link.get('href')  # 링크 URL
    print(f"링크 텍스트: {text}, 링크 URL: {href}")
    

4. 추가적인 크롤링 팁

1. 동적 페이지 크롤링 (JavaScript 렌더링)

일부 웹 사이트는 JavaScript로 동적으로 콘텐츠를 로드합니다. 이런 경우 Selenium을 사용하여 브라우저를 자동으로 제어하면서 동적 페이지를 크롤링할 수 있습니다.

2. 시간 간격을 두고 크롤링하기

너무 빠르게 요청을 보내면 서버에 부담을 줄 수 있으므로, time.sleep()을 사용하여 요청 간에 시간 간격을 두는 것이 좋습니다.

import time

# 1초의 시간 간격을 두고 크롤링
time.sleep(1)

3. 웹 사이트의 robots.txt 확인

웹 사이트의 robots.txt 파일을 확인하여 크롤링이 허용된 영역과 그렇지 않은 영역을 확인하는 것이 중요합니다.

4. 크롤링 속도 조절

웹 서버에 부담을 주지 않도록 크롤링 속도를 조절해야 합니다. 예를 들어, 동시에 여러 페이지를 요청하지 않거나, 요청 간에 간격을 두는 방법이 있습니다.

import time
time.sleep(3)  # 3초 간격으로 크롤링

5. 크롤링 시 유용한 라이브러리

  • Selenium: 동적 페이지에서 JavaScript로 렌더링된 콘텐츠를 크롤링하는 데 사용합니다.
  • Pandas: 크롤링한 데이터를 정리하고 CSV 파일 등으로 저장할 때 유용합니다.
  • lxml: BeautifulSoup의 속도를 개선하는 파서입니다.

결론

이렇게 파이썬과 BeautifulSoup, requests를 사용하여 기본적인 웹 크롤링을 할 수 있습니다. 크롤링하려는 웹 페이지의 HTML 구조를 이해하고, 원하는 데이터를 어떻게 추출할지 결정하는 것이 중요합니다.

다음 단계로, 데이터 저장이나 특정 페이지의 여러 정보 추출 등을 시도해 볼 수 있습니다!

728x90

'Python' 카테고리의 다른 글

Python 가상환경 만들기  (0) 2025.02.08
Python 3.13.2 설치하기 (Rocky Linux)  (0) 2025.02.08

+ Recent posts