chan chan 활용법 - 3. 시그널 채널의 채널로 이용하기
·
프로그래밍 언어
해당 시리즈는 Golang Korea 페이스북 그룹 최흥배님의 번역 글에서 영감을 얻었으며 Go언어와 Go언어를 이용한 동시성 프로그래밍에 관해 어느정도 알고 있는 독자를 대상으로 한다. 이전 글에서는 순서가 보장되는 워커풀 패턴으로 이용하는 채널의 채널 활용법에 대해 알아보았다. 해당 활용법은 성능에 초점을 두었다. 이번 활용법은 성능 보다는 구조에 초점을 둔다. 다른 프로젝트에서 이따금씩 쓰이기 때문에 알아두는 것이 좋다. 시그널 채널 시그널 채널은 닫힐 때까지 코드의 실행을 멈추게 하는 채널이다. 원리는 다음과 같다. 채널은 데이터를 보낼 때 해당 채널로 데이터를 받거나 닫힐 때까지 다음 코드로 넘어가지 않고 기다리는 특성이 있다. 그리고 시그널 채널은 기본적으로 데이터를 받지 않도록 한다. 두 문..
chan chan 활용법 - 2. 순서가 보장되는 워커 풀 패턴으로 이용하기
·
프로그래밍 언어
해당 시리즈는 Golang Korea 페이스북 그룹 최흥배님의 번역 글에서 영감을 얻었으며 Go언어와 Go언어를 이용한 동시성 프로그래밍에 관해 어느정도 알고 있는 독자를 대상으로 한다. 이전 글에서는 채널을 변수로 취급하는 채널의 채널 활용법에 대해 알아봤다. 채널의 채널을 보게 된다면(채널의 채널 자체가 흔하지는 않겠지만) 해당 형태로 가장 많이 볼 것이다. 다음 두 글에 걸쳐 설명할 활용법들은 흔히 보이지 않을 뿐더러 해당 방법들을 몰라도 Go언어를 사용하는 데에 있어서 문제는 없을 것이다. 하지만 특정 상황에서는 요긴하게 쓰이리라 장담할 수 있다. 이번 글에서는 이 중 특정 상황에서 성능을 크게 끌어올릴만한 방법을 소개하고자 한다. 워커 풀 패턴 이에 앞서 생소할 수 있는 워커 풀 패턴에 관해 이..
chan chan 활용법 - 1. 채널을 변수로 취급하기
·
프로그래밍 언어
해당 글은 Golang Korea 페이스북 그룹 최흥배님의 번역 글에서 영감을 얻었으며 Go언어를 어느 정도 알고 있는 독자를 대상으로 한다. Go 언어의 채널(chan)은 특정 자료형의 변수들의 통로이다. 그리고 채널 역시 하나의 자료형이다. 즉, 채널 타입을 받는 채널 역시 문법적으로는 가능하다. 다만, 통로의 통로라는 것은 꽤나 이상하게 들린다. 이렇게 이해부터 쉽지 않은 채널의 채널(이하 chan chan)은 과연 이론의 영역에만 머무를까? 당연히 이 글을 작성한 이유는 chan chan이 나름 실용적으로 이용될 수 있다는 것을 보여주기 위함이다. 필자는 chan chan의 활용법을 3가지로 분류했으며 3개의 글로 나눠서 설명할 예정이다. 해당 글은 이 중 가장 직관적인 활용법에 대해 설명하고자 ..
파이프라인 패턴
·
소프트웨어 공학
들어가기에 앞서... 해당 패턴은 동시성 프로그래밍에 기반한 디자인 패턴이기 때문에 동시성 프로그래밍을 지원하는 언어가 아닌 경우 이 글이 별로 도움이 되지 않을 것이다. 또한 해당 글은 Go언어만의 문법을 쓰기 때문에 동시성 프로그래밍을 지원한다 하더라도 다른 언어에서는 구현 방법이 다를 수 있다. 즉, 해당 글은 Go언어 사용자 중 동시성 프로그래밍에 대한 기본 개념(고루틴, 채널)에 대한 기본 지식이 있는 독자를 대상으로 한다. 파이프라인 패턴은 디자인 패턴 중 실행 패턴이다. 디자인 패턴 목록에 나열한 글에 없다고 의아해할 수 있다. 맞다. 해당 패턴은 전통적인 디자인 패턴('GoF의 디자인 패턴'에 포함된 패턴)은 아니다. 이는 해당 패턴이 일반화되지 않았다거나 바람직하지 않다는 것을 뜻하는 것..
특허 검색 도우미 서비스 개발을 마치며...
·
회고
한동안 친구와 같이 프로젝트를 진행했다. 변리사의 작업을 대신 해주는 프로그램인데, 쉽게 말해 자신이 내고자 하는 특허가 이미 있는 기술인지 검색하는 것을 도와주는 서비스이다. 참고로 해당 프로젝트는 깃허브에 올렸지만, 되도록이면 졸작 박람회 전까지 비공개로 할 계획이다. 지금은 필자의 파트가 거의 끝난 시점이라(유지 보수 단계) 이 글에서는 필자가 프로젝트를 진행하면서 얻은 교훈들을 말하고자 한다. 맡은 파트 필자가 맡은 부분은 서버 파트이다. 엄밀히 말하면 웹 서버와 특허 검색 서버, 머신 러닝 파트를 연결하는 인터페이스 서버이다. 이 서버는 웹서버에서 사용자 입력을 보내면 KIPRIS PLUS(특허 검색 api 서비스)에 특허 데이터를 요청해 XML 데이터를 받아온다. 이 때 특허 데이터는 API ..
DIP 원칙의 한계
·
소프트웨어 공학
들어가기에 앞서... 지난 글에서는 DIP 원칙이란 무엇인지, 또 DIP의 장점과 적용하는 방법에 대해서 설명했다. 해당 원칙대로 작성한 코드는 순환 참조 문제에 빠질 일이 없고 객체지향적으로써 바람직한 코드가 될 것이다. DIP 원칙 그 자체로써는 단점이 거의 없다.(아주 없지는 않다. 코드의 길이가 살짝 늘어난다. 물론 이러한 단점은 장점에 비하면 매우 사소하다.) 이 글의 제목이 '단점'이 아닌 '한계'라는 사실에 주목하라. 그렇다면 이 글에서 설명하고자 하는 한계는 무엇인가? 바로 DIP 원칙을 적용할 수 없는 경우이다. 상위 폴더에 인터페이스를 두기만 하면 DIP 원칙이 적용된다고 생각할 수 있고 또 어느 정도는 사실이지만, 이것이 불가능한 경우가 존재한다. 이 글에서는 DIP 원칙을 적용할 수..
[서평] Go 프로그래밍 개발 환경에서 의존성 주입 실습
·
서평
정보 제목 : Go 프로그래밍 개발 환경에서 의존성 주입 실습 (원제 : Hands-On Dependency Injection in Go) 저자 : 코리 스캇 (역자 : 이준) 출판사 : 에이콘 요약 Go언어를 객체지향적으로 설계하는 방법에 대한 책이다. 해당 책은 단순히 객체지향의 원칙과 객체지향적 설계 기법을 기계적으로 나열하지 않고 예제를 통해 어떻게 쓰고 왜 필요한지 와닿게 설명한다. 또한 이 책은 각 기법을 소개할 때 부작용을 같이 소개한다. 즉, 각 기법의 장단점을 모두 설명하여 독자가 기법을 적용해야 할 때를 판단하는 것을 돕는다. 유의점 해당 책은 기본적으로 Go언어를 이용해 객체지향적으로 프로그래밍 하는 방법을 설명하는 책이다. 즉, Go언어를 사용하지 않으면 해당 책에 있는 기술을 사용..
Go 언어에서의 DIP
·
소프트웨어 공학
들어가기에 앞서... 해당 글은 독자가 Go 언어(혹은 C언어 계열)의 문법에 대한 기본 지식이 있다고 가정하고 설명하겠다. 객체지향적 설계에 관해 집중적으로 공부한 적이 있다면 'SOLID 원칙'이라는 용어는 들어봤을 것이다. SOLID 원칙은 로버트 마틴이 그의 저서 '클린 소프트웨어'에서 제창한 용어로 다섯 가지 객체지향 소프트웨어 디자인 원칙의 약자를 모은 것이다. 이번 글에서는 이 다섯 가지 원칙 중 마지막 원칙인 DIP(의존성 역전 원칙)에 대해 설명할 것이다. 해당 원칙은 이해하기가 어려운 대신, 이해만 한다면 (특히 Go언어에서)바로 적용하기 쉬운 유익한 원칙이다. 정의 상위 모듈은 하위 모듈에 의존해서는 안 된다. 상위 모듈과 하위 모듈 모두 추상화에 의존해야 한다. 추상화는 세부 사항에..