본문 바로가기
반응형

golang31

[golang] aws-sdk-go-v2 aws resource 정보를 max value 이상 가져오기 이번 게시글에서는 aws-sdk-go-v2에서 제공하는 resource의 정보를 max value 이상 가져오는방법에 대해 정리합니다. aws sdk에서 제공하는 클라이언트를 이용해 aws의 데이터를 가져올때, 전체 데이터를 요청해도 지정된 갯수 이상으로 가져오지 못하는 경우가 있습니다. 이런 경우에는 데이터를 모두 내려주지 않았다는 의미로 Istrucated에 값이 True로 설정되어 내려옵니다. Istrucated의 값이 true라면 KeyMarker에 저장된 토큰값을 다시 넘겨서 조회되면 페이징, 커서 의 개념처럼 이전에 조회했던 부분부터 다시 1000개를 조회해 올 수 있습니다. 최초에 조회할때는 keyMarker를 비어있는 문자열로, 이후에는 내려온 값으로 조회해서 구현할 수 있습니다(sdk별로.. 2022. 4. 28.
[golang] aws s3 deletemarker 삭제하기(s3 object 복구하기) 1. s3 delete marker란 s3에서는 bucket별로 버전관리 기능을 활성화하면 해당 bucket 내부의 object에 한해 버전관리를 할 수 있습니다. 버전관리를 하게되면 object별로 유니크한 versionId를 갖게되며 object에 변경이 생긴경우 기록되어 git처럼 과거 commit으로 돌아갈 수 있습니다. 그러나 무거운 파일의 과거 기록을 모두 보관하고 있게 되면 불필요한 aws 비용이 발생하게되니 주의해야 합니다. 버전관리를 하는 객체를 삭제하게되면 조금 특이한 현상이 발생합니다. 필요 없어진 object라 삭제더라도 버전관리 기능을 켜놓는다면 과거 내용을 모두 보관하게 됩니다. (api cli나 sdk를 사용할때 versionId를 이용해 삭제하게 되면 정상적으로 삭제가 되지만.. 2022. 4. 28.
[golang] aws-go-sdk-v2를 사용하여 s3 bucket lifecycle 적용하기(PutBucketLifecycleConfiguration 사용법) 이번 게시글에서는 aws-go-sdk-v2를 사용하여 bucket의 lifecyle 적용방법을 정리합니다. 일반적으로 aws 서비스의 변경은 테라폼같은 IAC도구를 사용하지만 테라폼으로 관리하지 않는 버킷들까지 모두 추적하거나, 추가적인 로직이 필요한경우 sdk를 이용하여 자체 개발할 필요가 있습니다. 1. s3 lifecycle이란 aws s3 lifecycle은 버킷 내 object의 수명주기를 관리하기 위한 기능으로 버킷별로 lifecycle을 생성해놓으면 해당 버킷내에 생성된 object의 storage type을 변경하거나 삭제하는 등의 작업을 할 수 있습니다.(30일 뒤에 특정 조건에 맞는 object를 삭제하거나, 일주일 뒤에 storage type을 glacier로 하는 등으로 활용할 수 .. 2022. 4. 15.
[golang] go언어 mockup을 통한 테스트 코드 작성법(go mock) 이번 게시글에서는 mockup을 통한 테스트 코드 작성법에 대해서 정리합니다. 1. 테스트종류 프로그래밍의 테스트방식은 상태기반 테스트와 행위기반 테스트로 나뉩니다. (1). 상태기반테스트 db등의 상태를 직접 변경하고 정상적으로 변경됐는지 조회하는 테스트 방식을 말하며 통합테스트라고 불립니다. (2). 행위기반 테스트 내 코드의 행위만 검증하는 테스트로 유닛테스트라고 불립니다. 내 코드의 행위만 검증해야하므로 외부에 의존한 모듈들은 mockup하여 테스트합니다. 실제 모듈을 만들어 사용하기에 시간, 비용 등의 Cost가 너무 높다면, 가짜객체를 만들어 가짜객체가 원하는행위를 하도록 정의한 후 타 컴포넌트에 의존하지 않는 순수한 나의 코드만 테스트할 수 있습니다. 가짜객체를 만드는 행위를 mockup이라.. 2022. 4. 11.
[golang] aws-sdk-go-v2 의 s3 copyobject 사용법(copyobject example) 이번 게시글에서는 aws-sdk-go-v2의 copyobject 사용법에 대해 정리합니다. object의 설정을 관리하고 싶을때 lifecycle을 이용할수도 있지만, 추가적인 로직이 필요한경우 직접 개발해야 합니다. 그런 경우 copyobject를 사용해야 합니다. 1. aws-sdk-go-v2 aws 클라이언트 라이브러리입니다. 아래의 명령어로 관련 라이브러리를 다운받아 사용할 수 있습니다. go get "github.com/aws/aws-sdk-go-v2/service/s3" go get "github.com/aws/aws-sdk-go-v2/service/types" 2. copyobject란 aws s3의 object를 복사하는 기능을 제공합니다. object를 복사하는 경우에도 사용할수 있지만 .. 2022. 4. 11.
[golang] 고루틴 사용시 주의점(오버플로우 방지, 고루틴풀, 고루틴큐) 이번 게시글에서는 고루틴 사용시 주의점에 대해서 정리합니다. 억지 예제를 만든 느낌이만.. 고루틴이 무한정 증가하는걸 막고싶은경우 활용할만한 예제입니다. 1. 예제 package main import ( "fmt" "math/rand" "time" ) func main() { doSomething() } func doSomething() { for { data := getDataFromServer() analyzeAndSaveData(data) time.Sleep(time.Millisecond * 1000) } } // server는 난수 x개를 생성해서 내려줍니다. func getDataFromServer() []int { var data []int loopCnt := rand.Intn(300) for.. 2022. 3. 8.
[golang] golang 포인터 예제 이번 게시글에서는 golang의 포인터에 대해 정리합니다. 1. 포인터의 사용 package main import "fmt" func main() { test1() test2() test3() test4() } func test1() { var value int getTest1Value(value) // 콜스택은 독립적인 공간(네임스페이스)를 갖습니다. // 메서드 내부에서 값을 바꿔주더라도 해당 공간에 새로 만든 stack 변수 값만 바뀝니다. // 내부에서 변수에서 무슨짓을하든 외부에서의 값은 바뀌지 않습니다. fmt.Println("test1 값:", value) // output 0 } func getTest1Value(a int) { // 콜스택에 a라는 새로운 stack 변수에 값을 변경 a .. 2022. 3. 2.
[golang] decorate 패턴을 사용하여 timer 구축하기(golang 시간 차이 구하기) 이번 게시글에서는 golang에서 decorator 패턴을 사용하여 timer를 구축하는 방법에 대해 정리합니다. 1. 시간차이 구하기 package main import ( "fmt" "time" ) func main() { startTime := time.Now() for i := 0; i < 10; i++ { fmt.Println("test") } // Sub 는 time 구조체로 생성된 객체에서 접근할 수 있습니다. // 현재시간을 측정하여 이전시간과의 차이를 직접 계산하는 방법입니다. endTime := time.Now() sub := endTime.Sub(startTime) fmt.Println(sub) // Since 는 현재시간 객체를 만들지 않아도 시간차이를 구할 수 있습니다. // st.. 2022. 2. 28.
[golang] vue와 golang echo framework 연동하기 이번 게시글에서는 golang echo framework와 spa 프레임워크의 연동방법에 대해 정리합니다. 해당방법은 nginx, appach, IIS 등의 웹서버를 사용하지 않고 백엔드 애플리케이션에서 spa 프레임워크가 만들어준 하나의 html을 내려주는 방식입니다. 스케일 아웃에는 좋지 않고 랜더링 방식 자체는 웹서버가 아닌 애플리케이션까지 오는 ssr에 가깝지만, 하나의 바이너리, 하나의 컨테이너, 하나의 포트로 프론트엔드와 백엔드를 관리할 수 있다는 장점이 있습니다. 전체 소스코드는 아래 깃헙레포에서 확인하실 수 있습니다. https://github.com/jaeho310/golang-echo-vue GitHub - jaeho310/golang-echo-vue Contribute to jaeho.. 2022. 1. 24.
반응형