전체 글 (47) 썸네일형 리스트형 golang Gracefully Shutdown (위대한 쇼다운맨 ) Gracefully shutdown 이란 말은 좀 잘만든거 같음 적어도 Good Shutdown 보다는 낫자나 그래서 Gracfully Shutdown 이 뭐냐? 서버에서 돌아가는 OS 나 소프트웨어가 꺼질때 안전하게 끄는것 (A graceful shutdown is when a computer is turned off by software function and the operating system (OS) is allowed to perform its tasks of safely shutting down processes and closing connections) 읭? 이게 뭔 소리 예를 들어 유튜브를 운영하는 백엔드 서버가 있다고 가정해보자 유튜브에서 야심차게 새로운 기능을 넣어서 (박)새로이 배.. S3 영상이 재생이 안되고 다운로드가 된다? 사용하고 있는 S3 를 Cloud Front CDN 서비스를 제공하던 와중에 하나의 S3 버킷을 더 생성해 별도로 CDN 서비스를 제공하려고 했는데 문제가 발생했다. 기존에 CDN 서비스를 제공하던 건 영상의 URI 처럼 새로 생성한 건 웹에 재생이 되지않고 다운로드가 되었다. 기존 CDN -> funny-video/1 -> 재생 새로생성한 CDN -> funny-video/1 -> 다운로드? 백엔드단에서 수정이 이루어진적은 없는데 왜 갑자기 다운로드가 되어질까 문제는 영상을 업로드 할때 헤더에 정한 Content-Type 에 있었다. 터미널에서 현재 사용하고 있는 CDN 서비스의 URL 정보를 보니 왠 binary/octect-stream 이 떡하니 있다 저건 뭥미? 아무튼 저 Content-Type .. 사용자 차단 쿼리를 어떻게 짤까? (RDS) REST API 서버에 거의 모든 기능을 다 짯을 무렵, 사용자 차단에 대한 이슈가 올라왔다. ( 사실 까먹고 있었음 ) 사용자 차단은 회원탈퇴에 대한 소프트 딜리트로 처리해주는 것과 별반 다를거 없다고 생각했다. 여기서 소프트 딜리트란? 데이터베이스에서 완전 삭제하는게 아닌 DeletedAt 이라는 컬럼에 트랜잭션을 실행한 시간을 표기하는 것으로 DeletedAt 컬럼이 NULL 이 아닐경우 일반 쿼리를 했을때 유저입장에서 조회가 되지 않는 기능을 말한다. 소프트딜리트는 상당히 편한기능이다. 예를들어 Join 한 테이블을 가지고 조회만 안되게 하려면 WHERE 절에서 deleted_at is null 이라고만 적어두면 반환되는 리스트에서 제거되게 된다. 그럼 사용자 차단도 소프트딜리트와 비슷한 로직으로.. Bastion Host 로 EC2 우회 접속 스크립트 설정 Bastion Host 와 같은 방화벽이 있을 경우 우리는 EC2 인스턴스로 접속하기 위한 과정은 다음과 같습니다. 기존 연결 흐름 1.( your-bastion-host.pem )으로 Bastion Host 접속 2. Bastion Host 에 EC2 Instance 로 접근하기 위한 public Key ( ec2.pem ) 를 넣음 3. Bastion Host 에서 ec2.pem 으로 EC2 접속 터미널을 열고 ssh -i 접속하고 또 scp 로 public Key를 Bastion 에 넣고 또 그걸로 ssh -i 접속하고.. 위의 흐름으로 사용하다 보니 이만저만 귀찮은게 아니었다 EC2 우회접속을 하려면 항상 저런 흐름으로 번거롭게 해줘야 하나? 이에 대한 궁금증은 ssh -J 터널링으로 쉽게 해결 .. CloudFront 사용시 주의할 점 현재 이미지 or 영상 파일을 S3 에 저정하고 AWS CloudFront 로 CDN 을 구축해 사용하고 있습니다. CloudFront 란? CloudFront 는 S3에 있는 데이터를 아래 URI 와 같은 엣지 로케이션이라고 하는 중앙 데이터 센터에 적재하게 된다. 유저는 S3 에서 직접적으로 가져와서 컨텐츠를 보는게 아닌 엣지 로케이션에 캐시 메모리 형태로 저장되어 전세계 유저들에게 빠른 컨텐츠 서빙을 가능하게 합니다. 직면한 상황 컨텐츠 특성상 1개만 가질 수 있는 시스템이 있다고 가정해봅시다. ( ex : 자신의 소개 영상 ) 특정 컨텐츠에 유저는 하나의 영상만을 올릴 수 있는데 재업로드시에 문제가 발생 했습니다. 예를들어, S3에 들어있는 데이터의 경로가 https://s3-output/user.. Golang TDD (테스트 주도 개발) 유닛테스트 루트 절대경로 설정 Golang TDD를 도입하려는 도중 이슈가 발생해 적어봤습니다. TDD의 기본은 유닛 테스트입니다.말 그대로 함수 하나를 테스트를 한다는 말인데요. TDD의 설명은 많은 분들이 적어놓으셨기 때문에 생략하겠습니다. 제가 궁금했던 문제는 이겁니다. 유닛테스트 즉, 함수 하나를 테스트하는데 환경변수는 어떤 식으로 초기화해서 써야 할까? TDD 를 도입하기 이전에는 디비접근,센트리URL,JWT TOKEN,PASSWORD 등등을 루트 디렉터리의. env로 긁어와서 초기화한 후 실행하면 끝이었습니다. TDD 도입을 하면서도 별 생각이 없었습니다. 테스트 코드를 만들고 기존에 있는 환경변수 초기화 함수를 테스트 코드 안에 넣고 ( 필자는 .env 사용 ) go test ./... 를 하면? panic: open ... 각서버마다 VPC? or VPC에 서브넷을 더 나누기? https://stackoverflow.com/questions/63331430/aws-vpc-per-environment-or-single-vpc-with-multiple-subnets-for-different-envir AWS VPC per environment, or single VPC with multiple subnets for different environments? Let's say I have three environments - Development, Test and Production. I believe I have two options on how to set them up in AWS: Create a VPC per environment, so three VPCs in total... 고(golang) 메일보내기(google) from := "보낼사람의 지메일" password := "비밀번호" toList := []string{"받는사람 메일주소","받는사람 메일주소2"} host := "smtp.gmail.com" port := "587" msg := "Hello myungsworld" body := []byte(msg) auth := smtp.PlainAuth("", from, password, host) err := smtp.SendMail(host+":"+port, auth, from, toList, body) // handling the errors if err != nil { panic(err) } fmt.Println("따봉") 이전 1 2 3 4 5 6 다음 목록 더보기