Outsider's Dev Story

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

기술 뉴스 #115 : 18-12-02

웹개발 관련

  • The State of JavaScript 2018 : 매년 발표되는 JavaScript 개발자의 설문 조사를 통해서 생태계의 현황을 정리한 글로 올해는 2만여 명의 JavaScript 개발자가 설문에 참여했다. 지역별 연봉, 프레임워크, 테스트 도구, 백엔드, 모바일 등 다양한 영역에서 어떤 도구를 주로 사용하고 있는지를 보여주고 있다.(영어)
  • React 16.x Roadmap : React에서 16.x의 로드맵을 발표했다. Suspense for Code Splitting는 이미 16.6에서 릴리스 되었고 React Hooks를 2019년 1분기에 Concurrent Mode를 2019년 2분기에 Suspense for Data Fetching를 2019년 중반에 발표할 예정이라고 한다.(영어)
  • HTTPS에 대한 기초 이해 : HTTPS로 통신할 때 서버와 클라이언트가 어떻게 메시지를 주고받는지 상세하게 정리된 글이다. 인증서를 어떻게 검증하고 암호화해서 안전하게 메시지를 주고받는지 꽤 자세하게 나와 있다.(한국어)
  • Goodbye Electron, Hello Desktop PWAs : Chrome 70에서 데스크톱 PWA 지원이 Linux와 Windows에서 추가되었고 macOS는 72 버전에서 지원될 예정이라고 한다. 지금까지 크로스 플랫폼 데스크톱 앱 개발에 Electron을 주로 사용했지만, 데스크톱 PWA를 쓰면 Electron처럼 별도의 Chromium을 실행하거나 설치하도록 할 필요가 없으면서 데스크톱 앱처럼 만들 수 있으므로 데스크톱 PWA를 추천하는 글이다. 실제 테스트해 볼 수 있는 예제와 HTTPS를 사용하고 서비스 워커를 하나 이상 등록해야 하는 등의 요구사항도 정리되어 있다.(영어)
  • Progressive Web Apps The Future of the Mobile Web. : Google과 Microsoft, Awwwards에서 PWA의 어떻게 만들고 어떤 효과가 있는지를 정리한 ebook을 만들어서 공개했다.(영어)
  • [번역] TypeScript at Google : 구글에서 TypeScript를 사용하게 된 과정을 설명한 글이다. Google이 과거 Gmail, Goole Maps 등 놀라운 웹을 만들었는데 그동안 대규모 JavaScript 애플리케이션을 만들려고 Closure 등을 포함해서 다수의 도구를 만들었지만, 시간이 지나면서 구글의 자바스크립트 스택은 구글 밖의 세상과는 분리되어 주류와는 완전히 다른 스택이 되었다고 한다. 다시 주류와 돌아가기 위해서 적당한 도구를 찾던 중 TypeScript가 훌륭한 옵션이 되어서 사용하게 되었다고 한다.(한국어)

그 밖의 프로그래밍 관련

  • AWS re:Invent 2018 출시 소식 요약 첫날, 둘째 날, 셋째 날 : 지난주에 열린 AWS re:Invent에서 출시된 서비스를 정리한 글이다. 매년 다수의 서비스가 출시되는데 Firecracker, DynamoDB Transaction, S3 Object Lock 등이 있다.(한국어)
  • 아시아-태평양 서울 리전(AP-NorthEast-2)의 Amazon EC2 DNS 확인(Resolution) 이슈 요약 : AWS 서울 리전에서 지난 22일 오전에 발생한 DNS 장애의 내용을 AWS에서 정리한 글이다.(한국어)
  • **5 Lessons Learned From Writing Over 300,000 Lines of Infrastructure Code ** : Gruntwork의 CTO가 HashiConf에서 발표한 내용을 정리한 글이다. 그동안의 인프라 코드를 작성한 경험을 통해 프로덕션 인프라를 위한 체크리스트를 준비하고 새로운 도구를 배우고 모듈을 너무 크게 작성하지 말고 테스트를 꼭 실제 환경에서 작성하고 릴리스 프로세스를 정의하라고 하고 있다.(영어)
  • The Holy Hand Grenade of Antioch : OpenSSL 팀이 지금까지 사용하던 MAJOR.MINOR.FIX[PATCH] 버전 방식이 혼란을 줘서 MAJOR.MINOR.PATCH 방식으로 바꾼다고 한다. 1.1.11.0.2는 달라지지 않을 것이고 2.0.0을 건너뛴 3.0.0 버전부터 이 방식이 적용될 예정이다.(영어)
  • [번역] 최신 네트워크 로드 밸런싱 및 프락시 소개 : 최근 로드 밸런싱과 프락시의 발전 흐름을 설명하고 있다. 여기서 대부분의 프락시가 로드 밸런싱 기능을 포함하고 있으므로 같은 의미로 사용하고 있고 L4/L7 로드 밸런싱의 차이를 설명하고 L7을 위주로 설명하고 있다. 로그 밸런서를 사용할 때 토폴러지를 구성하는 방법과 각 기술의 개발 현황 등을 자세하게 설명하고 있다.(한국어)
  • HashiCorp Learn : HashiCorp 제품군을 따라 하며 배울 수 있는 Learn 사이트에 Vault에 이어 Terraform, Nomad, Consul도 추가되었다.(영어)
  • HashiConf 2018: Videos Are Now Available : HashiConf 2018의 전체 세션 영상이 공개되었다.(영어)

볼만한 링크

  • SendBird의 실리콘밸리 시리즈 A (Series-A) 투자유치 이야기 : B2B 채팅 솔루션인 SendBird가 최근 시리즈 A 투자를 받는 과정을 정리한 글이다. 대표로서 시리즈 A를 받기로 하고 실리콘밸리에서 투자자들을 만나고 고민한 과정이 나와 있는데 국내와 어떻게 다르게 진행되고 투자를 어떻게 진행하는지를 엿볼 수 있고 스타트업 입장에서의 고민이 고스란히 담겨있어서 재미있게 읽었다.(한국어)
  • 창업판에서 내가 만난 최악의 멘토 5 : 창업 지원 프로그램 등에서 강제하는 멘토링 프로그램에서 멘토들의 문제점을 비판한 글이다. 사업계획서를 안 읽고 오거나 자신들의 정보는 숨기거나 말만 하는 등 대충 어떤 분위기 일지 예상되는 상황을 적나라하게 비판하고 있다. 창업에 비할 바는 아니지만 비슷한 정부 사업을 보면서 비슷한 느낌을 받아서 공감했다.(한국어)

IT 업계 뉴스

프로젝트

  • ncc : Node.js 프로그램을 하나의 실행 파일로 만들어주는 CLI 도구.
  • dive : Docker 이미지의 레이어를 탐색할 수 있는 도구.
  • nginxconfig.io : nginx 설정 파일 생성기.
  • golicense : 컴파일된 Go 바이너리에서 의존성의 버전과 라이센스를 검사해주는 도구.
  • NES.css : NES 스타일 CSS 프레임워크.
  • khaiii : Kakao에서 개발한 한글 형태소 분석기.

버전 업데이트

2018/12/02 22:09 2018/12/02 22:09

GitHub Actions 소개

지난 GitHub Universe 2018에서 GitHub Actions라는 기능이 발표되었다. 기존에 이미 GitHub과 연동해서 서드파티 서비스를 이용하면서 개발 워크플로우를 자동화하고 있었지만, 대부분의 커스터마이징할 수 있는 워크플로우는 CI가 중심에 있었다. 예를 들어 코딩 관례 검사, 테스트, 빌드 등을 테스트하고 Docker나 팩캐지를 배포하거나 릴리스를 만드는 작업을 CI를 이용해서 했다면 이러한 워크플로우를 직접 다룰 수 있는 기능이 Actions라는 이름으로 GitHub이 직접 지원하기 시작한 것이다.

좋은 서비스들이 많이 있지만 각 서비스가 모든 기능을 지원하는 것은 아니므로 상당 부분 원하는 대로 사용하려면 CI에서 직접 스크립트를 작성해야 했는데 GitHub이 직접 이러한 워크플로우를 제어할 수 있도록 지원하기 시작한 것이다. 실제로 얼마나 편한지는 다양하게 사용해 봐야겠지만 데모에서는 코드를 푸시하면 npm에 패키지를 배포하거나 Docker Hub에 이미지를 배포하거나 AWS, GCP, netlify에 서비스를 배포하는 작업을 GitHub에서 바로 할 수 있다.

아직은 GitHub Actions는 Beta로만 공개된 상태이고 신청을 하고 허가가 나야 사용할 수 있다. 정확히 베타가 얼마나 공개되었는지 알 수 없지만, 현재 베타 기간에는 Private 저장소에만 제공하고 있으므로 간단히 GitHub Actions가 어떻게 동작하는지 살펴보려고 한다.

GitHub Actions are currently available as a limited public beta, which means you should avoid using it for high-value workflows and content during this beta period. Creating workflows that use GitHub Actions is limited to private repositories during the limited public beta.

GitHub Actions

퍼블릭 베타에 초대받고 나니 Private 저장소에서는 "Actions" 탭이 활성화되었다.

사용자 삽입 이미지

Workflow 생성을 누르면 .github/main.workflow를 만들기 위한 GUI 에디터가 나타난다. Actions의 워크플로우는 .workflow 확장자를 가지게 된다.

사용자 삽입 이미지

첫 이벤트는 기본으로는 on push인데 수정을 누르면 create, deployment, fork, gollum, issue_comment 등 GitHub의 다양한 이벤트를 기반으로 워크플로우를 시작할 수 있다.

사용자 삽입 이미지

첫 이벤트의 파란 점을 아래로 연결하면 워크플로우를 연결할 다른 액션을 선택할 수 있다.

사용자 삽입 이미지

현재 지원하는 액션에는 GitHub Action for npm, Filters for GitHub Actions, GitHub Action for Google Cloud, GitHub Action for AWS, Docker Registry, GitHub Action for Zeit, GitHub Action for Heroku 등의 액션이 있다. 아직 기본 제공하는 액션이 다양하지는 않다.

사용자 삽입 이미지

액션을 선택하면 시크릿 환경변수나 환경변수를 지정할 수 있다. GITHUB_TOKEN은 기본으로 지정되고 추가로 원하는 설정을 할 수 있고 대부분의 액션은 Docker 기반이라서 ENTRYPOINTCMD를 커스터마이징 할 수 있는 것으로 보이는데 어느 정도 활용할 수 있는지는 좀 더 살펴봐야 알 수 있을 것 같다. 환경변수를 몇 가지 추가해 보았는데 기본적으로 한 워크플로우의 모든 액션에 체크만 하면 추가로 지정하지 않고도 사용할 수 있도록 공유된다.

사용자 삽입 이미지

이렇게 만든 워크플로우는 실제로는 HCL로 작성된 파일로 저장된다. 에디터보다 코드로 작성하는게 편해지려면 약간 시간이 필요할 것 같다.

사용자 삽입 이미지

지금 테스트에서는 on push에 트리거를 걸었으므로 워크플로우 수정사항을 저장하거나 새로운 커밋을 올리면 워크플로우가 시작된다. 워크플로우는 CI처럼 진행 중과 성공/실패의 최종 결과가 표시되어서 예상했던 느낌대로 CI의 많은 부분을 대체할 수 있다고 생각한다.

사용자 삽입 이미지

워크플로우가 성공하면 아래처럼 각 단계의 성공상태가 나타나고 로그도 볼 수 있다.

사용자 삽입 이미지

앞에서 얘기한 대로 CI와 경쟁 구도가 되지 않을까 생각했지만 실행된 로그를 보면 Travis CI와 연동해서 워크플로우가 동작하는 것으로 보이고(예상) 로그를 보면 도커를 기반으로 돌아가는 걸을 알 수 있다. 도커 자체가 독립적으로 실행할 수 있는 환경이기는 하지만 여기서는 테스트로 제공된 것만 그냥 연결해 본 것이고 실제 원하는 워크플로우를 만들려고 할 때 디버그하거나 로그를 확인할 때 얼마나 편할지는 사용해봐야 알 것 같다.

사용자 삽입 이미지

워크플로우는 일렬로만 연결할 수 있는 것은 아니고 병렬로 늘려서 여러 작업을 동시에 수행할 수도 있다.

사용자 삽입 이미지

기존 개발 관련 워크플로우를 CI나 서드파티 서비스로 대부분 소화하고 있었기에 당장 Actions로 어떤 부분을 대체할지 아직 생각나는 부분은 없다. 이미 CI로 작성해 놓은 스크립트를 굳이 바꾸는 것도 귀찮기도 하고... 그래도 GitHub에서 기본으로 제공하는 기능의 편의성이 있으니 활용할 수 있는 부분을 좀 더 고민해 봐야겠다.

2018/11/27 04:37 2018/11/27 04:37