개발 18

Typescript compilerHost를 사용해 컴파일 할 때 주의사항

Typescript compilerHost는 현재 app의 pwd 경로를 기준으로 @types/node 등의 기본 의존성 타입을 찾는다. 따라서 mono repo와 같은 복잡한 구조인 경우 실행되는 app의 경로를 잘 지정하거나, compilerHost.getCurrentDirectory를 overwrite 하여 정확한 경로를 수동으로 지정해줄 필요가 있다. // typescript는 cwd를 기준으로 node_modules/typescript/lib을 기본 lib 경로로 사용한다. 정확히 바라보도록 설정해준다. compilerHost.getCurrentDirectory = () => { console.log(`compilerHost.getCurrentDirectory`, __dirname, path.r..

개발/NodeJS 2024.03.20

Docker / Buildkit 에서 SOURCE_DATE_EPOCH와 rewrite-timestamp 설정

Docker / Buildkit 에서 SOURCE_DATE_EPOCH와 rewrite-timestamp 설정 컨테이너 이미지를 빌드하는 과정에서 동일한 이미지 레이어 구성을 가졌음에도 불구하고 빌드 캐시를 활용하지 않는 경우, 최종 이미지의 해시값이 매번 변경되는 현상이 발생한다. 이러한 변화는 이미지 매니페스트와 각 빌드 단계에서 생성되는 레이어에 현재 빌드 시간이 포함되어 있기 때문으로, 캐시를 재활용하지 않을 경우 동일한 컨텍스트, 소스, 도커파일이라 하더라도 매번 다른 이미지가 생성된다. 기술적 배경을 살펴보면, 도커파일 내에서 apt와 같은 패키지 매니저를 통해 원격 설치를 진행하는 경우, 매 호출 시 동일한 명령어로 이미지를 구성하더라도 실제 파일 시스템에는 변경 사항이 발생할 수 있어 이와 ..

개발/ETC 2024.03.13

pnpm 심볼릭 링크 버그 수정하기

개요 최근 내부 저장소의 기본 의존성을 최신 버전으로 업그레이드한 이후, 특정 서버가 런타임 중에 중단되기 시작했다. ERROR 1: uncaughtException : Error: libtensorflow.so.2: cannot open shared object file: No such file or directory TensorFlow의 Node.js 버전은 모듈 설치 후 설치 스크립트에 의해 운영 체제별로 의존성을 다운로드하거나 소스 코드에서 빌드되며, 결국 빌드된 바이너리 파일을 심볼릭 링크로 연결한 특정 경로를 생성한다. TensorFlow Node.js API는 이러한 심볼릭 링크를 참조한다. 이 모듈의 내부 작동 방식은 사용자가 알 필요가 없어야 한다. 정상적으로 빌드가 완료되면 그냥 작동해..

개발/NodeJS 2024.02.26

SYN FLOOD 공격 및 대응 사례

서론 최근 우리 서비스는 네트워크 이상 현상과 그로 인해 발생한 장애를 경험했다. 이 문제는 특정 시간대에 집중적으로 발생했으며, AWS GlobalAccelerator, ELB (L4 NLB), EKS 구성을 통해 제공되는 서비스에 영향을 미쳤다. 문제는 사용자 수의 급격한 감소와 서비스 오동작으로 나타났다. 여러 시스템 지표와 로그 분석 결과 SYN FLOOD 공격으로 인한 것으로 강하게 의심되었다. SYN FLOOD 공격의 원리 SYN FLOOD 공격은 TCP 연결 과정에서의 취약점을 이용하는 DoS (Denial of Service) 공격 유형 중 하나다. 공격자는 대량의 SYN 요청을 목표 서버에 보내 서버의 반응을 기다리는 SYN-RECEIVED 상태의 연결을 대량으로 생성하게 만든다. 서버는..

개발/AWS 2024.02.08

AWS OpenSearch 에서 S3 Snapshot Repository를 추가하려고 할 때

Opensearch를 복제하기 위해 다른 s3 버킷을 repository로하는 snapshot을 생성해야했다. ElasticSearch와 달리 오픈서치는 스냅샷 UI에서 S3를 추가할 수 없게 되어있다. Devtool이나 UI로 추가하는것이 아니라 Rest API로 추가해야하는데, 추가할때에도 반드시 role_arn을 인자로 주어야한다. 이게 골때리는데, role_arn에 s3 버킷 사용권한이 부여되어있어야 하는 것은 물론, 이 role_arn의 신뢰정책에 es.amazonaws.com 추가가 필요하고 마지막으로 이 role_arn을 부여할 수 있는 RestAPI 사용자의 신원인증 및 role_arn의 Passrole 권한까지 필요하다. (access key 같은걸론 추가할 수 없다. ES는 되는데.....

개발/AWS 2023.11.17

ElasticSearch Data Stream 주의사항

왜인지 문서를 정확히 찾지 못했으나, 일반 Index Template의 경우 date_detection이 기본으로 true이나, ElasticSearch Managed Component Template에 data-streams-mappings에 date_detection: false로 설정되어있어, data stream으로 데이터를 인덱싱 할 경우 ISO와 같은 DateTime 필드를 dynamic mapping 할 때 keyword로 매핑되는 문제가 발생한다. 위 컴포넌트의 date_detection을 수정한 다음 다시 인덱싱 해야하는 불편함이 있다. 벤치마크 성능 문제 때문인가... 너무하는거 아니냐고...

개발/ETC 2023.11.02

Windows 11 에서 Hyper-V 사용시 External Switch 문제 발생 및 해결 과정

Windows 10에서 11로 업그레이드 후 잘 사용하던 Hyper-V 우분투 이미지에서 이더넷 연결이 되지 않고 인터넷도 연결되지 않게 되었다. 우선 Mac이 변경된것을 확인하여 공유기의 DHCP에 Mac 할당을 변경해주고 다시 netplan apply 등을 해보았으나 연결이 되지 않았다. netplan의 Address 설정을 제거하고 DHCP4: true를 주고 재시도 해보았으나 여전히 되지 않았다. 하도 이상해서 검색을 좀 해보다가 Windows11 22H2 업데이트 이후 External Switch에 문제가 있다는 스레드를 발견했다. https://learn.microsoft.com/en-us/answers/questions/881974/windows-11-22h2-broke-custom-virt..

개발/ETC 2022.09.22

Tensorflow in Kubernetes - CPU Memory Troubleshooting

K8s에서 텐서플로우의 CPU Training을 돌릴 때 겪은 문제 CPU / Memory 사용량이 치솟아 QoS Burstable / BestEffort로는 Pod Eviction이 발생함 CPU / Memory의 Request와 Limit을 동일하게 설정해 QoS를 Guaranteed로 주면 OOM Killed로 죽음 원인은 기본 System Malloc을 사용할 때 Python TF가 돌면서 메모리 할당을 VM Memory Limit를 보지 않고 노드 호스트를 기준으로 동작해 Pod의 Limit를 초과하는 Memory를 사용해 OOM이 발생하는 것 같다. 이것 대신 구글의 libtcmalloc으로 변경해주면 된다. https://stackoverflow.com/a/57288305 TF 학습 이미지에..

개발/Kubernetes 2022.09.19

Angular에서 Monaco Editor를 사용할 때 커스텀 언어 워커 사용하기

Angular (여기선 13.0)를 사용할 때 Monaco Editor를 쓰는 방법이 몇가지 있는데 편의를 위해 ngx-monaco-editor 와 같은 모나코 래핑 컴포넌트를 사용하면 편한데, 여기에 더해 커스텀 언어용 워커를 사용하고자 한다면 의외로 꽤 고생할만한 포인트가 있어 정리해둡니다. 저의 경우 monaco yaml 에디터에 JSONSchema를 사용할 수 있게 해주는 monaco-yaml 워커를 활성화 시켰으므로 이 기준으로 설명합니다. 다른 언어 워커를 사용하는 경우 monaco-yaml 부분만 교체하면 대동소이 합니다. monaco를 amd 번들링으로 로드하는 ngx-monaco-editor를 그냥 쓰거나 별도로 vs/min 경로나 CDN등에서 monaco-editor를 가져오는 경우 E..

개발/ETC 2022.06.25