위클리 페이퍼는 현재 훈련받고 있는 코드잇 스프린트 데이터 애널리스트 트랙에서 매주마다 훈련생 스스로 프로그래밍 언어, 데이터분석, 통계, 머신러닝 등 특정 주제에 대하여 심화 학습을 할 수 있도록 제출하는 과제입니다.
(매주 2~3가지 주제를 스스로 알아보고 학습하여 관련된 내용을 정리하여 후에 취업 활동 간에 경험할 수 있는 기술 면접을 대비함)
4주차에 이어서 이번 5주차 위클리 페이퍼의 내용을 소개하려고 합니다.
이번 5주차 위클리 페이퍼 주제는
1. 절대 경로와 상대 경로는 무엇인가요?
2. Git에서 branch는 무엇이고, 왜 사용하나요?
이번 5주차 위클리 페이퍼의 첫 주제, 절대 경로와 상대 경로는 CLI 환경의 터미널의 커맨드에서 활용할 수 있는 개념입니다.
CLI 환경이나 커맨드가 무엇인지 잘 모르는 분도 계실텐데요. 간단하게 개념들을 설명하면,
CLI는 Command Line Interface의 줄임말로, 커맨드를 통해 컴퓨터를 사용하는 방식이나 환경을 뜻합니다.
그리고 커맨드는 검은 화면에 키보드로 입력하는 명령어를 말합니다.
더 나아가, 실제로 커맨드를 입력하는 검은 창을 터미널이라고 합니다. 터미널은 인풋을 받고 아웃풋을 출력해주는 프로그램이라고도 할 수있습니다.
그래서 터미널에서 커맨드를 입력하는 행동들이 CLI환경 위에서 이루어지고 있다고 말할 수 있으며, 커맨드 라인을 사용할 수 있는 경우에는 몇 가지가 있는데 그 중 3 가지를 소개하겠습니다.
- 라이브러리를 다운로드 받고 설치할 때
- 협업시 코드를 관리할 때
- 웹 개발 시 환경을 설정하고 서버를 실행할 때
위 3가지를 비롯한 다양한 경우에 보통 커맨드 라인을 사용하고, 커맨드는 유닉스 커맨드에서 가장 빈번하고 일반적으로 사용되고 있습니다.
유닉스 커맨드는 유닉스 및 유닉스 계열 운영체제(리눅스, 맥, 우분투)에서 커맨드 라인 인터페이스를 통해 시스템을 관리하고 작업을 수행하는 도구라고 이해하시면 됩니다.
커맨드 환경에서 저희가 실제 사용할 수 있는 커맨드의 종류에는 1000개가 넘는데, 실제로 모든 커맨드를 사용할 일은 거의 없고, 커맨드를 작성하게 된다면 핵심적인 커맨드를 반복해서 사용하게 될 것입니다.
이러한 커맨드를 작성할 때, 오늘 설명할 경로들이 사용됩니다!
1. 절대 경로와 상대 경로는 무엇인가요?
이번에 설명할 절대 경로와 상대 경로는 위에서 설명한 커맨드 라인 환경에서 작성하는 커맨드에서 사용되는 경로입니다.
그런데 아직도 커맨드를 어떻게 입력하고 경로를 사용한다는 거야? 라는 의문이 들수도 있습니다.
이해를 돕기 위해 다시 설명하면, 커맨드는 커맨드 라인 환경에서 작성되며, 커맨드 라인 환경을 사용하기 위해서는 터미널같은 프로그램이 필요합니다.
이런 프로그램은 맥 운영체제를 사용하는 사람을 간단히 터미널을 사용하면 되지만, 윈도우 운영체제는 맥의 터미널과 같은 커맨드 라인 환경을 만들어 주기 위해 WSL(Windows Subsystem for Linux)과 같은 하위 시스템을 이용해야 합니다.
이제 맥과 윈도우 모두 터미널과 같은 환경이 구성됐다면, 이제 커맨드를 작성할 수 있습니다.
그러면 커맨드를 어떻게 입력해야 하는지도 알아봐야 할 것 같습니다. 밑의 내용을 보면 됩니다.
커맨드의 입력 형태
모든 커맨드의 입력 형태는 커맨드, 옵션, 아규먼트 순서로 작성합니다.
- 커맨드 : 커맨드에는 많은 종류가 있는데 커맨드마다 기능이 다르고, 간단한 커맨드의 예시로는 pwd, cd, ls 등이 있습니다.
다양한 커맨드를 설명하는 글은 이 글 을 참고하시면 됩니다. - 옵션 : 커맨드를 어떻게 실행할 것인지에 대해 정하고 커맨드 실행되는 방식을 바꿀 수 있습니다. 옵션은 - 과 특정 알파벳을 조합하여 작성합니다.
- 아규먼트(argument) 또는 인자 : 커맨드를 실행하는 대상을 말합니다.
그리고 경로를 알아보기 전에 디렉토리와 파일에 대해 이해하면 경로에 대한 이해가 쉬워지기 때문에 이를 알아보겠습니다.
디렉토리의 구조
디렉토리는 폴더와 비슷한 개념이라고 생각하면 되며, 컴퓨터에 있는 디렉토리의 구조는 뒤집어진 나무의 모습과 같은 구조를 가지고 있습니다.
디렉토리의 종류
- 상위 디렉토리(부모 디렉토리) : 디렉토리 안에 디렉토리가 있을 때 바깥에 있는 디렉토리를 말합니다.
- 하위 디렉토리(자식 디렉토리) : 디렉토리 안에 디렉토리가 있을 때 안에 있는 디렉토리를 말합니다.
- 루트 디렉토리 : 루트 디렉토리는 /로 표시하고 뿌리가 되는 디렉토리로 최상위 디렉토리를 말합니다.
- 홈 디렉토리 : 사용자 계정마다 할당된 개인적인 디렉토리를 말합니다. 홈 디렉토리는 ~ 로 표시합니다
(각종 문서, 바탕화면, 다운로드 파일들이 홈 디렉토리에 저장되어 있습니다.)
리눅스 운영체제는 홈 디렉토리가 home으로 맥 운영체제는 홈 디렉토리가 Users로 되어있습니다.
파일 경로를 통해 이동하기 위해 디렉토리나 폴더의 위치를 문자열로 표기할 줄 알아야합니다.
/를 활용하여 경로를 만들어 디렉토리를 이동하고 폴더를 들어갈 수 있습니다.
디렉토리와 파일을 다룰 때 사용하는 커맨드
디렉토리를 이해했다면 이제 디렉토리와 파일을 다룰 때 사용하는 커맨드까지 설명하면 좋을 것 같습니다.
디렉토리와 파일을 다룰 때 사용하는 커맨드에는 총 3가지가 있습니다.
- pwd (print working directory) : 현재 위치하고 있는 디렉토리의 경로를 출력합니다.
- cd (change directory) : 다른 디렉토리로 이동할 때 사용
- 아무 아규먼트 없이 cd를 하거나 cd ~를 할 경우 사용자의 홈 디렉토리로 이동합니다.
- - 을 사용하면 이전 경로로 돌아갑니다.
- / 를 사용하면 루트 디렉토리로 이동합니다.
- ls (list) : PATH에 해당하는 디렉토리 / 파일 정보를 보여줍니다.
- 아규먼트를 안 주면 현재 디렉토리 정보를 보여줍니다.
디렉토리와 파일을 다룰 때 사용하는 커맨드 3가지를 간단하게 정리했는데 이제 설명한 내용들을 기반으로 절대 경로와 상대 경로를 설명하려고 합니다.
절대 경로와 상대 경로의 개념
절대 경로(Absolute Path)
절대 경로는 루트(root) 디렉토리부터 시작하여 어떤 파일이나 디렉토리까지의 전체 경로를 나타냅니다.
즉, 시스템의 최상위 디렉토리부터 해당 파일이나 디렉터리까지의 모든 디렉터리를 포함한 경로입니다.
절대 경로는 항상 동일한 위치를 가리키므로 경로를 찾을 때 다른 경로의 영향을 받지 않습니다.
절대 경로가 유용한 경우
- 여러 번 상위 디렉토리로 이동해야 하는 경우
- 멀리 떨어져 있는 디렉토리로 이동해야 하는 경우
절대 경로의 예시
- Windows : C:\Users\username\documents\report.txt
- Unix/Linux : /Users/username/documents/report.txt
상대 경로 (Relative Path)
상대 경로는 현재 자신이 위치하고 있는 디렉토리(작업 디렉터리)를 기준으로 파일이나 디렉터리까지의 경로를 나타냅니다.
즉, 상대 경로는 현재 위치를 기준으로 파일이나 디렉터리를 찾는 방식입니다.
상대 경로는 현재 작업 디렉터리에 따라 달라질 수 있습니다. (절대경로보다 더 많이 사용된다.)
상대 경로에서 사용되는 특수한 기호
- 현재 디렉토리를 . 으로 표시합니다.
- 상위 디렉토리를 .. 으로 표시합니다.
- 홈 디렉토리는 ~ 로 표시 (홈 디렉토리를 펼쳐서 쓰면 /home/username (Ubuntu) 또는 /Users/username (macOS)입니다)
상대 경로의 예시
- 현재 디렉토리의 상위 디렉토리에 있는 file.txt로 이동 → ../report.txt
- 현재 디렉토리에서 documents 디렉토리 내의 file.txt로 이동 → documents/report.txt
경로를 아규먼트로 받는 모든 커맨드에는 절대 경로, 상대 경로 모두 사용 가능합니다.
절대 경로와 상대 경로는 시스템에서 파일과 디렉터리를 참조하는 두 가지 방법으로, 각기 다른 상황에서 유용하게 사용될 수 있습니다.
절대 경로는 파일의 위치를 명확하게 지정할 수 있으며, 상대 경로는 현재 작업 디렉터리를 기준으로 경로를 간결하게 작성할 수 있습니다. 이 두 가지 개념을 이해하고 잘 활용한다면 파일 시스템 내에서 파일과 디렉터리를 효율적으로 관리하고 접근할 수 있습니다.
두번째 주제인 Git에서 branch가 무엇인지, 왜 사용하는지에 대해 설명하기 위해서는 Git과 Github에 대해 알고 넘어가야 할 것 같습니다.
일단 Git부터 설명하겠습니다.
Git
Git은 버전관리와 동시협업을 가능하게 해주는 프로그램입니다. (코드 버전 관리 프로그램)
- 버전 관리 : 파일의 변화를 시간에 따라 기록했다가 나중에 특정 시점에 다시 꺼내올 수 있는 시스템입니다.
- 버전 관리의 장점
- 과제의 진짜 최종 버전을 만들 때까지 지난 과정을 확인할 수 있습니다.
- 어딘가 잘못된 부분이 생기면 이전 버전으로 돌아갈 수 있습니다.
Git을 이용하면 여러 개발자가 동시에 작성한 코드를 한번에 합칠 수 있습니다.
Git을 사용하는 이유
- 버전 관리 : Git은 파일의 변경 내역을 추적 가능. 이전 버전으로 쉽게 돌아갈 수 있고, 변경 사항을 비교할 수 있습니다.
- 협업 용이 : 여러 개발자가 동시에 같은 프로젝트에서 작업 가능. 각 개발자는 자신의 브랜치에서 독립적으로 작업할 수 있으며, 나중에 변경 사항을 병합할 수 있습니다.
그리고 Gihub도 설명하겠습니다.
Github
깃허브는 원격 저장소를 대신 제공해주는 서비스입니다.
Git으로 자신의 작업물을 다른 컴퓨터에도 전송할 수 있습니다.
장점
- 작업물의 백업본을 만듭니다.
내 컴퓨터에서 작업한 내용이 사라졌을 때, 외부 컴퓨터에서 작업물을 가져와서 사용 가능합니다.
외부 컴퓨터를 직접 준비하려면 너무 번거로워서 이것을 무료로 사용할 수 있게 해주는 서비스가 있는데, 그것이 Github입니다. - 다른 사람과 협업이 용이합니다.
외부 컴퓨터에 올려놓은 작업물을 다른 사람이 받고, 다른 사람이 외부 컴퓨터에 올려 놓은 것을 내가 받을 수 있습니다.
개발자가 여러 명이 있을 때, 각자 작업한 내용을 Github에서 합칠 수 있습니다.
Git과 Github의 차이
Git은 버전관리를 하는 프로그램이고,
Github는 Git으로 관리하는 프로젝트를 올려둘 수 있는 사이트라고 이해하시면 됩니다.
위에서 설명한 Git과 Github을 통해 이제 브랜치라는 기능을 설명할 수 있고, 브랜치가 무엇인지, 그리고 왜 사용하는지 설명하겠습니다.
2. Git에서 branch는 무엇이고, 왜 사용하나요?
branch가 무엇일까? (branch의 개념)
Git에서 브랜치(branch)는 하나의 코드 관리 흐름으로 독립적인 작업을 위한 분리된 작업 공간을 제공하는 기능입니다.
또한, Git의 브랜치는 커밋 사이를 가볍게 이동할 수 있는 어떤 포인터 같은 것입니다.
이는 주된 프로젝트 작업 흐름(main branch)과 분리된 상태에서 개발, 수정, 실험 등을 할 수 있도록 합니다.
새로운 기능을 개발하거나 버그를 수정할 때 기존 작업 흐름에 영향을 주지 않기 위해 브랜치를 사용합니다.
제일 처음에 하는 커밋을 루트 커밋(root commit)이라고 하며, 커밋의 전체적인 모습은 루트 커밋을 시작으로 가지가 갈라지는 나무 모양을 하고 있습니다.
기본 브랜치에는 main과 master가 있는데 이는 저장소를 생성하면 기본적으로 생성되는 브랜치이며, 일반적으로 주된 작업 흐름을 관리합니다.
처음 커밋하면 이 master/main 브랜치가 생성된 커밋을 가리킵니다. 이후 커밋을 만들면 master/main 브랜치는 자동으로 가장 마지막 커밋을 가리킵니다.
최근 개발 커뮤니티에서는 master 대신에 main이라는 이름을 기본 브랜치로 사용하는 추세인데, 그 이유는 기본 브랜치를 훨씬 명확하게 설명하기도 하고, main은 영어 말고 다른 나라 말로 번역했을 때도 훨씬 매끄럽기 때문입니다.
Git에서 branch를 사용하는 이유
- 독립된 개발 환경
- 브랜치를 사용하면 여러 가지 기능 개발이나 버그 수정을 동시에 진행할 수 있습니다.
- 각 브랜치는 독립적인 작업 공간을 제공하므로, 하나의 브랜치에서 작업하는 변경 사항이 다른 브랜치에 영향을 미치지 않습니다.
- 안전함 유지
- 새로운 아이디어를 기존 코드에 영향을 주지 않고 시도할 수 있습니다.
- 실험이 실패하거나 예상대로 작동하지 않더라도, 브랜치를 삭제하면 쉽게 이전 상태로 되돌릴 수 있습니다.
- 협업 용이성
- 여러 사람이 동시에 프로젝트를 작업할 수 있도록 합니다.
- 각 개발자는 자신의 작업을 별도의 브랜치에서 진행하고, 작업이 완료되면 메인 브랜치에 변경 사항을 병합하여 하나로 합칩니다.
- 코드 관리
- 기능 개발이나 버그 수정이 완료되면 해당 브랜치를 메인 브랜치에 병합하여 코드베이스에 포함시킬 수 있습니다.
- 작업이 끝난 브랜치는 삭제하여 저장소를 깔끔하게 유지할 수 있습니다.
- 테스트 및 배포
- 각 브랜치에서 작업이 완료되면, 테스트를 거친 후 메인 브랜치에 병합하여 배포할 수 있습니다.
- 이를 통해 안정성을 유지하면서 효율적인 개발 및 배포를 진행할 수 있습니다.
branch를 다루는 기본적인 커맨드
git branch | 브랜치 목록을 확인합니다. |
git branch 새 브랜치 이름 | 새로운 브랜치를 생성합니다. |
git checkout -b 새 브랜치 이름 | 새로운 브랜치를 생성하고 그 브랜치로 바로 이동합니다. |
git branch -d 브랜치 이름 | 브랜치를 삭제합니다. |
git checkout 브랜치 이름 | 그 브랜치로 이동합니다. |
git merge 브랜치 이름 | 현재 브랜치에 다른 브랜치를 병합합니다. |
git merge --abort | 병합을 하다가 충돌이 발생했을 때, 일단은 병합 작업을 취소하고 이전 상태로 돌아갑니다. |
branch의 흐름
- 기본(main/master) 브랜치에서 시작: 개발자들은 보통 기본 브랜치에서 새 브랜치를 생성합니다.
- 새 브랜치에서 작업: 기능 추가나 버그 수정을 독립적으로 수행합니다.
- 변경 사항 커밋: 작업 내용을 브랜치에 커밋합니다.
- 병합(Merge): 작업이 완료되면 기본 브랜치로 병합합니다.
- 브랜치 삭제: 불필요한 브랜치는 삭제하여 저장소를 깔끔하게 유지합니다.
이와 같은 일련의 과정을 통해 브랜치를 사용하면 코드의 안정성을 유지하면서도 유연하고 효율적으로 개발 작업을 진행할 수 있습니다.
이를 통해 프로젝트의 복잡성을 관리하고, 여러 개발자가 동시에 협업할 수 있는 환경을 제공합니다.
'스프린트 > 위클리페이퍼' 카테고리의 다른 글
[#7] 스프린트 DA 트랙 9주차 위클리 페이퍼(장바구니 분석, 연관 규칙 평가 지표) (0) | 2024.08.14 |
---|---|
[#6] 스프린트 DA 트랙 8주차 위클리 페이퍼(차원 축소, 고유값과 고유벡터, 히스토그램의 단점과 그 대안) (0) | 2024.08.08 |
[#4] 스프린트 DA 트랙 4주차 위클리 페이퍼(클래스와 인스턴스, 정적 메소드) (0) | 2024.07.11 |
[#3] 스프린트 DA 트랙 3주차 위클리 페이퍼(데이터 전처리, t-test) (0) | 2024.07.03 |
[#2] 스프린트 DA 트랙 2주차 위클리 페이퍼(제 1종 오류와 제 2종 오류, p값) (0) | 2024.06.27 |
데이터 분석을 공부하고 카페를 열심히 돌아다니는 이야기
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!