개발 환경 Express: 4.21.0 TypeScript: 4.9.5 ts-node: 10.9.2 문제 상황 GitHub Repository 에 이슈를 생성하기 위해 octokit 라이브러리를 사용하고 있었다. import { Octokit } from "octokit"; import env from "@modules/env"...
[AWS] EC2 에 ALB 없이 CloudFront, ACM 이용해서 HTTPS 인증서 적용하기
개요 AWS EC2 인스턴스에 ALB 대신 nginx 를 이용해서 HTTPS 통신이 가능하도록 ACM 으로 인증서를 발급하고 CloudFront 에 적용하는 방법을 정리했다. 아키텍처 AWS 아키텍처는 아래의 이미지와 같다. 큰 흐름은 아래와 같다. 웹 브라우저에서 백엔드 서버에 API 요청(HTTPS). 클라이언트가 보낸 요청을...
[Docker] GitHub Actions 로 Docker Image 를 arm64 로 빌드하기
개요 GitHub Actions 를 이용해서 Docker 이미지를 빌드할 때 arm64 아키텍처에서도 사용할 수 있도록 Docker 이미지를 빌드할 수 있는 방법을 소개한다. 멀티 플랫폼 빌드 필요성 기본적으로 사용하는 GitHub Actions Runner 의 CPU 아키텍처는 아직 amd64 만 지원한다. AWS EC2 인스턴스 중에서 ...
Amazon Linux 2023 docker compose 설치
개요 AWS EC2 에서 사용하는 Amazon Linux 2023 에서 Docker 와 Docker Compose 를 설치하는 방법을 정리했다. Docker 설치 패키지를 업데이트 한다. sudo yum update -y docker 를 설치한다. sudo yum install -y ...
[GitHub] Octokit 을 이용한 Issue 생성 시 Issue 생성자를 GitHub Bot 으로 변경하기
개요 GitHub Octokit(링크)를 이용해서 Issue 를 생성할 때, Issue 생성자를 GitHub Bot(GitHub App) 으로 변경하는 방법에 대해 정리했다. 배경 매일 한국 시간 오전 5시에 오늘 날씨 정보를 받아와서 GitHub Issue 로 등록하는 GitHub Actions 를 실행하고 있다. Issue 는 아래와 같이 ...
GitHub 오픈소스 기여하기
개요 개발을 시작한 이후 처음으로 오픈소스에 기여했다. 오픈소스에 기여한 이유와 오픈소스에 기여하는 과정, 그리고 이 과정에서 느낀 점을 정리했다. 오픈소스에 기여한 이유? 이번에 오픈소스 2개에 기여를 했는데, 각 오픈소스에 대한 간략한 설명과 기여한 이유는 아래와 같다. 1. SST ION 소개 SST ION(링크)는 프론트엔드 프레임...
[GitHub Actions] cron 비활성화 자동으로 막기 (keepalive workflow)
문제점 Github 공식 문서(링크)에 따르면, public repository 에 60일 동안 commit 이 발생하지 않으면 cron 으로 작동하는 Github Actions 는 비활성화 된다. Warning: To prevent unnecessary workflow runs, scheduled workflows may be disable...
[SQLD] PARTITION BY 이용해서 누적 합계 구하기
PARTITION BY PARTITION BY 절에 ORDER BY 를 사용하면 누적 합계를 표시한다. 예시 아래와 같은 테이블이 있다고 해보자. 사원번호 이름 부서코드 급여 101 Alice mkt 3000 ...
[SQLD] 정규화, 비정규화, 정규형(1~5)
정규화 개념 데이터의 중복을 줄이고 무결성을 지키기 위해 사용하는 데이터베이스 구성 방법. 무결성은 데이터의 정확성, 일관성, 유효성이 유지되는 것을 의미. 무결성의 종류는 4가지가 있는데, 여기서는 자세히 다루지 않음. 장점 데이터를 작고 관리하기 쉽게 나누어 데이터 중복을 제거. 단...
[Java] orElse 와 orElseGet 의 차이
개요 Optional 객체의 메서드인 orElse 와 orElseGet 은 매개변수로 메서드를 전달했을 때 다른 방식으로 작동한다. 결론부터 말하면 아래와 같다. orElse: null 여부와 상관없이 메서드 실행 orElseGet: null 일 때만 메서드 실행 Optional 객체의 값이 있는 경우에는 어떻게 동작하는지 살펴보자....