apiVersion: v1
kind: Service
metadata:
name: my-app-service
spec:
selector:
app: my-web # 이 라벨이 붙은 포드들을 찾아 연결
ports:
- protocol: TCP
port: 80 # 서비스의 포트
targetPort: 8080 # 포드 내부의 포트
type: LoadBalancer # 외부에서 접속 가능하게 설정
🐳 Docker 초보자용 학습 요약 노트 (티스토리용)
---
1. 도커 커리큘럼 🐳
우리는 총 4단계를 거쳐 도커의 기본기를 마스터합니다.
1. 기초 개념
- 이미지(설계도)와 컨테이너(실행체)의 차이, 격리 원리 이해.
2. 이미지 빌드
- Dockerfile을 작성하여 나만의 실행 환경을 만듦.
3. 멀티 컨테이너 관리
- Docker Compose를 이용해 여러 서비스를 한 번에 관리.
4. 데이터와 네트워크
- 볼륨(Volume)을 통해 데이터를 보존하고, 컨테이너 간 통신 구조 이해.
---
2. 핵심 개념 (Key Concepts) 💡
이미지(Image)
프로그램 실행에 필요한 모든 것을 담은 읽기 전용 스냅샷입니다.
- 예: `python:3.9-slim`, `nginx:alpine` 등은 이미지 이름입니다.
- 같은 이미지에서 여러 컨테이너를 만들 수 있습니다.
컨테이너(Container)
이미지를 실행한 상태로, 독립된 박스 안에서 프로세스가 돌아갑니다.
- 한 번에 여러 컨테이너를 띄워서 서로 다른 앱을 돌릴 수 있습니다.
- 컨테이너가 종료되면 그 안의 **변경사항은 기본적으로 사라집니다.**
불변성(Immutability)
- 이미지는 변하지 않습니다.
- 설정을 바꾸고 싶으면 `Dockerfile`로 새 이미지를 빌드합니다.
- 컨테이너는 이미지의 “실행 인스턴스”일 뿐, 이미지를 수정하는 것이 아닙니다.
볼륨(Volume)
컨테이너가 사라져도 데이터를 남기기 위한 외장 금고 역할을 합니다.
```yaml
volumes:
- dbdata:/var/lib/postgresql/data
dbdata처럼 이름이 붙은 볼륨을 사용하면, 컨테이너를 삭제해도 데이터는 유지됩니다.
개발용으로는 ./local:/app 같은 Bind Mount를 사용해 코드를 실시간 동기화합니다.
네트워크(Network)
컨테이너들이 서로 서비스 이름으로 통신할 수 있게 해주는 통로입니다.
services:
app:
depends_on:
- db
db:
image: postgres:14
app에서 db로 접속할 때 localhost가 아니라 db라는 이름으로 접속합니다.
Docker Compose는 자동으로 하나의 네트워크를 만들어서 서비스 이름 기반 라우팅을 지원합니다.
3. 주요 명령어 (Essential Commands) ⌨️
3.1 이미지 빌드 / 컨테이너 실행
분류명령어설명
빌드
docker build -t [이름] .
현재 폴더의 Dockerfile로 이미지 빌드
실행 (일반)
docker run [이름]
해당 이미지로 컨테이너 실행
실행 (대화형)
docker run -it [이름]
터미널에서 컨테이너 안으로 들어가 대화
예시:
bash
docker build -t my-python-app .
docker run -it my-python-app sh
3.2 컨테이너 상태 확인 / 관리
명령어설명
docker ps -a
모든 컨테이너(실행 중 포함) 상태 확인
docker images
저장된 이미지 목록 확인
docker logs [ID/이름]
컨테이너 내부 로그 확인
예시:
docker ps -a
docker logs my-app-container
3.3 Docker Compose 명령어
명령어설명
docker-compose up
docker-compose.yml에 정의된 서비스를 모두 실행
docker-compose down
모든 서비스 중지 및 컨테이너 청소
예시:
docker-compose up
docker-compose down
4. 예제 파일 (Example Files) 📄
4.1 Dockerfile - 파이썬 앱 예제
# 1. 기초 재료 (OS + 파이썬)
FROM python:3.9-slim
# 2. 컨테이너 안 작업 디렉터리 설정
WORKDIR /app
# 3. 의존성 설치
COPY requirements.txt .
RUN pip install -r requirements.txt
# 4. 코드 복사
COPY main.py .
# 5. 포트 노출 (메타 정보)
EXPOSE 5000
# 6. 실행 명령어
CMD ["python", "main.py"]
main.py예시:
from flask import Flask
app = Flask(__name__)
@app.route("/")
def home():
return "Hello from Docker!"
if __name__ == "__main__":
app.run(host="0.0.0.0", port=5000)
빌드 & 실행:
docker build -t my-flask-app .
docker run -p 8000:5000 my-flask-app
개발 분야에서 PM(Project Manager, 프로젝트 매니저)과 PL(Project Leader, 프로젝트 리더)은 프로젝트의 성공적인 완수를 위해 필수적이지만, 역할과 책임에 차이가 있습니다.
👩💻 PM (Project Manager)
PM은 프로젝트의 총책임자입니다. 프로젝트의 성공을 위해 모든 관리 업무를 지휘하고 총괄합니다.
주요 역할: 프로젝트의 시작부터 끝까지 전반적인 관리를 담당합니다.
일정 및 자원 관리: 프로젝트 일정 계획 수립, 자원(인력, 예산 등) 할당 및 관리.
이해관계자 커뮤니케이션: 고객사, 경영진 등 외부 이해관계자와 소통하며 의견 조율.
위험 관리: 프로젝트 진행 중 발생할 수 있는 잠재적 문제점을 예측하고 대응 방안 마련.
문서 작업: 프로젝트 계획서, 보고서 등 각종 문서 작성 및 관리.
관여도: 주로 관리에 집중하며, 실질적인 개발 실무에는 직접적으로 관여하지 않는 편입니다.
👨💻 PL (Project Leader)
PL은 소프트웨어 프로젝트의 기술 분야를 책임지는 리더이며, PM을 도와 팀을 리드하는 중간 관리자 역할입니다.
주요 역할: 기술적 성공과 구현 단계의 실무적인 부분을 책임집니다.
기술 설계 및 구현: 프로젝트의 기본 설계와 구현 단계의 기술적 무결성 확보.
팀 리드 및 실무 지원: 개발자 팀을 이끌고, 단위 업무별 일정 관리 및 이슈 해결을 지원.
PM 보조: PM이 수립한 계획을 바탕으로 개발 팀 내부에서 실질적인 실행을 주도.
요구사항 분석 지원: 경우에 따라 요구사항 정의나 기획의 문제점을 PM과 함께 고민.
관여도:관리와 실무를 겸하며, 직접적인 개발 작업(코딩)을 병행하는 경우도 많습니다. PM보다는 프로젝트 지식이나 연차가 낮은 사람이 맡기도 하며, 경험을 쌓은 후 PM으로 성장하는 경우가 일반적입니다.
📊 주요 차이점 요약
구분
PM (Project Manager)
PL (Project Leader)
역할 요약
프로젝트의 총괄 관리자
소프트웨어 기술 분야의 중간 관리자 / 리더
주요 책임
프로젝트의 전체 성공 (일정, 예산, 범위 등)
기술 설계 및 구현 단계의 무결성 및 실무
주요 업무
일정/예산/위험 관리, 이해관계자 조율
기술 설계, 개발팀 리드, 실무 이슈 해결
실무 관여
관리 집중, 실질적 개발 관여 적음
관리 + 실무 병행 (설계, 구현)
소통 대상
고객사, 경영진 등 외부 및 내부
PM과 개발자 팀 사이
프로젝트의 규모나 조직 문화에 따라 이 역할들의 구분이나 범위가 유연하게 적용될 수 있습니다. 소규모 프로젝트에서는 한 사람이 PM과 PL의 역할을 모두 수행할 수도 있습니다. 이 영상은 개발 프로젝트 구성원들의 역할에 대해 설명하고 있어, PM과 PL의 차이점을 이해하는 데 도움이 될 수 있습니다.