[작성자:] joonkey

  • Synology NAS에 Adguard Home 설치하기

    인터넷 서핑을 하다 보면 각종 사이트에 지긋지긋하게 따라붙는 광고들이 있다. 홈페이지 운영자도 수익을 내야 하니 어느 정도의 광고는 이해하지만, 메인 콘텐츠조차 가려질 정도로 과도한 광고로 도배된 사이트들을 보면 눈살이 찌푸려진다.

    게다가 이제 아이들도 스마트폰과 태블릿을 쓰기 시작하면서, 수위가 높은 광고가 간혹 보이면 괜히 나까지 당황하게 된다. 이런 문제를 해결하기 위해 브라우저나 앱 단에서 광고를 차단하는 다양한 솔루션이 존재한다. 나 역시 **AdGuard 유료 라이선스(패밀리 플랜)**를 구입해서 9대 디바이스에 설치해 만족스럽게 사용하고 있었다.

    그런데 어느 순간부터 데스크탑, 휴대폰, 태블릿, IoT 기기 등 디바이스 수가 늘어나고, 아이들 것까지 합치다 보니 9대 제한이 점점 아쉽게 느껴졌다. 그러다 알게 된 것이 바로 AdGuard Home.

    AdGuard Home은 로컬 네트워크의 DNS 서버 역할을 하며, 네트워크 단에서 광고 및 추적기를 차단해주는 솔루션이다. 브라우저나 앱 단에서 광고 차단을 하지 않아도 되고, 디바이스 수 제한이 없다는 것이 가장 큰 장점이다.

    광고 공해를 줄이고, 아이들의 건전한 인터넷 사용을 돕기 위해 설치해보기로 마음먹었다.

    사전 준비

    AdGuard Home은 DNS 서버 역할을 하기 때문에, 항상 켜져 있는 장비에 설치해야 한다. 일반적으로 라즈베리파이나 저전력 미니 PC에 설치하는 사례가 많지만, 나는 마침 24시간 켜져 있는 Synology NAS를 사용 중이었기에 NAS에 Docker로 설치하기로 했다.

    Docker는 이미 설치되어 있었고, 이전 포스팅에서 Portainer도 설치해둔 상태라 컨테이너 관리는 GUI로 손쉽게 할 수 있었다.

    설치 과정

    먼저 공식 문서에서 Docker 설정을 확인한다.

    docker run --name adguardhome \
      --restart unless-stopped \
      -v /my/own/workdir:/opt/adguardhome/work \
      -v /my/own/confdir:/opt/adguardhome/conf \
      -p 53:53/tcp -p 53:53/udp \
      -p 67:67/udp -p 68:68/udp \
      -p 80:80/tcp -p 443:443/tcp -p 443:443/udp \
      -p 3000:3000/tcp -p 853:853/tcp \
      -p 784:784/udp -p 8853:8853/udp \
      -p 5443:5443/tcp -p 5443:5443/udp \
      -d adguard/adguardhome

    위 명령어는 많은 포트를 노출하고 있지만, 실제로는 기본적인 DNS 기능과 웹 UI 접속만 사용할 거라면 아래 포트만 열어도 충분하다:

    • 53: DNS 요청용 (TCP/UDP)

    • 3000: 초기 설정 마법사 접속용

    • 80: HTTP UI

    • 443: HTTPS UI (옵션)

    나머지 포트들은 DoH/DoT, DHCP 등 고급 기능을 위한 것이며, 사용하지 않는다면 열 필요는 없다.

    도커 명령어 대신 docker-compose.yml로 관리하면 편리하다:

    version: '3.8'
    
    services:
      adguardhome:
        image: adguard/adguardhome:latest
        container_name: Adguard_Home
        restart: unless-stopped
        network_mode: host # DNS 서버로 사용하기 위해 host 모드 사용
        volumes:
          - adguardhome_work:/opt/adguardhome/work
          - adguardhome_config:/opt/adguardhome/conf
    
    volumes:
      adguardhome_work:
      adguardhome_config:

    여기서 핵심은 네트워크 모드다. bridge로 하면 안되고 host로 해야 한다. 그런데 host로 하게 되면 NAS에서 다른 포트를 사용하는 서비스들과 포트 충돌을 일으키지 않도록 포트 관리를 잘해야한다.

    그리고 나는 NASd의 공유폴더를 사용하지 않고, 내부 Docker 볼륨만으로 데이터 디렉토리를 구성했다. Adguard의 설정은 자주 손댈 일이 없기 때문이다.

    docker-compose up -d

    명령어로 컨테이너를 실행하면 설치가 완료된다.

    Adguard Home 설정

    설치가 끝나면 웹 브라우저에서 아래 주소로 접속해서 초기 설정을 진행한다.

    http://<NAS IP>:3000

    • 관리자 계정 생성

    • DNS 리스닝 포트 확인

    • 차단 필터 설정

    이 과정을 마치면 본격적으로 AdGuard Home이 동작한다.

    이후 접속은 설정된 포트 기준으로 접속한다.

    http://<NAS IP>:<설정된 포트>

    인터넷 공유기와 연동

    이제 집 전체 네트워크의 광고를 차단하기 위해 인터넷 공유기 설정에서 기본 DNS 서버를 NAS의 IP 주소로 변경해야 한다.

    이렇게 설정하면, 집에 연결된 모든 기기에서 AdGuard Home을 통해 DNS 쿼리가 전달되고, 그 안에서 광고 필터가 적용된다.

    마무리

    AdGuard Home을 NAS에 설치한 이후로 광고가 대부분 사라지고, 아이들도 더 안전하게 인터넷을 사용할 수 있게 되었다. 무엇보다도 별도의 앱 설치 없이 모든 기기에서 광고 차단이 가능하다는 점이 정말 만족스럽다.

  • Synology NAS에 Portainer 설치하기

    Synology NAS에는 컨테이너 관리자(Container Manager)라는 앱을 통해 도커 컨테이너를 GUI로 관리 할 수 있다. 나같은 초보자들에게는 충분히 쓸만한 기능을 제공 하지만, 보다 고급 기능에 대한 활용을 해보려고 하니까 역시 조금 부족함이 느껴져서 Portainer라는 별도의 도구를 설치해 보려고 했다. 이런 상황에서는 Portainer 사용하는 것을 충분히 고려해 볼 만하다고 생각된다.

    • 여러 컨테이너를 한 눈에 바로 관리 하고 싶을 때
    • docker-compose파일을 이용해서 환경을 구성하고 싶을 때
    • 네트워크, 볼륨, 이미지 등을 더 세세하게 제어 하고 싶을 때
    • 컨테이너 수가 많아져서 정리가 필요할 때

    처음에는 Container Manager가 있는데 굳이 Portainer가 필요할까? 괜히 깔아서 둘이 섞이고 꼬여서 문제가 발생하는 것은 아닐까 걱정을 했었다. 그런데 Portainer는 같은 Docker 엔진위에서 작동하기 때문에, NAS의 Container Manager와 Portainer는 동일한 컨테이너 환경을 공유한다. 즉, 어느쪽에서든 컨테이너를 만들고 관리 할 수 있다는 말이고, 기능적으로는 일부 겹치는 일이 있더라도 충돌 할 일은 없고 오히려 Portainer 쪽에서 더 세세한 컨트롤을 할 수 있으니 Portainer를 깔아서 손해 볼 것은 없다는 생각이다.

    Portainer를 쓰면 좋은 이유

    • 더 많은 기능 : 네트워크, 볼륨, 이미지 관리 등 컨테이너 외의 요소 들도 제어 가능
    • 더 직관적인 UI : 컨테이너 상태와 로그를 한 눈에 확인 할 수 있음
    • 멀티 호스트 지원 : 로컬 네트워크에 있는 여러 Docker 서버를 하나의 화면에서 관리 할 수 있음
    • 업데이트 자유도 : 시놀로지 UI는 업데이트가 느리거나 제한적일 수 있는데, Portainer는 최신 버전 기능을 빠르게 사용 할 수 있음
    • docker-compose 지원 : GUI로 docker-compose파일 업로드 및 실행 가능

    Portainer 설치 방법

    DSM 웹 인터페이스에서는 Portainer를 설치 할 수 없기 때문에 SSH로 NAS에 접속해서 CLI 방식을 이용해야 한다. SSH 접속 설정과 방법은 다음에 다른 글을 통해 포스팅 할 예정이다.

    어떠한 설치든 간에 공식 문서를 참고하는 것이 제일 정확하다.

    공식 문서에서는 다음과 같은 docker run 명령어를 예시로 설명하고 있다.

    docker volume create portainer_data
    docker run -d -p 8000:8000 -p 9443:9443 \
      --name portainer \
      --restart=always \
      -v /var/run/docker.sock:/var/run/docker.sock \
      -v portainer_data:/data \
      portainer/portainer-ce:lts

    위의 코드를 참고하여 나는 docker-compose 파일을 만드는 방법을 사용했다. 다음은 위의 docker 명령어 실행과 유사한 역할을 수행하는 docker-compose.yml 파일이다.

    version: '3.3'
    
    services:
      portainer:
        image: portainer/portainer-ce:latest
        container_name: portainer
        restart: always
        ports:
          - "9000:9000"     # HTTP
          - "9443:9443"     # By default, Portainer generates and uses a self-signed SSL certificate to secure port 9443
    
        volumes:
          - /var/run/docker.sock:/var/run/docker.sock   # Docker 제어용 소켓 공유
          - portainer_data:/data                        # 설정, 사용자 정보 등 저장
    
    volumes:
      portainer_data:

    공식문서에서는 8000번 포트를 사용하라고 되어있는데 막상 HTTP 접속을 8000번 포트로 이용하려고 보니 오류가 발생한다. 찾아보니 8000번 포트는 Portainer의 ‘Edge Agent’ 기능을 위한 포트라고 한다. HTTP 접속을 하려면 그냥 9000번 포트를 쓰면 된다. 나는 DNS를 적용해서 우리집 내부망에서만 접속할 예정이라 HTTP, HTTPS 뭐 어느걸 사용하던지 큰 상관은 없어서 일단 둘을 다 남겨두었다. 본인의 자유에 따라 설정하면 될 것 같다. HTTPS를 하게 되면 보안은 더 좋아지겠지만 SSL 인증서도 받아야 하고 다소 귀찮을 수 있겠다.

    NAS로 docker-compose 파일 옮기기

    docker-compose.yml파일은 NAS로 옮겨야 실행 할 수 있다. 방법은 여러가지가 있으니 각자 본인이 쓰기 쉬운 방법으로 하면 되겠다. 자세한 내용은 다음에 따로 포스팅 할 예정이다.

    • NAS의 공유폴더를 이용해서 PC에서 직접 파일을 복사하는 방법
    • scp 명령어를 이용해서 터미널에서 직접 전송하는 방법
    • GitHub에 올리고, NAS에서 git clone 하는 방법

    docker-compose 실행

    docker-compose.yml 파일이 NAS에 옮겨졌다면, 터미널에서 해당 디렉토리로 이동한 뒤 다음 명령어를 입력하여 실행한다.

    cd /volume1/docker/portainer    # 예시 경로
    sudo docker-compose up -d

    명령을 실행할 때 sudo를 사용한 이유는 permission denied 오류 발생을 막기 위해서다. 내가 SSH 접속한 것은 그냥 사용자 계정을 통한 것인데, docker compose 실행을 위해서는 root의 권한이 필요하기 때문이다.

    조금 기다리고 나면 이미지가 다운로드 되고 컨테이너가 실행된다.

    Portainer 접속

    브라우저에서 다음 주소를 입력해서 접속한다.

    https://<NAS IP>:9443

    초기화면에서 관리자 계정을 설정하라는 창이 나오면 성공적으로 설치 된 것이다. 만약 https로 접속 할 시 self-signed 인증서를 사용하기 때문에 브라우저에서 보안 경고가 뜰 수는 있으나 무시하고 진행해도 된다.

    마무리

    Portainer는 설치도 어렵지 않고, 한 번 설치하고 나면 컨테이너 환경을 훨씬 직관적이고 유연하게 만들어 준다. Synology NAS를 조금 더 적극적으로 활용하고 싶다면 꼭 한 번 설치해보자. 생각보다 어렵지 않다.

    그 다음은?

    현재는 https://<NAS IP>:9443 을 입력해서 접속해야 되기 때문에 미관상 보기도 안 좋고 나중에 까먹기 딱 좋다. 추후에 NAS의 DSM 역방향 프록시 기능과 DNS 설정을 통해 https://portainer.mydomain.com 과 같은 서브도메인으로 접속이 가능하도록 구성할 예정이다. 이 부분 역시 다른 포스팅에서 자세히 다룰 예정이다.

  • 젬링 리제니어

    Ice Strike

    • Martial Tempo
    • Concentrated Effect
    • Primal Armament
    • Inspiration

    Herald of Ice

    • Magnified Effect
    • Elemental Focus
    • Cold Mastery

    Tempest Bell

    • Rageforged
    • Leverage
    • Heavy Swing
    https://mobalytics.gg/poe-2/builds/sanctum-attribute-stacker?widgets-state=eyJmN2Q4MjEwMi03ZTc3LTRhNDQtYWQyNC0zM2I2N2U4YWU3YmYiOnsiZmlsdGVycyI6eyJhY3RpdmVWYXJpYW50SWQiOiIwYTE5ZTVlMC1jMjY3LTQ3MjEtOTM4MS1hMmE0ODk4N2UwOGYifSwidHlwZW5hbWUiOiJOZ2ZEb2N1bWVudENtV2lkZ2V0Q29udGVudFZhcmlhbnRzVjEifX0
  • 불량 예측 모델링 방법

    센서 데이터를 활용한 고장 예측 및 주요 인자 분석

    데이터가 제한적이고 수집 주기가 적은 상황에서도 해결 가능한 접근법을 고민해야함


    1. 데이터 이해와 전처리

    데이터를 구조화:

    • 수치형 데이터 (예: 온도, 전압 등)와 명목형 데이터 (예: 오류 플래그)를 구분하여 처리합니다.
    • 시간적 요소: 고장이 발생하기까지의 시간이나 사용 주기 등의 시간적 변수도 중요한 피처가 될 수 있습니다.
    • 데이터 보강: 부족한 데이터를 보완하기 위해 다음 방법을 고려합니다:
    • 합성 데이터 생성: 현재 수집된 데이터를 기반으로 몬테카를로 시뮬레이션이나 SMOTE(과소표본화 방지 기법)를 활용하여 데이터를 증강합니다.
    • 물리적 모델링: 센서 데이터와 부품 특성을 기반으로 시뮬레이션 데이터를 생성합니다.

    2. 주요 인자 탐색 (Feature Selection)

    불량과 관련된 핵심 변수를 찾는 것이 중요한 목표입니다. 아래 방법을 추천합니다:

    (1) 상관관계 분석

    • 수치형 데이터: Pearson 상관계수, Spearman 순위 상관계수를 활용.
    • 명목형 데이터: 카이제곱 검정(chi-square test)을 활용.

    (2) 변수 중요도 평가

    • 트리 기반 모델(랜덤 포레스트, XGBoost)을 학습하고 변수 중요도를 추출하여 주요 변수를 확인합니다.
    • Recursive Feature Elimination (RFE) 같은 기법으로 피처를 순차적으로 제거하며 중요도를 평가합니다.

    (3) 차원 축소

    • PCA (주성분 분석): 수치형 데이터를 대상으로 주요한 주성분을 추출합니다.
    • 차원 축소 기법 (t-SNE, UMAP): 데이터 시각화를 통해 분포를 이해하고 주요 패턴을 확인합니다.

    3. 불량 예측 모델링

    (1) 지도 학습 모델

    불량이 발생한 제품과 발생하지 않은 제품의 데이터를 학습에 활용합니다.

    • 추천 알고리즘:
    • 로지스틱 회귀, 랜덤 포레스트, Gradient Boosting (LightGBM, XGBoost), 딥러닝(소규모 데이터에는 과적합 주의)
    • 평가 지표: F1 Score, Precision-Recall, ROC-AUC.

    (2) 비지도 학습 (클러스터링)

    • 군집화 분석 (Clustering): K-Means, DBSCAN 등으로 제품 데이터를 그룹화하고, 각 군집의 특성과 고장 패턴을 분석합니다.
    • 고장이 발생한 군집에서의 주요 변수 분포를 확인해 원인을 추정합니다.

    4. 데이터가 제한적일 때의 보완 방법

    (1) 전이 학습 (Transfer Learning)

    다른 가전제품 또는 유사한 회로 데이터셋이 있다면 이를 활용해 미리 학습한 모델을 전이 학습(특징 학습)하여 성능을 개선합니다.

    (2) 결측치 처리 및 데이터 증강

    • 결측 데이터는 다중 대체(MICE) 방법 등을 사용해 보완합니다.
    • 증강 기법으로 이상값에 대한 데이터 비율을 조정하거나 시뮬레이션 데이터를 생성합니다.

    5. 분석 워크플로

    1. 데이터 수집 및 정리: 모든 변수의 분포와 데이터 품질 점검.
    2. 변수 중요도 평가: 상관 분석 → 피처 중요도 계산.
    3. 예측 모델 개발: 트리 기반 모델 또는 로지스틱 회귀.
    4. 성능 평가: Cross-Validation 활용.
    5. 실시간 데이터 반영: 점진적 학습 또는 신뢰도 높은 데이터 업데이트.

    도구 추천

    • Python 라이브러리: Pandas, NumPy, Scikit-learn, XGBoost, LightGBM.
    • 시각화: Seaborn, Matplotlib, Plotly.
    • 모델 개발 플랫폼: TensorFlow, PyTorch (추가적으로 필요 시).

    데이터 수집이 제한적인 상황에서도, 위의 단계를 통해 고장 예측 및 주요 변수 탐색의 기반을 마련할 수 있습니다. 더 구체적인 데이터 구조나 예제 코드가 필요하면 추가로 공유해주세요.

  • 파이썬 리스트, 배열, ndarray 비교

    주요 차이점 비교

    특징리스트 (list)배열 (array.array)ndarray (numpy.ndarray)
    데이터 타입혼합 가능동일한 타입만 저장동일한 타입만 저장
    차원1차원, 다차원은 중첩 구조로 표현1차원다차원 지원
    메모리 효율성상대적으로 비효율적효율적매우 효율적
    연산 속도느림빠름매우 빠름
    고급 연산미지원미지원지원 (벡터화, 선형대수, 통계 등)
    용도일반적인 데이터 저장 및 조작단순 숫자 데이터수학 연산, 대규모 데이터 분석
  • Bootstrap 시작 방법

    Bootstrap 다운로드: Compiled vs. Source Code

    1. Compiled (컴파일된) 버전:
      • 내용: 미리 컴파일된 CSS와 JS 파일들로 구성되어 있으며, 바로 프로젝트에 포함시켜 사용할 수 있음.
      • 사용 목적: 빠르게 시작하고자 할 때, 별도의 수정 없이 Bootstrap을 바로 사용하고자 할 때.
      • 다운로드 구성bootstrap.min.cssbootstrap.min.js 등의 파일이 포함되어 있음.
    2. Source (소스) 코드:
      • 내용: SASS 파일, JS 소스 파일 등이 포함되어 있으며, 커스터마이징이나 직접 컴파일을 하고자 할 때 사용.
      • 사용 목적: Bootstrap의 디자인이나 동작을 세부적으로 수정하고자 할 때.
      • 다운로드 구성: SASS 파일(.scss), JS 소스 파일 등이 포함되어 있음.

    Bootstrap 사용 방법

    1. Compiled 버전 사용하기

    1. Bootstrap 다운로드 페이지에서 컴파일된 버전을 다운로드합니다.
    2. 다운로드한 파일을 프로젝트 폴더에 복사합니다.
    3. HTML 파일에서 다음과 같이 CSS와 JS 파일을 포함시킵니다:
    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>Bootstrap Example</title>
      <link rel="stylesheet" href="path/to/bootstrap.min.css">
    </head>
    <body>
      <h1>Hello, Bootstrap!</h1>
      <script src="path/to/bootstrap.min.js"></script>
    </body>
    </html>
    

    장점:

    • 오프라인 사용 가능: 인터넷 연결이 없어도 Bootstrap을 사용할 수 있습니다.
    • 버전 관리 용이: 특정 버전의 Bootstrap 파일을 다운로드하여 사용하면, 프로젝트 내에서 동일한 버전을 유지할 수 있습니다.
    • 커스터마이징 용이: 직접 다운로드한 파일을 수정하거나 커스터마이징 할 수 있습니다. 예를 들어, 필요 없는 부분을 제거하거나, 직접 컴파일하여 최적화된 파일을 생성할 수 있습니다.
    • 로딩 시간 단축: 서버에 저장된 파일을 로드하기 때문에, 외부 서버로부터 파일을 불러오는 시간과 비교하여 로딩 속도가 빠를 수 있습니다.

    단점:

    • 초기 설정 번거로움: 파일을 다운로드하고, 프로젝트에 포함시키는 과정이 다소 번거로울 수 있습니다.
    • 파일 크기 증가: 프로젝트에 직접 파일을 포함시키면, 프로젝트의 크기가 커질 수 있습니다.

    2. CDN 사용하기

    CDN(Content Delivery Network)을 사용하면 파일을 다운로드하지 않고도 웹에서 바로 Bootstrap을 사용할 수 있습니다. CDN 링크를 HTML 파일에 포함시키기만 하면 됩니다.

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>Bootstrap Example</title>
      <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
    </head>
    <body>
      <h1>Hello, Bootstrap!</h1>
      <script src="https://code.jquery.com/jquery-3.5.1.slim.min.js"></script>
      <script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.5.4/dist/umd/popper.min.js"></script>
      <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script>
    </body>
    </html>
    

    장점:

    • 간편함: HTML 파일에 몇 줄의 링크만 추가하면 되므로 설정이 매우 간편합니다.
    • 최신 버전 사용 가능: 항상 최신 버전의 Bootstrap을 사용할 수 있습니다.
    • 캐시 활용: CDN을 사용하면, 브라우저가 이미 캐시된 파일을 사용할 수 있어 로딩 속도가 빨라질 수 있습니다. 특히, 많은 사이트들이 동일한 CDN을 사용하기 때문에 사용자 브라우저에 캐시되어 있을 가능성이 높습니다.
    • 서버 부하 감소: 파일이 외부 서버(CDN)에 호스팅되기 때문에, 사용자의 서버 부하를 줄일 수 있습니다.

    단점:

    • 인터넷 의존성: 인터넷 연결이 없으면 Bootstrap을 사용할 수 없습니다.
    • 버전 관리 어려움: CDN에서 제공하는 최신 버전을 사용할 경우, 특정 버전을 유지하는 것이 어려울 수 있습니다.
    • 외부 서버 의존성: 외부 서버(CDN)에서 파일을 로드해야 하므로, 외부 서버의 상태에 따라 로딩 시간이 영향을 받을 수 있습니다. 예를 들어, CDN 서버가 느리거나 다운되면 영향을 받을 수 있습니다.
  • mysql 설치

    brew install mysql

    mysql 설치 후 secure installation 실행

  • BeautifulSoup HTML 파싱 코드

    from urllib.request import urlopen
    from urllib.error import HTTPError
    from bs4 import BeautifulSoup
    
    def getBS(url):
        try:
            html = urlopen(url)
    
        except HTTPError as e:  #페이지를 읽을 수 없을 때 예외 처리
            print(e)
            return None
        
        try:
            bsObj = BeautifulSoup(html.read(),'html.parser')
    
        except AttributeError as e: #태그를 찾을 수 없을 때 예외 처리
            print(e)
            return None
        
        return bsObj

    기본 함수

    names = bsObj.find_all(name="span",attrs={"class":"green"})
    for name in names:
        print(name)

    span class가 green인 항목들을 모두 가져오기

  • 윈도우에서 파이썬 가상환경 만들기

    1. 원하는 버전의 파이썬 다운로드
    2. venv를 이용해서 가상환경 생성
    3. 가상환경 활성화/비활성화

    파이썬 다운로드

    Python Releases for Windows | Python.org에 접속해서 원하는 버전의 파이썬을 다운받아 설치한다. PATH 환경변수에 추가하는 것은.. 글쎄 굳이 필요가 없을 듯 하다. 어짜피 가상환경을 생성해서 거기서만 쓸 것이기 때문에.

    venv를 이용해서 가상환경 생성

    별다르게 설정을 하지 않았다면 파이썬이 설치되는 경로는 C:\Users\사용자명\AppData\Local\Programs\Python 이다.

    터미널을 열어서 다음과 같이 입력한다.

    C:\Users\사용자명\AppData\Local\Programs\Python\Python버전명\python.exe -m venv 원하는가상환경이름

    가상환경 활성화

    터미널에서 다음과 같이 입력한다

    ./가상환경이름/Scripts/Activate

    가상환경 비활성화

    터미널에서 다음과 같이 입력한다

    deactivate
  • 라즈베리파이 Octoprint 관련

    1. SSH 포트 변경

    라즈베리파이 이미지를 설치하고 기본 SSH 접속 포트는 22로 설정되어 있다. 그냥 가만히 두면 공격을 받을 수도 있으니 다른 포트로 변경해 두도록 하자.

    수정해야할 파일은 2가지다.

    /etc/ssh/sshd_config
    /etc/services

    주석 처리되어있는 22를 다른 포트 번호로 바꾸고 주석도 해제한다.(# 제거)

    참고로 해당 파일을 수정하려면 su 권한으로 해야함.

    마찬가지로 services 파일도 같은 포트 번호로 수정을 한다.

    그 다음 라즈베리파이를 리부트 한다.

    sudo reboot

    2. 패키지 업데이트 & 업그레이드

    sudo apt-get update
    sudo apt-get upgrade

    3. CPU 온도 확인

    vcgencmd measure_temp