반응형

이번 포스트는 앱 배포에 관한 것으로, docker 환경에 구축된 jenkins를 이용해서, git repository 에 저장된 소스를 가지고 와서 docker 이미지를 빌드하고, private docker registry 에 배포하는 과정에 대해서 정리해 보았습니다.

 

 

서버 환경

먼저 서버를 준비해야 하는데, 어차피 docker로 배포가 될 예정이기 때문에, 테스트 환경은 Virtual Box 에 설치한 Ubuntu 22.04 LTS 상에서 docker를 설치해서 진행했습니다.

 

 

Docker 설치

대부분 application은 docker 상에서 구동될 예정이기 때문에 먼저 docker를 설치합니다.

 

설치과정은 다음 링크에 자세히 나와 있습니다.

Install Docker Engine on Ubuntu | Docker Documentation

 

1. 기존에 설치된 버전을 삭제합니다.

sudo apt-get remove docker docker-engine docker.io containerd runc

 

2. apt 패키지 인덱스를 업데이트 하고 필요한 패키지를 설치합니다.

sudo apt-get update
sudo apt-get install ca-certificates curl gnupg lsb-release

 

3. Docker의 GPG Key를 추가합니다.

sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

 

4. Docker 설치를 위한 apt repository를 세팅합니다.

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

 

5. apt 패키지를 다시 업데이트 하고, docker를 설치합니다.

sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin

 

Docker Registry

docker registry는 docker 이미지를 빌드한 후에 배포하기 위해서 사용합니다. docker.io 등에서 제공하는 public registry를 사용하는 경우에는 이 과정을 생략해도 좋습니다.

 

docker-compose.yml 파일을 생성해서 다음과 같이 작성합니다.

version: '3'

services:
  registry:
    container_name: docker_registry
    image: registry:2
    restart: unless-stopped
    ports:
    - "5000:5000"
    environment:
      REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY: /data
    volumes:
      - ./data:/data

 

docker-compose 명령어 혹은 docker 명령어로 registry 서버를 시작합니다.

 

docker-compose 가 설치되어 있는 경우

docker-compose up -d

 

docker 명령어를 사용하는 경우

docker compose up -d

 

docker registry 의 경우 https를 사용하는 것이 기본이지만.. 테스트 환경 혹은 private 네트워크 환경에서는 굳이 https를 사용할 필요가 없어서 http를 사용할 경우에는, 아래와 같이 설정을 해 줍니다.

 

1. /etc/docker/daemon.json 파일 오픈 (없으면 생성)

2. 아래와 같은 내용을 추가합니다.

{"insecure-registries": ["host:port"]}

3. docker 서비스를 재시작 합니다.

sudo systemctl restart docker

 

혹시 기본 옵션 파일을 인식하지 못한다면, /etc/default/docker 파일에 DOCKER_OPTS="--config-file=/etc/docker/daemon.json" 을 추가하고, docker 서비스를 재시작 합니다.

 

참고 링크

https://stackoverflow.com/questions/49674004/docker-repository-server-gave-http-response-to-https-client

 

 

Jenkins 시작

Jenkins도 별도로 설치하지 않고, docker 컨테이너 형태로 사용을 할 예정인데요, 이런 식으로 사용하는 경우 docker 관련 플러그인을 사용할 때, docker 명령어를 찾지 못하거나 glibc 버전 문제가 발생할 수 있어서, jenkins docker 이미지에  docker를 추가로 설치해서 사용하도록 하겠습니다.

 

먼저 아래와 같이 Dockerfile 파일을 준비합니다. 

FROM jenkins/jenkins:lts
USER root
RUN apt-get update -qq \
    && apt-get install -qqy apt-transport-https ca-certificates curl gnupg2 software-properties-common
RUN curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add -
RUN add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/debian \
   $(lsb_release -cs) \
   stable"
RUN apt-get update  -qq \
    && apt-get -y install docker-ce
RUN usermod -aG docker jenkins

 

아래 명령어를 이용해서 이미지를 빌드합니다.

docker image build -t custom-jenkins-docker .

 

Jenkins를 띄울 때도, docker-compose.yml 을 작성해서 띄우도록 하겠습니다.

docker-compose.yml 파일을 다음과 같이 작성합니다.

version: '3'

services:
  jenkins:
    container_name: jenkins
    image: custom-jenkins-docker:latest
    restart: unless-stopped
    privileged: true
    user: root
    ports:
     - "8080:8080"
     - "50000:50000"
    volumes:
     - ./data:/var/jenkins_home
     - /var/run/docker.sock:/var/run/docker.sock

 

docker-compose 명령어 혹은 docker 명령어로 jenkins 서버를 시작합니다.

 

docker-compose 가 설치되어 있는 경우

docker-compose up -d

 

docker 명령어를 사용하는 경우

docker compose up -d

 

 

Jenkins 설정

웹 브라우저를 이용해서 http://localhost:8080 으로 접속합니다. 참고로 저는 virtual box의 host 네트워크 설정으로 host PC에서 IP (192.168.56.101) 로 접근할 수 있게 설정하였습니다.

 

처음 실행시 아래와 같은 화면이 나옵니다.

 

화면에 나온 설명대로 docker 컨테이너 내에서 /var/jenkins_home/secrets/initialAdminPassword 파일을 열어보면 초기 비밀번호를 확인할 수 있습니다. 해당 파일은 docker-compose 로 띄울 때, .data 폴더를 /var/jenkins_home 폴더로 매핑시켜 두었기 때문에,  Ubuntu 서버 내에서 .data/secrets/initialAdminPassword 파일을 열어보아도 동일한 결과를 얻을 수 있습니다.

그 외에는 docker 컨테이너 log를 이용해서 아래와 같이 초기 비밀번호를 확인할 수도 있습니다.

docker logs jenkins

 

다음 화면에서는 Install suggested plugins를 클릭해서 기본 플러그인들을 설치합니다.

 

다음 화면에서는 Admin User를 생성해도 되지만 귀찮으시면 Skip 을 눌러서 넘길 수도 있습니다. (Skip시 initial password를 계속 사용하게 됩니다.)

 

Jenkins URL을 세팅하고, 시작합니다. 

 

 

Jenkins 화면에서 Jenkins 관리 > 플러그인 관리 > Available plugins 를 차례로 클릭합니다.

 

검색창에서 docker를 입력합니다.

 

Docker, Docker Commons, Docker Pipeline, Docker API, docker-build-step 를 체크하고, Download now and install after restart 를 클릭합니다.

 

 

설치 후 Jenkins 재시작을 체크하면, Jenkins가 재시작 됩니다.

 

마지막으로 docker socket을 세팅해 줍니다.

Jenkins 관리 > 시스템 설정을 차례로 클릭합니다.

스크롤해서 Docker Builder 항목을 찾아가서 Docker server REST API URL에 아래와 같이 "unix:///var/run/docker.sock" 을 입력합니다.

 

 

빌드 테스트

이제 Jenkins 에 Pipeline 아이템을 추가해서 빌드 테스트를 진행 해보겠습니다.

 

Jenkins Dashboard에서 새로운 Item을 클릭합니다.

 

적당한 이름을 입력하고, Pipeline 을 선택하고 OK 버튼을 눌러서 넘어갑니다.

 

먼저, Docker 이미지에 버전을 태깅하기 위해서 BUILD_NUMBER를 인자로 받도록 합니다.

 

General 섹션에서 "이 빌드는 매개변수가 있습니다" 를 체크하고, String Parameter를 선택하고, 매개변수 명에 "BUILD_NUMBER" 라고 적습니다.

 

쭉 아래로 내려서 Pipeline 섹션에 빌드 스크립트를 작성합니다.

아래와 비슷하게 작성하면 됩니다.

 

 

스크립트 내용은 아래와 같습니다.

node {
    def app
    def imgName = "customapps/django_test"
    stage('Clone Repository') {
        git 'https://github.com/shineum/django_sample.git'
    }
    stage('Build Image') {
        app = docker.build("${imgName}:${env.BUILD_NUMBER}")
    }
    stage('Push Image') {
        docker.withRegistry('http://192.168.56.101:5000') {
            app.push("${env.BUILD_NUMBER}")
            app.push("latest")
        }
    }
    stage('Clean Up') {
        sh "docker images ${imgName} -q | xargs docker rmi -f > /dev/null 2>&1 || true"
    }    
}

 

스크립트 내용은 대략 다음과 같습니다.

 

1. Clone Repository

github에서 소스 코드를 가지고 옵니다.

 

2. Build Image

docker 이미지를 빌드합니다. Jenkins 서버가 아니라 docker를 설치한 Ubuntu 서버에 이미지가 생성됩니다.

 

3. Push Image

해당 docker 이미지를 private registry 서버에 push 합니다. (registry 서버는 virtual box 에서 host 전용 네트워크를 이용해서 ip를 설정하였습니다.)

처음에는 빌드 버전대로 하나 올리고, 새 빌드를 latest 로 세팅합니다.

 

4. Clean Up

Ubuntu 서버에는 앱 이미지가 필요 없기 때문에 불필요한 이미지들을 정리합니다. 이 때, 앱을 빌드할 때 사용되는 base 이미지들을 같이 삭제하게 되면, 빌드 시간이 길어지기 때문에, 앱 배포 이미지만 삭제합니다. 

 

스크립트 작성이 끝났으면 저장하고 빠져나옵니다.

 

 

파라미터와 함께 빌드를 클릭하고, BUILD_NUMBER를 입력합니다.

 

이미지 빌드는 base image를 다운로드해야 하며, 앱에서 필요로 하는 모듈도 다운로드해야 하기 때문에 시간이 조금 걸립니다.

 

빌드가 완료되면 아래와 비슷한 결과가 출력됩니다.

 

확인을 위해 registry 서버에 접속해보면,

 

먼저 카탈로그 확인

http://192.168.56.101:5000/v2/_catalog

 

그리고, 아래와 같이 빌드 관련 정보를 확인할 수 있습니다.

http://192.168.56.101:5000/v2/customapps/django_test/tags/list

다음 명령으로 릴리즈 된 docker 이미지를 registry 서버에서 pull 할 수 있습니다. (latest 대신 버전을 적어줘도 됩니다.)

docker pull 192.168.56.101:5000/customapps/django_test:latest

 

 

빌드 실행

마지막으로 조금 전에 빌드한 이미지를 앱 서버에 배포해서 실행해 보겠습니다.

실제 운영 환경에서는 kubernetes 나 docker swarm 등을 사용하기 때문에 조금 더 복잡하겠지만.. 여기서는 단순하게 Ubuntu 서버에서 docker 이미지를 실행해 보겠습니다.

 

Jenkins Dashboard에서 새로운 Item을 클릭합니다. 이번에도 적당한 이름을 지정하고 Pipeline을 선택합니다.

 

General 섹션에서 "이 빌드는 매개변수가 있습니다" 를 체크하고, String Parameter를 선택하고, 매개변수 명에 "BUILD_NUMBER" 라고 적습니다. 그리고 이번에는 Default Value 에 "latest" 를 적어 줍니다.

 

쭉 아래로 내려서 Pipeline 섹션에 빌드 스크립트를 작성합니다.

아래와 비슷하게 작성하면 됩니다.

 

 

스크립트 내용은 아래와 같습니다.

node {
    def containerName = "cn_django_test"
    def imgName = "customapps/django_test"
    def regServer = "192.168.56.101:5000"
    stage("Stop App") {
        sh "docker stop ${containerName} || true && docker rm ${containerName} || true"
    }
    stage("Clean Up") {
        sh "docker images ${imgName} -q | xargs docker rmi -f > /dev/null 2>&1 || true"
    }
    stage("Start App") {
        sh "docker run -it -d -p 8000:8000 --name ${containerName} ${regServer}/${imgName}:${env.BUILD_NUMBER}"
    }
}

 

스크립트 내용은 대략 다음과 같습니다.

 

1. Stop App

기존에 실행 중인 앱을 정지 합니다.

 

2. Clean Up

기존에 실행 할 때 사용했던 app build 이미지를 제거 합니다.

 

3. Start App

지정한 버전의 app build 이미지를 registry로부터 pull하고 app을 구동합니다.

 

 

스크립트 작성이 끝났으면 저장하고 빠져나옵니다.

 

 

파라미터와 함께 빌드를 클릭하고, BUILD_NUMBER는 "latest"로 두고 실행합니다.

 

빌드가 잘 완료되었는지 확인하고,

 

App URL로 접속해보면, django 앱이 실행되고 있음을 확인할 수 있습니다.

 

 

이상으로 포스트를 마치도록 하겠습니다. 

반응형
반응형

노트북 등의 컴퓨터에서 윈도우11 (Win11 22H2) 재설치시, (유선) 네트워크 연결이 되어 있지 않고, 무선랜 드라이버가 기본으로 설치 되지 않는 경우 (주로 새로 나온 무선랜 장비에서 발생), 네트워크에 연결 화면에서 넘어가지 않는 이슈가 있습니다.

 

화면에 연결 가능한 무선랜 리스트도 나오지 않으며, 다음 버튼이 활성화 되지 않아서 아무것도 할 수 가 없는 상황이 벌어집니다.

 

 

 

이 경우, 다음과 같이 조치 하면 됩니다.

 

1. Shift + F10 을 눌러서 명령 프롬프트 화면을 띄웁니다. 입력은 한 번만 하세요.. 여러 번 누르면 창이 여러 개 한꺼번에 나옵니다. 아래는 두 번 눌러서 창이 두 개가 나왔는데, 하나만 남기고 닫으면 됩니다.

 

 

 

2. OOBE\BYPASSNRO  라고 입력하고 Enter를 입력합니다. (자동으로 재부팅 됨)

 

3. 재부팅이 되면.. 아쉽게도 처음부터 다시 입력해야 하지만, 이번에는 네트워크 설정을 건너뛸 수 있는 액션 링크가 나옵니다. 인터넷에 연결되어 있지 않음 클릭!

 

 

4. 링크를 클릭해서 넘어가서 윈도우 설치를 마칩니다. 다음 화면에서도 네트워크 연결을 권유하는 페이지가 나오지만, 제한된 설치로 계속을 클릭해서 넘깁니다.

 

 

5. 설치 후에는 해당 노트북 (컴퓨터) 의 무선랜 드라이버를 수동으로 설치해 줍니다. (다른 컴퓨터에서 다운로드해서 USB 등의 미디어를 이용해서 복사해 줘야 합니다.)

 

ex) Lenovo 14인치 Slim 7 Pro X (intel) 드라이버

https://pcsupport.lenovo.com/us/en/products/laptops-and-netbooks/yoga-series/yoga-slim-7-prox-14iah7/downloads/driver-list/component?name=Networking%3A%20Wireless%20LAN

 

참고 링크

https://pureinfotech.com/bypass-internet-connection-install-windows-11/

반응형
반응형

언제부턴가 윈도우즈에서 Powershell 을 제공하고 있다는 것을 알고는 있었으나.. 쓸일이 별로 없을 거라 생각해서 눈여겨 보고 있지 않았었는데.. 요즘 윈도우즈로 작업을 많이 하다보니 의외로 유용한 기능이 많아서 몇가지 주요 커맨드를 정리해 봅니다.

 

PowerShell 에 대한 자세한 설명은 Microsoft 사이트에서 제공해 주고 있습니다. 한글 번역도 제공해 주고 있는데, 일부는 기계 번역이 되어 있다고 하네요.. 7.2 LTS 버전에 대한 링크 입니다.

 

영문 링크     한글 링크 

 

 

PowerShell 이란?

PowerShell은 윈도우즈 뿐만 아니라 리눅스, 맥OS 등의 OS에서 사용이 가능한 크로스 플랫폼 지원의 작업 자동화 솔루션입니다. 

 

 

PowerShell 설치

Windows 에서는 Windows 10 이후에는 기본으로 설치되어 있는 것 같고, 그 외에는 winget 등을 이용해서 설치하면 된다고 합니다. (홈페이지에는 모던 Windows 10 이라고 되어 있어서 정확한 버전은 모르겠습니다.) 링크 참조 

 

리눅스는 Ubuntu 기준으로 아래 명령어들을 이용하면 설치가 가능하다고 합니다.  링크 참조 

# Update the list of packages
sudo apt-get update
# Install pre-requisite packages.
sudo apt-get install -y wget apt-transport-https software-properties-common
# Download the Microsoft repository GPG keys
wget -q "https://packages.microsoft.com/config/ubuntu/$(lsb_release -rs)/packages-microsoft-prod.deb"
# Register the Microsoft repository GPG keys
sudo dpkg -i packages-microsoft-prod.deb
# Update the list of packages after we added packages.microsoft.com
sudo apt-get update
# Install PowerShell
sudo apt-get install -y powershell
# Start PowerShell
pwsh

 

맥OS 에서는 홈브루 설치 이후에 cask 를 이용해서 설치하면 됩니다. 링크 참조 

brew install --cask powershell

 

 

주요 명령어

주요 명령어는 제가 많이 사용하는 것들로 정리해 봤습니다.

PowerShell Linux Others 기능 설명
Get-Item ls dir 파일 / 폴더 등의 리스트를 화면에 출력해 줍니다.
참고로 ls 명령어도 사용이 가능한데, 옵션들이 제대로 동작하지 않는 것으로 보아 실제로는 Get-Item이 호출되는 것으로 보입니다.
Get-Content cat   파일의 내용을 보여줍니다. 
참고로 cat 명령어도 사용이 가능한데, cat은 cmdlet Get-Content 라고 명시적으로 나와서 Get-Content 가 호출된다는 것을 알 수 있습니다.
ssh ssh ssh 언제부턴가 ssh 명령어가 되네요.. Secure Shell 을 의미하며, 원격 시스템에 접속해서 명령을 실행하기 위해서 사용합니다.
scp scp scp scp 는 원격 시스템으로 파일을 전송할 때 사용합니다.
Invoke-WebRequest wget, curl   웹 프로토콜 (http, https 등) 을 이용해서 서버의 파일을 가져옵니다.
참고로 wget 이나 curl 을 그냥 써도 Invoke-WebRequest 이 호출됩니다.
Get-Process ps tasklist 프로세스 리스트를 보여줍니다. ps 명령어를 입력해도 Get-Process가 호출되는 것 같습니다. 
Stop-Process kill taskkill 프로세스를 종료합니다. kill 명령어를 입력해도 Stop-Process가 호출 되는 것 같습니다.

 

이 외에도 많은 명령어들이 있으니 필요한 명령어는 아래 링크를 참조하세요.

 

영문 링크     한글 링크 

 

 

활용법

1. 프로세스 검색

먼저 프로세스를 검색해 보겠습니다. 메모장(notepad)를 하나 열고 아래 명령어를 입력합니다. 

Get-Process -Name Notepad

 

아래와 비슷한 결과가 출력될 것입니다.

 

이름으로 프로세스를 검색하는 경우에는, -Name은 생략이 가능합니다.

 

 

만약 프로세스 아이디를 알고 있다면 아래처럼 입력하면 됩니다. (여기서는 아이디가 4556)

Get-Process -Id 4556

 

정확한 프로세스 이름을 모른다면 와일드카드(*)를 이용할 수 있습니다.

Get-Process -Name Note*

 

위의 출력결과에서 Id만 화면에 출력하고 싶다면, 아래와 같이 입력합니다.

Get-Process -Name Notepad | Select-Object Id

여기서 | (pipe) 는 바로 앞의 커맨드의 결과를 받아서 처리하라는 의미이고,  Select-Object는 프로세스 리스트에서 Id 만 선택해서 보여주라는 의미 입니다.

 

결과는 아래처럼 출력됩니다.

 

결과를 리스트로 받기 위해서는 아래와 같이 ExpandProperty 옵션을 추가합니다.

Get-Process -Name Notepad | Select-Object -ExpandProperty Id

 

 

파이프 기능을 활용하면 이전 결과를 필터 할 수도 있습니다. 아래 명령어는 Where-Object 기능을 이용해서 전체 프로세스 리스트 중에 ProcessName이 Notepad 인 것만 필터해서 출력해 줍니다. 즉, 앞에서 입력했던 Get-Process Notepad 와 같은 결과가 나옵니다. 여기서 $_ 는 이전 결과 리스트의 아이템(원소)를 의미합니다.

Get-Process | Where-Object {$_.ProcessName -eq 'Notepad'}

 

 

2. 프로세스 종료

이번에는 프로세스를 강제로 종료하는 명령어입니다. 이전에 실행했던 메모장을 종료하기 위해서는 아래와 같이 입력합니다.

Stop-Process -Name Notepad -Force

Stop-Process의 경우 Get-Process 처럼 와일드 카드로 프로세스를 종료하는 것은 가능하지만, -Name은 생략할 수 없습니다. 참고로 뒤에 붙인 -Force는 다른 사용자가 실행한 프로세스라도 강제로 종료시키라는 의미 입니다.

 

또한, 프로세스 아이디로도 종료가 가능합니다.

Stop-Process -Id 4556 -Force

 

 

3. 리스트

다음은 리스트를 처리하는 명령어들입니다.

 

프로세스 리스트를 ProcessName으로 정렬해서 10개만 보여주는 명령어 입니다.

Get-Process | Sort-Object -Property ProcessName | Select-Object -Skip 0 -First 10

오름차순으로 정렬이 되는데, 내림차순으로 정렬하고 싶다면 -Descending 옵션을 추가하면 됩니다.

 

아래처럼 입력하면 ProcessName을 역순으로 정렬해서, index 0과 index 1에 해당하는 아이템을 화면에 출력해 줍니다.

Get-Process | Sort-Object -Property ProcessName -Descending | Select-Object -Index 0, 1

 

Powershell에서는 아래처럼 입력하면 리스트로 인식합니다.

1,2,3,4,5,6,7,8,9

 

그래서 파이프를 걸어서 5보다 큰 값을 출력하게 할 수 있습니다.

1,2,3,4,5,6,7,8,9 | Where-Object {$_ -gt 5}

 

순차적인 숫자의 리스트는 다음과 같이 생성할 수도 있습니다.

1..9

 

아래 명령어는 리스트에서 중복되지 않는 값만 출력해 줍니다.

1,2,3,1,2,3,1,2,3,4 | Select-Object -Unique

 

아래 명령어는 1 ~ 9 까지의 리스트를 생성해서 마지막 값을 출력해 줍니다.

1..9 | Select-Object -Last 1

 

 

4. ForEach-Object

리스트를 핸들하는 예시입니다.

 

먼저 map 의 예시입니다. map은 리스트를 받아서 리스트를 돌려줍니다. 아래 예시는 [1, 2, 3, 4, 5, 6, 7, 8, 9] 리스트를 생성해서 각 원소에 2를 곱한 결과를 다시 리스트로 반환합니다. 결과는 [2, 4, 6, 8, 10, 12, 14, 16, 18] 이 됩니다.

1..9 | ForEach-Object -Process {$_ * 2}

위의 예시에서 -Process 는 생략가능하며, ForEach-Object 대신 %{$_ * 2} 을 사용해도 같은 결과가 리턴됩니다.

 

이번에는 reduce 예시입니다. reduce는 리스트를 받아서 연산한 결과값을 돌려줍니다. 아래 예시는 [1, 2, 3, 4, 5, 6, 7, 8, 9] 리스트를 생성해서 원소들의 합을 구해서 돌려줍니다. 결과는 45 가 됩니다.

1..9 | ForEach-Object -Begin {$sum = 0} -Process {$sum += $_} -End {$sum}

ForEach-Object 대신 ForEach 라고 써도 되는 것 같습니다. 그리고 Process는 여러 개를 지정하여 순차적으로 수행하게 할 수 있습니다.

1..2 | ForEach-Object -Begin $null -Process {'Process A'}, {'Process B'} -End $null

 

Begin, End 스크립트 등에는 세미콜론(;)을 이용해서 여러 변수를 지정할 수 있습니다. Process에서도, 여러 개의 스크립트를 지정하지 않고, 세미콜론(;)으로 구분된 여러 문장을 실행하는 것도 가능합니다.

1..9 | ForEach-Object -Begin {$a = 0; $b = 1} -Process {$a += $_; $b *= $_} -End {$a; $b}

End는 {$a, $b} 로 표기해도 같은 결과가 나오며, 리스트 형태로 반환됩니다.

 

 

ForEach는 아래와 같이 사용도 가능합니다. (이렇게 호출하면 내부적으로 ForEach-Object 를 호출하지 않는 것 같습니다.)

ForEach ($_ in 1..9) {$_}

결과는 리스트 형태로 [1, 2, 3, 4, 5, 6, 7, 8, 9] 를 반환합니다.

 

파이프와 같이 사용할 때는 아래처럼 사용이 가능합니다.

1..9 | %{$_ * 2}

 

 

5. CSV

다음은 CSV 파일의 내용을 볼 수 있는 명령어 입니다.

 

첨부된 샘플 csv를 이용해서 테스트 했습니다.

 

sample.csv
0.00MB

 

Import-CSV sample.csv

 

아래와 같은 결과가 나올 것입니다.

 

만약 여기서 Last name 만 출력하고 싶다면, 아래처럼 입력하면 됩니다.

Import-CSV sample.csv | Select-Object "Last name"

 

여기서 Identifier가 5000이하인 사람만 출력하고 싶으면, 아래처럼 입력하면 됩니다.

Import-CSV sample.csv | Where-Object {$_.Identifier -le 5000}

 

아래처럼 필터링 되어서 필요한 결과만 나오게 됩니다.

 

 

이 포스트에서 소개한 명령어 이외에도 많은 기능들이 있으니 매뉴얼을 참고하시기 바랍니다.

 

 

ps. 참고로 Windows PowerShell은 대소문자 구분을 하지 않습니다. 다른 OS에서는 확인해 보지 않았지만.. OS 특성상 다른 OS에서는 대소문자 구분을 할 것 같네요..

 

반응형
반응형

이번 포스트는 Django Tutoral을 기초로 해서 작성했습니다.

Writing your first Django app, part 1 | Django documentation | Django (djangoproject.com)

 

이전 포스트에서는 Django 프로젝트를 생성했었는데, 이어서 튜토리얼에 있는 설문조사 프로젝트를 진행해 보겠습니다.

 

0. 준비

기존에 생성한 프로젝트 폴더는 대략 다음과 같은 구조로 되어 있을 겁니다. (django-admin 으로 프로젝트를 생성하면 자동으로 생성이 됩니다.)

mysite/
    manage.py
    config/
        __init__.py
        settings.py
        urls.py
        asgi.py
        wsgi.py

 

- 먼저 mysite 폴더는 프로젝트 루트입니다. Django 에서는 이 폴더의 이름은 중요하지 않습니다.

- manage.py:  여러가지 방법으로 Django 프로젝트와 interact 하기 위해 필요한 커맨드라인 유틸리티입니다.

- config 폴더는 프로젝트를 위한 실제 Python 패키지들이 위치합니다.

- config/__init_.py: 비어 있는 파일이지만 Python 패키지임을 선언하기 위해 필요합니다.

- config/settings.py: Django 프로젝트를 위한 설정 파일입니다.

- config/urls.py: Django 프로젝트의 URL 정보입니다.

- config/asgi.py: ASGI를 지원하는 웹서버를 위한 entry-point 입니다.

- config/wsgi.py: WSGI를 지원하는 웹서버를 위한 entry-point 입니다.

 

 

 

1. 설문조사 앱 추가

Django 에서의 앱은 특정 작업을 수행하는 웹 애플리케이션을 의미합니다. 프로젝트는 특정 웹 사이트에 대한 구성 및 앱의 모음입니다. 따라서 하나의 프로젝트에는 여러 개의 앱이 포함될 수 있습니다. 

 

다음 명령어를 이용해서 Project에 "polls" 앱을 추가합니다.

 

(.venv) > python manage.py startapp polls

 

polls 앱이 추가되면, 아래와 같은 폴더가 생성됩니다. 

 

polls/
    __init__.py
    admin.py
    apps.py
    migrations/
        __init__.py
    models.py
    tests.py
    views.py

 

2. HelloWorld

설문조사를 더 진행하기 전에, 화면에 HelloWorld 를 출력해 보도록 하겠습니다.

 

먼저 polls 폴더내에 있는 views.py 파일을 열어서 아래와 같이 코드를 작성합니다.

 

polls/views.py

from django.shortcuts import render
from django.http import HttpResponse

# Create your views here.

def index(request):
    return HttpResponse("HelloWorld")

 

그리고 polls 폴더에 urls.py 파일을 생성해서 아래와 같이 코드를 작성합니다.

 

polls/urls.py

from django.urls import path
from . import views

urlpatterns = [
    path('', views.index, name='index')
]

 

마지막으로 config 폴더에 있는 urls.py 파일을 열어서 아래와 같이 코드를 입력합니다.

from django.contrib import admin
# django.urls의 include 모듈을 추가
from django.urls import include
from django.urls import path

urlpatterns = [
    # polls 를 경로에 추가
    path('polls/', include('polls.urls')),
    path('admin/', admin.site.urls),
]

 

프로젝트를 다시 실행합니다.

 

이번에는 localhost:8000 으로 접속하면 아래와 같은 에러가 나오게 됩니다.

 

나중에 처리하기로 하고, localhost:8000/polls 로 접속합니다.

아래처럼 HelloWorld 가 화면에 나오면 정상입니다.

 

페이지가 호출되는 흐름을 설명하자면,

 

먼저 웹 요청이 오면, project 에 있는 config/urls.py 에서 urlpatterns 에 있는 리스트를 매치해 봅니다.

매칭 결과 "polls/"가 매치되므로, url은 polls.urls 에 있는 urlpatterns 를 찾아보게 됩니다.

 

다음으로 polls/urls.py 에 있는 urlpatterns에서 매치되는 path를 살펴보고,

매치되는 함수를 실행합니다. (여기서는 views.index)

 

polls/views.py 에 있는 index 함수에서 요청을 처리하고, HttpResponse 로 "HelloWorld" 를 리턴하게 됩니다.

 

 

반응형

'프로그래밍 > Python - Django' 카테고리의 다른 글

Django Query Tips - User, Group, Permission  (0) 2024.03.02
Django 프로젝트 배포하기  (0) 2024.02.29
Django - Proxy Models  (0) 2023.02.23
Django - 프로젝트 시작하기  (0) 2022.10.28
Django - 기본 설정  (0) 2022.10.14
반응형

이 포스트는 Django 에 대한 포스트로, 박응용님의 점프 투 장고를 많이 참조했습니다.

기초부터 차근차근 공부하시고 싶으신 분은 점프 투 장고를 읽어 보시기를 권장합니다.

 

https://wikidocs.net/book/4223

 

점프 투 장고

**점프 투 장고 오프라인 책 출간 !! (2020.12)** * [책 구입 안내](https://wikidocs.net/105844) 점프 투 장고는 파이 ...

wikidocs.net

 

 

Django 프로젝트 시작하기

Django 프로젝트를 시작하기 위해서는 다음의 순서대로 진행하면 됩니다.

1. 프로젝트 폴더 생성

2. 가상환경 생성 및 실행

3. 가상환경 내에서 Django 모듈 설치

4. Django admin 명령어로 프로젝트 생성

5. Django 서버 실행

 

1. 프로젝트 폴더 생성

프로젝트 폴더는 탐색기를 이용해도 되지만, 여기서는 커맨드 프롬프트를 이용해서 생성해 보겠습니다. 프로젝트는 C:\Projects\Django 아래 위치하며, 프로젝트 이름은 mysite 라고 가정하겠습니다.

> cd C:\Projects\Django
> mkdir mysite
> cd mysite

 

커맨드는 윈도우 기준으로 작성되었습니다. 첫째 줄은 C:\Projects\Django 디렉터리로 이동하라는 명령어 인데, 이전에 C:\Projects\Django 폴더가 생성되어 있어야 합니다. 그리고 두번째 줄은 프로젝트 폴더인 mysite 를 생성하는 명령어이고, 세번째 줄은 폴더 생성 후에 mysite 디렉터리로 이동하라는 의미 입니다. 이후 작업은 모두 C:\Projects\Django\mysite 에서 이루어지기 때문에 미리 이동해 두었습니다.

 

2. 가상환경 생성 및 실행

이전 포스트에서 가상환경에 대해서 설명을 했었는데, 가상환경은 프로젝트별로 Python 실행환경을 만들어서 가상환경 별로 모듈을 관리하기 위해서 사용합니다. C:\Projects\Django\mysite 에서 아래 명령을 실행합니다.

> python -m venv .venv
> cd .venv\Scripts
> activate
(.venv) > cd ..\..

 

역시 윈도우 기준으로 커맨드를 작성했습니다. 첫번째 줄에서는 .venv 라는 가상환경을 생성했고요, 두번째 줄에서는 가상환경을 실행하기 위해서 경로를 변경해 주었고, 세번째 줄에서는 가상환경을 실행하였습니다. 네번째 줄은 원래 프로젝트 루트로 돌아가기 위한 명령어 입니다.

 

맥이나 리눅스에서는 아래와 같이 입력하시면 됩니다. 

> python -m venv .venv
> source ./.venv/bin/activate

 

3. 가상환경 내에서 Django 모듈 설치

pip 명령어를 이용해서 Django 모듈을 설치합니다.

(.venv) > pip install django==4.1.2

 

pip 버전을 업그레이드 하라는 경고 메시지가 나온다면 아래 명령어로 업그레이드를 진행합니다.

(.venv) > python -m pip install --upgrade pip

 

4. Django admin 명령어로 프로젝트 생성

django-admin 명령어로 Django 프로젝트에 필요한 기본 설정들을 생성합니다.

(.venv) > django-admin startproject config .

 

django-admin 명령어의 첫번째 파라미터인 startproject 는 말 그대로 프로젝트를 시작하기 위한 기본 파일들을 생성하기 위해 사용합니다. 두번째 파라미터인 config 는 django 프로젝트의 설정파일들을 config 폴더에 생성하겠다는 의미이고, 마지막 파라미터인 "." 은 현재 경로에 생성을 하겠다는 의미 입니다. 

명령어를 실행하고 나면, 프로젝트 루트 경로에는 manage.py 파일과 config 폴더가 생성됩니다. config 폴더에는 기본 설정 및 운영 환경에서의 실행을 위한 기본 파일들이 생성됩니다.

 

5. Django 서버 실행

프로젝트가 생성되었다면, 아래 명령어를 입력해서 Django 서버를 실행합니다.

(.venv) > python manage.py runserver

 

명령어를 실행하고 나면, 마지막에 Starting development server at http://127.0.0.1:8000/ 같은 메시지가 출력되는데, 이것이 서버 접속 정보입니다. 브라우저를 열고 http://127.0.0.1:8000 을 입력하면 Django 에서 제공해주는 기본 화면이 아래와 같이 나오게 됩니다.

Django 는 포트 충돌이 없다면 기본적으로 8000 포트로 서비스를 시작합니다. 만약 8080 포트로 서비스를 하고자 한다면 다음과 같이 입력하면됩니다.

(.venv) > python manage.py runserver 8080

 

혹은 서버에서 여러 개의 네트워크 인터페이스를 사용하고 있어서 특정 아이피에 서비스를 바인드 하고 싶다면 아이피도 적어줍니다.

(.venv) > python manage.py runserver 0.0.0.0:8080

 

0.0.0.0 은 모든 네트워크 인터페이스에서의 요청을 바인드 할 때 사용합니다. 필요에 따라 바인드할 아이피를 세팅해 주면됩니다.

 

 

원래 이번 포스트에서 HelloWorld 를 구현하려고 했는데.. 다음 포스트에 작성해 보겠습니다.

반응형

'프로그래밍 > Python - Django' 카테고리의 다른 글

Django Query Tips - User, Group, Permission  (0) 2024.03.02
Django 프로젝트 배포하기  (0) 2024.02.29
Django - Proxy Models  (0) 2023.02.23
Django Tutorial Part 1 - HelloWorld  (0) 2022.11.01
Django - 기본 설정  (0) 2022.10.14
반응형

이 포스트는 Django 에 대한 포스트로, 박응용님의 점프 투 장고를 많이 참조했습니다.

기초부터 차근차근 공부하시고 싶으신 분은 점프 투 장고를 읽어 보시기를 권장합니다.

 

https://wikidocs.net/book/4223

 

점프 투 장고

**점프 투 장고 오프라인 책 출간 !! (2020.12)** * [책 구입 안내](https://wikidocs.net/105844) 점프 투 장고는 파이 ...

wikidocs.net

 

 

Django의 정의

Django는 웹 프로그램을 쉽고 빠르게 만들어 주는 웹 프레임워크입니다.

 

웹 프레임워크란

웹 프레임워크는 웹 프로그램을 만들기 위한 스타터 키트 같은 것으로, 웹 프로그램에 필요한 많은 기능들(쿠키나 세션 처리, 로그인/로그아웃 처리, 권한 관리, 데이터 베이스 연결 등)을 포함시켜서 바로 사용할 수 있게 만들어진 프레임워크 입니다.

 

Django 설치하기 1 - Python 설치

Django 를 이용해서 웹 개발을 위해서는 Python 이 필요합니다. Python 홈페이지에서 사용하는 컴퓨터의 OS에 맞게 설치를 합니다. 버전은 3.8 이후를 사용하는 것을 권장하는데, 2022년 10월 기준으로 3.10.4 버전을 설치하면 됩니다. 이미 Python 3.8 이후 버전이 설치되어 있다면 이 과정은 건너 뛰어도 됩니다.

 

https://www.python.org 

 

Welcome to Python.org

The official home of the Python Programming Language

www.python.org

 

설치가 끝나면, 명령 프롬프트 (커맨드 창) 등에서 아래 명령어를 이용해서 설치된 버전을 확인할 수 있습니다. (V는 대문자 입니다.)

> python -V

 

Django 설치하기 2 - Python 가상환경 설정

Python의 가상환경은 Python 프로젝트를 진행할 때, 각각의 프로젝트에 독립된 환경을 만들어 주기 위해서 사용합니다. 예를 들어서 Python 프로젝트를 여러개 관리 중인데, 각 프로젝트가 필요로 하는 모듈 및 모듈의 버전이 다르다면, 가상환경을 이용해서 각 프로젝트에 필요한 모듈을 각각 설치해서 사용할 수 있습니다. 

 

가상환경은 아래 명령어로 생성할 수 있습니다.

> python -m venv <name>

 

원하는 위치에 가상환경을 세팅할 수 있지만, 각 프로젝트 폴더에 .venv 라는 이름으로 생성하도록 하겠습니다. 가상환경에 설치되는 모듈은 pip 명령어를 이용해서 다시 설치가 가능하기 때문에 소스 관리 툴(git 등)에서 해당 폴더를 ignore list에 추가하도록 합니다.

 

다음은 가상환경을 시작하는 방법입니다. 시작은 가상환경을 설치한 프로젝트 루트에서 아래 처럼 명령어를 입력해 주면 됩니다.

> cd .venv\Scripts
> activate
(.venv) > cd ..\..

 

위의 명령어는 윈도우 기준으로 작성되었습니다. 첫번째 라인은 script 경로로 변경해 주는 것이고, 두번째 라인은 activate.bat 파일을 실행하여 가상환경을 시작하는 것이고, 마지막 라인은 다시 프로젝트 루트 폴더로 돌아오게 하는 것입니다. 세번째 라인은 명령 프롬프트 앞에 (.venv) 가 보이는데, 이것은 .venv 라는 가상환경이 실행 중임을 표시해 주는 것입니다.

참고로 맥이나 리눅스에서는 아래 명령어를 이용하면 됩니다. 

> source ./.venv/bin/activate

 

가상환경을 종료하기 위해서는 아래 명령어를 입력합니다.

(.venv) > deactivate

 

Django 설치하기 3 - Django 모듈 설치하기

지금까지는 Python 과 Python 가상환경 설치에 대해서 살펴 봤는데요, 이제는 Django를 구동하기 위한 Django 모듈을 설치합니다.

설치는 pip 명령어를 이용하게 됩니다.

 

가상환경이 실행된 상태인지 확인합니다. 명령 프롬프트 앞에 (.venv) 이 표시되고 있는지 확인하시고, 없다면 바로 앞에서 설명드린 명령어로 가상환경을 시작합니다.

 

그리고 아래 명령을 이용해서 Django 모듈을 설치합니다. 이 글을 작성하는 시점에서는 4.1.2 버전이 최신입니다.

(.venv) > pip install django==4.1.2

 

새로 생성된 가상환경에서 pip 를 처음 실행하거나 새로운 pip 버전이 출시 되었을 때 실행하면, pip 버전을 업그레이드하라는 경고 메시지가 나옵니다. 아래 명령어를 입력하면 pip 버전을 업그레이드 할 수 있습니다.

(.venv) > python -m pip install --upgrade pip

 

자 이제 Django 를 시작할 준비작업은 모두 마친 것 같습니다.

다음 포스트에서는 HelloWorld 프로젝트를 시작해 보겠습니다.

반응형
반응형

이번 시간에는 node.js 를 이용해서 min.io 스토리지에 접근해서 파일을 읽고, 쓰는 예제 코드를 작성해 보겠습니다.

 

이번 포스트는 작성시 아래 url 을 참고하였습니다.

https://northflank.com/guides/connecting-to-a-minio-database-using-node-js

 

Connecting to a MinIO database using Node.js — Northflank

MinIO is a highly-available, S3 compatible object storage solution. Through this guide you will learn how to connect a MinIO instance to your Node.js project.

northflank.com

 

먼저 node.js 를 설치해야 합니다. 설치가 필요하신 분들은 아래 사이트를 참고하셔서 설치하시기 바랍니다.

https://nodejs.org/

 

Node.js

Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.

nodejs.org

 

다음으로는 node.js 프로젝트를 생성합니다.

 

폴더하나 생성하고, 폴더로 가서 아래와 같이 입력합니다.

> npm init

 

몇 가지 물어보는 것에 성실히 답을 하면 프로젝트가 생성됩니다. 그리고나서 아래 명령어들을 차례로 입력해서, 필요한 모듈을 설치합니다.

> npm install
> npm install minio

 

minio 모듈은 minio 서버에 접속해서 필요한 기능을 수행할 수 있게 해주는 모듈입니다.

 

 

min.io 서버에 접속하기 위해서는 서버의 host, port 와 함께, access key, secret key 정보가 필요합니다.

 

min.io 에서 javascript Client API 및 예제를 제공하고 있으므로, 아래 링크 참조하세요.

https://docs.min.io/docs/javascript-client-api-reference.html

 

MinIO | JavaScript Client API Reference

JavaScript Client API Reference Initialize MinIO Client object. MinIO var Minio = require('minio') var minioClient = new Minio.Client({ endPoint: 'play.min.io', port: 9000, useSSL: true, accessKey: 'Q3AM3UQ867SPQQA43P2F', secretKey: 'zuf+tfteSlswRu7BJ86wek

docs.min.io

 

min.io 서버에 접속하기 위한 코드는 다음과 같습니다. 여기서 필요한 세팅 정보를 변경해 줘야 합니다.

var Minio = require('minio')

var minioClient = new Minio.Client({
    endPoint: 'play.min.io',
    port: 9000,
    useSSL: true,
    accessKey: 'Q3AM3UQ867SPQQA43P2F',
    secretKey: 'zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG'
});

 

먼저 endPoint 는 min.io 서버의 IP 주소를 입력하면 됩니다. 

port는 min.io 서비스의 port를 적어주면 됩니다. 서비스 default 값은 9000 입니다.

useSSL은 실제 서비스에서는 true 로 해줘야겠지만,  SSL 설정이 되어 있지 않은 테스트 환경에서는 false 로 지정합니다.

나머지 access key 와 secret key 는 min.io 콘솔에서 생성합니다.

 

콘솔에 로그인한 후에, 오른쪽 메뉴에서 Identity 를 선택하고, Service Accounts 를 선택합니다.

 

화면 오른쪽 상단에 있는 Create service account 버튼을 클릭합니다. 아래와 같이 Access Key와 Secret Key가 생성됩니다. 

 

Create 버튼을 눌러서 생성하면, 아래처럼 Access Key와 Secret Key가 공개되는데, Secret Key는 여기서만 보여주고, 다시 확인이 불가능하니, Download for import 버튼을 눌러서 백업해 두는 것이 좋습니다.

 

Access Key와 Secret Key 가 생성되고 나면, 연결 설정 정보들을 변경해줍니다.

 

그리고 아래와 같이 코드를 작성해서, "test-bucket" 을 생성하고, bucket 리스트를 받아와서 console에 출력해 봅니다.

const bucketName = "test-bucket";

(async () => {
  console.log(`Creating Bucket: ${bucketName}`);
  await minioClient.makeBucket(bucketName, "hello-there").catch((e) => {
    console.log(
      `Error while creating bucket '${bucketName}': ${e.message}`
     );
  });

  console.log(`Listing all buckets...`);
  const bucketsList = await minioClient.listBuckets();
  console.log(
    `Buckets List: ${bucketsList.map((bucket) => bucket.name).join(",\t")}`
  );
})();

 

다음 코드는 문자열을 텍스트 (파일) 오브젝트를 생성해서 스토리지에 저장하는 예제입니다.

(async () => {
  // create object with string data
  const objectName = "file.txt";
  const result = await minioClient
    .putObject(bucketName, objectName, "Hello There!")
    .catch((e) => {
      console.log("Error while creating object: ", e);
      throw e;
    });

  console.log("Object uploaded successfully: ", result);
})();

 

다음 코드는 파일을 읽어서 스토리지에 저장하는 예제입니다.

const fs = require('fs');

(async () => {
  // create object from file data
  const objectFileName = "file-object.txt";
  const fileData = fs.readFileSync("./file.txt");
  const submitFileDataResult = await minioClient
    .putObject(bucketName, objectFileName, fileData)
    .catch((e) => {
      console.log("Error while creating object from file data: ", e);
      throw e;
    });

  console.log("File data submitted successfully: ", submitFileDataResult);
})();

 

마지막으로 스토리지에 저장되어 있는 오브젝트를 읽어와서 로컬 폴더에 저장하는 예제입니다.

const fs = require('fs');

(async () => {
  // read object in chunks and store it as a file
  const fileStream = fs.createWriteStream("./read-in-chunks.txt");
  const fileObjectKey = "file-object.txt";

  const object = await minioClient.getObject(bucketName, fileObjectKey);
  object.on("data", (chunk) => fileStream.write(chunk));

  object.on("end", () => console.log(`Reading ${fileObjectKey} finished`));
})();

지금까지 node.js 코드를 이용해서, min.io 스토리지에 bucket 을 생성하고, bucket 리스트를 받아오고, (파일) 오브젝트를 생성하고, 읽어오는 예제들을 살펴보았습니다. 

여기에 나온 예제들은 예외처리가 제대로 되어 있지 않아서, 실제 사용시에는 조금 더 주의를 기울여서 살펴봐야 합니다.

반응형
반응형

먼저 min.io 는 무엇인가? 그리고 어디에 쓰면 좋은가? 에 대해서 살펴보도록 하겠습니다.

 

https://min.io/

 

MinIO | High Performance, Kubernetes Native Object Storage

MinIO's High Performance Object Storage is Open Source, Amazon S3 compatible, Kubernetes Native and is designed for cloud native workloads like AI.

min.io

 

홈페이지에 따르면, min.io는 (aws) S3와 호환되는 고성능의 오브젝트 스토리지 라고 소개하고 있습니다. 즉, 스토리지 서비스를 구축하는데 사용할 수 있는 오픈 소스 솔루션 입니다. S3와 사용법이 거의 유사하게 되어 있어서, S3를 써 보셨던 분들은 매우 쉽게 사용이 가능하며, 스토리지를 처음 써보시는 분들은 약간의 적응이 필요합니다.

 

서비스를 시작하는 방법은 여러가지가 있지만, 저는 docker를 사용해서 서비스를 시작해 보겠습니다. (docker 설치 필요)

 

min.io 서비스를 시작하기 위해서는 docker를 사용하면 되는데, min.io 에서는 podman 커맨드를 제시하고 있어서 혼선을 주고 있습니다. podman 을 별도로 설치하기 귀찮아서 docker-compose.yml 파일을 아래와 같이 작성해 보았습니다.

 

version: '3'
services:
  s3:
    image: minio/minio
    ports:
      - 9000:9000
      - 9001:9001
    environment:
      MINIO_ROOT_USER: admin
      MINIO_ROOT_PASSWORD: changeme
    volumes:
      - ./storage/minio:/data
    command: server /data --console-address ":9001"

 

서비스 명은 편의상 s3로 하였습니다. 그리고, docker에서 사용할 image 를 지정해 주었고 (minio/minio), 서비스에서 사용될 포트를 매핑해 주었습니다. (9000, 9001)

환경변수로 user, password 를 지정해 주었으며, volume을 지정하여 재시작을 해도 기존에 저장했던 스토리지 정보가 남을 수 있게 해 주었습니다.

시작 커맨드는 버전에 따라 약간씩 상이하다고 하니, 추후에는 변경이 될 수도 있습니다.

 

커맨드 윈도우에서 아래 명령어를 이용해서 서비스를 시작합니다.

> docker-compose -f docker-compose.yml up -d

 

도커 컨테이너가 제대로 실행되어 돌아가면, 브라우저를 열어서 http://localhost:9000 으로 접속을 시도합니다.

요청은 http://localhost:9001로 redirect 되며, 아래와 같은 admin 페이지 로그인 창이 뜹니다.

위의 docker-compose.yml 파일에 설정했던, username, password 를 이용해서 로그인을 합니다.

 

로그인을 하면, 아래와 같은 화면이 나옵니다.

 

위의 화면에서 우측 상단의 Create Bucket 버튼을 클릭해서 Bucket을 생성해 봅니다.

Bucket Name 에 'test'를 입력하고, Create Bucket 버튼을 클릭하여 bucket을 생성합니다. 제대로 생성되면 아래와 같은 화면이 나오게 됩니다.

 

생성된 bucket 에 파일을 드래그해서 업로드 해 봅니다. 아래와 같은 화면이 나오면서 파일이 올라간 것이 화면에 표시됩니다. 업로드 버튼을 클릭해서 폴더도 생성할 수 있고, 파일을 업로드 할 수도 있습니다.

 

업로드 된 파일을 클릭해보면, 화면 우측에 파일을 다운로드, 공유, 삭제하거나 정보를 확인 할 수 있는 창이 나타납니다.

 

Share 아이템을 클릭하면 아래와 같이 특정 기간 동안 유효한 URL을 생성하여 파일을 공유할 수 있습니다.

 

이번 시간에는 docker를 이용해서 min.io 서비스를 설치하고, bucket을 생성하고, 간단하게 파일 업로드 및 공유 기능에 대해서 살펴 보았습니다. 다음 시간에는 node.js를 이용해서 프로그래밍으로 bucket 을 관리하고, 파일 업로드 및 다운로드를 하는 예시를 살펴 보겠습니다.

반응형

+ Recent posts