웹개발 관련
- 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
를 사용할 수 있다. Principal
과 Condition
을 이용해서 범위를 제어하는 데 시간 기반으로 하거나 IP 주소로 하는 방법 등이 나와 있다.(한국어)
- 도커 컨테이너 5분 만에 무료로 배포하기(feat. fly.io) : 차세대 Heroku라고 불리는 fly.io의 사용 방법을 소개합니다. fly.io에 가입하고
flyctl
을 이용해서 nginx와 커스텀 이미지를 배포하는 방법, 볼륨을 생성해서 컨테이너에서 사용하는 방법을 보여줍니다.(한국어)
볼만한 링크
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를 스캔한 문서처럼 만들어주는 웹사이트.
버전 업데이트
- EdgeDB v2.0.0 : 그래프-관계형 데이터베이스, 릴리스 공지
- 어드민용 UI 제공
- 데이터를 파티셔닝하고 어그리게이트하는
GROUP
문 지원
- 객체 수준의 보안 지원
- 공식 Rust 클라이언트 제공
- MongoDB v6.0.0 : 도큐먼트 데이터베이스, 릴리스 공지
- Cilium v1.12.0 GA : eBPF 기반 CNI, 릴리스 공지
- Linux Kernel v5.19 : 리눅스 커널, 릴리스 공지
- Linus Torvals가 3번째 애플 하드웨어를 쓰게 되어 arm64에서 테스트할 수 있게 되었고 이번 릴리스와 릴리스 노트도 arm64에서 했다.
- 다음 버전은 6.0이라고 부를 것이라고 했다.
- Loki v2.6.0 : Prometheus 형식의 로그 수집 시스템, 릴리스 공지
- 멀티 테넌트 쿼리 지원
- 특정 라인을 제거하는 기능 추가
- Artifact Hub v1.9.0 : Kubernetes 패키지 저장소, 변경사항
- GraalVM v22.2.0 : 통합 가상 머신, 릴리스 공지
- Node.js v18.7.0 (Current) : 자바스크립트 런타임, 릴리스 공지
- Deno v1.24.0 : TypeScript 런타임, 릴리스 공지
- ESLint v8.21.0 : JavaScript 코드 분석 도구, 릴리스 공지
- Playwright v1.24.0 : Chromium, Firefox, WebKit 브라우저 자동화 Node.js 라이브러리, 릴리스 공지
- JUnit 5 v5.9.0 : Java 테스트 프레임워크, 릴리스 공지
- Native Script v8.1 : JavaScript를 이용한 모바일 앱 개발 프레임워크, 릴리스 공지
- ember v4.6.0 : JavaScript 프레임워크, 릴리스 공지
- **linaria v4.0.0 : 제로 런타임 CSS in JS, 변경사항
- Fastify v4.3.0 : Node.js 웹 프레임워크, 릴리스 공지
- Bootstrap v5.2.0 : 프론트엔드 컨포넌트 라이브러리, 릴리스 공지
- Gatsby v4.19.0 : 정적 웹사이트 생성기, 릴리스 공지
- Stimulus v3.1.0 : JavaScript 프레임워크, 릴리스 공지
- Spring Shell 2.1.0 : Spring 기반 인터렉티브 쉘, 릴리스 공지
Outsider
2022/08/01 21:19
2022/08/01 21:19
Comments