본문 바로가기

전체 글

(152)
GKE http -> https 리디렉션 GCE Ingress Controller를 사용하는 경우에 아래와 같이 설정해주면 됩니다. http2httpsConfig.yaml apiVersion: networking.gke.io/v1beta1 kind: FrontendConfig metadata: name: http-to-https-config spec: redirectToHttps: enabled: true ingress.yaml apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: ... annotations: ... networking.gke.io/v1beta1.FrontendConfig: http-to-https-config # 추가 ...
HttpOnly 쿠키를 활용한 JWT 로그인 구현 배경 JWT를 구현하는 방법은 요청 헤더에 토큰을 포함해서 전송하는 방법이 있지만, 어차피 쿠키나 localstorage에 토큰을 저장해야 하므로, 좀 더 안전한 방법인 httponly가 적용된 쿠키를 활용해 구현해보려 합니다. 또한, Safari에선 HttpOnly 옵션을 적용하지 않으면 쿠키를 사용할 수 없었기 때문에 반 강제(?)로 이 방법을 사용하게 되었습니다. HttpOnly? 쿠키에 javascript로 직접 접근할 수 없도록 하는 옵션입니다. 따라서 XSS(Cross Site Script) 공격에 대한 방어 수단이 될 수 있습니다. 이 옵션을 쿠키에 적용하려면 백엔드에서 응답할 때 이 옵션을 적용한 쿠키를 만들어서 응답해야 합니다. 이 쿠키에는 개발자도 접근할 수 없으므로, 백엔드 서버로 전..
GCS 버킷에 Cloud CDN 적용하기 목표 브라우저에서 Cloud CDN이 제공하는 파일에 접근하기 버킷 생성 Cloud CDN과 연결할 버킷을 만들어 줍니다. 외부 공개를 위해 '이 버킷에 공개 액세스 방지 적용'을 해제해줍니다. 또한 외부 공개를 위해 엑세스 수정에서 권한을 추가해줘야 합니다. allUser가 저장소 개체 뷰어 권한을 갖게 되면 누구나 볼 수 있으므로, 보안에 취약하기 때문에 실제 배포할 땐 서명된 URL을 사용하는 것이 좋습니다. 로드 밸런서(부하 분산기) 생성 도메인과 연결을 위해 아이피를 생성해 주었습니다. HTTPS를 사용한다면 인증서를 새로 만들어서 진행하면 됩니다. 백엔드 구성에선 백엔드 버킷으로 만들어주세요. 찾아보기에서 이전에 생성한 버킷을 선택해주세요. Cloud CDN 사용을 체크해주고 백엔드를 만들어주..
GCS에 파일 업로드(NestJS) 배경 이미지나 비디오 같은 정적 파일 로딩 레이턴시를 줄이기 위해 Cloud CDN 서비스를 사용해야 했고, GCP에서 백엔드로 운영 중인 NestJS에서 이미지를 저장할 때 이를 적용해야 해서 나중에 참고할 수 있도록 글로 정리하게 되었습니다. 버킷 생성 GCS에 업로드 하기 전에 먼저 저장소를 생성해야 합니다. GCP 메뉴 중 Cloud Storage로 이동해서 버킷을 생성해 줍니다. 다음으로 백엔드가 GCS에 접근할 수 있도록 키를 발급해야 합니다. 'IAM > 서비스 계정'으로 이동해서 저장소 관리자 권한을 부여한 서비스 계정을 만들고 키를 생성해 줍니다. 생성한 서비스 계정으로 이동해서 json 키를 생성합니다. 다운받은 키 내용 모두를 환경설정 파일로 만들어서 프로젝트 내에 저장합니다. 깃에 ..
Dockerfile 빌드 시 매개변수 전달하기 Dockerfile을 빌드할 때, 개발 또는 배포의 환경변수 값을 Dockerfile로 전달해줘야 했다. 변수로 전달해주려면 빌드할 때 --build-arg 옵션으로 전달해줄 수 있다. docker build --build-arg ENV=dev . Dockerfile에선 이 변수를 아래처럼 사용할 수 있다. FROM node:16-alpine AS builder ARG ENV # 변수 정의 RUN yarn build:"$ENV" # 양 옆에 쌍따옴표를 붙여줘야 한다
[GKE] Ingress 구성 및 SSL 적용 테스트 환경 이 글은 ingress 이외의 서비스가 이미 준비 중인 것을 전제로 진행됩니다. 또한, SSL 적용을 위해선 도메인이 필요합니다. 플랫폼: GCP 쿠버네티스: GKE 공개 클러스터(비공개는 cert-manager가 정상 동작하지 않았습니다) 도메인 호스팅: Hostinger 1. Nginx Ingress Controller 구성 먼저 GCP 콘솔로 이동한 후, helm repo에 nginx ingress controller 설치 링크를 추가합니다. helm 명령어가 없으면 helm을 설치해야 합니다. helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx helm repo update 다음으로 nginx-ingress-c..
PostgreSQL 도커로 실행하기 docker run --name postgreDb -d -p 5432:5432 -e POSTGRES_USER=test -e POSTGRES_PASSWORD=1234 postgres --name: 컨테이너 이름 -d: 컨테이너 백그라운드 실행 및 실행 후 컨테이너 아이디 출력 -p: 포트 포워딩 -e: 환경 변수 postgres: pull 받을 이미지명(tag가 없으면 자동으로 latest pull) docker exec -it CONTAINER_ID /bin/bash psql -U YOUR_USER_NAME(default: postgres)
Express CORS 설정 cors 미들웨어를 사용해 설정하는 방법을 다룹니다. npm i cors 1. 출처 전체 허용 const express = require('express') const cors = require('cors'); const app = express(); app.use(cors({ origin: '*', })); 2. 화이트 리스트로 일부만 허용 const express = require('express') const app = express() const cors = require('cors'); const port = 8080 const whitelist = ['http://localhost:3000']; const corsOptions = { origin: function (origin, callbac..