Outsider's Dev Story

Stay Hungry. Stay Foolish. Don't Be Satisfied.
RetroTech 팟캐스트 44BITS 팟캐스트

기술 뉴스 #203 : 22-08-01

웹개발 관련

  • Build Your Own Web Framework : Vercel의 Build Output API을 이용해서 React 기반의 웹 프레임워크를 만드는 방법을 설명하는 글이다. Build Output API는 Vercel에서 배포할 수 있는 디렉터리 구조의 명세로 프레임워크를 만들어서 출력 결과가 이 디렉터리 구조를 따른다면 Vercel의 배포를 이용할 수 있어서 정적 파일 배포, 증분 재생성, 엣지 펑션, 이미지 자동 최적화, 서버리스 함수, 엣지 캐시 등의 장점을 이용할 수 있다. 데모 코드도 제공하고 있고 쇼핑몰 같은 페이지를 만드는 데 각 장점을 이용하기 위해 구현한 접근 방법을 설명한다.(영어)
  • 당근마켓에 웹 프로젝트 배포하기 #2 — 웹 서버로 돌아가기 : 이전 글에 이어진 글로 로컬 웹뷰를 사용하던 방식에서 웹서버를 도입하기로 결정하고 프론트엔드의 다양한 배포 서비스를 고민했다고 한다. Cloudflare Workers로 정적 웹사이트를 배포할 수 있다는 걸 알게 되어 다양한 테스트를 해본 후 당근 미니 앱을 배포할 때 Zip 파일로 배포를 하면 Cloudflare Workers에서 압축을 풀어서 클라이언트에게는 필요한 컨텐츠만 보내는 방식을 선택했다고 한다. 비슷한 문제에 관해 Web Packaging이라는 사양 그룹이 있어서 표준을 논의하고 있다고 한다.(한국어)

그 밖의 개발 관련

  • My experience with EdgeDB : EdgeDB는 Postures 위에 만들어진 관계형/그래프 데이터베이스이다. SQL이 없고 EdgeQL이라는 자체 쿼리 언어가 있는데 이게 엄청 좋아서 다시는 SQL로 돌아가지 않을 생각이다. 요즘 추세대로 하나의 바이너리로 모든 걸 할 수 있어서 서버 설치, 데이터베이스 관리, 마이그레이션을 다 할 수 있다. 1년 전부터 사용하기 시작했는데 지금은 회사의 프로젝트도 EdgeDB로 바꾸고 있고 대부분의 경우 "It just works"를 경험하고 있다고 하고 다양한 기능을 소개하고 있다. GeekNew에 번역 요약 글을 봐도 된다.(영어)
  • JVM + Container 환경에서 수상한 Memory 사용량 증가 현상 분석하기 : Hyperconnect에서 Kuberentes에 띄워 놓은 서비스의 CPU를 2에서 1로 줄이자 오히려 메모리가 증가하는 현상을 발견하고 이를 추적해서 해결한 내용이다. JMX로 분석할 결과 스레드 개수가 증가한 것을 확인했고 스레드를 추적하고 WebFlux의 reactor 스레드가 증가했다는 것을 할 수 있었다. Webflux의 코드를 살펴보니 CPU reqeusts가 1일 때 availableProcessors()가 컨테이너가 아닌 Node의 CPU를 반환한다는 것을 알게 되어 JAVA 옵션으로 ActiveProcessorCount를 지정해서 해결했다.(한국어)
  • 환상(장)의 (ElastiCache + Spring Session + Spring Security) Memory Leak : Spring Session, Spring Security, ElastiCache를 쓰면서 Redis의 메모리 릭을 경험하고 이를 해결하는 과정이다. 메모리 릭을 경험하고 Redis의 SET이나 Pub/Sub을 의심했지만, 이 문제는 아니었고 사용자가 많은 시간대에 패턴이 달라지는 것을 보고 세션 클러스터링을 의심하기 시작했다. REDIS의 키를 추적해서 문제가 있는 키를 찾아내고 이 키의 용도와 언제 생성되고 삭제되는지 코드까지 확인했는데 코드에는 이상이 없는 걸 확인하고 ElastiCache에서 이벤트에 대한 설정이 되어 있지 않아서 삭제 처리가 안 되었음을 찾아내었다고 한다.(한국어)
  • Programming languages endorsed for server-side use at Meta : Meta(Facebook)은 다양한 언어를 쓰고 있지만 새로운 언어를 지원할 때 가볍게 결정하진 않는데 이번에 Rust를 Meta의 서버 사이드 언어 중 하나로 추가했다고 한다. 지원한다는 의미는 Meta 내에서 좋은 개발 경험을 기대할 수 있다는 의미이고 Meta의 서버 사이드 주요 지원 언어는 Hack, C++, Rust, Python인데 성능이 중요한 백엔드에는 C++와 Rust를 추천하고 이번에 Rust를 추천하게 된 것이다. CLI에도 Rust를 추천하고 있다.(영어)
  • An Introduction to Multithreading in Node.js : Node.js에서 멀티스레드로 코드를 실행하는 방법을 설명한다. child_process를 사용할 수 있지만 이는 멀티스레드가 아니라 멀티 프로세스인데 멀티스레드를 위해서는 worker_threads를 사용할 수 있다. CPU 인텐시브한 작업을 위해 worker_threads에 데이터를 넘겨서 실행하고 이벤트를 받는 방법을 설명한다.(영어)

인프라 관련

  • Argo CD에서 App 배포도 GitOps스럽게 하기 : Argo CD에서 앱을 배포하려고 UI에서 동기화 할때 이는 GitOps의 흐름과는 다른 문제가 있는데 이를 App of Apps와 ApplicationSet으로 해결하는 방법을 설명한다. App of Apps는 Argo CD의 Application이 리소스임을 이용한 패턴이고 ApplicationSetdms Argo CD에 새로 추가된 앱 관리를 위한 리소스이다.(한국어)
  • AWS IAM 역할과 함께 신뢰 정책을 사용하는 방법 : AWS IAM role에서 권한 관리를 할 때 신뢰 관계(trust relationship)를 설명하는 글이다. 신뢰 관계의 정책을 이용해서 보안 주체가 해당 역할을 사용하는 조건에 제한을 걸 수 있습니다. 신뢰 정책도 일반적인 IAM 정책과 비슷하지만, IAM role이 리소스 역할을 하므로 Resource 속성은 없고 Action에는 sts:AssumeRole, sts:AssumeRoleWithSAML, sts:AssumeRoleWithWebIdentity를 사용할 수 있다. PrincipalCondition을 이용해서 범위를 제어하는 데 시간 기반으로 하거나 IP 주소로 하는 방법 등이 나와 있다.(한국어)
  • 도커 컨테이너 5분 만에 무료로 배포하기(feat. fly.io) : 차세대 Heroku라고 불리는 fly.io의 사용 방법을 소개합니다. fly.io에 가입하고 flyctl을 이용해서 nginx와 커스텀 이미지를 배포하는 방법, 볼륨을 생성해서 컨테이너에서 사용하는 방법을 보여줍니다.(한국어)

볼만한 링크

  • What is Developer Relations? : DevRel이 어떤 일을 하고 어떻게 해야하는지를 설명한 사이트이다. DevRel의 활동은 커뮤니티, 컨텐츠, 제품 3가지 타입으로 구분되므로 DevRel로 취직하기 위해서는 코딩, 커뮤니티 구축, 컨텐츠 제작의 기술을 보여줄 수 있어야 한다. DevRel에게 가장 어려운 건 개발자의 관심을 받는 것인데 이를 위한 조언도 정리되어 있다.(영어)
  • GitHub Sponsors available in 30 new regions : GitHub Sponsors 기능이 추가로 30개 국가에 열려서 총 68개 지역에서 이용할 수 있게 되었고 이번에 한국도 포함되었다.(영어)
  • 시드 투자 받은 후 망하는 스타트업의 5가지 특징 : Y Combinator에서 만든 The 5 Things That Kill Startups Post Seed Rounds 영상을 번역 정리한 글이다. 시드 후 망하는 스타트업은 가짜 프로덕트-카멧 핏을 가지고 있었고 뭘할 지 몰라서 투자자를 보스처럼 모시게 된다고 한다. 공동창업자들이 싸우는 경우가 많고 주변을 카피하면서 평범해지고 제품이 아주 느리게 개선된다고 한다.(한국어)

IT 업계 뉴스

  • Fly.io wants to change the way companies deploy apps at the edge : 요즘 주목받고 있는 배포 플랫폼인 Fly.io의 CEO인 Kurt Mackey의 인터뷰다. Kurt Mackey는 엣지 컴퓨팅의 의미를 대부분 이해하지 못하고 있고 CDN은 결함이 있는 접근 방법으로 Fly.io는 더 효율적으로 배포하려고 한다고 얘기한다. Fly.io는 클라우드를 쓰지 않고 자체 하드웨어를 사용하는데 CDN은 서버는 한곳에 두고 일부 에셋을 CDN에 태우지만 Fly.io는 애플리케이션 자체를 사용자에 가깝게 띄우도록 하고 있다고 한다. Fly.io는 6월에 2천 5백만 달러의 시리즈 B 투자를 받았다.(영어)
  • DALL·E Now Available in Beta : OpenAI의 이미지 생성 AI인 DALL·E가 베타에 들어갔다 몇 주 내에 백만 명을 초대할 것이라고 하고 기존으로 매달 주는 크레딧 외에 추가 크레딧을 구매해서 사용할 수 있다.(영어)


프로젝트

  • OpenFeature : CNCF의 샌드박스 프로젝트로 feature flag 관리하는 API와 SDK를 제공할 예정이라고 한다. 현재는 구현체보다는 스펙과 로드맵을 작성 중이다.
  • Cloudscape Design System : AWS에서 만든 클라우드용 디자인 시스템으로 AWS 웹 콘솔에서 볼만한 UI가 컴포넌트로 정리되어 있다.
  • GitHub City : GitHub의 컨트리뷰션 그래프를 건물로 그려서 도시로 표현해 주는 웹사이트.
  • Hono : Cloudflare Workers, Deno, Bun을 위한 웹 프레임워크
  • Terminal Gif Maker : 웹 UI에서 터미널 명령어와 결과를 입력해 두면 애니메이션 GIF로 다운로드받을 수 있다.
  • Look Scanned : PDF를 스캔한 문서처럼 만들어주는 웹사이트.

버전 업데이트

2022/08/01 21:19 2022/08/01 21:19