
MINI PROJECT #1 - 하차역 알려주는 서비스 (1)
이어지는 과제...
AWS는 Amazon에서 제공하는 클라우드 서비스 플랫폼이에요. 이 플랫폼을 통해 다양한 IT 인프라 서비스(컴퓨팅 파워, 스토리지, 데이터베이스, 네트워킹 등)를 인터넷을 통해 제공합니다. AWS를 사용하면 물리적인 서버나 데이터 센터를 유지할 필요 없이 필요한 리소스를 쉽게 확장하고 관리할 수 있습니다.
AWS 계정 소유자 = 관리자가 다른 사용자들에게 권한과 역할을 지정해주는 방식으로 운영된다. AWS는 종량제(사용한만큼 돈을내는 제도)로 운영된다.
AWS S3는 AWS에서 제공하는 객체 스토리지 서비스로, 데이터를 안전하게 저장하고 언제든지 접근할 수 있도록 설계되었습니다. 주요 특징은 다음과 같습니다:
온프레미스 스토리지(On-premise Storage)는 기업이나 사용자가 직접 관리하는 데이터 저장소를 말해요. 즉, 데이터와 관련된 하드웨어 및 소프트웨어가 사용자의 물리적인 시설 내에 설치되고 운영되는 것을 의미합니다.
AWS같은 클라우드 서비스와는 반대되는 운영 방식을 뜻합니다.
AWS S3 버킷(S3 Bucket)은 데이터를 저장할 수 있는 논리적 컨테이너입니다. S3 버킷은 여러 파일(객체)을 저장하고, 이를 관리하는 기본 단위라고 생각하면 됩니다.
예를 들어, my-bucket이라는 S3 버킷을 생성하고, 그 안에 photos/ 폴더를 만들고, 해당 폴더에 이미지 파일을 저장할 수 있습니다. 그리고 필요할 때마다 해당 버킷에서 파일을 다운로드하거나 업로드할 수 있습니다.
AWS CLI(Command Line Interface)를 이용하면 명령줄에서 AWS 서비스와 상호작용할 수 있습니다.
AWS CLI를 위한 환경설정 및 설치를 진행 한 후 사용할 수 있으며, aws configure 명령어를 사용합니다.
AWS 소유자가 만들어 주는 액세스 키 ID와 시크릿 키(SECRET)는 AWS 리소스에 접근하기 위한 인증 정보입니다.
s3에서 파일 다운로드 받는 행위는 돈이 듭니다. 따라서 s3에서 다운로드 받는 건 한번만 할 수 있도록 하고, 별도의 On-premise 스토리지에 원본 데이터로써 저장해두고 필요할 때마다 복사해서 사용해두도록 구현해보세요
즉 서버컴퓨터가
1) S3에 가서 1회 데이터를 다운로드하고
2) 원본 데이터는 그대로두고 필요할때마다 복수해서 사용하도록 만들어야한다.
윈도우는 쉽다. 홈페이지에서 다운로드받으면 된다
https://aws.amazon.com/ko/cli/?form=MG0AV3
.msi 파일이 다운로드 되면 이를 실행한다.
명령어 프롬프트나 powershell으 열고 아래의 명령어 입력
aws configure
configure의 뜻은 "설정하다" 또는 "구성하다"입니다. aws configure 명령어는 AWS CLI를 사용하기 위한 초기 설정을 구성하는 역할을 합니다. 이 명령어를 통해 AWS CLI가 AWS 서비스에 접근할 수 있도록 필요한 정보를 입력하게 됩니다.
아래의 문답을 주고 받게 되는데
첫 key id와 screte key는 위의 설명된 바와 같이 aws 소유자가 지정한 것으로 사용하면 된다.
AWS Access Key ID [None]: YOUR_ACCESS_KEY
AWS Secret Access Key [None]: YOUR_SECRET_KEY
Default region name [None]: YOUR_DEFAULT_REGION
Default output format [None]: json
Default region name
region이란 AWS 데이터 센터가 물리적으로 위치한 지리적 영역을 말합니다.(버지니아, 서울, 싱가포르 등)
aws configure 명령어에서 Default region name을 입력하는 것은, AWS CLI가 기본적으로 사용할 리전을 설정하는 것입니다. 이렇게 설정된 리전은 AWS CLI 명령어를 실행할 때 기본값으로 사용됩니다. 예를 들어, S3 버킷을 생성하거나 EC2 인스턴스를 시작할 때 명시적으로 리전을 지정하지 않으면, 기본 리전으로 설정된 리전에서 작업이 수행됩니다.
주요 AWS 리전 예시
Default output format
AWS CLI 명령어의 출력 형식을 지정하는 옵션으로 json, test, table 등을 입력할 수 있다.
4가지 문답을 하고나서 프롬프트가 원래대로 돌아오면 aws cli를 사용할 준비가 끝난것이다!
참고로 aws cli는 서버나 컨테이너처럼 "접속"했다가 안쓸때는 "나가"야하는 존재가 아니다. 그냥 새로운 기능/어플리케이션이 내 컴퓨터에 깔렸다~ 정도임.
aws s3 ls
aws s3 ls s3://your-bucket-name
aws s3 ls s3://your-bucket-name/your-folder-name/
aws s3 cp localfile.txt s3://your-bucket-name/localfile.txt
aws s3 cp s3://your-bucket-name/your-file.txt local-file.txt
aws s3 cp s3://source-bucket/sourcefile.txt s3://destination-bucket/destinationfile.txt
aws s3 rm s3://your-bucket-name/file-to-delete.txt
aws s3 mv s3://source-bucket/sourcefile.txt s3://destination-bucket/destinationfile.txt
aws s3 sync /local-directory s3://your-bucket-name
도커 컴포즈(Docker Compose)는 여러 개의 컨테이너를 정의하고 운영할 수 있게 도와주는 도구입니다. 도커 컴포즈 파일을 이용하면 애플리케이션의 여러 서비스를 하나의 파일로 정의하고 관리할 수 있습니다.
도커 컴포즈는 docker-compose.yml 파일을 사용해 정의됩니다. 이 파일 안에 여러 컨테이너와 그 관계를 정의내릴 수 있습니다.
(1) 도커 컴포즈를 사용하기 위해선 도커 데스크탑을 설치해야한후 켜놔야 합니다.
(2)docker-compose.yml 파일 준비
(3) yml 파일이 위치한 곳에서 파일 실행
#포그라운드 실행
docker-compose up
#백그라운드 실행
docker-compose up -d
(4) 도커 컴포즈 종료
docker-compose down
(예시)
version: '3'
services:
web:
image: nginx
ports:
- "80:80"
volumes:
- ./html:/usr/share/nginx/html
networks:
- webnet
db:
image: mysql
environment:
MYSQL_ROOT_PASSWORD: example
volumes:
- db_data:/var/lib/mysql
networks:
- webnet
app:
image: python 3.12
volumes:
- .:/app
working_dir: /app
command: python 명령어명령어
depends-on:
- db
volumes:
db_data:
networks:
webnet:
version: '3'
도커 컴포즈 파일의 버전입니다.
services:
이 하위 개념들이 개별 컨테이너가 됩니다. 여기서는 web과 db라는 컨테이너가 만들어졌네요
image:, ports:, volumes:, networks:
각 컨테이너를 생성할때 사용할 이미지, 연결할 포트, 볼륨..을 설정해줍니다.
environment:
가동하는 프로그램들의 비밀번호 등과 같은 환경변수입니다. 이 환경변수의 보안을 특히 주의해야합니다.
command:
컨테이너가 실행되며 돌아갈 명령어를 적어줍니다.
working_dir:
컨테이너 내에서 명령어가 실행될 기본 디렉토리를 지정합니다. 즉, 컨테이너가 시작될 때 그 디렉토리로 이동하여 명령어를 실행하게 됩니다.
depends-on:Docker Compose 파일에서 서비스 간의 의존성을 정의하는 데 사용됩니다. 즉, 특정 서비스가 시작되기 전에 반드시 다른 서비스가 먼저 시작되어야 한다는 것을 지정할 수 있습니다.

build:
context: .
dockerfile: (파일명)
docker-compose에도 command 기능이 있지만, 문제는!!!! command에 프리셋을 넣으면 해당 명령을 수행하고 컨테이너는 꺼져버린다는 것이다!! 그러므로 프리셋에 해당되는것들은 모두 dockerfile로 정의하도록만들었다.
s3downloader는 AWS CLI를 설치하고, AWS ID와 키를 환경변수로 두어 접속하도록 하고, 원하는 파일을 S3에서 다운로드 되도록 CMD 명령어를 넣었다. 참고로 환경변수만 넣어주면 따로 command에 aws configure(첫 구성하는 명령어)를 해주지 않아도 된다.
ai-app:
build:
context: .
args:
- GITHUB_TOKEN=${GITHUB_TOKEN}
volumes:
- .:/app #도커와 ai-app의 볼륨 마운트
- data:/data:ro #s3downloader과 연결된 도커 볼륨에 ro 조건으로 마운트를 한다.
working_dir: /app
(중략)
지금까지 한일:docker compose로
이제 남은 일은