Outsider's Dev Story

Stay Hungry. Stay Foolish. Don't Be Satisfied.

기술 뉴스 #160 : 20-10-15

웹개발 관련

  • MDN Browser Compatibility Report : 올해 2~3월에 MDN에서 설문한 결과를 바탕으로 크로스 브라우징 작업의 업계 상황을 정리한 120페이지의 보고서다. 3천여 명이 응답했고 크로스 브라우징에 대한 만족도, 가장 어려운 부분을 정리하고 크로스 브라우징에서 상세 기능별로 응답자의 답변과 브라우저별 버그 등이 정리되어 있다.(영어)
  • Chrome is deploying HTTP/3 and IETF QUIC : Chrome이 IETF QUIC를 이용한 HTTP/3을 지원하기 시작했고 정확한 드래프트 버전은 h3-29이다. 크롬 안정 버전의 25%가 이를 사용할 수 있고 조금씩 늘려갈 예정이라고 한다.(영어)
  • Declarative Shadow DOM : Shadow DOM은 CSS를 특정 DOM에만 적용할 수 있게 하는데 지금까지는 JavaScript를 이용한 imperative API만 제공했기 때문에 정적 페이지나 서버 사이드 렌더링에서는 Shadow DOM을 사용할 수 없었다. 선언적 Shadow DOM을 사용하면 shadowroot 속성을 가진 <template> 새도우 루트를 이용해서 HTML만으로 선언할 수 있고 Chrome 88부터 플래그 없이 사용할 수 있다.(영어)
  • User-Agent Client Hints의 도입, UA 프리징을 대비하라 : 그동안 브라우저에서 사용자 클라이언트의 정보 확인용으로 사용하던 User-Agent를 크롬이 개인정보 보호를 목적으로 프리징하고 Client Hint를 도입하기로 했는데 그 상세 내용을 정리한 글이다. User-Agent가 프리징되면 모든 운영체제가 Windows 10으로 표시되고 OS 버전, 모델명 등은 동기방식으로는 알아낼 수 없게 된다. navigator.userAgent 대신 navigator.userAgentData를 사용해야 하고 더 자세한 정보는 navigator.userAgentData.getHighEntropyValues로 비동기로 가져와야만 알 수 있다.(한국어)
  • Redux 를 넘어 SWR 로 (1), (2) : Redux를 사용할 때 겪는 문제를 리듀서/액션의 코딩량이 많은 문제와 상태 초기화가 어렵고 로컬과 원격의 상태를 동기화하는 부분을 지적하고 있다. Vercel이 만든 fetch 용 커스텀 훅 SWR이 원격상태와 로컬상태를 하나로 통합해 주어 Redux의 문제를 해결할 수 있다는 것을 보여주고 있다.(한국어)

그 밖의 개발 관련

인프라 관련

  • What is DevOps? A guide to common methods and misconceptions : GitHub Professional Services 팀에서 다양한 회사의 DevOps 문화를 보면서 DevOps의 개념을 정리한 글이다.
  • DevOps는 다음을 뜻한다.

    • DevOps의 중심은 사람이다.
    • DevOps 구현은 프로세스와 도구를 뜻한다.
    • DevOps 결과는 더 좋은 제품을 더 빠르고 신뢰할 수 있게 배포하는 것이다.
  • DevOps의 미신

    • DevOps 도구를 도입하는 것은 DevOps를 하는 것은 아니다.
    • DevOps는 애자일 개발 방법론이 아니다.
    • DevOps에는 하나의 올바른 버전이 있다.
    • DevOps는 오직 가치를 전달하는 것에 관한 것이다.
  • DevOps 원칙

    • 오너쉽 공유
    • 워크플로우 자동화
    • 빠른 피드백
  • Use AWS Lambda Extensions to Securely Retrieve Secrets From HashiCorp Vault : 아직 프리뷰 상태인 AWS Lambda Extensions API를 이용하면 Lambda 코드를 실행 전/후에 별도의 프로세스를 실행할 수 있다. 이를 이용해서 HashiCorp Vault에서 시크릿을 가져올 수 있는 vault-lambda-extension를 퍼블릭 프리뷰로 공개했다. Extensions API로 시크릿값을 가져오면 Lambda 코드는 이런 인증에 의존하지 않게 작성할 수 있다.(영어)
  • Announcing HashiCorp Boundary : HashiCorp에서 새로 공개한 오픈소스로 원격 서비스나 서버에 자격증명을 통해 접근 권한을 부여할 수 있는 시스템이다. VPN이나 bastion 등을 통한 네트워크 격리를 통한 제어가 아닌 사용자의 자격을 확인한 후 특정 리소스에만 접근할 수 있도록 해준다.(영어)
  • Amazon ElastiCache, Redis 6 버전 지원 (서울 리전 포함) : AWS ElasticCache에 Redis 6 버전이 추가되었다.(한국어)

볼만한 링크

  • (번역) 뉴스레터에 대한 소고 : Ben Evans가 자신의 뉴스레터를 유료 구독으로 전환하면서 쓴 글이다. 글의 소비가 이메일 - 웹 - 블로그 - RSS - 텀블러 -인스타그램/페이스북/트위터 - 미디엄으로 변화되어 왔지만, 다시 뉴스레터라는 포맷을 재발견하면서 이메일로 돌아온 상황을 설명하고 이후 뉴스레터가 더 인기를 끌게 되면 뉴스레터의 홍수 속에 추천알고리즘이나 어그케이터가 등장하리라 전망하고 있다.(한국어)
  • Six Figures in 6 days : 과거 탈옥한 아이폰의 아이콘을 팔았었는데 7년이 지난 올해 iOS 14에서 시리 숏컷을 이용한 아이콘 변경 기능을 발견하고 아이콘 세트를 만들어서 올리고 트윗이 퍼지고 Youtube에도 소개되면서 인기를 끌어 6일 동안 3,626개를 팔아 $101,528을 벌었다고 한다.(영어)
  • iOS 광고 정책의 대변화, 마케터들이 지금 당장 취해야 할 액션 : iOS 14에서 변경된 광고 정책이 무엇이고 어떤 영향을 주는지 정리한 글이다. iOS 14에서는 AppTrackingTransparency 프레임워크 도입을 통해 IDFA 수집을 기본적으로 불가능하게 하고 SKAdNetwork로 광고 어트리뷰션을 자체적으로 하게 하고 개인정보 취득 정책을 강화했다. 이 변화가 무슨 의미가 있고 마케팅 및 광고에는 어떤 영향을 주어 실제 적용될 때까지 자사의 서비스에서 어떤 조치를 해야 하는지 까지 잘 나와 있다. 얼마 전에 필요해서 해당 부분을 좀 찾아봐도 완전히 이해하기 어려웠는데 이 글에 잘 나와 있다.(한국어)

IT 업계 뉴스

프로젝트

  • kubespy : Kubernetes 리소스를 실시간으로 모니터링하는 도구.
  • tailwind PLAY : tailwind css 플레이그라운드.
  • igel : 코드를 작성하지 않고 모델을 학습시키고 테스트할 수 있는 머신러닝 도구.
  • Volt : Framer에서 사용할 수 있는 인터렉티브 UI 스타터 킷.

버전 업데이트

2020/10/15 21:23 2020/10/15 21:23

Git의 기본 브랜치를 master에서 main으로 변경하기

올 6월 Go 언어가 인종차별적 요소나 주종 관계의 의미를 담고 있는 whitelist/blacklist와 master/slave라는 용어를 프로젝트에서 제거하기로 결정하면서 업계 전반에 이런 부분을 제거하는 움직임이 일어났다.(이 부분에 대해서 그런 의미로 받아들여지지 않는다는 반대 의견도 있지만 불편한 사람이 있다면 바꾸는 게 맞는다고 생각한다.)

이후 master를 기본 브랜치로 사용하던 Git에서도 이 논의가 이루어졌고 브랜치를 사용자가 지정할 수 있도록 변경하였다.(Regarding Git and Branch Naming 참고) 사실 master는 관례상 최초 생성하는 기본 브랜치로 사용하는 이름일 뿐 다른 의미는 없고 실제 많은 저장소가 기본 브랜치를 다른 브랜치로 바꾸어서 사용하고 있었다.

이어서 GitHub도 기본 브랜치를 master에서 main으로 변경하기로 했고 이는 10월 1일부터 적용되었다. 그래서 이제 저장소를 생성할 때 초기화 옵션을 선택하면 main 브랜치가 기본브랜치로 생성됨을 알려준다.

GitHub 저장소 생성 시 초기화하면 main으로 생성된다는 안내

초기화하지 않고 저장소를 생성할 때의 커맨드라인 안내 메시지도 main으로 초기화하도록 변경되었다. 이전에는 git이 알아서 기본으로 master를 기본으로 사용하였지만 main은 그렇지 않기 때문에 명시적으로 git branch -M main으로 브랜치를 생성하는 명령어가 추가되었다.

echo "# example-repo" >> README.md
git init
git add README.md
git commit -m "first commit"
git branch -M main
git remote add origin git@github.com:outsideris/example-repo.git
git push -u origin main

master의 대안으로 어떤 이름을 사용할지도 많은 논의가 있었지만, GitHub이 main을 선택했으니 main이 주류가 될 것 같다.

init.defaultBranch

Git 2.28부터 사용자가 기존의 master로 지정되어 있던 기본 브랜치를 설정을 통해서 변경할 수 있는 기능이 추가되었다. 기본은 master로 동작하지만, 사용자가 원하는 대로 바꿔서 사용할 수 있다.

일단 Git을 2.28.0 버전 이상으로 올려야 한다. 나는 macOS에서 Homebrew로 Git을 관리하고 있어서 brew upgrade git으로 버전을 올렸다.

$ git version
git version 2.28.0

git config --global init.defaultBranch main으로 init.defaultBranch를 설정한다. 전역 설정으로 지정했으므로 이는 ~/.gitconfig에 아랫부분이 추가된다.(직접 ~/.gitconfig를 수정해도 된다.)

[init]
  defaultBranch = main

Git 저장소를 초기화하면 main이 기본 브랜치로 생성되는 것을 볼 수 있다.

$ git init
/Users/outsider/git-test/.git/ 안의 빈 깃 저장소를 다시 초기화했습니다

$ touch README.md && git add README.md && git commit -m "init"
[main 50d3fe6] init
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 README2.md

$ git branch -a
* main

GitHub와 로컬 git의 설정은 맞췄지만, 기존에 작업하던 브랜치는 아직도 많이 master로 남아있고 프로젝트마다 기본 브랜치 설정을 바꾸는 타이밍이 다를 것이라서 당분간은 좀 헷갈릴 것 같지만 시간이 지나면 괜찮아질 것으로 생각한다.

2020/10/10 16:21 2020/10/10 16:21