Github Pages와 Jekyll의 관계

GitHub Pages는 정적 웹사이트 호스팅 서비스를 제공하는 플랫폼으로, GitHub 리포지토리에 있는 정적 파일들을 호스팅하여 웹사이트를 제공합니다. 이때 정적 파일은 HTML, CSS, JavaScript, 이미지 등과 같이 서버에서 추가적인 처리 없이 클라이언트 브라우저에서 직접 열람 가능한 파일들을 말합니다.

Jekyll은 정적 사이트 생성기로서, 마크다운 파일과 템플릿을 사용하여 웹사이트의 구조와 콘텐츠를 정의하고, 이를 빌드하여 정적 HTML 파일로 변환해줍니다. Jekyll은 개발자들이 웹사이트의 디자인, 레이아웃, 콘텐츠 등을 관리하고 갱신할 때 도움을 주는 역할을 합니다. GitHub Pages에서 Jekyll을 사용하면 빌드된 정적 HTML 파일들을 호스팅하여 웹사이트를 구동하게 됩니다.

즉, 지킬은 빌드 시 정적 파일을 생성해주고, 깃허브 페이지는 생성된 정적 파일을 실제로 웹 사이트로 들어가서 볼 수 있도록 호스팅해주는 역할을 합니다.

SSG(정적 사이트 생성기)를 사용해야 하는 이유

정적 사이트를 사용하지 않고도 웹 사이트를 구축할 수 있지만, SSG는 개발 및 유지보수의 편의성과 웹사이트의 성능 측면에서 여러 이점을 제공합니다.

정적 사이트 생성기를 사용하지 않을 경우

  • 각각의 HTML 파일을 수동으로 작성해야 합니다.
  • 콘텐츠와 디자인을 별도로 관리해야 하므로 유지보수가 어려울 수 있습니다.
  • 동적인 요소를 구현하기 위해서는 서버 사이드 스크립팅 언어 (예: PHP, Node.js) 또는 클라이언트 사이드 JavaScript를 사용해야 합니다.
  • 서버에서 콘텐츠를 렌더링하므로 서버 자원을 사용하게 됩니다.

정적 사이트 생성기를 사용할 경우

  • 마크다운과 같은 간편한 마크업 언어를 사용하여 콘텐츠를 작성할 수 있습니다.
  • 템플릿을 사용하여 일관된 디자인을 유지하고 쉽게 변경할 수 있습니다.
  • 정적 사이트 생성기는 미리 빌드하여 정적 HTML 파일로 만들기 때문에 서버에 부담이 적습니다.
  • 웹사이트를 배포할 때 웹 서버 구성이나 백엔드 코드 없이도 쉽게 배포할 수 있습니다.

시스템 전역과 개인 디렉토리 간의 차이는 주로 설치된 소프트웨어와 라이브러리가 어디에 위치하고 어떤 사용자가 접근할 수 있는지에 있습니다.

시스템 전역설치 vs 개인 디렉토리 설치

시스템 전역 (System Global) 설치:
시스템 전역 설치는 시스템 전체에서 사용 가능한 프로그램과 라이브러리를 설치하는 것을 말합니다. 즉, 모든 사용자가 접근할 수 있도록 시스템 레벨에 설치됩니다. 이는 시스템 전체의 소프트웨어를 관리하기 용이하고 모든 사용자가 일관된 환경을 사용할 수 있도록 도와줍니다.

개인 디렉토리 (User Directory) 설치:
개인 디렉토리 설치는 특정 사용자의 홈 디렉토리 내에 프로그램과 라이브러리를 설치하는 것을 말합니다. 각 사용자가 독립적으로 소프트웨어를 설치하고 관리할 수 있으며, 시스템 전체의 설정에 영향을 주지 않습니다.

시스템 전역 설치와 개인 디렉토리 설치의 차이:

  • 권한: 시스템 전역 설치는 관리자 권한이 필요하며, 모든 사용자가 접근할 수 있습니다. 개인 디렉토리 설치는 해당 사용자만 접근 가능하고, 관리자 권한이 필요하지 않습니다.
  • 환경 격리: 시스템 전역 설치는 모든 사용자가 같은 환경을 공유하므로 충돌이나 의존성 문제가 발생할 수 있습니다. 개인 디렉토리 설치는 각 사용자의 환경이 격리되어 충돌 가능성이 줄어듭니다.
  • 보안: 시스템 전역 설치는 모든 사용자가 접근할 수 있기 때문에 보안에 취약할 수 있습니다. 개인 디렉토리 설치는 해당 사용자만 접근 가능하므로 상대적으로 보안성이 높습니다.

시스템 전역 설치를 권장하지 않는 이유:
1. 권한 문제: 시스템 전역 설치는 관리자 권한이 필요하며, 시스템 전체에 영향을 미칠 수 있어 실수로 중요한 시스템 파일을 수정할 수 있습니다.
2. 환경 격리와 충돌: 시스템 전역 설치는 다양한 소프트웨어 간의 충돌이나 의존성 문제가 발생할 수 있습니다.
3. 관리의 어려움: 다양한 소프트웨어의 버전 관리와 업그레이드가 복잡하며, 업데이트할 때 시스템 전체에 영향을 줄 수 있습니다.
4. 보안 취약점: 시스템 전역 설치된 소프트웨어의 보안 취약점은 시스템 전체에 영향을 미칠 수 있습니다.

개인 디렉토리 설치는 각 사용자의 필요에 맞게 소프트웨어를 관리하고, 시스템 전체에 영향을 덜 주며 보안성이 높기 때문에 일반적으로 권장됩니다.

분기된 브랜치

You have divergent branches and need to specify how to reconcile them.

브랜치들이 분기된 상태란, 로컬 브랜치와 원격 브랜치가 서로 다른 커밋을 가리키고 있는 상태를 의미합니다. 이렇게 되면 Git은 어떤 작업을 수행해야 할지 결정할 수 없으며, 어떤 방법으로 브랜치들을 조정할지 지정해야 합니다.

메시지에서 제안하는 대로, 이 문제를 해결하기 위해 git pull 명령을 실행하기 전에 어떤 방식으로 브랜치를 조정할지 설정할 수 있습니다. 아래와 같은 방법으로 설정할 수 있습니다:

  1. Merge:

    git config pull.rebase false

    git pull을 실행하면 로컬 브랜치가 원격 브랜치를 병합하는 방식입니다. 새로운 병합 커밋이 생성되어 두 브랜치의 변경 내용을 합칩니다. 커밋 히스토리에 브랜치 병합 과정이 명확하게 기록됩니다.

  2. Rebase:

    git config pull.rebase true

    git pull을 실행하면 로컬 브랜치의 변경 내용을 원격 브랜치 위로 옮깁니다. 로컬 브랜치의 커밋들을 재배치하며, 원격 브랜치의 최신 커밋 위에 쌓습니다. 커밋 히스토리가 선형적이고 깔끔해지는 경향이 있습니다. 원격 브랜치의 커밋과 로컬 브랜치의 변경 내용이 하나의 통합된 히스토리로 보입니다.

  3. Fast-forward only:

    git config pull.ff only

    원격 브랜치가 로컬 브랜치보다 앞선 경우에만 허용됩니다. 로컬 브랜치가 원격 브랜치를 바로 앞으로 따라잡을 때만 사용됩니다. 로컬 브랜치의 변경 내용이 원격 브랜치를 업데이트하는 형태로 반영됩니다. 커밋 히스토리가 단순해집니다.

또한 이러한 설정을 전역적으로 모든 저장소에 적용하려면 --global 옵션을 사용하여 설정할 수 있습니다. 예를 들어:

git config --global pull.rebase true

커널(Kernel)

커널은 운영 체제의 핵심 부분으로, 하드웨어와 소프트웨어 간의 인터페이스 역할을 수행하는 중요한 컴퓨터 프로그램입니다. 주요 기능은 다음과 같습니다:

하드웨어 관리: 커널은 하드웨어 자원(프로세서, 메모리, 디스크, 네트워크 등)을 효율적으로 관리하고 할당합니다. 이를 통해 여러 응용 프로그램이 동시에 실행되는 멀티태스킹을 지원합니다.

시스템 콜: 커널은 응용 프로그램이 하드웨어를 조작할 수 있도록 인터페이스인 시스템 콜(System Call)을 제공합니다. 시스템 콜은 커널의 기능을 호출하는 방법을 제공하며, 응용 프로그램은 시스템 콜을 사용하여 하드웨어와 상호 작용합니다.

메모리 관리: 커널은 프로세스가 메모리를 효율적으로 할당하고 관리할 수 있도록 도와줍니다. 이를 통해 여러 프로세스가 안정적으로 메모리를 사용하고 충돌을 피할 수 있습니다.

파일 시스템 관리: 커널은 파일과 디렉토리를 관리하며, 응용 프로그램이 파일을 읽고 쓸 수 있도록 지원합니다.

쉘(Shell)

쉘은 사용자와 운영 체제 간의 인터페이스로서 명령어를 입력받아 실행하고 결과를 표시하는 환경을 제공합니다. 쉘은 텍스트 기반 인터페이스로 동작하며, 다양한 명령어와 기능을 제공합니다.

명령어 해석 및 실행: 사용자는 쉘에 명령어를 입력하면 쉘이 해당 명령어를 해석하고 실행합니다. 예를 들어, 파일을 생성하거나 삭제하는 명령어, 프로그램을 실행하는 명령어 등을 입력할 수 있습니다.

환경 제어: 쉘은 사용자의 작업 환경을 제어하는 기능을 제공합니다. 변수 설정, 환경 설정 파일 실행, 별칭 설정 등이 이에 해당합니다.

스크립트: 쉘은 스크립트 형태로 명령어를 저장하고 실행할 수 있습니다. 이를 통해 반복적인 작업을 자동화하거나 복잡한 작업을 처리할 수 있습니다.

zshrc

zshrc 파일은 Zsh 쉘(즉, Z Shell)의 환경 설정을 구성하는 파일입니다. Zsh는 Bourne 쉘과 호환되는 고급 쉘로, 다양한 기능과 확장성을 제공하는 대체 쉘 중 하나입니다. zshrc 파일은 Zsh가 시작될 때 실행되며 사용자 정의 설정, 환경 변수, 별칭 등을 지정할 수 있게 해줍니다.

zshrc 파일의 주요 역할은 다음과 같습니다:

  1. 환경 변수 설정: zshrc 파일을 통해 환경 변수를 설정하거나 변경할 수 있습니다. 이를 통해 사용자의 작업 환경을 지정하거나 커스터마이즈할 수 있습니다.

  2. 별칭 설정: 긴 명령어나 자주 사용하는 명령어를 간단한 단축어로 정의할 수 있는 별칭(alias)을 설정할 수 있습니다.

  3. 경로 설정: 실행 파일이 위치한 경로를 설정하여, 특정 프로그램이나 스크립트를 어디서든 실행할 수 있도록 도와줍니다.

  4. 테마 설정: Zsh 프롬프트의 외관과 색상을 변경하여 사용자 정의 프롬프트 테마를 생성할 수 있습니다.

  5. 플러그인 및 확장 설정: Zsh는 다양한 플러그인과 확장을 지원합니다. zshrc 파일을 통해 이러한 확장 기능들을 설정하고 활성화할 수 있습니다.

  6. 함수 정의: 사용자 정의 함수를 zshrc 파일에 정의하여, 특정 작업을 자동화하거나 사용자 편의성을 높일 수 있습니다.

일반적으로 사용자의 홈 디렉토리에 .zshrc라는 이름의 숨겨진 파일로 저장됩니다. 수정한 설정은 Zsh 쉘을 다시 시작하거나 source ~/.zshrc 명령을 통해 적용할 수 있습니다. zshrc 파일을 편집하여 Zsh 쉘을 사용자에게 맞게 설정하고 최적화할 수 있습니다.

rc(run command) : 프로그램이나 시스템에서 실행되는 초기화나 설정 명령들을 담고 있는 파일의 확장자
config(configuration) : 다양한 설정 항목과 값들을 정의하여 프로그램이나 시스템의 동작을 조정하는 데 사용

컴퓨터 구성요소

하드웨어 - 커널 - 쉘 - 사용자

하드웨어 (Hardware)

컴퓨터 시스템의 물리적인 부분으로, 프로세서(CPU), 메모리(RAM), 저장장치(하드 디스크, SSD 등), 입출력 장치(모니터, 키보드, 마우스 등) 등이 포함됩니다.

커널 (Kernel)

커널은 운영 체제의 핵심 부분으로, 하드웨어와 소프트웨어 간의 인터페이스 역할을 합니다. 하드웨어를 관리하고 프로세스 스케줄링, 메모리 관리, 파일 시스템 관리 등의 역할을 수행합니다. 커널은 하드웨어의 저수준 기능에 접근하여 시스템 동작을 조정합니다.

쉘 (Shell)

쉘은 사용자와 운영 체제 간의 인터페이스 역할을 합니다. 사용자가 명령어를 입력하면 쉘이 해당 명령어를 해석하고 실행합니다. 쉘은 사용자 정의 설정, 환경 변수, 별칭, 스크립트 등을 지원하여 사용자와 시스템 간의 상호 작용을 도와줍니다.

사용자 (User)

사용자는 컴퓨터 시스템을 사용하는 사람이나 응용 프로그램을 의미합니다. 사용자는 쉘을 통해 시스템 명령어를 입력하거나 응용 프로그램을 실행하여 컴퓨터를 활용합니다.

이렇게 구조화된 시스템은 사용자가 하드웨어를 직접 다루지 않고도 쉘을 통해 운영 체제를 조작하고 프로그램을 실행할 수 있게 해주는 구조입니다.

profile
Front-end | Web Develop | Computer Science 🧑🏻‍💻

0개의 댓글