목록전체 글 (245)
오늘도 한 뼘 더

# 배경 백엔드 개발을 하다 보니 꼼꼼히 확인을 한다고 해도 중간에 에러 처리를 놓치거나 서로 중복되는 코드가 있거나 사용하지 않는 import 등이 있다. 사람이 직접 코드 리뷰를 해서 찾아내는 방법도 있지만 모듈의 도움으로 해당 부분들을 개선할 수 있다고 한다. # Golang CI Lint 설치하기 https://golangci-lint.run/ Introduction | golangci-lint Fast Go linters runner golangci-lint. golangci-lint.run 1. golangci-lint를 설치한다. (Windows) sh명령어를 사용하기 때문에 Bash 환경에서 실행이 가능하다 # binary will be $(go env GOPATH)/bin/golangci..

# 배경 최근 회사에서 slow query를 보고 인덱스를 추가하는 작업을 진행하고 있다. 그런데 인덱스를 추가했음에도 여전히 계속 느린 쿼리들이 발생했고 이때, query plan이라는 것을 알게 되었다. MySQL Workbench에서는 해당 기능을 볼 수 있게 제공한다. # Query Plan 보기 1. 그림으로 확인하기 쿼리문을 작성하고 위의 돋보기 모양으로 실행을 하면 output 창에 query plan이 뜨게 된다. 2. Explain 사용하여 확인하기 EXPLAIN SELECT * FROM world.city explain 명령어를 붙여서 쿼리문을 실행하면 query의 상세 정보가 결과 값으로 반환된다.

# 문자열 문자, 단어 등으로 구성된 문자들의 집합을 의미한다. ## 문자열 만드는 방법 1. 큰 따옴표(") 사용 "Hello Jihyunb" 2. 작은따옴표(') 사용 'Hello World' 3. 큰 따옴표 3개 연속(""") 사용 """You Only Live Once""" 4. 작은따옴표 3개 연속(''') 사용 '''Enjoy your Life''' ## 중간에 작은따옴표(') / 큰 따옴표(") 넣기 "Python says 'Hi'" '"Python" is good language' 'Python\'s favorite food' ## 여러 줄인 문자열 대입하기 1. \n 사용하기 >>> multiline = "Hello World \nLife is beautiful" >>> print(mul..

# 숫자형 숫자 형태로 이루어진 자료형 정수, 실수, 8진수, 16진수 등이 있다. ## 정수형 정수를 나타내는 자료형, 다음은 정수를 'a'에 대입하는 예시이다. >>> a = 12 >>> a = -12 >>> a = 0 ## 실수형 소수점이 포함된 숫자, 다음은 실수를 'a'에 대입하는 예시이다. >>> a = 1.23 >>> a = -3.14 ## 8진수, 16진수 8진수 - 0o로 시작 >>> a = 0o177 16진수 - 0x로 시작 >>> a = 0x8ff >>> b = 0xAB # 연산자 ## 사칙연산 +, -, *, / >>> a = 2 >>> b = 5 >>> a + b 7 >>> a * b 10 >>> a / b 0.4 ## 제곱 연산자 (**) >>> a = 3 >>> b = 4 >>..

# 배경 AWS Lambda함수를 사용할 코드를 작성한 후 업로드하여 실행했을 때 제대로 동작하지 않았다. RDS에 만들어둔 DB에 접근을 해야 하는데 막혀 있어 접근을 할 수가 없었던 것이다. # 현 상황 AWS Lambda 함수와 RDS가 세팅이 되어있다 라는 전제조건을 바탕으로 진행 # AWS Lambda 함수에 RDS 연결하기 AWS Lambda의 구성에서 VPC 편집을 진행한다. 1. 접근하고자 하는 RDS가 있는 VPC를 선택한다. 2. 서브넷 또한 RDS와 같은 서브넷으로 선택한다. 3. 보안그룹을 선택하고 해당 보안 그룹을 RDS 보안 그룹의 인바운드 규칙에 추가한다.

# 배경 Golang 코드를 zip 파일로 올려 Lambda함수를 테스트하는데 다음과 같은 에러가 발생했다. # 문제 { "errorMessage": "fork/exec /var/task/main: exec format error", "errorType": "PathError" } # 해결 방법 Golang 코드를 Lambda함수에서 돌리기 위해 zip 파일을 생성할 때 두 조건이 맞아야 한다. 1. GOARCH=amd64 2. GOOS=linux 두 가지 조건의 환경에서 main.zip을 만들어야 제대로 동작이 된다. $ set GOARCH=amd64 $ set GOOS=linux $ go build -o main main.go $ %USERPROFILE%\Go\bin\build-lambda-zip.e..

# AWS 설정 1. IAM 사용자를 생성한다. AWS SNS(Simple Notification Service)에 대한 권한을 가진 IAM 사용자를 만든다 IAM 사용자에 대한 키를 저장한다. 2. AWS Config를 설정한다. 사용자의 "ACCESS_KEY_ID"와 " SECRET_ACCESS_KEY"를 사용하여 로컬에 "aws configure" 명령어를 통해 설정한다. 이전 게시글에 같은 프로세스를 정리하였다. 2022.01.10 - [DevOps & Infra/AWS] - [AWS] AWS CLI 설치하기 [AWS] AWS CLI 설치하기 AWS를 작업할 때 크게 두 가지 방법으로 작업을 한다. 1) AWS Console 2) AWS CLI(Command Line Interface) 보통 대부..

# 배경 이전에 카카오톡 알림톡을 보내주는 외주 업체에서 서버 에러가 나서 회사에서 보내야 할 카카오톡 알림톡이 보내지지 않는 문제가 발생했다. 문제는 알리톡 발송에 실패하면서 같이 엮여 있었던 서비스가 같이 실패하게 되었다. 너무 강한 결합으로 인해 발생한 문제였다. 이를 해결하기 위해 Kafka와 같은 서비스 중 AWS에서 제공하는 Simple Notification Service(SNS)를 사용해보기로 했다. # AWS SNS란? AWS SNS는 게시자에서 구독자로 메시지를 전송하는 관리현 서비스이다. https://docs.aws.amazon.com/ko_kr/sns/latest/dg/welcome.html Amazon SNS란 무엇인가요? - Amazon Simple Notification Se..

# 배경 AWS Lambda에서 코드 편집기가 Go는 지원을 하지 않아 직접 코드를 zip 파일로 묶어서 올려야 했다. # 프로젝트 zip 파일로 묶기 go 프로젝트 terminal 창에서 lambda 패키지를 설치한다. go get github.com/aws/aws-lambda-go/cmd/build-lambda-zip import에 코드 추가하기 (실제로 코드에 사용하지 않기 때문에 앞에 '_'를 추가한다.) import ( _ "github.com/aws/aws-lambda-go/lambda" ) 다음 명령어를 차례대로 실행한다. $ set GOOS=linux $ go build -o main main.go $ %USERPROFILE%\Go\bin\build-lambda-zip.exe -output..

# 배경 Go 코드로 간단하게 API를 호출하고 싶다. Go에서 http 패키지를 지원하여 해당 패키지를 사용하여 API 호출을 해보도록 한다. # net/http 패키지 https://pkg.go.dev/net/http http package - net/http - Go Packages HTTP Trailers are a set of key/value pairs like headers that come after the HTTP response, instead of before. package main import ( "io" "net/http" ) func main() { mux := http.NewServeMux() mux.HandleFunc("/sendstrailers", func(w http.R..