Docker 강좌 마지막 단계에 오신 걸 환영합니다!
이번 단계에서는 지금까지 배운 지식과 기술을 종합해볼 거예요.
강의 중에 여러분에게 익숙하지 않은 프로그래밍 언어나 기술이 나올 수도 있어요. 여러분은 포트를 설정하거나 메서드 이름을 추가해야 할 수도 있는데, 이 모든 작업은 이미 99% 완료된 코드 기반에서 진행됩니다.
만약 어떤 것이 낯설게 느껴진다면 걱정하지 마세요. 이는 "이건 처음인데, 빠르게 이해할 수 있어야 해"라는 능력을 향상시키기 위한 의도적인 설계입니다.
1.1 문제 정의
자, 작은 멀티컨테이너 애플리케이션을 만들어보고, 개발 프로세스를 단계별로 분석해 보자: 문제 정의부터 완성된 제품 시연까지.
목표: 작업 관리를 위한 멀티컨테이너 애플리케이션을 만들어서, 사용자들이 작업을 만들고, 수정하고, 삭제하고 다른 사용자에게 할당할 수 있도록 하는 거야. 이 애플리케이션은 세 가지 주요 구성 요소로 구성될 거야: ReactJS 프론트엔드, Python (Flask) 백엔드, 그리고 PostgreSQL 데이터베이스.
핵심 과제들:
- 애플리케이션 각 구성 요소에 대한 기능 요구 사항 정의.
- 사용할 기술 및 도구 선택.
- 개발 환경 준비.
1.2 기능 요구사항 정의
작업 관리 애플리케이션의 기능 요구사항:
- 사용자 등록 및 인증:
- 사용자는 시스템에 등록할 수 있어.
- 사용자는 시스템에 인증을 할 수 있어.
- 작업 관리:
- 사용자는 작업을 생성할 수 있어.
- 사용자는 작업을 수정할 수 있어.
- 사용자는 작업을 삭제할 수 있어.
- 사용자는 작업 목록을 볼 수 있어.
- 사용자는 다른 사용자에게 작업을 할당할 수 있어.
- 작업 보기 및 필터링:
- 사용자는 작업을 상태(완료/미완료)별로 필터링할 수 있어.
- 사용자는 다른 사용자에게 할당된 작업을 볼 수 있어.
1.3 사용 기술 및 도구 정의
이 애플리케이션을 구현하기 위해 다음 기술과 도구를 사용할 거야:
- Frontend:
- ReactJS: 사용자 인터페이스를 만드는 라이브러리.
- Axios: HTTP 요청을 실행하는 라이브러리.
- Backend:
- Python: 서버 측을 개발하기 위한 프로그래밍 언어.
- Flask: REST API를 만드는 웹 프레임워크.
- SQLAlchemy: 데이터베이스와 상호작용하기 위한 ORM.
- Database:
- PostgreSQL: 사용자 및 작업에 대한 정보를 저장하는 관계형 데이터베이스.
- 컨테이너화 및 오케스트레이션:
- Docker: 애플리케이션 컨테이너화를 위한 플랫폼.
- Docker Compose: 다중 컨테이너 애플리케이션을 관리하기 위한 도구.
1.4 개발 환경 준비
프로젝트를 성공적으로 수행하려면 개발 환경을 설정하고 필요한 도구가 모두 설치되었는지 확인해야 해.
환경 준비 단계:
- Docker 설치:
- 아직 설치하지 않았다면, 1레벨 강의 4로 돌아가거나 Docker 공식 웹사이트의 지침을 따르세요.
- Docker Compose 설치:
- Docker Compose가 아직 설치되지 않았다면, 4레벨 강의 2를 참고하거나 Docker Compose 공식 웹사이트의 지침을 따르세요.
- 프로젝트 구조 생성:
- 프로젝트를 위한 디렉토리와 각 서비스를 위한 기본 하위 디렉토리를 생성하세요:
mkdir task_management_app
cd task_management_app
mkdir frontend backend database
- 프로젝트 초기화:
- frontend 디렉토리 안에서 새로운 ReactJS 프로젝트를 초기화 하세요:
cd frontend
npx create-react-app .
cd ..
• backend 디렉토리 안에서 Python/Flask 애플리케이션을 위한 구조를 생성하세요:
cd backend
mkdir app
touch app/__init__.py
touch app/models.py
touch app/routes.py
touch run.py
touch requirements.txt
cd ..
• database 디렉토리 안에서 PostgreSQL을 위한 Dockerfile을 생성하세요 (필요한 경우):
cd database
touch Dockerfile
cd ..
1.5 파일 내용 예제:
파일 backend/app/__init__.py
:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql://taskuser:taskpassword@database:5432/taskdb'
db = SQLAlchemy(app)
from app import routes
파일 backend/app/models.py
:
from app import db
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True, nullable=False)
tasks = db.relationship('Task', backref='owner', lazy=True)
class Task(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(120), nullable=False)
description = db.Column(db.Text, nullable=True)
owner_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
파일 backend/app/routes.py
:
from app import app
@app.route('/')
def index():
return "안녕, Task Management App!"
파일 backend/run.py
:
from app import app
if __name__ == '__main__':
app.run(host='0.0.0.0')
파일 backend/requirements.txt
:
Flask
Flask-SQLAlchemy
psycopg2-binary
GO TO FULL VERSION