분류 전체보기 21

[WriterSide] Publishing and Access Control

개요 개발 중이던 프로젝트의 규모가 비대해지면서 문서화의 절실함을 느끼게 되었습니다. 그에 따라 다양한 문서 툴을 비교해보게 되었고, 실제로 사용해보면서 제가 느낀 각각의 특징은 다음과 같습니다.1. Notion 어찌보면 가장 보편적이고 강력한 문서툴이라고 할 수 있습니다. 기본적으로 제공해주는 다양한 템플렛들이 존재하고, 은둔고수들이 잘 정리해놓은 무료 템플렛 또한 여럿 존재하기 때문에 가장 먼저 후보에 올려놓은 문서툴이었습니다. 또한, 프로젝트 단위로 프라이빗한 공간에 작성하고 이를 한정된 사용자만 볼 수 있기 때문에 여러 팀원들과의 커뮤니케이션이 원활하였습니다. 허나, 한글을 사용하면 마지막 글자가 씹힌다거나, 네트워크 상태가 조금이라도 좋지 못하면 그 사이에 작성했던 문서들이 통으로 날아..

AWS 2024.04.24

Golang 입문기 - 문법 4

서론 이전 글까지 Golang에서 활용하는 타입에 대해서 공부해보았습니다. 이번 블로그를 끝으로 길고 길었던 타입에 대한 설명에 대한 마지막 투고가 될 것으로 예상합니다. Properties of types and values Underlying types (기본 타입들) 각 타입 T 에는 기본 타입들이 있습니다. T가 미리 선언된 Bool, 숫자 또는 문자열 타입 중 하나이거나 리터럴 타입이면 해당 기본 타입은 T 그 자체입니다. 그렇지 않으면 T의 기본 타입은 T가 선언에서 참조하는 타입의 기본 타입입니다. 타입 제약 조건의 기본 타입인 타입 매개 변수의 경우 항상 인터페이스입니다. type ( A1 = string A2 = A1 ) type ( B1 string B2 B1 B3 []B1 B4 B3 ..

Golang 2024.02.11

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