Overview nestJS는 rxjs를 이용하여 SSE를 기본지원합니다. 그런데 다른 SSE 엔드포인트를 프록시하거나 하는 작업을 할 때 컨벤션이 정해져있지 않아요. 이 글에선, SSE 프록시 위주로 빠르게 설명합니다. SSE Decorator import { Sse } from '@nestjs/common'; Sse라는 데코레이터가 있습니다. 이걸 이용하면 기본적으로 Sse가 구현 가능합니다. Controller @Sse('/proxy') exampleReactiveResponse(): Observable { try { return this.yachoService.exampleReactiveProxy(); } catch (e: any) { this.logger.error(e); } } 컨트롤러에선 에..
Overview stacked PR은 여러 장점이 있습니다. stacked PR은 특히 큰 변경사항을 여러 사람이 동시에 진행할 때, 그리고 code review가 필수적일 때 아주 효율적인데요, 그 이유로는 stacked changes 들은 현재 어떤 코드가 리뷰중인지와 관계없이 현재 일을 완전히 병렬수행할 수 있게 만들어줍니다. 뭐가 바뀌었는지 쉽게 볼 수 있습니다. 등이 있습니다. 하지만 GitHub은 현재 이 stacked PR을 제대로 지원하지 않고 있어요. graphite는 GitHub을 이용하면서도 stacked PR을 잘 지원하는데요, 자신들의 자체 PR 창인 app.graphite.dev 도 지원합니다. 기본적으로 graphite는 브랜치들의 묶음을 하나의 feature branch처럼 ..
들어가며 outbound IP를 고정해야 할 일은 많습니다. whitelisting 되어있는 사이트의 API를 찌른다거나, on-premise 상품들을 이용할 때엔 이 outbound IP가 고정이 되어있어야만 합니다. EC2의 경우는 그냥 elastic IP를 할당해주면 되지만, ECS는 그렇게 쉽게 되지 않습니다. ECS 서비스가 public IP를 제공하긴 하는데요, 얘를 static IP로 사용하진 못합니다. 이건 큰 단점이죠. Prerequisites VPC와 subnet, routing table의 개념을 먼저 잠깐 다시 살펴봅시다. VPC는 아마존에 설치한 내 사설 공유기의 느낌입니다. 특정 IP 대역 (10.0.0.0/16 과 같은 대역을 의미합니다) 까지의 땅을 딱 그어놓고, 요기 안에 ..
들어가며 배포시 항상 되는건 아닌데, 한 1/2 확률로 Resourceinitializationerror가 떴다. 에러 문구를 보면 ssm 접근이 안된다, ecr 접근이 안된다 뭐 이런 내용이였는데 결국 인터넷 접근이 안돼서 도커 이미지를 다운 못받거나 (같은 region에 IAM 설정이 잘 되어있는데도...!) ssm 에서 환경 변수를 가져오지 못한다는 내용이였다. 뭐 일단 VPC나 routing table 문제일 것이라 추측은 했는데 막상 해결하려고 하니 딱히 답이 보이지는 않는 상황... 해결 생각보다 해결은 간단하게 됐다. VPC를 선택한 후 private subnet을 제외만 해주면 되는 일... 만약 private subnet을 써야 한다면, private subnet의 CIDR을 꼭 확인하자..
1. 들어가며 코틀린을 백엔드로 쓰면 ORM 혹은 DB connection 을 어떤 프로그램을 써서 해결해야할지 고민을 많이들 합니다. 많은 경험이 있는건 아니지만, 전 exposed를 추천하는데요, jdbc 기반이라 (2022/10 현재 시점) blocking logic이 있다는 단점에도 불구하고 r2dbc보다 훨씬 더 좋은 사용성, 뛰어난 batch insertion 기능이 있기 때문입니다. 간단하게 보자면 이런 방식으로 batch insert를 할 수 있습니다. 사용성이 아주 좋아서 간편하게 많은 양의 데이터를 바로 DB에 저장할 수 있습니다. batchInsert.kt YachoTable .batchInsert( data = toInsertYachos, ignore = true ) { toInse..
회사에서 운영체제 - 아주 쉬운 세 가지 이야기 책으로 스터디를 하게 되었다. 사실 내가 공룡책으로 하자고 한 거지만 ㅎㅎ... 시니어 다른 분께서 엄청 좋은 책 있다고 해서, 그 분이 엄청 잘하는걸 알기 때문에 믿고 그 책으로 그냥 바꿔서 선택했다. 요즘 요 내용 살펴보고 있는데, 진짜 내용 괜찮은 것 같다. 대충 초반 내용은 C를 통해서 어떻게 운영체제의 기본 동작을 구현하는가... 에 관련한 내용이고, 가상화 (virtual) / 병행성 (concurrency) / 연속성 (persistence) 세 가지 주제를 가지고 이야기를 한다. 첫 세션은 내가 하기로 한만큼 내가 준비했는데, 그냥 50장까지 내가 따로 ppt로 다 정리해서 블로그에 올리면 누군가는 도움되지 않을까? 물론 6개월 후 나도 어쩌..
솔라나 디앱을 만들면 가장 먼저 해보는 것이 있다. 바로 채팅앱인데, 개념은 간단하다. 데이터를 체인에 올리고, 상대방은 그 데이터를 읽는다. 물론 체인 정보는 누구나 해독 가능하기 때문에, 누구나 해당 글을 읽을 수 있다. 그런데 이건 사실 말장난인게 ‘보내는 사람’과 ‘받는 사람’은 이미 ED-25519 커브 private key를 가지고 있다. 말인즉슨 채팅 데이터를 두 사람만 이해할 수 있게 encrypt할 수 있다는 것이다. 단, 채팅 앱과 달리 이런 온체인 프로그램은 데이터를 전송, 저장할 때 모두 코스트가 든다. 즉, 내가 뭔가 데이터를 보낼 때마다 사용자가 직접 네트워크 유지 비용을 내야한다는 것이다. 클레이튼의 경우 이걸 회사 계정에서 낼 수도 있는 기능이 있고 솔라나도 사실 회사가 이 ..
들어가며 러스트와 타입스크립트는 컴파일언어/인터프리팅 언어로 원래 속도차이가 클 수밖에 없습니다만... 이게 어느 정도 차이나는지 사실 숫자만 들어선 잘 느껴지지 않습니다. 이걸 확실히 눈에 보이게 한번 작업해봤습니다. 원하는 것 전 언제나 제 필명인 'YACHO'로 시작하는 솔라나 주소가 갖고싶었는데요, 처음엔 자바스크립트로 이걸 랜덤하게 뽑아내려고 하다보니 너무 느려서 러스트로 재작성해 돌리면 어떨까 생각했어요. 그래서 실제로 돌려봤습니다. 준비된 스크립트 뭐 간단합니다. 1000번에 한번 퍼블릭키 내보고, 만약 prefix가 YACHO와 같다면 결과를 콘솔에 찍는 코드에요. 이 코드를 러스트로도 똑같이 작성해보겠습니다. 같은 로직입니다. 혹시 궁금하실까봐 anchor.toml 파일도 같이 올려드릴게..