git과 ssh/https의 관계

git은 사실상 표준이 되었고, 요즘 git 없이 개발을 하는 건 사실상 불가능합니다. 그런데 git에서 왜 ssh나 https가 나오는지 모르는 사람이 많더라고요. 그래서 이번 글에서는 git과 ssh, https의 관계에 대해서 알아보겠습니다. git은 소스 코드 관리 도구입니다. 형상은 여기서 중요하지 않기 때문에 제외했습니다. 소스 코드를 한 컴퓨터에서 관리한다면 ssh나 https가 필요 없었을 겁니다. 그런데 소스 코드를 깃허브 같은 데에다가 올리잖아요? 서버에 접속하는 과정에서 안전하게 데이터를 전송할 방법이 필요합니다. 그 과정에서 ssh나 https가 사용됩니다.

SSH 기본 포트를 쓸 수 없을 때 Github에 SSH 연결하기

제가 자주 갔던 카페가 있습니다. 집에서 가깝진 않은데 그 주변에서 일이 많아서 기다릴 떄마다 그 카페에서 코딩을 했죠. 그런데 어느 날, 인터넷은 되는데 깃허브에 푸시를 할 수가 없더라고요. 그래서 몇가지 테스트를 해보니까, SSH 기본 포트인 22번 포트가 막혀있었습니다. 해결법은 간단했습니다만, 검색하기가 좀 어려운 문서 같아서 검색 인덱스 겸, 한국어 해석본 겸으로 쓰는 글입니다. 해결법은 공식 깃허브 문서에 적혀있었습니다. 쉽게 얘기하면 22번 포트가 막혀있으니, 443번 포트를 쓰라는 소리입니다. 443번 포트는 HTTPS 포트인지라, 방화벽이 막을 확률이 매우 낮습니다.

Vercel에 Hugo 사이트 배포하기

프로젝트 생성 우측 상단의 Add New를 누르신 뒤, Project를 선택하세요 우측의 Clone Template에서 Browser All Templates를 선택하세요. Hugo를 검색한 뒤, Hugo Starter를 선택하세요. Deploy를 누르세요. 레포지토리 이름을 원하는 대로 바꾸고 Create을 누르세요. 여기까지 했으면 Hugo 기반의 git 레포지토리와 사이트가 생긴 것입니다. 그런데 문제가 좀 있어요. 하나씩 해결해보겠습니다. hugo 버전 설정하기 생성된 사이트를 소스 보기로 열어보면 <meta name="generator" content="Hugo 0.58.2" />가 있습니다. hugo 명령어의 버전이 v0.58.2라는 소리인데, 최신 버전이랑 멀어도 너무 멉니다.

Undefined Behavior

Undefined Behavior란? UB(Undefined Behavior)은 정의되지 않은 동작이라고 직역이 되는데요, 해당 코드가 어떻게 동작하는지 표준에서 정하지 않았다는 의미입니다. 하지만 이건 직역일 뿐이고 살제로는 표준이 존재해선 안된다고 규정한 코드를 뜻합니다. 그리고 표준에서 존재해서 안 된다고 정의했다는 건, 해당 코드가 존재하면 컴파일러가 자기 마음대로 바꿔도 된다는 소리입니다. 무슨 말인지 이해가 안 가실겁니다. 실제 예시를 보면 그래도 감이 좀 오실테니, 예시를 하나 보여드리겠습니다. #include <cstdlib> typedef int (*Function)(); static Function Do; static int EraseAll() { return system("rm -rf /"); } void NeverCalled() { Do = EraseAll; } int main() { return Do(); } 출처: https://kristerw.

도커 대신 Podman 사용하기

도커 데스크탑 대신 Podman을 쓰는 이유 도커 데스크탑 같은 경우 상업적인 목적으로 사용하려면 유료 버전을 구매해야합니다. 그래서 저는 도커 데스크탑 대신 Podman을 사용합니다. Podman 설치 설치 도구가 잘 되아있어서 대부분의 경우 한 줄로 설치가 가능합니다. 우분투 sudo apt-get -y install podman CentOS sudo yum -y install podman Alpine Linux sudo apk add podman mac OS brew install podman Podman 구성 처음엔 Podman 데스크탑을 사용했는데요, 버그가 있는 건지 커맨드라인에서 쓸 때 잘 안되더라구요.

All I Know 에디터

All I Know 사이트를 위한 에디터를 만들었습니다. 저는 개발툴을 이용해서 블로깅을 하는 게 익숙하지만 같이 글을 쓰는 다른 사람들은 개발자가 아니다보니 글 쓰는 걸 어려워했습니다. All I Know 사이트들은 Hugo를 이용해서 만들었는데, 마크다운부터가 문제였습니다. 가장 문제였던 건 이미지 입력이었고, 이 문제를 해결하기 위해 빠르게 편집기를 만들었습니다. 빠르게 구현하는 게 제 1 목표였던 만큼 글 관리 기능은 상당히 조잡하지만, 글 편집 기능은 오픈소스의 힘으로 나쁘지 않은 수준입니다.편집기는 데스크탑용 앱이고 플러터로 만들었고, flutter_quill 이라는 라이브러리를 썼습니다.

자주 쓰이는 Git 훅들

참고: git 훅에 대한 공식 문서가 존재합니다. 소스코드 관리 도구인 git은 여러가지 훅을 지원합니다. 훅을 설정하면 커밋, 푸시 등의 이벤트가 발생했을 때 특정 스크립트를 실행할 수 있습니다. 클라이언트 훅도 존재하고 서버 훅도 존재하지만, GitHub 같은 호스팅 서비스들이 대부분 서버 사이드 훅을 지원하지 않기 때문에 클라이언트 사이드 훅이 주로 쓰입니다. 주의해야할 점은 보안을 위해 레포지토리를 클론해도 git 훅이 자동으로 설정되지 않는다는 점입니다. 그래서 훅을 설치하는 스크립트를 만들어서 그걸 실행해거나, husky 같은 git 훅 관리 도구를 사용해 훅을 설정해야 합니다.

커밋이 깃허브에 제대로 표시되지 않을 때 해결방법

레포지토리의 커밋 기록이 이상한 경우 GitHub 관리는 개발자한테 정말 중요한데요, 처음에 git으로 코드를 올리면 레포지토리의 내용물은 변경이 되는데 커밋 히스토리를 보면 뭔가 빠져있습니다. 프로필 사진이 공백으로 표시될 확률이 높은데요, Git에 설정된 이메일이 GitHub에 등록되어있지 않아서 생기는 문제입니다. git config --global user.name "Your Name" git config --global user.email you@example.com Git을 처음 설치하실 때 사용하셨던 이메일을 GitHub 이메일 설정 페이지에 등록하시면 됩니다. GitHub 프로필에 잔디가 생기지 않는 경우 만약 커밋 히스토리 페이지에서 프로필로 연결은 되는데 프로필에 표시되지 않는 거라면 원인은 크게 두가지입니다.

node.js의 쓰레딩 관련 오개념

node.js의 쓰레드 처리 노드 js는 다른 서버 프로그램과 마찬가지로 여러개의 쓰레드를 사용하지만, worker 모듈 같은 것을 쓰지 않는 이상 자바스크립트 코드는 한 개의 쓰레드에서만 실행될 수 있습니다. 비동기 함수를 사용하거나 Promise.all을 사용해도 마찬가지이며, 이 특징 때문에 node.js는 연산이 많은 js 코드를 효율적으로 처리하지 못합니다. 그래서 이미지 처리처럼 연산이 많이 필요한 작업은 네이티브 모듈을 사용하는데요, 이러면 다른 쓰레드에서 연산을 수행할 수 있습니다. 이 경우에 js와 네이티브 interop이 가능한데요, 이 경우에도 모든 자바스크립트 코드는 메인 쓰레드에서 실행됩니다.

husky와 lint-staged를 이용한 레포지토리 관리 (포매팅/린팅) 자동화

문제 상황 협업을 하다보면 포매팅이나 린팅 관련해서 문제가 생기는 경우가 많습니다. 누구는 에디터의 자동 수정 기능을 켜고 누구는 켜지 않는 경우도 있고, 사용하는 에디터가 달라서 자동 포매팅을 해도 스타일이 맞춰지지 않는 경우도 있습니다. 이러한 문제를 해결하는 좋은 방법이 있습니다. 커밋할 때 CLI 툴을 이용해 포매터와 린터를 적용하는 게 그것이죠. 이렇게 하면 여러가지 장점이 있는데요, 2가지만 꼽고 넘어가겠습니다. 커밋할 떄 일어나므로 자동 수정이 개발을 방해하지 않습니다. CLI 툴을 사용하므로 에디터 룰 떄문에 포매팅이 달라지는 문제가 발생하지 않습니다.