[TOOL-012][실무] 새 컴퓨터에서도 같은 개발환경 다시 만들기
페이지 정보

본문
[이번 수업]
개발환경을 통째로 복사하지 않고, 새 컴퓨터에서 같은 상태를 다시 만드는 방법을 배웁니다. 작은 Python 프로젝트에 실행 버전, 의존성, 준비·실행·검증 명령을 기록해 깨끗한 환경에서 확인합니다.
[선수지식]
TOOL-003의 패키지와 의존성, TOOL-004의 Git, TOOL-009의 환경변수, TOOL-010의 비밀정보 관리, TOOL-011의 README를 알면 좋습니다.
[학습목표]
1. 재현 가능한 개발환경에 필요한 정보를 설명한다.
2. 가상환경을 새로 만들고 정해진 명령으로 프로그램을 실행한다.
3. 자동 테스트로 환경이 제대로 복원됐는지 확인한다.
[핵심개념]
재현 가능한 환경은 ‘내 컴퓨터 폴더 사본’이 아니라 다시 만들 수 있는 조리법입니다. 저장소에는 소스 코드, 필요한 실행 언어 버전, 의존성 목록, 설정 예시, 준비·실행·테스트 명령을 둡니다. 운영체제, CPU 구조, 외부 서비스처럼 저장소 밖 조건도 README에 적습니다.
가상환경은 프로젝트별 Python과 패키지를 분리한 폴더입니다. 다른 컴퓨터로 .venv를 복사하지 말고 그곳에서 새로 만드세요. 외부 패키지가 있다면 requirements.txt에 버전을 고정하고, 더 엄격한 검증이 필요하면 pip의 해시 확인 방식이나 사용하는 도구의 잠금 파일을 검토합니다. 단, 버전 고정은 보안 업데이트를 멈추라는 뜻이 아니므로 정기적으로 갱신하고 테스트해야 합니다.
[따라하기]
repeatable-demo 폴더를 만들고 다음 두 파일을 저장하세요. requirements.txt에는 외부 패키지가 없다는 주석만 씁니다.
requirements.txt
```text
# 외부 패키지 없음
```
app.py
```python
def greeting(name: str) -> str:
clean = name.strip()
if not clean:
raise ValueError("이름이 비어 있습니다")
return f"안녕하세요, {clean}!"
if __name__ == "__main__":
print(greeting("개발자"))
```
test_app.py
```python
import unittest
from app import greeting
class GreetingTest(unittest.TestCase):
def test_name(self):
self.assertEqual(greeting(" 개발자 "), "안녕하세요, 개발자!")
def test_empty_name(self):
with self.assertRaises(ValueError):
greeting(" ")
if __name__ == "__main__":
unittest.main()
```
macOS·Linux에서는 아래처럼 실행합니다.
```sh
python3 -m venv .venv
. .venv/bin/activate
python -m pip install -r requirements.txt
python app.py
python -m unittest -v
```
Windows PowerShell에서는 활성화 명령만 `.venv\Scripts\Activate.ps1`로 바꿉니다. 실행 정책 때문에 막히면 활성화하지 않고 `.venv\Scripts\python.exe app.py`처럼 가상환경의 Python을 직접 호출할 수 있습니다. 예상 결과는 `안녕하세요, 개발자!`와 테스트 2개가 OK라는 표시입니다. 마지막으로 `.venv/`를 Git 제외 목록에 넣고, 새 폴더에 저장소를 다시 받은 상황을 가정해 같은 명령을 반복하세요.
[흔한 실수]
.venv나 설치된 패키지 폴더를 커밋하지 마세요. ‘최신 버전’처럼 모호하게 쓰거나 준비 순서를 README에서 빼면 결과가 달라집니다. 내 컴퓨터에서 실행됐다는 사실만으로 재현됐다고 판단하지 말고 깨끗한 환경에서 테스트합니다.
[보안 주의]
.env, 토큰, 개인 경로와 실제 사용자 데이터는 저장소에 넣지 않습니다. 설정은 값이 비어 있는 예시 파일만 제공하세요. 의존성 설치 전 출처와 변경 내용을 확인하고, 낯선 설치 스크립트는 본인 소유의 격리 환경에서 검토합니다.
[직접 해볼 과제]
README에 필요한 Python 버전, 준비·실행·테스트 명령을 순서대로 적으세요. 그 뒤 .venv를 지우고 문서만 보고 다시 만들어 테스트 2개가 통과하는지 확인합니다.
[확인문제]
1. 가상환경 폴더를 다른 컴퓨터로 복사하지 않는 이유는 무엇인가요?
2. 의존성 버전과 실행 명령을 함께 기록해야 하는 이유는 무엇인가요?
3. 환경 복원이 성공했는지 자동 테스트로 확인하면 어떤 점이 좋은가요?
[다음 학습]
PY-012에서 같은 원칙을 적용해 HTTP API를 사용하는 명령줄 도구를 만듭니다.
[공식 참고 자료]
https://docs.python.org/3/library/venv.html
https://pip.pypa.io/en/stable/topics/repeatable-installs/
https://pip.pypa.io/en/stable/reference/requirements-file-format/
https://git-scm.com/docs/git-clone
개발환경을 통째로 복사하지 않고, 새 컴퓨터에서 같은 상태를 다시 만드는 방법을 배웁니다. 작은 Python 프로젝트에 실행 버전, 의존성, 준비·실행·검증 명령을 기록해 깨끗한 환경에서 확인합니다.
[선수지식]
TOOL-003의 패키지와 의존성, TOOL-004의 Git, TOOL-009의 환경변수, TOOL-010의 비밀정보 관리, TOOL-011의 README를 알면 좋습니다.
[학습목표]
1. 재현 가능한 개발환경에 필요한 정보를 설명한다.
2. 가상환경을 새로 만들고 정해진 명령으로 프로그램을 실행한다.
3. 자동 테스트로 환경이 제대로 복원됐는지 확인한다.
[핵심개념]
재현 가능한 환경은 ‘내 컴퓨터 폴더 사본’이 아니라 다시 만들 수 있는 조리법입니다. 저장소에는 소스 코드, 필요한 실행 언어 버전, 의존성 목록, 설정 예시, 준비·실행·테스트 명령을 둡니다. 운영체제, CPU 구조, 외부 서비스처럼 저장소 밖 조건도 README에 적습니다.
가상환경은 프로젝트별 Python과 패키지를 분리한 폴더입니다. 다른 컴퓨터로 .venv를 복사하지 말고 그곳에서 새로 만드세요. 외부 패키지가 있다면 requirements.txt에 버전을 고정하고, 더 엄격한 검증이 필요하면 pip의 해시 확인 방식이나 사용하는 도구의 잠금 파일을 검토합니다. 단, 버전 고정은 보안 업데이트를 멈추라는 뜻이 아니므로 정기적으로 갱신하고 테스트해야 합니다.
[따라하기]
repeatable-demo 폴더를 만들고 다음 두 파일을 저장하세요. requirements.txt에는 외부 패키지가 없다는 주석만 씁니다.
requirements.txt
```text
# 외부 패키지 없음
```
app.py
```python
def greeting(name: str) -> str:
clean = name.strip()
if not clean:
raise ValueError("이름이 비어 있습니다")
return f"안녕하세요, {clean}!"
if __name__ == "__main__":
print(greeting("개발자"))
```
test_app.py
```python
import unittest
from app import greeting
class GreetingTest(unittest.TestCase):
def test_name(self):
self.assertEqual(greeting(" 개발자 "), "안녕하세요, 개발자!")
def test_empty_name(self):
with self.assertRaises(ValueError):
greeting(" ")
if __name__ == "__main__":
unittest.main()
```
macOS·Linux에서는 아래처럼 실행합니다.
```sh
python3 -m venv .venv
. .venv/bin/activate
python -m pip install -r requirements.txt
python app.py
python -m unittest -v
```
Windows PowerShell에서는 활성화 명령만 `.venv\Scripts\Activate.ps1`로 바꿉니다. 실행 정책 때문에 막히면 활성화하지 않고 `.venv\Scripts\python.exe app.py`처럼 가상환경의 Python을 직접 호출할 수 있습니다. 예상 결과는 `안녕하세요, 개발자!`와 테스트 2개가 OK라는 표시입니다. 마지막으로 `.venv/`를 Git 제외 목록에 넣고, 새 폴더에 저장소를 다시 받은 상황을 가정해 같은 명령을 반복하세요.
[흔한 실수]
.venv나 설치된 패키지 폴더를 커밋하지 마세요. ‘최신 버전’처럼 모호하게 쓰거나 준비 순서를 README에서 빼면 결과가 달라집니다. 내 컴퓨터에서 실행됐다는 사실만으로 재현됐다고 판단하지 말고 깨끗한 환경에서 테스트합니다.
[보안 주의]
.env, 토큰, 개인 경로와 실제 사용자 데이터는 저장소에 넣지 않습니다. 설정은 값이 비어 있는 예시 파일만 제공하세요. 의존성 설치 전 출처와 변경 내용을 확인하고, 낯선 설치 스크립트는 본인 소유의 격리 환경에서 검토합니다.
[직접 해볼 과제]
README에 필요한 Python 버전, 준비·실행·테스트 명령을 순서대로 적으세요. 그 뒤 .venv를 지우고 문서만 보고 다시 만들어 테스트 2개가 통과하는지 확인합니다.
[확인문제]
1. 가상환경 폴더를 다른 컴퓨터로 복사하지 않는 이유는 무엇인가요?
2. 의존성 버전과 실행 명령을 함께 기록해야 하는 이유는 무엇인가요?
3. 환경 복원이 성공했는지 자동 테스트로 확인하면 어떤 점이 좋은가요?
[다음 학습]
PY-012에서 같은 원칙을 적용해 HTTP API를 사용하는 명령줄 도구를 만듭니다.
[공식 참고 자료]
https://docs.python.org/3/library/venv.html
https://pip.pypa.io/en/stable/topics/repeatable-installs/
https://pip.pypa.io/en/stable/reference/requirements-file-format/
https://git-scm.com/docs/git-clone
- 이전글[PY-012][실무] 로컬 HTTP API를 읽는 명령줄 도구 만들기 26.09.06
- 다음글[CS-012][실무] 작은 학습 계획 도구 설계하고 검증하기 26.09.06
댓글목록
등록된 댓글이 없습니다.
