#프로그래밍
522023.03.06
인플루언서 
832프로그래머
참여 콘텐츠 29
2
[Go] RSA 암복호화, 서명인증 해보기

RSA를 이용한 암복호화 및 서명인증 개발하기! © fancycrave1, 출처 Pixabay 안녕하세요 오늘은 어제 서명인증방법에 이은 RSA를 활용한 기법에 대해서 알아보고자 합니다. 어제 알아본 고랭 HMAC에 대해서 보고 싶다면 아래의 링크를 활용해주세요! [Go] HMAC을 활용한 서명인증 전략 고언어 Hmac 256 활용한 서명확인 안녕하세요. 즐거운 일요일 입니다! 오늘은 서명인증 전략 중 하나인 H... blog.naver.com 오늘은 간단하게 GoLang으로 RSA 서명과 암복호화에 대해서 알아보는 시간을 가지겠습니다. 고언어 RSA 란? RSA란 무엇인가? RSA는 공개키 암호화 시스템이며 최초의 암호화 기능과 서명인증 기능이 같이 포함된 알고리즘입니다. 우리는 해당 알골을 활용하여 이번에 서명인증과 암, 복호화 기능을 개발해보려고합니다! 다른거는 다 몰라도 RSA는 공개키, 비밀키가 쌍을 이루어 해당 키를 기준으로 암복호화 서명인증을 하는 알고리즘이라는 것을 알고 넘어가자! 더 자세한 내용은 너무 수학적인 관점이긴 합니다. 우리는 이미 정의된 패키지를 활용할 것이기에 깊게 짚고 넘어가지 않겠습니다. 혹시나 더 깊게 RSA 서명인증에 대해서 알고 싶다면 아래의 위키 백과 링크를 활용해주세요! RSA 암호 - 위키백과, 우리 모두의 백과사전 RSA 암호 50개 언어 문서 토론 읽기 편집 역사 보기 위키백과, 우리 모...

2023.03.06
2
[Go] HMAC을 활용한 서명인증 전략

고언어 Hmac 256 활용한 서명확인 © janeb13, 출처 Pixabay 안녕하세요. 즐거운 일요일 입니다! 오늘은 서명인증 전략 중 하나인 Hmac에 대해서 알아보는 시간을 가지려고 합니다! RSET API 나 API기능을 만들시 누구나 활용하는 버전도 있지만 그렇지 않고 특정 인증된 사용자만 이용을 하게 하고 싶다면 설계해야하는 서명인증 방식 중 하나인 HMAC에 대해서 알아보자! 고 언어 HMAC 서명인증 방식 일단 먼저 HMAC 서명인증 방식에 대해서 알아보도록 하겠습니다. 서명인증을 하는 이유는 서로의 키를 가진 사람간의 데이터를 교환하기 위한 방법이라고 해야할까요? 서로를 인증하기 위한 절차라고 보시면됩니다! 간단하게 말하면 악의적인 접근자의 신호 교환을 막기 위한 절차? 검증하기 위한 단계라고 보시면 됩니다! 보내는 사람 Payload + Key 를 HMAC을 활용하여 시그니처를 생성해서 보냅니다! payload + 시그니처를 받는 수신자에게 보내는 것 입니다. (당연 Key는 보내면 안됩니다!) 받는 사람 Payload 와 가지고 있는 Key를 활용하여 시그니처를 생성합니다. 그 후 보내는 사람의 시그니처와 받는 사람이 만든 시그니처를 검증합니다 (체크) 정상이라면 시그니처가 서로 동일하여 정상적인 서명으로 프로그램이 동작하게 설계합니다! Golang HMAC 만들어보기! package app import ( "c...

2023.03.05
2
[Go] JSON Marshal

JSON Package 고언어의 파서 처리방법 © flowforfrank, 출처 Unsplash 오늘은 고랭에서 제이슨 데이터를 받아서 처리하는 방법에 대해서 알아보겠습니다. 일단 해당 내용은 기본적으로 분석하고자하는 제이슨의 구조를 아는 상황임을 가정한다. 고 언어 써드파티라이브러리 기본 라이브러리 말고 다른 패키지가 존재한다. 해당 패키지는 필요에 따라 활용하여도 좋지만 개인적으로 기본 라이브러리를 활용하여 다루자 antonholmquist/jason buger/jsonparser tidwall/gjson Golang encoding/json 실전 구조체 생성하기 일반적인 구조 type 구조체명 struct { A string `json:"A"` B int `json:"B"` } C 안에 또 다른 json이 포함된 Nested 형식 type 구조체명 struct { A string `json:"A"` B int `json:"B"` C 구조체명2 `json:"CJson"` } type 구조체명2 struct { C string `json:"C"` C1 string `json:"C1"` C2 string `json:"C2"` } --- type 구조체명 struct { A string `json:"A"` B int `json:"B"` C Struct { C string `josn:"C"` C1 string `josn:"C1"` C2 ...

2023.03.04
2
[Go] Context와 signal을 잘 사용하자!

컨텍스트와 시그널 고 언어 잘 사용하자! © 0fjd125gk87, 출처 Pixabay 이번 포스팅은 이해를 돕는 부분이라고 보시면 됩니다. 컨텍스트와 시그널에 대해서 알아보고 지나가는 포스팅입니다! [Go] 고 언어 고급 쓰레드 작성법 (고루틴과 채널, 컨텍스트) GoLang 고급 프로그램의 꿈 다중화 처리 오늘은 다중화 처리 전략에 대해서 배우고 넘어가겠습니다. 고의... blog.naver.com 이전 내용을 먼저 숙지하는 것도 좋다고 생각이됩니다! Golang Context란 소스를 통해서 컨텍스트를 사용하는 방법에 대해서 가볍게 보자 // 컨텍스트 생성 ctx := context.Background() // context.WithValue 함수를 사용하여 새로운 컨텍스트를 생성함 ctx = context.WithValue(ctx, "current_user", currentUser) myFunc(ctx) //myFunc 함수에서는 파라미터로 전달받은 ctx에서 키key가 "current_user"인 값을 꺼내서 사용하였다. func myFunc(ctx context.Context) error { var currentUser User // 컨텍스트에서 값을 가져옴 if v := ctx.Value("current_user"); v != nil { /* 성공코드 */ } else { /* 실패 코드 */ } return nil } ...

2023.03.03
2
[Go] Cobra (CLI 만들기) 코브라

코브라 패키지를 활용한 Golang CLI 만들기 © markusspiske, 출처 Unsplash 오늘은 고언어의 cobra패키지를 활용하여 CLI Command를 만들어보도록 하겠습니다. 코브라 커매드를 활용하면 편하게 명령어를 입력하여 시스템을 동작시킬 수 있습니다! 고언어 프로젝트 구조와 커맨드 만들어보기 패키지 설치하기 go get github.com/spf13/cobra@latest 프로젝트 구조 구성하기 main.go cmd cobra.Command Package Create 그외 기능들이 들어간 디렉토리 등등 솔직히 프로젝트 구조는 사용자 나름이 알아서 정의하시면됩니다! 커맨드 구조체 이해하기 var [메인커맨드명구조체변수] = &cobra.Command{ Use: "[메인 커맨드명]", Short: "[메인 커맨드 설명]", or Long: "[서브 커맨드 설명2]", Example: "[사용 예시]", Args: func(cmd *cobra.Command, args []string) error { /* Run 처리 이전에 처리 코드 구현 */ } log: "[]" Run: func(cmd *cobra.Command, args []string) { /* 커맨드의 실제 기능을 구현!! */ }, } 고랭 cobra 구현해보기 위에서 우리는 간단한게 Go의 Cobra Package를 활용하는 방법을 이용하여 메인 커맨드를...

2023.03.02
2
[Go] gin Framework 웹 프레임워크

Gin 프레임워크 속성 익히기 © Pexels, 출처 Pixabay 안녕하세요. 꾹이 입니다. 이제 2명이 아닌 3명이 되었습니다. 아내와 함께 조리원에 입소하여 회사에서 제공하는 법정 출산휴가를 이용하여 함께 같이 아이를 케어하는 방법등등 많이 익히는 시간을 가질 거 같아요. 틈틈이 아내가 일정을 소화하러 가는 시간이 저는 방안에서 시간을 보낼 것 같아요. 잡담이 많이 길었네요. 오늘은 Gin 프레임워크 (고언어 웹 프레임워크)에 대해서 간단하게 후다닥 익히는 시간을 가져볼까합니다. 회사에서 고랭을 활용한 프로젝트를 진행중인 과정에서 API 서버 구성을 위해서 간단하게 해당 프레임워크를 사용하려고 합니다. Golang 진 프레임워크 설치하기 진 패키지 설치하기 github.com/gin-gonic/gin 간단하게 go get 명령어를 활용하여 설치를 해주시면 됩니다. 고랭 GinFramework 웹 서버 열어보기! 해당 내용만 숙지하면 솔직히 모든 일은 끝났다고 해도 무방합니다. 진 프레임워크를 활용하여 웹 서버를 열어보겠습니다! package main import "github.com/gin-gonic/gin" func routerStart() *gin.Engine { r:= gin.Default() r.GET("/", func(c *gin.Context) { c.String(200,"Test!!") } } func main(){...

2023.03.01
2
[Go] 패키지와 모듈화 이해하기

Golang 패키지와 모듈화 이해하기 © geekgunda, 출처 Unsplash 고랭의 패키지와 모듈을 이해해보도록 하겠습니다. Golang 패키지는 같은 폴더의 go 파일은 하나의 동일 패키지입니다. 또한 모듈 한 개에 당연히 main은 하나 입니다! 엄청 신기한 건 package main의 위치는 특정되어 있지 않다는 점이다 해당 모듈 디렉토리 하위에 다른 디렉토리에 main이 존재하여도 크게 문제를야기하지 않는다는 것 go mod init _ 이해하기 고랭은 빌드방식의 프로그램언어입니다. 인터프리터를 활용하는게 아닌 프로젝트를 빌드하여 어떠한 환경에서든 프로그램이 구동되도록 하는 방식이죠. 고랭을 공부하다보면 명령을 통해서 빌드하는 경우가 있는데 이러한 경우 go mod init _ .... go mod tidy .. go mod init [모듈로 만들 디렉토리 명] // 최소한의 조건 // 이건 패키지 임포트 시 [모듈로 만들 디렉토리 명]/패키지명 go mode xxxxx/yyyy/zzzz/[모듈로 만들 디렉토리 명] //xxxx,yyyy,zzz 마음대로 지정해도된다! // 이건 패키지 임포트 시 xxxxx/yyyy/zzzz/[모듈로 만들 디렉토리 명]/패키지명 이렇게 쓴다 패키지 모듈화 이해해보기 직접 프로젝트를 구성하면서 테스트해보는게 가장 좋은 방법이라고 생각합니다. 그래서 가볍게 프로젝트를 구성해보겠습니다! 디렉토리...

2023.02.20
2
[Go] init() 함수

Go의 init() 함수 © gamell, 출처 Unsplash init() 함수는 말 그대로 진입과 동시에 발생하는 함수를 말한다. 다른 언어에도 존재한느 경우 비슷한 역할을 담당합니다. init() func init(){ ... } 패키지가 올라올 시 가장 먼저 실행이 이루어지는 함수입니다. 실제로 패키지를 만들고 체크해보시면 새로운 객체를 선언하는 과정에서 가장 먼저 발생한다는 것을 알 수 있습니다. 소속감을 가지게하는 함수 만들기 해당 내용은 메서드에 대한 복습입니다. 어떠한 패키지를 정의하는 경우에 고에서 묵언의 규칙처럼 만드는 방식입니다. (프로젝트 구조 규칙이 없는 고에서는 그렇게 큰 의미는 없을 수 있습니다..) func [메서드로 사용할 구조체] Run() [반환타입] { } ex func (a *struct) Run(){ } 참고 문헌/자료 - #Go #init #소속감

2023.02.19
2
[Kafka] 카프카 기본 개념 및 kafka Streams

카프카 기본 개념 과 스트림 © haky, 출처 Unsplash 이전 포스팅에서 간단하게 도대체 카프카가 무엇인지에 대해서 가볍게 살펴보았으면 오늘은 기본 개념과 스트림에 대해서 알아보겠습니다. 기억해야하는 용어들 zookeepr (주키퍼) 카프카브로커를 하나의 클러스터로 코디하는 분산 코디네이션 시스템 kafka Broker (카프카 브로커) 실제 카프카 어플리케이션이 설치되어 있는 서버 Topic (토픽) 채널 또는 이름이 있는 공간과 같은 개념 카프카 데이터 저장소 Partition (파티션) 토픽 당 데이터 분산 처리하는 단위를 의미 Offset (오프셋) 파티션 내의 각 레코드를 고유하게 식별하는 ID (즉, 메시지의 실제 인덱스 번호같은 개념일 것) Producer (프로듀서) 메시지를 브로커 특정 Topic에 메시지를 전달하는 Application 또는 Client Consumer (컨슈머) 메시지 브로커에서 Topic에 연결된 데이터를 수신받는 Application 또는 Server Consumer Group Rebalancing 같은 그룹내 컨슈머에 파티션 소유권을 이전하는 행위 리밸런싱 Broker Partition Replication 파티션 복제 ISR Reader, Follower 파티션이 모두 동기화된 상태를 의미 컨슈머 렉 최신 오프셋 번호와 컨슈머 오프셋 번호의 차이를 의미 (아마 동기화률 일 듯 처리 속...

2023.02.12
2
[패턴] 이벤트 소싱 (Event Sourcing Pattern + CQRS)

이벤트 소싱 패턴에 대하여 © OpenClipart-Vectors, 출처 Pixabay 해야할 프로젝트에 Kafka 도입을 통해서 최대한 안정성있게 데이터 처리를 하고자한다. 하지만 분명 과정상 이슈가 존재할 거고 그러한 로깅에 대한 전략이 필요한데 이런 경우를 대비하여 해당 전략을 사용한다. 이벤트 소싱 패턴 ( Event Sourcing Pattern ) 이란? 해당 패턴의 전략의 기본은 데이터를 저장하는 방법에 대한 정의 입니다. 우리가 일반적인 데이터 방식은 최종의 데이터 값을 저장한다. ” 하지만 이벤트 소싱 패턴은 해당 과정과정의 이벤트를 저장하는 거라고 생각하면 된다! “ 간단한 표를 이용하여 이벤트 소싱과 우리가 일반적으로 활용하는 데이터 방식의 차이를 알아보자 일반 유저 요청 (주문) 요청 (추가 주문) 요청 (주문 취소) 반환 (주문건수) 1 1 + 1 2 - 1 1 이벤트 소싱 유저 요청 (주문) 요청 (추가 주문) 요청 (주문 취소) 반환 (주문건수) 1 1 + 1 2 - 1 1 일반적인 데이터 처리 방법은 마지막의 최종 결과만을 기록한다 반면으로 이벤트 소싱은 유저로 부터 처리되기 시작한 모든 과정 과정을 하나하나 이벤트 단위로 기록한다. ” UPDATE 와 DELETE 정보가 아닌 그 과정을(이벤트를) 저장한다 “ 이벤트 소싱은 스냅샷을 무조건 가지고 가자! 그럼 왜 스냅샷을 가지는가? 그것을 알아야하는데 가...

2023.02.11
2
[Kafka] Apache 카프카란?

카프카 너는 누구? 이제 겨울도 지나가고 봄이 다가오고 있습니다. 날씨는 들쑥날쑥 변화가 심합니다 역시 저도 여러가지 변화를 받아드리고 있는 단계입니다. 이제 곧 있으면 두 공주님과 함께 지내는 즐거움과 새로운 회사에 적응해야하는 어려움이 같이 교차하는 시점 제가 선택한 방향이 잘 한 건지는 모르지만 무를 수 없는 상황이죠 ㅎㅎ 개발자로서 SI 업체, 경매 플랫폼, 부동산 플랫폼 을 거쳐서 이제는 핀 테크로 진입을 했습니다. 부동산 플랫폼에 가장 오래 있었던 거 같은데 새로운 플랫폼 시장으로 뛰어든다는게 어렵지만 즐겁습니다. © austindistel, 출처 Unsplash 잡담이 너무너무 길었습니다. 오늘은 카프카에 대해서 알아보는 시간을 가지겠습니다! KAFKA 란? 카프카는 Pub/Sub 구조의 메시지 지향 미들웨어 서비스입니다. (메시지 지향 미들웨어 = MOM (Message Oriented Middleware) ) Pub과 Sub이 Topic으로 연결되어 메시지를 교환하는 방식의 메시지 브로커 서비스입니다. 이전에 IoT 관련 서비스를 구현할때 활용한 MQTT와 아키텍처는 거의 흡사하다고 생각이되네요! 꾹의 개발노트 : 네이버 블로그 배우고 노력하는 개발자 모름은 배움의 시작 @꾹 yug311861@naver.com in.naver.com/programer blog.naver.com (MQTT 관련하여 보고 싶다면 위의 카...

2023.02.11
8
[gRPC] 프로토콜 버퍼 서버 클라 구현 (with Go)

gRPC 서버와 클라이언트 구현 © altumcode, 출처 Unsplash 바로 코드를 통해서 이해해보도록 하겠습니다. 이전 포스팅들을 통해서 gRPC가 무엇이고 Go에서 gRPC를 위한 proto를 어떻게 만들고 쓰는지 배웠습니다. 오늘은 이제 실제로 proto를 클라와 서버에서 사용해보도록 하겠습니다! proto 작성 바로 프로토콜 버퍼를 작성해보겠습니다. syntax = "proto3"; package calculator; option go_package = "/calculator"; message CalcRequest { int64 Number1 = 1; int64 Number2 = 2; string Op = 3; } message CalcResponse { int64 Result = 1; } service CalculatorService { rpc Calc(CalcRequest) returns (CalcResponse) {} } 컴파일 protoc --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative calculator.proto 모듈화 go mod init calculator go mdo tidy 서버 / 클라 공통 작업 패키지 연결용 서버나 클라 패키지 mod init 작업 go mod init 해당패키지명...

2023.01.30
2
[통신] gRPC 아키텍처

gRPC 아키텍처 © geralt, 출처 Pixabay HTTP2 통신을 활용한 아키텍처입니다. 구글에서 설계하였으며 데이터를 빠르고 가볍게 보낼 수 있는 기술이다. Google Remote Procedure Call 먼저 이전에는 RPC라는것이 존재했으며 해당 기법을 토대로 구글사에서 설계한 기법이라고 보면될거 같습니다. 프로토콜 버퍼를 사용하여 데이터 전송을 위해 텍스트 기반의 바이너리 데이터를 활용한다! 가벼우며 서버의 부담이 크기에 클라이언트는 가볍게 활용이 가능하다! 오픈소스이며 누구나 활용이 가능하다! RPC 프레임워크다 이해하기! RPC란? 원격 컴퓨터나 프로세스 함수를 호출하는 프로토콜 이다 즉, RPC는 원격서버에 있는 함수를 작동시키게 해주는 명령이라고 생각하면된다. 인터페이스 정의 언어 protobuf(protocol buffers)란? gRPC는 proto 코드를 작성하고 해당 작성된 코드를 컴파일하면 컴파일한 언어에 따라서 코드를 생성해준다. 그렇다면 gRPC 작업순서? proto 코드를 작성한다. ptoro 코드를 컴파일하여 컴파일한 언어의 코드로 만든다 (이건 자동으로 만들어준다) 위에서 만들어진 gRPC 서비스에 맞는 비즈니스 로직을 잘 작성해준다. 역시 gRPC 서비스를 호출할 서버에서 코드를 클라단에서도 해당 서비스에 따른 역할 코드를 작성한다. gRPC를 활용한다 가장 핵심은 MSA 아키텍처 설계에서...

2023.01.29
5
[gRPC] 프로토콜 버퍼 실습을 통한 이해 (with Go)

프로토콜 버퍼 실습 해보기 © anniespratt, 출처 Unsplash proto 파일 작성해보기 golang [gRPC] 알기이전에 프로토콜 버퍼란 구조 이해하기? gRPC Remote Procedure Calls Protocol Buffers? 이론만 보면 누구에게는 정말 심오하거나 누구에... blog.naver.com 우리는 이전 포스팅에서 프로토콜 버퍼에 대해서 알아보았고 간단하게 사용에 필요한 가이드라인을 간단하게 봤습니다 오늘은 이전 포스팅을 기반으로하여 golang에서 활용할 proto 파일을 작성해보고자 합니다! 필수 패키지 설치 https://github.com/protocolbuffers/protobuf/releases 윈도우일시 위에서 윈도우 버전을 받고 환경변수 설정 필수 $ go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.28 // @latest $ go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.2 // @latest 코드 작성 syntax = "proto3"; package prototest ; option go_package = "prototest"; message ProtoData { string Msg = 1; // 외부에서 사용할거라 앞의 문자는 무적권 대문자 아시죠 !! } 컴파...

2023.01.29
2
[gRPC] 알기이전에 프로토콜 버퍼란 구조 이해하기?

gRPC Remote Procedure Calls Protocol Buffers? © geralt, 출처 Pixabay 이론만 보면 누구에게는 정말 심오하거나 누구에게는 정말 쉽게 이해가 될 수 있습니다. 저는 정말 심오하게 이해가되는데 실습을 통해서 하나하나 알아보면 쉽게 이해할 수 있다고 생각합니다. 오늘 내용은 gRPC를 시작하기에 앞서 사용하는 protocol buf에 대해서 알아볼 생각입니다. 프로토콜 버퍼는 데이터의 구조다! 제목 처럼 프로토콜 버퍼는 데이터의 구조라 생각하시면 됩니다. 우리가 주로 사용하고 있는 데이터 구조는 JSON 형식으로 Restful API를 구성하고 HTTP1.1에 심어서 보내는데 비슷하게 프로토콜 버퍼는 바이너리형 데이터로 통신을 한다고 생각하면 된다! 구글에서 설계한 구조 IDL 기반이다 (인터페이스 정의 언어) 서비스 모델 구조 (서비스 1 메시지 2개 가 하나의 묶음이 된다) 메시지 = 요청과 반환 서비스 = 실행 메서드 (원격 함수) 바이너리 형식 네트워크 통신이다 프로토콜 버퍼 코드 이해하기 https://developers.google.com/protocol-buffers/docs/proto3?hl=ko 공식문서를 기반으로 이해를 해보겠습니다! message 정의 syntax = "proto3"; message SearchRequest { string query = 1; int32 p...

2023.01.29
2
[통신] GraphQL 아키텍처

GraphQL 아키텍처 © casparrubin, 출처 Unsplash REST와는 또 다른 통신 아키텍처입니다. 역시 어떠한 요청에 대한 응답을 하기 위한 기술입니다. REST와의 차이점으로는 정확한 요청에 대한 결과를 반환해주는게 목적이며 클라가 중심이된다는 점 GraphQL이란? 페이스북에서 만든 쿼리 언어 이며 어떠한 명확한 요청에 대한 명확한 답을 해주는 아키텍처입니다. SQL과 비슷한듯 비슷하지않은 gql이라고 부루는 언어를 사용합니다 실제로 아직 공부를 해보지는 않았지만 공부가 필요할 거 같습니다. 클라이언트 요청에 따른 반환을 명확하게 해줄수 있으며 해당 기능을 쓸 수 있는 언어들도 많다는 점이 있습니다. (클라이언트 중심이다) 서비스 구성시 중요한 점 클라 GraphQL 모듈 필요 서버 GraphQL 모듈 필요 도움을 주는 라이브러리 Realy (릴레이) Apollo GraphQL (아폴로) 사용 문법 { user { name } } { "data" : { "user": { "name" : "꾹" } } } 참고 문헌/자료 - #GraphQL #gql

2023.01.29
2
[통신] REST 아키텍처

REST에 대해서 이해하기 © deepmind, 출처 Unsplash REST REST란 Representational State Transfer 의 약자이며 HTTP Method에 정보를 함축하여 보내는 기법입니다. 웹 상에서 URI에 데이털르 심어보내는 통신 방식이라고 보면 될거 같습니다! 구성요소 자원 (Resource) URI를 이용하여 구분을한다. /item/:itemNo 행위 (Verb) HTTP Method를 사용 표현 (Representation of Resource) 현재는 JSON을 주로 사용 CRUD 시스템 구성시 사용하며 아래의 메서드별 정의를 해주는게 원칙입니다. GET : 조회시 활용하는 메서드 POST : 생성을 하는 경우 사용하는 메서드 PUT : 업데이트를 하는 경우 사용하는 메서드 ( 만약 없다면 생성 ) DELETE : 데이터를 삭제하는 경우 사용하는 메서드 PATCH : 부분적인 업데이트를 사용하는 메서드 원래라면 모든 메서드를 상황에 맞게 활용하는게 좋다. 하지만 PUT / PATCH 부분에 대해서는 애매한 부분이 분명 존재하기에 대부분에 프로젝트는 GET / POST / DELETE를 기본적으로 활용한다고 보면 된다! 장점 HTTP 플랫폼에 모두 사용이 가능하다. 범용성 보장되며 상호작용을 지원한다. 서버와 클라가 명확하게 구분된다 단점 구조의 표준이 솔직히 없다. REST API REST AP...

2023.01.29
3
[아키텍처] Micro Service Architecture (MSA)란?

마이크로 서비스 아키텍처 MSA란? 솔직히 나에게는 전혀 다른 세계일줄 알았던 부분의 세계에서의 시작을 하게되며 MSA 시스템에 대해서 알아가고 공부하게 되었다. 앞으로 일은 바쁘겠지만 재미있으면 그것으로 만족하는 스타일인데 지금은 아내와 희망이가 있기에 어느정도의 선을 맞춰가면서 열심히 하려고 노력하는 방향으로 가야할 거 같다. 아 여기까지는 그냥 나의 이야기였습니다. © brandi1, 출처 Unsplash 오늘은 MSA라는 아키텍처에 대해서 알아보려고합니다. 도대체 MSA는 무엇이고 해당 아키텍처를 사용해야하는 이유도 가볍게 이해만 해보고자한다. 깊게 알면 정말 좋겠지만 당장에 바로 알 수 없으니 차근차근 접근해 나아가자 ! 간단하게 마이크로 서비스 아키텍처를 알고싶다면 가장 아래만 봐주세요! MSA란 그리고 등장 Monolithic Architecture 란? 소프트웨어의 모든 구성요소가 하나의 결합체를 이루고 있는 프로젝트 설계모습이 있다. 그런 설계 모습을 모놀리식 아키텍처라 부릅니다. 큰 규모의 서비스가 아니라면 모놀리식 아키텍처를 많이 사용하고 저 또한 대부분 그렇게 설계하고 작업을 많이했습니다. 하지만 모놀리식의 아키텍처는 분명이 존재하는데 특히나 인원이 많은 기업에서는 더욱이나 문제점이 들어납니다. 또한 지금 같이 개발자들의 각기 다른 언어 생태계를 가진 상황 그리고 프로젝트 별 부분 별 어떤 언어가 더 빠르고 더 ...

2023.01.28
3
[Go] 고 언어 웹 서버 (API 서버)

Golang 웹 서버 (API서버) © jordanharrison, 출처 Unsplash 이제 Go를 활용하여 자신의 프로그램을 만들어보세요! Go의 net/http 패키지를 활용하여 API 서버를 고랭으로 구성해보려고 합니다! 고 언어 웹 서버 뼈대 이해하기! 기본코드를 바로 본다음 이해를 하는게 편할 거 같아서 코드를 먼저 이용하여 프로젝트를 만드시고 해당 프로젝트를 실행시켜주세요 ! 실행 후 localhost:3000을 입력하면 Hello Go라는 내용이 나오는 것을 볼 수 있습니다. package main import ( "fmt" "net/http" ) func main() { http.HandleFunc("/", func(writer http.ResponseWriter, request *http.Request) { fmt.Fprint(writer, "Hello Go") }) http.ListenAndServe(":3000", nil) } HandleFunc란? 우리가 일반적인 웹 언어를 활용하여 개발 시의 핸들러 그 의미와 완전히 동일합니다. 처음 받는 인자로는 엔드포인트를 구성하는 것 입니다. 지금 /는 index페이지입니다 인덱스 페이지랑 웹에 도메인으로 접근 시 메인으로 보여줄 페이지를 의미합니다! 두번째 인자로는 실제 해당 엔드포인트로 접근이 이루어질 시 어떠한 행동을 할지에 대한 함수를 작성하면됩니다. 지금은 익명...

2023.01.25
9
[Go] 고 언어 테스트 케이스 작성하기

고 언어 테스트 케이스 작성 © chrisliverani, 출처 Unsplash 이제 우리는 테스트 도구와 벤치마크에 대해서 알아보겠습니다. 어제 오후에 올렸어야했는데 오늘 올리네요 Golang 테스트 및 벤치마크 코드 작성해보기 테스트 작성해보기 이전에 간단하게 프로그램을 하나 작성해보겠습니다. 10을 반환해주는 아무 의미없는 함수를 만들어볼게요 package main func sample() int { return 10 } func main(){ sample() } 테스트 작성해보기 파일명 _test를 붙여준다 패키지 testing을 추가한다 함수명에 Test를 붙여준다 (인지하기 쉽게) 또한 Test이후 시작명은 항상 대문자로 시작해야한다 (이유는 아마도 외부에서 사용이 가능하게 하기 위한게 아닐까 싶습니다!) 실행하기 터미널도구 활용과 vscode활용법이 존재 터미널 -> go test 또는 go test -run 테스트함수명(선택해서 테스트하고 싶다면) 상단의 run을 활용 package main import "testing" func TestSample(t *testing.T){ testresult := sample() if testresult != 12 { t.Errorln(testresult) } } 해당 버튼을 활용하여 테스트가 가능합니다. 그럼 실패하는 12를 활용하여 돌렸을때 결과를 보겠습니다! 그럼 결과를 알고 ...

2023.01.24