본문 바로가기

분류 전체보기74

[Go] 고루틴(GoRoutine) 심화(7) - 파이프라인 유래 파이프라인은 한 곳에서 다른 곳으로 액체를 옮기기 위해 사용한 파이프들의 집합을 말한다. 컴퓨터에서 말하는 파이프라인 역시 이와 마찬가지로 어떤 위치에서 다른 위치로 데이터를 처리 후 운반하기에 이와 같은 용어를 사용하는 것으로 보인다. 파이프라인이란? 시스템에서 추상화를 구성하는 데 사용할 수 있는 도구이다. 특히 Stream이나 Batch 작업들을 처리해야 할 때에는 특히 탁월한 효과를 낸다. 각 단계의 관심사를 분리할 수 있다. 그로써 다양한 이점을 얻을 수 있다. 1. 상호 독립적으로 단계를 수정할 수 있다. 2. 단계들의 결합 방식을 짜맞출 수 있다. 3. 일부분을 팬 아웃하거나 속도를 제한할 수 있다. 파이프라인의 특성 1. 각 단계는 동일한 타입을 소비하고 리턴한다. 2. 각 단계에서 .. 2022. 6. 24.
[Go] 고루틴(GoRoutine) 심화(6) - 고루틴 에러 처리 아무리 잘 짜여진 코드에서도 에러는 발생하기 마련이다. 그 원인이 내부적인 문제가 아니라 외부 환경에 의한 문제일 수 도 있고 아직 내가 겪어보지 못한 다양한 이유가 존재할 수 있다. 그렇기에 안정적인 서비스를 위해선 효율적인 에러 처리가 필수적이다. 그리고 Go라는 언어는 다른 언어에서 채용하는 에러 처리방법인 예외 모델을 사용하지 않고 더욱 직접적으로 에러를 다루는 형식을 채용한다. 그렇기에 다른 프로그래밍 언어에 비해 귀찮지만 조금 더 효율적이고 직관적인 에러 처리를 할 수 있다. 그렇다면 동시성 프로그래밍을 적용한 작업에선 어떤식으로 처리하는 것이 좋을까? 에러 처리에서 중요한 것 에러 처리를 함에 있어서 가장 중요한 것은 에러를 처리하는 주체이다. 동시에 프로세스가 병렬적으로 진행되는 동시성 프.. 2022. 6. 20.
[Algorithm] Programmers_42579_베스트앨범 - Go 문제 링크 Programmers_42579_베스트앨범 생각 1. 장르의 우선순위를 먼저 생각 2. 장르별로 노래의 우선순위를 생각 기본적으로 sort만을 사용해서도 풀이가 가능하지만 우선순위 큐를 체득하고 싶어서 우선순위 큐도 사용 코드 import ( "container/heap" "fmt" "sort" ) type genre struct { name string playAmount int } type song struct { index int playCount int } type pq []song func (p pq) Len() int { return len(p) } func (p pq) Less(i, j int) bool { if p[i].playCount == p[j].playCount { ret.. 2022. 6. 13.
[Server] Go Web Server HTTPS 적용하기 HTTPS란? HTTP 프로토콜을 사용하여 통신하는 웹 애플리케이션에 TLS 프로토콜을 적용시켜 암호화된 데이터를 사용하여 통신하는 프로토콜. TLS란? 컴퓨터 네트워크 통신에 데이터를 암호화하는 데 활용할 수 있는 프로토콜. 대칭 암호화 방식과 공개키 암호화 방식을 사용한다. 디지털 인증서란? 믿을 수 있는 제3자 기관에 의해 발행된 디지털 문서이다.(스스로가 OpenSSL과 같은 오픈소스를 통해 자가 인증이 가능하기도 하다) 공개키, 이 키가 속한 서버 이름, 정보를 검증하는 믿을 수 있는 제3자 기관의 이름, 발행자가 기록돼 있다. 이 제3자 기관을 인증기관(CA)이라 한다. 만료일자가 존재한다. 웹 클라이언트는 일반적으로 알려진 인증기관의 리스트를 갖고 있다. 대칭 암호화 방식 대칭키 알고리즘이라.. 2022. 6. 7.
[Server] OAuth 알고 쓰기 OAuth란? 다양한 플랫폼 환경에서 권한 부여를 위한 산업 표준 프로토콜이다. 아마 다양한 환경에서 알게 모르게 OAuth를 사용한 인증을 해 보았을 것이다. 당장에 생각나는 예시를 들자면 첨부한 인프런의 로그인화면을 보면 인프런 자체의 회원임을 인증하는 방법과 간편 로그인 란의 다양한 플랫폼을 통해 인증하는 방법이 있는 것을 볼 수 있는데 여기서 간편 로그인을 통한 인증이 이 OAuth 프로토콜을 사용한 인증 방법이다. OAuth에서의 용어 정리 사용자 : Resource Owner 사용하고자 하는 서버 : Client 리소스 제공 서버 : Resource Server 리소스 제공 서버의 인증 서버 : Auth Server OAuth를 사용하는 이유 신뢰성이 확보되지 않은 서비스에 본인의 정보를 넘기.. 2022. 6. 2.
[문자열] 문자(아스키코드-asciicode, 유니코드-unicode)와 인코딩(utf-8, base64) 시작 컴퓨터 세계에서 문자라고 한다면 대부분의 사람들이 들어봤을 아스키코드와 유니코드가 대표적일 것이다. 어떠한 기회가 있어서 이 부분에 대해 관심이 생겼고(원래도 알았어야 한다고 생각하지만 그렇지 못했다!) 공부해 보았다. 깊이 있게 알게 됐다고는 말할 수 있을지 모르겠지만 이전보다는 더 많은 것을 알게 됐다. 그 부분을 기억하기 위해 이렇게 기록하고자 한다. 아스키코드 아스키코드는 컴퓨터를 만들었고 가장 초창기에 컴퓨터에 대해 깊게 사용하기 시작한 서양권(영문권)의 나라들이 정립한 것이다. 그때문에 코딩에 필요한 몇몇 특수 문자들과 영문, 숫자 정도를 포함하고 있다. 그렇기에 7bit라는 작은 범위에 코딩에 필요한 문자를 맵핑한 약속이다. 유니코드 하지만 컴퓨터는 영문권에서만 사용되는 것이 아니게 됐.. 2022. 5. 25.