목록Study/Go (12)
오늘도 한 뼘 더
# 배경 golang으로 db 연결을 한 뒤에 작성한 query로 받아온 값들을 scan으로 불러오는 과정에서 에러가 발생하였다. 에러 내용 error ="sql: expected 4 destination arguments in Scan, not 1" # 문제 원인 쿼리에서는 총 4개의 필드를 불러오고 있는데 Scan은 하나만 받고 있어 서로 수가 맞지 않아 에러가 발생하였다. 작성한 쿼리 rows, err := db.Query("SELECT id, name, age, phone_number FROM test") if err != nil { log.Fatal("Select Error : ", err) } Scan 코드 var result string for rows.Next() { err = rows.S..
# 배경 민감한 정보의 경우 암호화를 해서 저장을 해야 하는데 암호화를 하는 코드를 작성해보도록 하자 # AES 암호화 AES는 Advanced Encryption Standard의 약자로 고급 암호화 표준이라는 의미이다. 암호화 블록의 크기가 128bit이고 암호화 키의 길이가 128, 192, 256 bit인 세 종류로 나뉜다. ## 암호화 코드 func Encrypt(key, text string) (string, error) { plainText := []byte(text) block, err := aes.NewCipher([]byte(key)) if err != nil { return "", nil } cipherText := make([]byte, aes.BlockSize+len(plainTe..
# 배경 MySQL의 global timezone이 System으로 설정되어 있고, 그 과정에서 DB에 데이터를 넣을 때 UTC로 시간이 들어가고 있었다. 한국 로컬 시간으로 설정하는 것이 가독성이 좋기 때문에 이를 바꾸고 싶다. # 코드 설정 DB Connection 설정 코드에 로컬 타임 설정을 작성해야 한다. 예) Asia/Seoul => Asia%2FSeoul 로 작성한다. 수정 전 ConnectionString = "@tcp(127.0.0.1:3306)/data?parseTime=True" sql.Open("mysql", ConnectionString) 수정 후 ConnectionString = "@tcp(127.0.0.1:3306)/data?parseTime=True&loc=Asia%2FSeo..
# 배경 백엔드 개발을 하다 보니 꼼꼼히 확인을 한다고 해도 중간에 에러 처리를 놓치거나 서로 중복되는 코드가 있거나 사용하지 않는 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..
# 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) 보통 대부..
# 배경 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..
# Context Golang에서 Context는 작업 명세서와 같은 역할을 한다. timeout 설정 또한 이 context 패키지를 사용하여 설정할 수 있다. # WithTimeout 기본 명령어는 다음과 같이 사용할 수 있다. context.WithTimeout(context.Background(), 20*time.Second) 코드에 적용하기 package main import ( "context" "fmt" "time" ) func main() { db, err := sql.Open("mysql", "root:1111@tcp(127.0.0.1:3306/data") if err != nil { log.Fatal("DB Connection Error: ", err) } defer db.Close()..
# 환경변수 쓰기 os.Setenv # 환경변수 읽기 os.Getenv package main import ( "fmt" "os" } func main() { goRoot := os.Getenv("GOROOT") fmt.Println(goRoot) // 시스템 환경변수의 GOROOT 값 출력 os.Setenv("TestEnv", "ABC") fmt.Println(os.Getenv("TestEnv")) } // 결과 // ABC
# 배경 DB 연결 정보를 코드로 작성하면서 연결 정보를 코드에 직접 노출하는 것이 보안적으로 좋지 않다고 생각하였다. 환경변수를 사용하여 정보를 넘기는 방법에 대해 찾아보았다. ## godotenv https://pkg.go.dev/github.com/joho/godotenv#section-documentation godotenv package - github.com/joho/godotenv - Go Packages A Go (golang) port of the Ruby dotenv project (which loads env vars from a .env file) From the original Library: Storing configuration in the environment is one o..
문서를 참고하여 DBservice를 연결하는 코드 작성 중 에러 발생 https://pkg.go.dev/database/sql sql package - database/sql - Go Packages Package sql provides a generic interface around SQL (or SQL-like) databases. The sql package must be used in conjunction with a database driver. See https://golang.org/s/sqldrivers for a list of drivers. Drivers that do not support context cancellation wil pkg.go.dev # 문제 다음과 같은 코드를 사용..