반응형

Golang을 사용하다보면 임시 구조체를 사용하면 생각보다 유연하고 편하게 작업 할 수 있다.

 

함수 내에 스택에 할당됨으로 함수내에서만 사용가능하다. 일반적으로 사용하는 구조체와의 차이점이라고 할 수 있다.

 

type Test struct{
 TestId string
}

func Tt(){
 t := &Test{}
}

일반적으로는 위와같은 방법으로 구조체를 생성하고 사용하지만 다음과 같이 사용하면 구조체를 임시로 사용가능하다.

 

func Tt(){
 var Test struct{
    TestId String
 }
 
 t := &Test{}
 
}

위와 같이 함수내에 구조체를 정의 하여 사용할 수 있고, 슬라이스로도 사용이 가능하다.

 

활용방안은 데이터베이스를 사용할때 ORM 은 각 테이블에 관한 정보는 제대로 가져오나 (grom) join 과 같은 상황에선 제대로 결과 값을 가져오지 못하는 경우가 발생이 되는데 이럴때 임시 구조체를 사용한다면 원하는 결과 값을 보다 쉽게 가져 올 수 있다.

 

gorm은 다음 포스팅 부터 연재 하는걸로~

반응형

'개발 > Go' 카테고리의 다른 글

[gRPC/gRPC GATEWAY] json 필드 이름 proto 타입이름과 다를때  (0) 2022.05.12
[gRPC] message oneof 사용  (0) 2022.05.11
반응형

사실상 gRPC를 사용한다면 필드이름이랑 json으로 변환할때 큰 신경을 안써도 된다. 적어도 내가 하는 프로젝트에선

 

하지만 gRPC를 HTTP 통신을 하고싶다면 요청은 큰 문제가 없지만 응답을 받을때 우리가 예상한 키 값으로 넘어 오지 않는다.

 

가령

 

message Test{
 string first_name = 1; ==> JSON firstName
 string last_name = 2;  ==> JSON lastName
}

위와 같이 _ 가 camelCase형식으로 바뀌디 때문에 예상한 응답이 아닐 경우가 있다.

 

이럴때는 gRPC gateway 의 ServeMux에 옵션을 추가해주면 해결된다.

 

gwMux := runtime.NewServeMux(
    runtime.WithMarshalerOption(runtime.MIMEWildcard, &runtime.JSONPb{
        MarshalOptions: protojson.MarshalOptions{
            UseProtoNames: true,
        },
    }))

 

WithMarshalerOption함수를 사용하여 옵션을 추가해 주면된다.

 

사용하려는 MIME에 runtime.JsonPB{} 구조체에 MarshalOptions 의 UseProtoNames를 true로 설정해 주면 proto에 정의된 필드 이름대로 JSON 키 값이 출력된다.

반응형

'개발 > Go' 카테고리의 다른 글

[문법] 임시 구조체  (0) 2022.05.13
[gRPC] message oneof 사용  (0) 2022.05.11
반응형

gRPC 는 통신을 할때 protobuf 를 사용하는데 gRPC를 사용하기전 tcp 통신으로 protobuf를 파이썬에서 만 사용해봤었다.

 

이번 프로젝트에서 gRPC를 사용하게 되면서 gRPC Gateway 통신에도 oneof 를 사용해 보려고 한다.

 

아직 protobuf 자체를 Go에서 사용해 본것이 아니고 gRPC에서만 테스트한 예제이다.

 

message Test{
 int64 admin_id = 1;
 int64 user_id = 2;
}

만약 위와같은 필드를 사용하는데 둘중 하나의 필드만 사용한다면 oneof 키워드를 사용할 수 있다.

 

message Test{
 oneof id_oneof{
   int64 admin_id = 1;
   int64 user_id = 2;
 }
}

그렇다면 Go에서 위와 같은 oneof 처리를 어떻게 하면 좋을까?

 

Go에서 gRPC는 Get 함수를 자동으로 지원해 줌으로 GetAdminId() 와 GetUserId()를 사용하여 값을 가져 올 수 있는데 위 함수로 결과 값을 가져와 처리하기에는 oneof를 사용하는 의미가 없어진다. 

 

사실 oneof를 사용하는 이유가 여러 필드 중 1개만 사용함으로써 Serialize된 데이터 패킷의 수도 줄일 수 있는 장점이 있다. 그렇기에 사용 할 수 있는 부분은 사용하는 것이 이득이라 생각한다.

 

대게 많이 사용하는 방법이 무엇이 있을까 찾아봤는데 마땅히 없어 생각해본 처리 방법이다.

 

더 나은 방법이 있다면 답글 부탁 드리겠습니다.

func (x *XX) XXXX(ctx context.Context, request *pb.Test) (*pb.Test, error){
 switch v := request.GetIdOneOf().(type){
 case *pb.Test_AdminId:
  fmt.Println(v)
 case *pb.Test_UserId:
  fmt.Println(v)
 
 }
 
 ... 중간 생략
 
}

내가 생각한것은 oneof를 가져와서 직접 타입 체크를 한다면 oneof를 효과적으로 사용 할 수 있는 것 같다.

반응형

'개발 > Go' 카테고리의 다른 글

[문법] 임시 구조체  (0) 2022.05.13
[gRPC/gRPC GATEWAY] json 필드 이름 proto 타입이름과 다를때  (0) 2022.05.12
반응형

텐서플로 라이트를 활용한 안드로이드 딥러닝 책이다. 안드로이드에서 딥러닝을 활용하는 방법을 소개하는 책인데, 처음부터 말하자면 아쉬움이 많이 남는 책이다. 이 책은 딥러닝에서 대표적인 텐서플로를 활용하여 안드로이드 앱을 제작 하는 방법을 소개하는데 책의 내용이 텐서플로보다는 안드로이드 앱 제작에 대한 내용이 상당히 많다. 물론 초심자가 보기에는 당연, 안드로이드 개발자가 아니고 딥러닝 개발자 라면 안드로이드 플랫폼에 대해 어색할 수도있다. 그도 그럴 것이 딥러닝은 대게 파이썬으로 구현하여 사용하기에, Kotlin, Java와 같은 언어의 플랫폼에서 활용 하는 것과는 다르기 때문이다. 그렇다고 해서 모델을 자바로 개발하는 것은 아니기에, 어떻게 해서 텐서플로가 안드로이드 플랫폼에서 돌아가고, 어떻게해서 딥러닝을 적용하여 앱을 개발 할 수 있는지에 설명은 충분하다고 볼 수 있다. 이 책은 정말 초심자가 보기에는 가장 좋은 에피타이저 같은 책이다.

 

  "한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

반응형
반응형

크로스플랫폼의 대표 주자라고 할수있는 리액트 네이티브 초심자를 위한 책인데 사실 react를 조금 알고 있으면 보기 편하다. 당연히 해당 플랫폼에서 제공하는 환경에서 개발하는 것이 가장 좋지만, 시간 적인 여유, 앱의 특성에 따라 크로스플랫폼으로 개발을 한다면 상당한 프로젝트의 시간을 줄일 수 있다. 책에서도 말하지만 해당 플랫폼에서 최신의 기술을 적용하기에는 리엑트 네이티브 자체에서 제공하는데 시간이 걸리는 단점이 있다. 하지만 이것이 모든 단점이라고 할수는 없듯이 최신기술을 적용한다고 하여 무조건적인 이점을 얻는 것도 아니고 한번의 개발로 Andorid, IOS 에 앱을 배포 할수 있다는 큰 메리트를 생각한다면 최신의 기술의 지원에 대한 부재는 충분히 커버 할 수 있다고 생각된다. 초심자를 위한 책이기 때문에 심화 내용보단 어떻게 시작을 해야하고 리엑트가 무엇인지 설명을 하고 있으니 이만한 책도 없는것 같다. 책의 난이도는 낮기 때문에 자바스크립트만 사용 할 수 있고, IOS 개발을 하기 위한 맥 환경만 준비되어있다면 초심자도 금방 앱을 배포 할 수 있기때문에 꼭 한번쯤 읽어보면 좋겠다는 책이다.

 

    "한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

반응형
반응형

최근들어 나오는 IT 관련 책들의 동향은 당연 인공지능에 관련한 내용들이다. 아쉽게도 책들은 어떻게 인공지능에 관련한 학습을 하는지 어떤 개발을 해야하는지, 어떤 프레임워크를 써야하는지에 대한 내용이 대부분이다. 사실 나 조차도 어떻게 학습을 해야하는지에 대해 궁금증이 컸지 이 학습에 대해 절대적인 믿음이 컸던 것 같다. 이 책을 본 후론 인공지능 학습도 결국은 보안에 취약 할 수 있으며, 인공지능이 절대적인 학습이 아니라는 생각을 일깨워 줬다. 아쉽게도 이책의 내용은 초심자가 보기에는 쉽지 않지만, 초반에 대략적인 인공지능 학습에 대한 설명이 포함돼 있고, 이러한 학습을 통해 보안적인 이슈도 다시금 생각할수 있도록 도와줬다. 아직 이 분야에 대해 많은 얘기가 없어 많은 내용을 포함하고 있지 않지만, 이 책을 통해 앞으로도 인공지능 학습에 보안적인 부분을 신경 쓸 수있는 시발점이 될 것이다.

 

 

  "한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

반응형
반응형

파이토치 딥러닝 책을 읽기에는 난이도가 있는 편이다. 파이토치 첫걸음 같은 초심자용 책이 있기도 하지만 책의 난이도들이 너무 낮거나 너무 높거나 하는 경향이 있어 점진적인 난이도로 공부하기에는 사실상 마땅한 책이 없다. 이 책의 경우는 딥러닝에서 기초적인 학습 모델들을 대상으로 예제를 설명함에 있어 부족함은 없다. 하지만, 처음에 언급했듯이 책의 난이도가 어느 정도는 있기에 상세한 설명은 부족한 것이다. 이 책에서 설명하는 모델은 VGG, SSD,  PSPNet, OpenPose, DCGAN, Self-Attention GAN, AnoGAN, Efficient GAN, Transformer, BERT, ECO 등 딥러닝 분야에서 각 세심한 분야로 들어가기위한 초심 모델들을 잘 선택을 한것이 맘에 들었다. 물론 각 분야에 대한 딥러닝 모델이나, 논문들은 활발하게 나오니 그 분야에 따라 심도있는 공부는 더 해야하지만 만약 초급단계의 책을 읽었다면 이 책을 발판 삶아 높은 수준의 공부를 할 수 있도록 도움을 주기에는 충분한 책인것 같다.

 

"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

반응형
반응형

최근 가장 많이 관심이 높은 기술 중 하나가 딥러닝 분야이다. 딥러닝 분야에는 대표적인 프레임워크가 있는데 가장 많이 들어보고 가장 핫한 프레임워크는 텐서플로우, Caffe, 파이토치 이다. 텐서 플로우나, 파이토치 같은 경우 파이썬 으로 개발을 할 수 있어 C++로 작성된 caffe보다는 접근성이 그나마 낫다. 머신 러닝에는 사실 러닝 커브가 높고 실무에선 석,박사 급으로 이루어진 팀에서 개발을 주도 하기도 한다. 새로 생긴 분야가 아닌 관심도가 높아진 분야에서 젊은 개발자나 여러 회사에서 머신러닝에 관하여 투자와 사업 개발을 하고 있게 프레임 워크 선택도 중요하다. 책에서 파이토치와 넘파이를 비교를 살짝 했지만 cpu연산만 하는 numpy 보다 Cuda를 사용하는 GPU API 요청 처리를 프레임 워크화해 놓은 것이 파이토치라고 한다. numpy보다 개발 환경에서도 머신러닝에 최적화 되어있다보니 간결한 문법으로 여러 처리를 할 수 있다는 것이 파이토치와의 차이점이라고 한다. 텐서플로우는 많이 찾아보진 않았지만, 이 책은 두껍지 않은 책임으로 내용은 간단히 설명이 되어있고 부담을 느끼지 않고 머신러닝에 대해 어떻게 사용되는지 알고 싶다면 이책을 읽어보길 추천한다.

 

 

"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

 

반응형
반응형

기본적인 RDBMS를 사용하다보면 튜닝 포인트가 필요하게 되는 상황이 발생이 되는데 적은 데이터에선 사실상 유의미하지 않을 수 있다. 요즘 같이 대용량 데이터를 가공하고 사용하는 환경에서는 필수적인 요소라고 생각이 되는데, 그 해결법을 찾아가는 실마리를 제공해 주는 책인것 같다. 이 책은 기초적인 SQL튜닝에 관하여 설명하고 있다. 기본적인 explain 부터 실행하여 프로파일링 까지 설명을 하고있다. 깊이가 있는 책은 아니지만 초심자가 SQL 튜닝을 하기 위해 기본적인 지식을 쌓기에는 충분한 것같다. 이책에서 많이 실수 하고있는 쿼리에 관해 설명을 해주고있고 이 쿼리가 어떻게 문제가 있는지, 이를 위해 어떻게 해결하는지 설명을 해놓은 책이다. 또한 예제가 많아 기본적인 SQL Analyze 만 분석하고 해결하는 책들에 비해 상세한 설명이 있는것이 특징이다. 프로젝트에서 SQL 튜닝 포인트가 있어서 많이 난감했는데 이책으로 더 깊이 있는 튜닝 포인트를 찾아가는 방법을 빠르게 습득할수있는 지름길 같은 책임이 분명하다. 꼭 기본적인 SQL 기본 개념을 가지고 있고 튜닝에 관해 필요성이 있다고 생각이 든다면 이 책을 읽어보는 것을 추천한다.

 

"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

반응형
반응형

소문난 명강의 김상형의 SQL 정복 이란 책은 일반 적인 SQL 책 만큼 두껍다. 대신에 Oracel, MSSQL, MariaDB기반으로 실습 환경이 주어지고 이에 맞춘 사용법도 설명을 같이 하는 책이었다. 책의 전반적인 내용은 초심자가 보기에는 가장 좋은 책으로 생각된다. 예제도 굉장히 많으며 각 DBMS 별로 주의 사항도 같이 설명해 주고있다. 책의 전반이 그렇듯 연습문제를 풀어 학습한 내용을 복습하기에도 좋았다. MySQL에서 MariaDB로 오픈소스 프로젝트 운영체제들이 MariaDB로 채택을 하고 있는 추세를 잘 맞춘 실습 환경에서의 설명인 것도 굉장히 좋은 선택지 인것 같다. 이 책의 가장 마음에 들었던 것은 보통 쿼리문을 예제로 책에 넣어두는데 보통은 초심자들은 오타를 일으킬 확률이 굉장히 높은데 완벽하지는 않지만 문자열이나, 숫자 같은 경우에는 색을 달리하여 학습자가 쉽게 이 문법은 조금 다르구나 조심해야겠구나 라는 것을 알수 있었다. 전반적으로 컬러를 더 사용하여 코드의 색을 다양하게 넣어 정의를 한다면 학습자가 더욱이 쉽게 문법을 이해할수있을것 같다는 아쉬움이 조금 남지만 이만큼만 해도 굉장히 좋다. 쿼리를 설명하는 부분에 있어서도 쿼리 문 옆에 큰 글자로 설명을 해주어서 학습자가 이해하기도 굉장히 쉬웠고 초심자가 넓은 개념으로 이해하기에는 이책만한게 없는 것 같다.

 

 "한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

반응형

'리뷰' 카테고리의 다른 글

파이토치 첫걸음  (0) 2021.08.21
업무에 바로 쓰는 SQL 튜닝  (0) 2021.07.26
파이썬 비동기 라이브러리 Asyncio  (0) 2021.05.17
혼자 공부하는 머신러닝 + 딥러닝  (0) 2020.12.28
vue.js 첫걸음  (0) 2020.11.21

+ Recent posts