전체 글 94

Jenkins 빌드 최적화를 위한 멀티프로세스 개선

현재 사용하고 있는 빌더에서 번들링 작업 시 멀티프로세스를 사용하고 있지만, Jenkins 빌드 머신의 24개 코어를 충분히 활용하지 못해 빌드 시간이 오래 걸리는 문제가 발생하고 있다는 사실을 찾아냈다. 기존 빌더에서는 워커 개수를 4개로 하드코딩하여 사용하고 있었기 때문에 발생한 문제이며 이를 개선하기 위해 다음과 같은 작업을 진행했다.CPU 코어 수에 맞춘 워커 개수 증가 먼저 os.cpus().length;를 사용하여 CPU 코어 개수를 얻고, 해당 개수만큼 worker-pool의 개수를 증가시켜 효율을 높였다.const numWorkers = os.cpus().length; 청크 분배 방식 개선 위의 CPU 코어에 맞게 워커 개수를 늘리는 작업 자체는 쉬운 작업이지만 이 때 문제가 발생한 부분이..

aws 2024.08.05

[AWS]데이터 유입, 변환, 분석

AWS Lake Formation조직이 커지면 데이터가 파편화되어 저장되기때문에 분석 업무가 어려워진다 이를 해결하는 방법이 바로 데이터 레이크이다.데이터 레이크는 다양한 구조의 데이터를 수집 및 저장하는 중앙화 데이터베이스이다. 데이터 레이크에 데이터 저장 시 데이터 구조화, 정렬, 복제 등의 작업을 할 필요가 없으며, 데이터 레이크에 있는 그대로 검색, 분석, 시각화, 상관 관계 분석 작업 수행이 가능하다.AWS Lake Formation은 AWS 또는 온프레미스 어디에 있는 데이터여도 수집, 분석할 수 있는 데이터 레이크 서비스이며 또 다른 서비스인 AWS Glue를 이용해 Extract, Transform, Load 작업 즉 데이터 추출, 변환, 로딩 작업을 수행한다. AWS Glue는 Apach..

aws 2024.08.04

[AWS] DNS와 CDN: Route 53과 CloudFront

도메인 네임 시스템(DNS)AWS에서 인터넷 네트워크로 연결되는 서비스 시작 시 해당 시버스를 도메인 네임으로 연결할 수 있으며 Amazon Route 53이 이를 도와주는 서비스이다.네임스페이스IP 주소를 사람이 식별하기 편한 이름으로 변경 시 중복되는 이름이 있으면 안되기떄문에 이러한 인터넷 네임 시스템은 네임스페이스라는 도메인 네임 체계로 관리된다. 인터넷은 퍼블릭, 프라이빗 IP를 통하거나 TLD를 통해 접근할 수 있는 네임스페이스로 구획이 나눠진 가상의 공간이라 말할 수 있다.네임 서버amazon.com과 IP 주소를 연결하는 일은 네임 서버가 담당한다. 모든 컴퓨터는 로컬에서 접근할 수 있는 간단한 네임서버 데이터베이스를 지니며 여기에 localhost와 같은 호스트네임 엔트리, IP 주소가 ..

aws 2024.08.04

React Lane 간단 정리

개요Lane이란 동시성 문제를 해결하기 위해 나온 개념이다. Lane은 어떤 작업을 처리할 때 이를 먼저 시작된 작업을 처리하는 시간순이 아니라 우선 순위에 따라 해당 작업을 먼저 처리할 수 있도록 도와주는 역할을 한다. 현재 react가 렌더링 중이더라도 유저 액션, 애니메이션과 같은 우선순위가 더 높은 작업이 발생된다면 현재 렌더링 과정을 중단하고 우선순위가 높은 작업을 먼저 처리한 뒤 다시 원래 작업하던 곳으로 돌아가 렌더링을 진행할 수 있게 만들어준다.Lane이란react 내부에서 Lane은 아래와 같이 정의되어 있다.const NoLanes: Lanes = /* */ 0b0000000000000000000000000000000const NoLane: La..

frontend 2024.08.03

React Fiber동작 간단 정리

개요브라우저의 Javascript 엔진은 단일 스레드로 동작한다. 즉 Javascript는 하나의 스레드에서 모든 로직을 순차적으로 실행한다. 여기에는 UI 업데이트 작업도 포함되어있으며 스레드가 하나이기에 UI 업데이트 작업이 있더라도 앞에 다른 작업이 있다면 UI 업데이트가 중단되는 문제가 생기게 된다. React에서는 이러한 UI 업데이트 작업을 최적화기위해 Fiber라는 개념을 도입하였다. Fiber구조 에서 가장 중요한 키워드는 동시성 이며 Fiber는 동시성 스케쥴링을 통해 UI 업데이트 작업에 우선순위를 부여하여 더 높은 우선순위의 경우 먼저 처리해주는 방식으로 동작하도록 만들어주는 역할을 한다.이로 인해 javascript의 UI 업데이트 작업이 더 효율적으로 동작하게 된다.Fiber 알고..

frontend 2024.08.02

[AWS]데이터 유입, 변환, 분석

AWS Lake Formation조직이 커지면 데이터가 파편화되어 저장되기때문에 분석 업무가 어려워진다 이를 해결하는 방법이 바로 데이터 레이크이다.데이터 레이크는 다양한 구조의 데이터를 수집 및 저장하는 중앙화 데이터베이스이다. 데이터 레이크에 데이터 저장 시 데이터 구조화, 정렬, 복제 등의 작업을 할 필요가 없으며, 데이터 레이크에 있는 그대로 검색, 분석, 시각화, 상관 관계 분석 작업 수행이 가능하다.AWS Lake Formation은 AWS 또는 온프레미스 어디에 있는 데이터여도 수집, 분석할 수 있는 데이터 레이크 서비스이며 또 다른 서비스인 AWS Glue를 이용해 Extract, Transform, Load 작업 즉 데이터 추출, 변환, 로딩 작업을 수행한다. AWS Glue는 Apach..

aws 2024.08.01

unused-import 제거를 통한 빌더 성능 개선

tsc는 컴파일시에 사용하지 않더라도 import 된 경로가 있다면 해당 경로의 타입에 문제가 있는지 없는지를 진단하는 과정을 거친다. (단 컴파일 결과에서는 제외됨) 사용하지 않는 import가 있고 만약 파일들이 많이 얽혀있다면 이로 인해 tsc 컴파일 시간이 증가할 가능성이 있다. 따라서 사용하지 않는 import 구문들을 제거한다면 tsc 컴파일 시간이 감소될것이라고 추측하였으며 이를 eslint를 사용하여 제거한 뒤 테스트를 진행해보기로 결정하였다. import와 관련된 eslint plugin는 여러가지가 있지만 기존 eslint rule의 변경이 필요한건 아니며 순수하게 unused import와 관련된 작업만 필요하기에 이와 딱 맞는 eslint plugin을 설치찾아 설치해준다. 이 경우..

builder 2024.07.31

[AWS]DNS와 CDN: Route 53과 CloudFront

도메인 네임 시스템(DNS)AWS에서 인터넷 네트워크로 연결되는 서비스 시작 시 해당 시버스를 도메인 네임으로 연결할 수 있으며 Amazon Route 53이 이를 도와주는 서비스이다.네임스페이스IP 주소를 사람이 식별하기 편한 이름으로 변경 시 중복되는 이름이 있으면 안되기떄문에 이러한 인터넷 네임 시스템은 네임스페이스라는 도메인 네임 체계로 관리된다. 인터넷은 퍼블릭, 프라이빗 IP를 통하거나 TLD를 통해 접근할 수 있는 네임스페이스로 구획이 나눠진 가상의 공간이라 말할 수 있다.네임 서버amazon.com과 IP 주소를 연결하는 일은 네임 서버가 담당한다. 모든 컴퓨터는 로컬에서 접근할 수 있는 간단한 네임서버 데이터베이스를 지니며 여기에 localhost와 같은 호스트네임 엔트리, IP 주소가 ..

aws 2024.07.30

[AWS] 모니터링

CloudTrail, CloudWatch, AWS Config는 AWS 리소스, 애플리케이션 상태, 성능, 보안 수준을 관리하기 위한 모니터링 서비스이다.성능 모니터링: 리소스 스케일업, 스케일 아웃 필요 유무, 사용량 급증 시간대 등을 판단할 수 있다.애플리케이션 문제점 감지: 로그를 통해 잠재적 문제점을 파악할 수 있으며 데이터 오류, 타임아웃, 기타 이슈 해결 등 큰 사태를 미연에 방지할 수 있다.보안 문제점 감시: 사용자가 어떤 영역에 접근하는지, 접근 내역 감사를 통해 보안 위험을 조기에 차단할 수 있다.로그 이벤트: AWS 리소스 관련 모든 로그는 남게되며 보안, 문제 해결 등에서 사용할 수 있다. 상세한 기록은 문제 상황의 원인, 결과, 범위 파악에 큰 도움이 된다.AWS 리소스 인벤토리 관..

aws 2024.07.28

TypeScript 컴파일러에서의 진단 로직

타입 스크립트 컴파일 시 declaration 옵션을 키면 컴파일 속도가 빨라질까? 최근 빌더 개선 작업을 하고있는데 통한 컴파일 시 타입 진단 작업이 너무 오래걸려 해당 시간을 줄이기 위해 가설을 하나 세웠다. 용량이 큰 모듈의 tsconfig에서 declaration 옵션을 켜서 컴파일 시 .d.ts 파일을 생성하게 해주고 이후 타입 진단 과정에서 이를 참조해서 타입을 진단하면 컴파일 속도가 빨라질 수도 있다, 그리고 이는 d.ts 파일을 생성하는데 걸리는 시간과 참조 타입을 사용하여 감소하는 시간을 적절히 고려해야한다는 가설이다. 이 글은 이 가설을 검증하기 위한 글이다. 가설큰 디렉토리를 컴파일할 때 해당 디렉토리에 d.ts 파일을 추가해 컴파일하면 d.ts 파일을 생성한 뒤 타입 진단을 진행하기..

typescript 2024.07.24