분류 전체보기 39

Make a Scheduler With AWS EventBridge

문제 사항 AWS Lambda의 Cold Start 문제로 인해 최대 15초 정도 시간이 소요되는 API가 존재 요구 사항 10분마다 해당 Lambda를 호출해주어서 Lambda Container가 Terminating 상태에 빠지지 않게 조치 필요 호출 비용을 최소화하기 위해서 트래픽이 가장 많이 몰리는 특정 시간에만 Warming 해주는 조치 필요 조치 사항 AWS EventBridge를 활용해서 Lambda를 정기적으로 호출해주는 Cron 작업을 선언해주었고, 이를 AWS CDK를 활용하여 IaaC 특성을 살려주었다. 활용한 코드 예시는 다음과 같다. import {Construct} from 'constructs' import * as cdk from 'aws-cdk-lib' import * as..

AWS 2023.11.21

Golang 입문기 - 문법 3

서두 저번 게시글에서는 Golang의 여러 타입에 대해서 알아보았다. 이번 시간에는 추가적인 Golang 타입에 대해서 알아볼 예정이다. Interface Types (인터페이스 타입) 인터페이스 타입은 타입의 집합을 정의한다. 인터페이스 타입의 변수는 인터페이스 타입 집합에 있는 모든 타입의 값을 저장할 수 있다. 이러한 타입을 인터페이스를 구현한다고 칭한다. 인터페이스 타입의 초기화되지 않은 변수 값은 nil이다. InterfaceType = "interface" "{" { InterfaceElem ";" } "}" . InterfaceElem = MethodElem | TypeElem . MethodElem = MethodName Signature . MethodName = identifier . ..

Golang 2023.11.20

Deploy Selenium to the AWS Machine

요구사항 Selenium Grid를 AWS Machine (ex. EC2, ECS, EKS 등등)에 배포하기 배포된 Selenium을 외부에서 접근해서 사용하기 실패한 이력들 1. EC2 https://github.com/SeleniumHQ/docker-selenium/blob/trunk/docker-compose-v3.yml 간단하게 docker-compose로 구성된 위 파일을 그대로 EC2에 배포해서 테스트 해보았다. docker-compose -f docker-compose-v3.yml up -d EC2 인스턴스는 Ubuntu 22.04 버전을 사용하였으며, 보안 그룹으로 3000-8000의 포트들을 모든 Ipv4 주소에 열어놓았다. 그리고 해당 Selenium을 테스트하는 코드는 다음과 같이 P..

AWS 2023.11.18

AWS CDK - API Gateway Fix Note 1

요구사항 별도 Stack으로 API Gateway를 생성해야 한다. 1번에서 별도 생성된 API Gateway를 다른 스택에서 참조하여서, Lambda Function의 트리거로 사용해야한다. Dev, Prod 별로 Stage를 분기해서 배포해야한다. 문제상황 요구사항 1, 2번 까지는 수월하게 진행되었다. // API Gateway Stack import {Construct} from 'constructs' import * as cdk from 'aws-cdk-lib' import {Deployment, Stage} from "aws-cdk-lib/aws-apigateway"; export class ApiGatewayStack extends cdk.Stack { public readonly apiGa..

AWS 2023.11.07

Clean Architecture 소프트웨어 구조와 설계의 원칙 - 정리 1일차

개요 최근에 좋은 기회가 되어 개발 스터디를 시작하게 되었다. 단순 코드만 읊는게 아닌, 개발의 본질적인 부분에 대해서 많이 생각해볼 수 있도록 첫 주제로 클린 아키텍처를 선정하였고, 이를 위해 로버트 C. 마틴이 저술한 `클린 아키텍처 - 소프트웨어 구조와 설계의 원칙` 이라는 책을 읽고 내용을 정리하고자 한다. 1장. 설계와 아키텍처란? 아키텍처: 저수준의 세부사항과는 분리된 고수준의 무언가 설계: 저수준의 구조 또는 결정사항 등을 의미할 때가 많음 소프트웨어에서 이 둘의 경계는 뚜렷하지 않고 고수준에서 저수준으로 향하는 의사결정의 연속성만 존재할 뿐이다. 좋은 소프트웨어 설계의 목표는 무엇이 되어야 할까?? > 필요한 시스템을 만들고 유지보수하는 데에 투입되는 인력을 최소화하는 것이다. 배포가 진행..

Clean Architecture 2023.10.27

Golang 입문기 - 문법 2

서두 저번 게시글에서는 주로 문자열 관련된 Golang의 특징을 알아보았다. 이번 시간에는 상수, 변수, 타입에 대해서 집중적으로 알아볼 계획이다. 상수 (Constants) Golang에서 사용하는 상수에는 Boolean (진리값), Rune(유니코드 코드 포인트를 식별하는 정수 값), Integer (정수), Floating-point (부동소수점), Imaginary (허수), String (문자열) 상수가 있다. 룬, 정수, 부동 소수점 및 허수 상수를 집합적으로 숫자 상수라고 한다. 상수 값은 룬, 정수, 부동 소수점, 허수 또는 문자열 리터럴, 상수를 나타내는 식별자, 상수 표현식, 상수인 결과로의 변환 또는 일부 내장된 결과값으로 표시된다. 또한, 상수 인수에 적용되는 min 또는 max, ..

Golang 2023.10.27

Golang 입문기 - 문법 1

서두 이전 게시글에서, Golang이라는 프로그래밍 언어의 의의, 생겨난 목적 등등을 확인해보았다. 이번 게시글부터는 Golang에서 사용하는 문법과 다양한 언어적 특징을 알아보겠다. 해당 게시글은 https://go.dev/ref/spec 해당 페이지를 참조해서 진행하였다. 소개 해당 버전은 pre-Go1.18 이후의 버전으로 genric이 추가된 버전을 타케팅한다. Golang은 시스템 프로그래밍을 염두에 두고 설계된 범용 언어이다. 이는 강력한 타입형 언어이고, GC를 지원하며 동시 프로그래밍을 명시적으로 지원한다. Golang으로 만들어진 프로그램들은 종속성을 효율적으로 관리할 수 있는 특징을 가진 패키지들로 구성된다. Golang의 문법적 구문은 간결하고 구문 분석이 간단하므로 통합 개발 환경과..

Golang 2023.10.24

Golang 입문기 - 0

계기 한참 회사에서 풀스택 잡부로 일하면서 다양한 프레임워크, 프로그래밍 언어를 접할 기회가 있었다 (Java, Javascript, Typescript, Dart, Python, Kotlin 등등). 그 정도에 차이가 있을 뿐이지 전부 정적 타입 검사를 지원하는 아~주 고급 언어들이다. 이러한 언어들로 프로그래밍을 진행하다보니 문득, 이렇게 고급스럽게 만들어진 언어들에만 익숙해져 있어서 프로그래밍 언어 그 자체의 최적화라던가, 가비지 컬렉션, 박싱/언박싱 등등 프로그래밍 언어의 내면에 대해서 얕은 지식만 가지고 있는 채로 지나가고 있다라는 생각이 들었다. 또한, 매번 규모가 작은 스타트업에서 근무하면서 프로젝트의 아키텍처, 개발론 (TDD, DDD, BDD 등등)과 같은 이론적이고 설계적인 부분에 대해..

Golang 2023.10.20

MLOps 기본 개념

개요 MLOps를 구현할 기회가 생겨서 알아보던 중에 기본적인 개념 정도는 정리를 하고 들어가야 할 것 같아서 찾아보던 중에, GCP에서 제공하는 좋은 문서가 있어서 이를 공부하면서 정리해보는 느낌으로 게시글을 작성하려 합니다. 아예 AI 쪽으로는 문외한이라 가장 기본적인 부분부터 작성될 예정이니, 이 글을 보실 분들도 참고해주시면 좋을 것 같습니다. 참고한 문서는 아래와 같습니다. https://cloud.google.com/architecture/mlops-continuous-delivery-and-automation-pipelines-in-machine-learning?hl=ko MLOps: 머신러닝의 지속적 배포 및 자동화 파이프라인 | 클라우드 아키텍처 센터 | Google Cloud 의견 보내..

MLOps 2023.06.21

In NestJS's microservice, let it fix that cannot refer another microservice (2)

지난 글에서, NestJS 프레임워크의 microservice에서 다른 microservic를 참조하려고 할때 module init이 정상적으로 이뤄지지 않는 이슈가 있다고 설명했습니다. 해당 글을 작성한 이후에 NestJS의 INestApplication 쪽을 추가적으로 찾아보다가 아래 문서에서 INestApplicationContext 인터페이스를 inherit 하는 인터페이스가 2개 있다는 것을 발견했습니다. http://nestjs-doc.exceptionfound.com/interfaces/inestapplicationcontext.html 하나는 INestApplication이고 다른 하나는 INestMicroservice 였습니다. INestApplication은 일반적인 monolisic ..

NestJS 2023.04.08