2022년 1월 2일 일요일
이맥스로 블로그 배포하기
css를 좀 더 만져볼까 했지만, 역시 치장보단 글 자체가 중요하다고 생각해서 글이나 써야겠다고 생각한다.
새로 만든 사이트에는 좀 제대로 써보려고한다. 기존에 회사에서 썼던 기술블로그들도 좀 다시 정리해서 올려볼까 한다.
나의 사견이 들어간 글이 필요하다. 왜냐하면, 정보는 어짜피 책을 보는 것이 더 정확하기 때문이다.
나는 개발자로서 기술을 말로 유창하게 말하는 것을 좋아하지 않는다. 이것이 옳고 저것이 그르다. 라는 것을 말로만 유창한 사람들을 피한다.
개발자라면 기어코 코드로 먼저 말하는 사람들이 좋다.
개발은 이상하게 하면서 말은 유창하고 잘하는 것처럼 말하는 사람들이 많다. 하지만 그것을 말만 듣는 사람들은 잘 모른다.
복싱분석은 선수보다 비평가들이 더 잘하는 법이니까. 이론만으로는 그가 복싱을 잘하는지 알기 어려울 것이다.
그래서 새로운 기술블로그에는 코드를 보여주고 짧게 설명하는 식으로 가볼까한다.
그 첫번째 clojure에서 유명한 라이브러리 중에 하나인 ring 프로젝트의 소스를 까보고 직접 간단하게 만들어서 돌려보는 것을 주제로 삼았다.
https://ssisksl77.gitlab.io/code-that-talks/220122-ring.html
2021년 12월 20일 월요일
[리뷰] 자바스크립트 디자인 패턴
객체지향 프로그래밍
GoF패턴을 자바스크립트로 설명한다. 그렇기에 '이게 뭐야? 뭐 이런거에 이름을 붙여서까지 해서 사용해야해?' 라는 생각이 들게 만든다. 자바를 사용한 사람에게는 꽤나 중요한 패턴들이지만, 자바스크립트로 그 패턴을 어거지로 표현하려다보니 색다르면서 몇몇 패턴들은 자바스크립트에서는 쓰지 않겠다 라는 생각을 했다.
함수형 프로그래밍
GoF 패턴을 설명한 후, 함수형 프로그래밍을 간단하게 소개한다. 확실히 자바스크립트의 특성상 함수형 프로그래밍이 좀 더 깔끔하다는 느낌이 든다.
이후 패턴들
이후 설명하는 모델 뷰 패턴, 웹 패턴은 별로였다. 사실 GoF 설명 이후부터는 대충 페이지 크기를 부풀리기용처럼 보일정도다.
하지만 가장 마지막에 고급패턴이라고 써있는 내용은 꽤나 재밌었다.
괜찮은 책이지만 다른 명저에 비해서는 우선순위가 적은 책이라고 할 수 있다. 이 책을 보기 전에 GoF의 디자인패턴을 보지 않았다면 그 책부터 보는 것이 좋겠다.
2021년 12월 5일 일요일
기술 덜어내기
항상 덜어내야 한다고 생각했다.
가볍게 살아야 한다고 생각했다.
무언가 잘 안될 때, 항상 무엇을 더 버려야 하지? 라고 생각했다. 잠자는 시간을 버려야 하는걸까. 좋아하는 음식을 먹기를 버려야 하는 걸까? 나의 어떤 생각이 잘못되고 버려야 할까? 혹은 내가 항상 옳다고 생각했던 신념을 버려야 하는 걸까?
계속 버리다보면 거울 속에 보이는 초라한 몸뚱아리 넘어 정직한 나를 보게 된다.
덜어내기 전에
그 동안 많은 기술들을 습득하려했다.
알고리즘, 디자인패턴을 넘어서 유펭린의 집합론, OOP, 여러 고수들의 에세이, 철학, 소설, FP, 리스프, Clojure, 매크로, 유다시티의 로보틱스/블록체인 강의, nodejs와 express, golang ...
언어의 문법을 익히는 것은 너무 쉽다.
중요한 것은 왜 새로 만들어져야 하는가 라고 생각한다. IT만큼 새로운 것이 급격하게 만들어지고 사그러지는 곳은 드물다. (CoffeeScript 잘 지내니?)
go 언어에서 덜어내기
go는 그런면에서 지루한 언어이면서 새롭다. go는 심플함을 위해 신기능들을 넣지 않으려고 노력한다.
오늘 내가 이 글을 적는 가장 결정적인 동기는 바로 golang에 대한 세미나를 듣던 중 go언어 개발자의 인상깊은 Q&A답변을 들어서이다.
So what's been the biggest challenge in Go?
I'd say that, for me at least, the biggest challenge is keeping it simple.
It's always so easy to add another feature. And you can see so clearly how useful it would be to have this new facility in the language. But if we add every new facility in the language, then we get something so complicated that it's very difficult to use, like some existing languages today.
And I'd say the biggest challenge has been to say no.
언어를 만들면서 가장 힘들었던 것은 언어를 심플하게 만들기 위해 no를 말하는 것이 가장 힘든 허들이라는 점이었다는 것이다.
메인스트림의 언어들은 너도나도 할 것 없이 새로운 기능들을 추가한다. 옆 언어에서 쓰는 문법들을 추가하고 '우리도 이거 있어요~' 라고 판매한다. 이해한다. 그들이 어떻게 잘 사용하는지는 모르겠고, 모든 사람이 좋아할만한 모든 기술을 추가하는 것이다. 쓰고 안쓰고는 당신의 마음이다. 좋은 코드를 만드는 것은 오로지 당신의 선택이 좌우하는 것이다 라고 말하는 것 같다.
더글라스 크록포드의 덜어내기
더글라스 크록포드는 그의 서적 [javascript : The Good Parts] 나 최근 서적에도 소개하듯이, 좋은 기능만을 쓰고 좋지 않은 기능은 기본문법에 추가되었더라도 쓰지말라고 말한다. 쓰지 않는 것은 용기가 필요하다. 덜어내는 것은 참으로 힘들다.
추가하는 것은 때때로 힙해보이고, 여러 경험을 얻을 수 있을 것이다.
덜어내는 것은 힙하지도 않고, 경험을 얻지도 못한다. 덜어내는 것은 이미 경험한 자들 그리고 정확한 믿음이 있는 사람들의 것이다.
더 나은 코드란 무엇일까?
나의 덜어내기
나에게 더 나은 코드란, 더욱 담백하고, 덜어내고 덜어내서, 이해가 쉬운 별거 아닌 것처럼 보이는 코드이다. (사실 별거지만...)
이기능 저기능을 넣어서 오히려 복잡해보인다면 큰 문제가 있을 것이다.
최소한 새로운 기술, 범용함수 또는 매크로를 넣었다면 보기에는 쉬워보여야 한다.
별거 아닌 것처럼 보여서 '별거 아니네 이것만 고치면 되겠구만' 라고 고치고 지나갈 수 있는 코드이길 바란다.
2021년 12월 3일 금요일
Clojure를 하다가 Node.js/Express 만져보면서 느낀점.
2021년 11월 27일 토요일
매크로에 대한 글을 적다
2021년 11월 22일 월요일
2021년 4월 30일 금요일
컬리에서 작성하는 마지막 기술 블로그
2021년 3월 14일 일요일
[그런 REST API로 괜찮은가]를 보고
REST API는 무엇일까.
로이 필딩의 논문을 다 읽진 않았지만 그곳에는 client-server 아키텍처 사이에서 완벽하게 독립적으로 개발을 할 수 있도록 하는 API 아키텍처를 상상한 듯 하다.
만약에 할일 목록을 가져왔다면, 그 할일 목록에서 할 수 있는 행위들을 위한 링크를 제공하는 것이다. 그러면 클라이언트에선 특정 uri에 대한 정보를 알 필요도 없을 것이다.
이것이 HATEOS의 중요성인 듯하다. 로이 필딩을 정확히 무엇을 꿈꾼 것일까.
아래 유튜브 비디오를 보면서 고민을 하는 하루가 되었다. 로이 필딩 논문을 한 번 마저 읽어봐야겠다.
2021년 3월 11일 목요일
폴그레이엄은 왜 ycombinator라고 이름을 지었을까
ycombinator는 lambda calculus에서 꽤나 중요하게 여겨지는 아이디어이다.
오랫만에 컬리에 기술블로그로 기고할 겸 공부도하고 정리도 했다.
https://www.notion.so/tombox/Y-combinator-865c9614db0245ce869424a92462406b
취직을 위한 공부만 했다면 달라졌을까
2021년 3월 4일 목요일
[패스트캠퍼스] 강의를 구매했다.
컬리에 있으면서 고민을 하게된 큰 그림을 보는 인사이트를 얻기 위해 구매해보았다.
아래는 관련 강의 링크이다.
https://www.fastcampus.co.kr/dev_red_yjs
윤진석님이 어떤 분인지는 잘 모르겠지만, 나보다 많은 경험을 하신분이니 가격에 맞는 정보를 알려주지 않을까 라는 생각에 구매를 진행했다.
그리고 생각보다 비싸진 않다. (이전에 구매한 clojureScript 강의에 비하면...)
수강을 다 하지 못해서 속단할 수는 없지만, 강의시간이 4시간 정도 된다. 거기에서 intro 관련 내용을 빼면 더 시간이 줄어든다. 가격은 15만원 정도였으니, 약 4시간이라고 치면 한시간에 37500원 정도다.
싼 가격은 아닌 것 같다.
그래도 다 들어보면 생각이 달라질 수 있으니 전부 수강하고 다시 리뷰를 해야겠다.
2021년 3월 1일 월요일
Learn Reagent Pro by Jacek Schae 강의 후기
reagent 란
reagent react를 clojureScript로 개발할 수 있게 해주는 라이브러리다.Learn Reagent Pro
강의는 꽤나 비싼데 reagent를 처음 접하는 사람에게는 유용할 것이다.2021년 2월 27일 토요일
clojure로 카프카에 이벤트 발행
의존성
[org.apache.kafka/kafka-clients "2.5.0"]
사용코드
(ns kafka-demo2.core
(:import [org.apache.kafka.common.serialization StringSerializer]
[org.apache.kafka.clients.producer KafkaProducer ProducerRecord])
(:gen-class))
(def config
{"bootstrap.servers" "127.0.0.1:9092"
"key.serializer" StringSerializer
"value.serializer" StringSerializer})
(defn publish [topic str]
(let [producer (KafkaProducer. config)
record (ProducerRecord. topic str)]
(try
(.send producer record)
(finally (.close producer)))))
(defn -main
"I don't do a whole lot ... yet."
[& args]
(println "push A")
(publish "yhnam-topic" "A"))
도커
https://github.com/ssisksl77/clojure-breadcrumb 위 깃허브 참고실행
별거 없음 위 깃허브 참고
$ docker-compose up
$ lein uberjar
$ java -jar kafka-demo2-0.1.0-standalone.jar
그외 정리
https://www.notion.so/tombox/db6bc836f25d41948d28f3aff9ec1aff2021년 2월 21일 일요일
[책리뷰] (빅 데이터 세상으로 떠나는 간결한 안내서) NoSQL
이 책은 NoSQL의 개요를 담고있다.
NoSQL의 전체적인 추세가 그때와 지금은 다르지 않은 것 같다.
NoSQL이 어떤 종류가 있으며, 기존 문제들을 어떻게 풀려고 하는지 간결하게 설명한다.
흥미로운 책이었다. MongoDB를 아무생각없이 쓰고 있었는데 조만간 DB 관련된 책을 봐야겠다는 생각을 한다.
MySQL도 아무생각없이 썼던게 아닌가 싶다. 공부해야겠다.
2021년 2월 18일 목요일
Monad 정리
1. Monoid
2. Functor
class Functor f where
fmap :: (a -> b) -> f a -> f b
(<$) :: a -> f b -> f a3. Applicative Functor
(<$>) :: Functor f => (a -> b) -> f a -> f b(<*>) :: Applicative f => f (a -> b) -> f a -> f b
만약에 즉, 위에서 예를 들었던 List안에 [+1, +2] 이런식의 리스트가 존재하여, 합칠 수도 있다.
4. Monad
class Applicative m => Monad m where
(>>=) :: m a -> (a -> m b) -> m b
(>>) :: m a -> m b -> m b
return :: a -> m a
-- fmap or map (Functor)-- flatMap (Monad)
(a -> b) -> f a -> f bm a -> (a -> m b) -> m b
var a = [1,2,3]function addOne(x) {return x + 1;}a.map(addOne); // [2,3,4]
var a = [1,2,3]
function double(x) { return [x,x] }
var b = a.map(double); // [[2,2],[3,3],[4,4]]
b.map(double); // [[[2,2],[2,2]],[[3,3],[3,3]],[[4,4],[4,4]]]누군가는 이렇게 말할 수 있다. 애초에 왜! 리스트를 리턴하는 함수를 만든거야? 그냥 그 타입에 맞는 것만 리턴하지?!
[1,2,3] ++ [4,5,6] # [1,2,3,4,5,6]
2021년 2월 11일 목요일
2020년을 생각하며...
사장님의 이름을 연예인처럼 많은 사람들이 기억하고 있는 회사.
2020년 7월 12일 일요일
처음으로 마켓컬리에 기술블로그를 발행했다.
다들 멋지신 분들이라서, 감히 기술 관련 글을 올리기가 무서웠다.
그래서 기술적인 것보다는 좀 더 내가 개인적으로 관심을 가졌던 글을 써야겠다고 생각했고, 그래서 선택한 글이 lambda calculus였다.
오타가 좀 있지만, 어쩔 수 없다... 이미 기고는 되었다.
정리하고 레퍼런스 체크를 하는데 꽤나 시간이 걸렸다.
잘못된 정보를 공유하기 싫었기에 레퍼런스 체크를 계속 했으며, 모호한 부분은 아예 삭제를 하던가, 유머스러운 글 또한 전부 삭제했다.
2020년 2월 19일 수요일
[리뷰][인프런 강의] 김영하의 JPA ORM 기본편
선배가 후배에게 알려 주듯이, 그때그때 현업의 이야기를 구수하게 해주실 때도 있다.
노트정리한 것
2020년 1월 30일 목요일
[리뷰] clojure polymorphism
저자는 코드의 재사용에서 가장 중요한 요소를 다형성이라 믿는 듯 하다.
하여 다형성에 대한 자신의 생각과 그 노하우를 clojure를 이용해서 아주 짧게 설명해주고 있다.
노트정리한 내용
2020년 1월 14일 화요일
[리뷰] 셰익스피어의 리어왕
한번의 믿음, 한번의 실수로 모든 것을 잃은 리어왕의 이야기는 남을 불신하는 것에 대한 이야기가 아닌
자신이 누구인지 다시 새겨보게 하는 이야기라고 할 수 있다.
나의 생각
리어왕은 세명의 딸에게 각각 땅을 나눠주기로 한다. 갈등의 시작은 이미 여기서 시작된다. 왜 땅을 나눠주려하는가. 왜 땅을 삼등분하였는가.리어왕은 이미 처음부터 세 딸에 대해 제대로 보려고 하지 않는다. 이미 결정은 만들어졌고, 딸들은 리어왕을 친송하기만 하면 되는 것이다.
리어왕 자신은 그럴 가치가 있는 사람이라고 생각했나보다. 이제 나눠줘도 자신은 리어왕 그대로 이기 때문에 상관이 없다고 생각했나보다.
당연히 세 딸들이 자신을 사랑하고, 자신이 재산을 나눠주면 그 보답으로 무언가를 해줄 것이라 생각했나보다.
리어왕은 그 증거로 자신을 얼마나 사랑하는지 말하라 한다. 첫째 딸, 둘째 딸은 리어왕에 대한 사랑을 온갖 수식어를 붙여서 표현한다. 그는 흡족한다.
하지만 막내딸 코딜리어는 거짓을 말하지 않고 자신의 생각을 그대로 말한다.
리어왕은 분노하며 코딜리어에게 주어질 모든 땅을 빼앗고, 시집을 보낸다.
재산을 받은 두 딸은 재산을 받은 시점부터 리어왕을 무시하기 시작한다. 리어왕은 자신이 무슨 일을 저지른 것인지 뒤늦게 깨닫게 되는데...
이 이후의 내용은 굳이 설명하지 않도록 하겠다. 이 책이 비극이라는 점으로 추론하거나, 리어왕은 짧은 글이니 읽어보길 추천한다.
기억에 남는 문장을 말하라 한다면 글로스터가 두 눈을 잃고 하는 말이다.
갈 곳이 없으니 눈도 필요없다. 눈이 있을 땐 넘어졌지.이 말이 계속 머리 속에 맴도는 것이 신기하다. 특이 "눈이 있을 땐 넘어졌지" 라는 말이 신기하다.
눈이 없어서 부축을 받는 존재가 된 글로스터는 눈이 있을 때 넘어졌다는 말을
마치 거짓된 글들을 읽고 그것에 혹해 잘못을 저지른 자신을 되돌아 보는 말일 수도 있고
방향성이 있던 그의 삶에서는 넘어지기도 하고 나아갔겠지만
전의를 상실하였기에 나아가지도 않기에 넘이지지도 않는 다는 말일 수도 있을 것 같다.
셰익스피어의 리어왕에서 나오는 유명한 명언은 아래와 같다
있다고 다 보여주지 말고 안다고 다 말하지 말고 가졋다고 다 빌려주지 말고 들었다고 다 믿지 말고이 내용만을 보면 아첨에 조심하라는 말이다.
내가 리어왕을 보면서 느낀 점은 이것과는 조금 다르다.
자신을 보고 싶은 대로 보고, 누군가를 현혹하려는 것은 인간의 본능임을 셰익스피어는 보여주려는 것 같다.
사랑하고자 하는 것을 바라보고, 믿고 싶은 것을 믿는 것 또한 인간이 하는 실수라고 생각한다.
사실 코딜리어가 아버지를 사랑하는 말을 해주었다면, 이런 비극이 과연 일어났을 것인가.
혹은 딸들에게 재산을 물려줄 때, 끝까지 막아섰던 신하를 버리지 않고 그를 믿었다면 어떻게 되었을가.
라는 생각을 해본다. 하지만 이 한 편의 연극이 단순한 격언을 말하기 위한 극이라고 하기에는 아깝다고 생각한다.
나는 리어왕의 이야기가 우리의 삶으로 느껴진다.
누군가를 어리석게 믿는 것은 피할 수 없으며 우리가 사랑하는 행위이기 때문이다.