한빛미디어의 '나는 리뷰어다' 5월 도서로 받은 책이다.
나는 리뷰어다 제도 괜찮네.
석 달째 따끈따끈한 신간을 계속 받아보고 있다.
PART 1. 소프트웨어를 지탱하는 기술
파트 1에서는
문자열 인코딩, 다국어 처리, 날짜와 시간, 정규 표현식, 범용 고유 식별자, 난수, 해시 함수에 대해 다룬다.
CHAPTER 01. 문자열 인코딩
EUC-KR, UTF-8은 들어는 봤는데
누가 설명하라고 하면 제대로 못했을 것 같다.
작가님은 이해하기 쉽게 참 잘 적어주셨네.
팁도 잘 숙지해 둬야겠다.
엄격하게 구분하면 문자 집합(Charset)에는 유니코드, ISO-8859, ASCII 등이 이에 해당하고
문자열 인코딩은 UTF-8, UTF-16, UTF-32 등을 말한다고 하네.
CP949는 EUC-KR의 확장 문자 집합이라더라.
CP949는 생소한데 MS949랑 같은 거더라.
이클립스였던가? 거기서 인코딩 방식을MS949로 체크한 기억이 났다.
UTF-16, UTF-32라는 것도 책 덕분에 알았다.
리틀 인디언, 빅 인디언 참 오랜만에 봤다.
어느 순간부터 EUC-KR/CP949/MS949에서 UTF-8로 넘어간 것 같은데..
다 이유가 있었네(UTF-8가 나중에 ISO에서 정한 국제표준).
이제까지 프로젝트 할 때에는 어설프게 알고 막 썼던 것 같은데,
다음에는 좀 제대로 알고서 쓰게 될 것 같다.
CHAPTER 02. 다국어 처리
국제화라고, i18n(internationalization) 표준에 대해 설명한다.
이런 게 있는지도 몰랐다.
내가 우물안 개구리이긴 했나 보다.
해외 서비스를 안 해봤으니 알 리가 있나.
생소한 내용이다 보니 확실이 이해가 빨리 되지는 않더라.
CHAPTER 03. 날짜와 시간
올해 초에 timestamp 넣어야 해서 계산 방식에 대해 공부를 좀 했는데
이게 바로 나오네.
시험공부한 부분이 딱 시험에 나온 그 느낌이었다.
맨 뒤에 ETCD, 주키퍼를 사용해서 여러 서버가 같은 타임 존을 사용해 보라는데,
이게 뭔가 했더니 분산처리 관련된 거네.
후.. 내가 제일 약한 부분이네.
갑자기 허를 찔린 기분이더라. 공부할 게 너무 많다.
CHAPTER 04. 정규 표현식
정규표현식은 2년 전에 수천개의 소스 코드를 일괄 리팩토링하면서
재대로 좀 많이 익혔는데..
그 때 기술부채를 좀 덜어서 읽는데 어렵지는 않더라.
다만 그 때 따로 정리를 안 한 게 아쉽더라.
CHAPTER 05. 범용 고유 식별자
범용 고유 식별자라길래 뭐지? 했는데.
UUID(universally unique identifier)였네.
예전에 운영이가 개발인가 할 때 단말기 정보로 사용자를 구분해야 했던 것으로 기억한다.
안드로이드 계열은 MAC, 아이폰은 이것으로(UUID)로 식별한 줄 알아서
오 또 아는 거 나왔구나, 했는데..
찾아보니 내가 한 건 UUID가 아니라 UDID 였나보더라.
세상이 계속 휙휙 바뀌니 쫓아가기가 좀 버겁고 그러네.
CHAPTER 06. 난수
난수 이야기 하면서 Seed 이야기 할 때에는 십수년 전에 확률 수업에서 배운 게 생각이 나더라.
그 때 (초반에만) 열심히 공부했었는데.
그래도 공부했던 것 기억이 새록새록 났다.
학교 커리큘럼이 정말 중요하긴 한 것 같다.
셔플 백shuffle bag(공정한 난수)이라는 개념도 있고..
'난수'만으로 한 챕터를 만들 수 있는 작가님의 역량도 부럽더라.
OTP 이야기가 나오길래 OTP 인증 프로세스에 대해
따로 공부할 기회도 얻을 수 있었다.
CHAPTER 07. 해시 함수
대강의 해시 함수 개념은 알았는데 책에서 충실히 잘 설명해주어서
제대로 확실히 알 수 있었던 것 같다.
MD5(message-digest algorithm5)는 들어는 본 것 같은데.. 설명을 보고서야 이제 좀 알겠더.
뒤의 SHA-1(Secure Hash ALgorithm-1), SHA-2 보면서 예전에 운영할 때 암호화 알고리즘 전환한 것 생각도 잠시 났다.
전환 그 자체보다 여기저기 테스트해달라고 요청하고 취합 받는 게 많이 빡셌지.
뒤의 '솔트' 개념도 설명이 잘 되어 있더라.
이것도 들어는 본 것 같은데..
내 머리 속에 허점이 참 많기도 한 것 같더라.
PART 2. 데이터 처리 기술
파트 2에서는
JSON, YAML, XML, 프토토콜 버퍼, Base64, 데이터 압축에 대해 다룬다.
CHAPTER 08. JSON
JSON은 이전에도 있는 것은 알았지만, 작년에 팀 이동 후 코딩하면서 JSON으로 계속 주고 받고 하니깐 좀 JSON에 대해 겁이 덜 해졌다.
덕분에 이 챕터는 가볍게 아는 내용을 복습하는 정도로 넘길 수 있었다.
CHAPTER 09. YAML
YAML이라는 단어는 작년에 처음 들어보고 사용하게 되었다.
찾아보니 2001년에 처음 나왔던데..
언제부터 많이 쓰였는지는 모르겠지만 그래도 꽤 된 듯하네.
대부분은 아는 내용인데, 뒤에 앵커와 별칭 부분은 처음 들어보는 부분이었다.
앵커는 &, 별칭은 *를 뜻한다네.
C의 포인터 비스무리 하네.
민감정보 저장하지 말라면서 레디스Remote Dictionary Server(Redis) 이야기가 잠시 나온다.
레디스가 뭔가 해서 찾아봤다만..
역시 이것도 한 번 써봐야지 뭔지 제대로 알게 되겠지.
CHAPTER 10. XML
이게 드디어 나오는구나.
나 같은 라뗴에게 제일 친숙한 것이겠지.
ant, maven, spring, iBatis/MyBatis, ...
워낙 여러 군데에서 썼으니.
그래도 나보고 책 쓰라고 하면 못했겠지.
사원 시절에 siblings, child 등등 써서 설문조사 만들었던 생각이 났다.
CHAPTER 11. 프로토콜 버퍼
이건 처음 들어보는 개념이었다.
구글에서 만든 데이터 직렬화 규격이구나.
작가님이 테스트 데이터로 만든 메시지 파일 비교를 해보니,
JSON: 225 bytes
YAML: 215 bytes
XML: 607 bytes
Protobuf: 86 bytes
라고 한다.
전송 속도가 무지 빨라지긴 하겠더라.
세상 참 빨리도 변한다.
(아니면 반대로 내가 너무 고인물인 건가)
CHAPTER 12. Base64
문자열 뒤에 '=', '==' 로 끝나는 것 가끔 봤었는데
그게 다 이유가 있었구나. 이게 Base64라는 것을 이번에야 알았다.
3바이트로 뚝뚝 끊어지게 해서 모자란 바이트만큼
패딩(=)을 붙이는 거였구나.
CHAPTER 13. 데이터 압축(zlib)
이번 장은 개념들이 많이 나오는데, 이것들 각각 숙지해 놓으면 좋겠더라.
손실압축/무손실압축, 압축률처럼 어느 정도 알고 있던 개념부터 시작해서
압축 레벨, 압축 속도, 합축 해제 속도, 체크섬 등등 잘 몰랐던 개념까지
압축에 대한 내용이 참 잘 정리된 것 같다.
PART 3. 웹을 지탱하는 기술
파트 3에서는 HTTP, RESTful API, HTTPS, OAuth 2.0에 대해 다룬다.
CHAPTER 14. HTTP
간단한 HTTP 서버 만들면서 Flask 써서 웹서버 만드는 게 예제로 나온다.
실무에서 Flask 써보지는 않았지만, 라즈베리파이 독서 통신 하면서 Flask 써 본 경험이 있길래 대충 감이 잡히더라.
그 때 좀 해놓길 잘했다는 생각도 들었다.
이번 달까지 1% 네트워크 원리/와이어샤크 독서통신도 하고 있는데, 거기서 나온 개념이 여기에서 많이 중복된다.
내가 제너럴한 제너럴리스트라 뭐 딱히 잘 하는 게 없다고 자조하긴 하는데
아주 가끔 이럴 때 좋긴 한것 같다.
그래도 이왕 하는 거면 기술 부채 안 쌓이게 잘 정리해 둬야지.
HTTP 챕터 부분은 그래도 거의 다 한 번 쯤은 들어본 부분인데,
챕터 뒷부분의 CORS(Cross-origin resource sharing, 교차 출처 리소스 공유)는 처음 들어보는 부분이더라.
확실히 프로젝트 하면서 직접 써보지 않은 개념들은 여러 번 읽어도 잘 머리에는 안 들어오긴 하더라.
CHAPTER 15. RESTful API
IT 용어 중에 남들은 다 아는데 나만 모르고 있는 것 같은 개념이 몇 개 있다.
그 중에 하나가 이거였다.
REST는 representational state transfer의 약자로 분산시스템을 위한 소프트웨어 아키텍처의 한 형태를 말하며, RESTful이란 REST의 조건을 만족한다는 뜻이랜다.
작년에 Java로 열심히 API 만들고 Swagger로 주구장창 테스트했는데..
그게 바로 RESTful API였네.
올해에는 다른 프로젝트에서 만들어진 API 테스트할 때 많이 쓰고 있다.
다행이다.
어디 가서 RESTful API 썼다고, 쓰고 있다고 말할 수 있어서.
CHAPTER 16. HTTPS
이 업계 일하면서 여러 번 마주쳤으나, 그 자세한 내용은 잘 몰랐던 부분에 대한 챕터다.
얼마전에 HTTP를 HTTPS로 리다이렉트 시키는 데 고생을 해서..
많이 익숙한 부분이었다.
단어만 익숙하지 난 역시 구체적인 건 취약한데, 그에 대한 설명이 참 잘 되어 있더라.
HTTPS 챕터답게 SSL, TLS 등에 대한 설명부터 시작한다.
RSA, DHE, ECDHE 등 메시지 암호 키 교환 알고리즘 소개도 되어 있고,
X.509, CA 등등 들어는 봤던 개념들에 대해 충실히 설명도 되어있더라.
이쪽 분야 역시 이야기 나오면 움추러 드는 분야이긴 하다.
책을 읽어도 암호 알고리즘의 내부는 모르고 인증서 오고 가는 게 눈에 안 보여서 그런가?
아직도 나는 이에 대해 신나게 떠들 만큼의 역량은 부족하지 않나 싶다.
CHAPTER 17. OAuth 2.0
처음 리뷰할 책을 고를 때 뒷부분에 HTTPS, OAuth 2.0이 있길래 이 책으로 골랐다.
예전에 프로젝트 했던 부분이 나왔네.
근데 그 때도 제대로 공부를 안 해놔서.. 기술 부채가 쌓였나보다.
챕터 말미에 JWT(JWON Web Token) 잠시 언급되는데,
이걸 지금 프로젝트에서 쓰고 있어서인지 눈이 반짝거리게 되더라.
역시 아는 만큼 보이는 듯.
* 전체 후기
지은이 소개를 하는데, 작가님이 7년차 C++ 개발자라고 하신다.
헉. 내가 7년차 때 이 정도의 책을 쓸 역량이 되었던가 싶다.
난 15년차 된 지금도 17개의 기술 중에서 나는 한 챕터도 제대로 못 쓰겠는데 대단하네.
웹툰 작가 주호민 님의 군대 만화 '짬'이 생각났다.
입대할 때부터 군대생활을 만화로 그려보자고 생각하면서 모든 것들을 기록한 덕에,
전역하고 군대 만화를 그릴 수 있었겠지.
작가님도 그런 마음으로 하나씩 하나씩 기록하다 보니
이렇게 책도 낼 수 있지 않았을까 싶다.
나도 지금부터라도 열심히 기록을 해둬야지.
여기 있는 대부분은 어디선가 한번씩은 들어본 부분인데..
그만큼 실무에서 쓰는 기술들이 잘 설명된 것 같다.
대부분은 출근시간/퇴근시간에 버스에서 보면서 읽을 정도로 어렵지 않게 잘 풀어서 설명이 되어 있더라.
바쁘다는 핑계로 예제로 나온 파이썬 코드는 실습해 보지 못했다.
파이썬을 쓰는 프로젝트 하게 되면
공부도 할 겸 이 책에 있는 예제 소스 전부다 한 번씩 실습해 보면 좋을 것 같다.
그 이전에 혼자서 하게 되면 좋을텐데..
닥쳐야 하는 내 성격상.. 아무래도 안 할 듯 싶다.
지은이의 말 부분 보면 '언젠가 한 번 이상 사용하게 될 기술을 알고 회사에 들어가면 좋겠다고' 한다.
그래서 주니어를 타겟으로 쓴 책인 것 같은데, 나처럼 고인물 라떼도 읽으면 좋을 것 같다.
어쩌면 나같은 이에게 더 필요한 채찍일지도 모르겠다.
이것 저것 뭔가 많이는 했는데,
엉성하게 알고 있던 지식을 제대로 쌓을 수 있게 해줬다.
사상누각에 D라서 보강 공사를 한 듯한 기분?
점과 점을 잇은 선이 그어진 기분?
서말 있던 구슬이 꿰어진 기분?
을 느끼게 해준 책이었다.