DAY 02: 디지털 아키텍트

LinuxBeginner
지금 연습하기

소개

LabEx Corporation 에서의 둘째 날을 환영합니다! 어제의 성공적인 시스템 정찰 이후, 귀하는 피닉스 프로젝트 (Project Phoenix) 의 디지털 아키텍트 (Digital Architect) 로 승진했습니다. 개발 팀은 귀하의 철저한 문서화 능력과 세심함에 깊은 인상을 받았습니다.

하지만 즉시 해결해야 할 긴급한 문제가 발생했습니다. 전임 시스템 관리자가 갑작스럽게 떠나면서 피닉스 프로젝트의 파일들이 완전히 엉망이 되었습니다. 소스 코드, 문서, 설정 파일들이 단일 디렉토리에 무분별하게 흩어져 있습니다. 중요한 설정값들은 백업 없이 방치되어 위험에 노출되어 있고, 어제 조사했던 개발 서버에는 오래된 로그 파일들이 가득 쌓여 있습니다.

귀하의 임무는 성장하는 개발 팀을 지원할 수 있도록 깨끗하고 논리적이며 효율적인 파일 구조를 설계하는 것입니다. 적절한 디렉토리를 생성하고, 파일을 정리하며, 백업을 확보하고, 오래된 데이터를 정리함으로써 피닉스 프로젝트가 성공할 수 있는 토대를 마련하게 될 것입니다.

수석 개발자인 사라 첸 (Sarah Chen) 은 귀하가 이 혼란을 정리하여 전문적인 개발 환경으로 탈바꿈시켜 주기를 기대하고 있습니다. 오늘의 작업은 팀의 생산성과 프로젝트 일정에 직접적인 영향을 미칠 것입니다. 자, 시작해 봅시다!

프로젝트 디렉토리 구조 설정

첫 번째 작업은 phoenix_project 디렉토리 내부에 적절한 디렉토리 구조를 만드는 것입니다. 잘 정의된 구조는 파일 유형별로 공간을 분리하여 프로젝트 탐색과 유지보수를 훨씬 수월하게 만듭니다.

작업 내용

  1. ~/project/phoenix_project 디렉토리로 이동합니다.
  2. 세 개의 하위 디렉토리를 생성합니다: 소스 코드를 위한 src, 설정 파일을 위한 config, 문서를 위한 docs.

요구 사항

  • 모든 새 디렉토리는 ~/project/phoenix_project 내부에 생성되어야 합니다.
  • 디렉토리 이름은 반드시 src, config, docs여야 합니다.
  • 단 한 번의 명령어로 세 개의 디렉토리를 동시에 생성해야 합니다.

예시

이 단계를 완료한 후의 디렉토리 구조는 다음과 같아야 합니다:

~/project/phoenix_project/
├── config/
├── docs/
├── src/
├── README.md
├── config.json
└── main_app.py

~/project/phoenix_project 디렉토리에서 ls -F를 실행했을 때 다음과 같이 표시되어야 합니다:

README.md  config/  config.json  docs/  main_app.py  src/

디렉토리 이름 뒤의 / 기호는 해당 항목이 파일이 아닌 디렉토리임을 나타냅니다.

힌트

  • 현재 디렉토리를 변경하려면 cd 명령어를 사용하세요.
  • 새 디렉토리를 만들 때는 mkdir 명령어를 사용합니다.
  • mkdir은 여러 개의 인자를 받아 한 번에 여러 디렉토리를 만들 수 있습니다.

프로젝트 파일 이동 및 정리

새로운 디렉토리 구조가 준비되었으므로, 이제 기존 프로젝트 파일들을 지정된 위치로 옮길 차례입니다. 이를 통해 프로젝트 루트 디렉토리를 정리하고 파일을 더 쉽게 찾을 수 있게 만듭니다.

작업 내용

  1. main_app.py 파일을 src 디렉토리로 이동합니다.
  2. config.json 파일을 config 디렉토리로 이동합니다.
  3. README.md 파일을 docs 디렉토리로 이동합니다.

요구 사항

  • 이동 작업을 수행하기 전에 현재 위치가 ~/project/phoenix_project인지 확인하세요.
  • 각 파일을 이동할 때 mv 명령어를 사용하세요.

예시

파일 이동 후, 프로젝트 구조는 다음과 같이 정리되어야 합니다:

~/project/phoenix_project/
├── config/
│ └── config.json
├── docs/
│ └── README.md
└── src/
└── main_app.py

루트 디렉토리인 ~/project/phoenix_project에서 ls -F를 실행하면 디렉토리들만 보여야 합니다:

config/  docs/  src/

각 파일은 이제 적절한 하위 디렉토리에 위치해야 합니다:

  • ls src/main_app.py
  • ls config/config.json
  • ls docs/README.md

힌트

  • mv 명령어는 파일이나 디렉토리를 이동하거나 이름을 변경할 때 사용합니다.
  • 기본 문법은 mv [원본] [대상]입니다.
  • 예를 들어, file.txtdocuments라는 디렉토리로 옮기려면 mv file.txt documents/를 사용합니다.

중요 설정 파일 백업

config.json 파일에는 피닉스 프로젝트의 핵심 설정이 들어 있습니다. 파일을 수정하기 전에 백업본을 만드는 것은 매우 중요한 안전 조치입니다. 다음 작업은 이 파일의 복사본을 만드는 것입니다.

작업 내용

  1. config.json 파일의 백업 복사본을 생성합니다.

요구 사항

  • 백업 파일은 ~/project/phoenix_project/config/ 디렉토리 내에 생성되어야 합니다.
  • 백업 파일의 이름은 반드시 config.json.bak이어야 합니다.

예시

백업을 생성한 후, config 디렉토리에는 두 개의 파일이 있어야 합니다:

~/project/phoenix_project/config/
├── config.json
└── config.json.bak

~/project/phoenix_project/config/ 디렉토리에서 ls를 실행하면 다음과 같이 보여야 합니다:

config.json  config.json.bak

.bak 파일은 원본의 정확한 복사본이므로 두 파일의 내용은 동일해야 합니다:

## 이 명령어들은 동일한 출력을 보여야 합니다
cat config.json
cat config.json.bak

힌트

  • cp 명령어는 파일과 디렉토리를 복사할 때 사용합니다.
  • 문법은 cp [원본] [대상]입니다.
  • 원본 파일의 경로와 새 백업 파일의 경로를 정확히 지정해야 합니다.

팀 공유 리소스 재구성

정리 도중 또 다른 조각을 발견했습니다. ~/project/shared_docs에 위치한 디렉토리입니다. 이 디렉토리에는 프로젝트의 다른 문서들과 함께 보관되어야 할 중요한 팀 가이드라인과 API 명세서가 들어 있습니다. 귀하의 작업은 이를 메인 프로젝트 구조로 통합하는 것입니다.

작업 내용

  1. shared_docs 디렉토리 전체와 그 안의 모든 내용을 ~/project/phoenix_project/docs/ 디렉토리로 이동합니다.

요구 사항

  • 원본 디렉토리는 ~/project/shared_docs입니다.
  • 대상 경로는 ~/project/phoenix_project/docs/입니다.
  • 내용물뿐만 아니라 디렉토리 전체를 이동해야 합니다.

예시

shared_docs 디렉토리를 이동한 후, 문서 구조는 다음과 같아야 합니다:

~/project/phoenix_project/docs/
├── README.md
└── shared_docs/
├── api_spec.doc
└── team_guidelines.txt

~/project/phoenix_project/docs/ 디렉토리에서 ls를 실행하면 다음과 같이 보여야 합니다:

README.md  shared_docs/

shared_docs 디렉토리 안에는 원래의 파일들이 그대로 들어 있어야 합니다:

ls ~/project/phoenix_project/docs/shared_docs/
api_spec.doc  team_guidelines.txt

원래 위치였던 ~/project/shared_docs는 더 이상 존재하지 않아야 합니다.

힌트

  • mv 명령어는 파일과 마찬가지로 디렉토리에도 동일하게 작동합니다.
  • 디렉토리를 이동하면 그 안의 모든 내용물도 자동으로 함께 이동됩니다.
  • 명령어 형태는 mv [원본_디렉토리] [대상_디렉토리]와 같습니다.

오래된 로그 파일 아카이브 및 삭제

마지막 작업은 주변 정리입니다. ~/project/logs 디렉토리에 로그 파일이 쌓이고 있는데, 2023 년의 로그들은 더 이상 일상적인 운영에 필요하지 않습니다. 공간을 절약하고 깔끔하게 유지하기 위해, 이 오래된 로그들을 하나의 아카이브 파일로 압축한 뒤 원본 파일들을 삭제해야 합니다.

tar 명령어 이해하기

tar 명령어는 아카이브 파일을 생성하고 조작하는 강력한 리눅스 도구입니다. "Tar"는 원래 자기 테이프에 데이터를 기록하기 위해 설계되었기 때문에 "Tape Archive"의 약자였으나, 오늘날에는 주로 디스크에서 압축된 아카이브 파일을 만드는 데 사용됩니다.

tar를 사용하면 여러 파일을 하나의 파일 (아카이브라고 함) 로 묶을 수 있으며, 선택적으로 압축하여 용량을 줄일 수 있습니다. 가장 일반적인 압축 형식은 gzip 이며, 파일 이름 뒤에 .gz 확장자가 붙습니다.

tar 명령어는 동작을 제어하기 위해 다양한 옵션 (플래그) 을 사용합니다:

  • c: 새로운 아카이브 생성 (Create)
  • z: gzip 을 사용하여 아카이브 압축
  • f: 아카이브의 파일 이름 지정 (File)

따라서 tar -czf archive.tar.gz file1 file2file1file2를 포함하는 archive.tar.gz라는 이름의 새로운 압축 아카이브를 생성합니다.

작업 내용

  1. ~/project/logs 디렉토리로 이동합니다.
  2. 2023 년도의 모든 로그 파일을 포함하는 old_logs.tar.gz라는 이름의 압축 아카이브를 생성합니다.
  3. 아카이브가 성공적으로 생성되면, 방금 아카이브한 원본 2023 년 로그 파일들을 삭제합니다.

요구 사항

  • 최종 아카이브 파일 이름은 반드시 old_logs.tar.gz여야 합니다.
  • 아카이브 파일은 ~/project/logs 디렉토리에 위치해야 합니다.
  • 이름에 2023이 포함된 로그 파일만 아카이브하고 삭제해야 합니다.
  • 2024 년 로그 파일 (app_2024-05-01.log) 은 아카이브에 포함되어서는 안 되며 삭제해서도 안 됩니다.

예시

아카이브 전, 로그 디렉토리의 내용:

~/project/logs/
├── app_2023-01-15.log
├── app_2024-05-01.log
└── db_2023-02-20.log

아카이브 작업을 완료한 후, 로그 디렉토리의 상태:

~/project/logs/
├── app_2024-05-01.log
└── old_logs.tar.gz

~/project/logs/ 디렉토리에서 ls를 실행하면 다음과 같이 보여야 합니다:

app_2024-05-01.log  old_logs.tar.gz

힌트

  • 아카이브를 생성하려면 tar 명령어를 사용하세요. -czf 옵션은 생성 (c), gzip 압축 (z), 파일명 지정 (f) 을 동시에 수행하는 강력한 조합입니다.
  • 와일드카드 (*) 를 사용하여 패턴과 일치하는 여러 파일을 선택할 수 있습니다. 예를 들어, *_2023-*.log는 이름에 _2023-이 들어가고 .log로 끝나는 모든 파일과 일치합니다.
  • rm 명령어는 파일을 제거 (삭제) 할 때 사용합니다. 와일드카드와 함께 사용할 때는 주의하세요!

요약

훌륭합니다, 디지털 아키텍트님! 귀하는 혼란스러웠던 피닉스 프로젝트를 체계적인 개발 환경으로 성공적으로 탈바꿈시켰습니다. 사라 첸과 전체 개발 팀은 귀하의 작업 결과에 매우 만족하고 있습니다. 논리적인 디렉토리 구조를 설계하고, 중요 파일을 정리했으며, 백업을 통해 설정을 보호하고, 오래된 로그를 아카이브하여 시스템 리소스를 확보했습니다.

오늘 익힌 mkdir, mv, cp, tar, rm과 같은 기본적인 리눅스 커맨드 라인 기술은 전문적인 시스템 관리의 근간을 이룹니다. 귀하가 오늘 수행한 조직화 작업은 피닉스 프로젝트의 전체 개발 수명 주기를 지탱할 견고한 토대가 될 것입니다.

이제 개발 팀은 잘 구조화된 환경에서 효율적으로 업무를 수행할 수 있게 되었습니다. 내일은 팀이 처음으로 기술적 문제에 직면했을 때 이를 해결하는 '로그 조사관'으로서 새로운 도전에 나서게 될 것입니다. 귀하의 체계적인 접근 방식은 문제 해결 과정에서도 큰 빛을 발할 것입니다!

✨ 솔루션 확인 및 연습✨ 솔루션 확인 및 연습✨ 솔루션 확인 및 연습✨ 솔루션 확인 및 연습✨ 솔루션 확인 및 연습