토요일, 2월 29, 2020

[B급 프로그래머] 2월 4주 소식(빅데이터/인공지능, 읽을거리 부문)

(오늘의 짤방: 미국의 14~15세. 과거 대비 비디오게임이나 컴퓨터를 더 많이 하는 대신, 술도 덜 하고 마리화나도 덜 하고 섹스도 덜 하고 TV도 덜 본다... 게임은 나쁜건가? via @ilnaezza via @andrewchen via @reddit)
  1. 빅데이터/인공지능
  2. 읽을거리
보너스: Dictaphone and Microphone Jammer Audio recording Supressor White Noise Generator BDA-2 test
EOB

월요일, 2월 24, 2020

[B급 프로그래머] 2월 3주 소식(개발/관리도구, 고성능 서버/데이터베이스 부문)

(오늘의 짤방: 프로그래머: 돌아가면 된거지ㅡㅡ via @hanalen_)
  1. 개발/관리도구
  2. 고성능 서버/데이터베이스
보너스: How Intel Makes Chips: Concept to Customer
EOB

토요일, 2월 22, 2020

[독서광] 출판사가 OK하는 책쓰기

저서와 역서가 제법 되다보니까 종종 출판 관련해서 문의가 들어오곤 한다. 문의하신 분들께 출판이라는 특성에 대해 해줄말은 많지만 요약 정리된 책이 있으면 좋겠다는 생각도 종종 들었었다. 그런데, 이번에 한빛미디어 IT 전문서 편집 경험을 토대로 책이 나왔기에 젭싸게 읽어봤다.

우선 이 책의 특징에 대해 짚고 넘어가야겠다. 일반적인 글쓰기 책과는 달리 이 책은 출판사에서 책을 출판하려는 분들에게 정확하게 목표가 맞춰져있다. 물론 출판을 위해서는 어느 수준 이상으로 글을 잘 써야하지만 전문서/실용서인 경우에는 미려한 문체와 독자를 들었다놓았다하는 스토리 전개가 없어도 되므로 이 책은 글을 잘 쓰는 방법에 대해서는 정말 최소로 다룬다. 그 대신 출판을 위해 출판업의 특성과 출판 과정에 대해 일목요연하게 정리하고 있다. 본문에도 나오지만 출판업에 대한 기본적인 이해가 없으면 본인도 괴롭고 출판사 담당자도 괴로우므로(실제 이런 사례를 여러 번 들었다. 최근에도... T_T) 그냥 자비로 자가 출판하는 편이 바람직하다는 생각에 강력하게 동의한다.

이 책은 집필하면 얼마 정도 버는지부터 시작해서 집필 과정에서 일어나는 여러 가지 사건 사고를 줄이는 방법, 출판사 입장에서 책의 기획부터 출판까지 일련의 프로세스, 목표로 삼는 독자 식별부터 경쟁서 분석에 이르기까지 경쟁력이 높은 책을 기획하는 방법, 출판사에 투고할 때 주의해야 할 사항(특히 실용서인 경우에는 책을 다 쓰고나서 투고하면... 거의 대부분 반려된다는 사실이 중요함), 실용서에 들어가는 글을 잘 쓰는 방법, 저자가 움직이지 않으면 판매가 잘 이뤄지지 않는 이유와 온/오프라인 홍보 방법, 그리고 중요하지 않은 듯이 보이지만 엄청 중요한 저작권과 계약서에 이르기까지 출판사에서 잠재 저자에게 알려주고 싶어하는 핵심적인 내용을 잘 다루고 있다. 뒷부분에는 출판을 진행할 경우 들어가는 공정과 비용도 소개하므로 1인 출판사를 기획하시는 분들도 참고하면 좋을 것 같다.

이 책 저자인 최현우 편집자가 전자책으로 공개한 주유의 IT 책 쓰기 불바다 강론 : 빠르게 포기하거나, 진짜로 저자가 되거나를 읽어보시면 이 책의 성격에 대해 정확하게 파악할 수 있을 것이다. 출간된 종이책은 공개된 전자책을 확대 개편하고 출판 프로세스를 전반적으로 다루고 있다는 사실도 알려드린다.

결론: 출판사마다 모두 어느 정도 지침이 되는 문서가 있긴 하지만 이렇게 포괄적으로 다루는 경우는 보지 못했기에, 아마도 IT 분야 잠재 저자나 역자들의 필독서가 되지 않겠느냐고 조심스럽게 예측한다. 출판을 염두에 둔 잠재 저자/역자에게 강력 추천한다!

EOB

토요일, 2월 15, 2020

[B급 프로그래머] 2월 2주 소식(빅데이터/인공지능, 읽을거리 부문)

(오늘의 짤방: 🤔 via Jeff Atwood(@codinghorror))
  1. 빅데이터/인공지능
  2. 읽을거리
EOB

월요일, 2월 10, 2020

[B급 프로그래머] 2월 1주 소식(개발/관리도구, 고성능 서버/데이터베이스 부문)

(오늘의 짤방: 프로그래머가 다크 모드를 좋아하는 이유는?)
  1. 개발/관리도구
  2. 고성능 서버/데이터베이스
(보너스: 너무아프다 @if1live) EOB

토요일, 2월 08, 2020

[독서광] 데이터 읽기의 기술

오늘은 빅데이터와 관련한 독후감을 하나 소개하겠다. 스타벅스코리아 1호 데이터사이언티스트로 알려진 차현나님의 데이터 읽기의 기술이 주인공이다.

이 책은 크게 3부로 나뉘어져 있는데, 솔직히 1부는 많은 책과 블로그에서 다루는 내용이라 재미가 없었다. 2부를 위해 다음 그림과 표만 기억하면 끝나는 것 같다.

5W1H 데이터 종류 의미
누가(WHO) 멤버십 등급, 동의를 받고 수집한 개인정보(생년월일, 성별, 거주지) 한 명의 고객. 멤버십에 가입했다면 여러 번 방문한 영수증을 한 사람의 행동으로 연결할 수 있게 되어 더욱 힘을 갖는다.
언제(WHEN) 연-월-일-시-분-초, 요일, 공휴일 여부 초 단위까지 있다. 회계에서 중요한 기준이 될 수 있다. 여러 관점에서 분절해 분석할 수 있으며, 데이터에 힘을 실어주게 된다. 외부 데이터와 연결할 수 있는 중요한 ‘핵심 가치'
어디서(WHERE) 매장 이름, 주소, 상권, 위경도 오프라인 매장이며, 이 매장의 위치가 행정구역이나 위경도와 만나는 순간 흔히 상상하는 빅데이터가 될 가능성이 생긴다.
무엇을(WHAT) 제품 기준 정보, 범주, 속성, 발주 일시, 가능하면 분자 단위… 기업의 상품 기준 정보. SKU 단위까지 분류하고 세부 태그를 붙인다. 분류 체계가 중요함
어떻게(HOW) 결제 수단, 쿠폰 사용 여부, 이벤트 참여 여부 소비자가 기업에 비용을 지불하는 방법을 다각도로 설명하고, 여기서 프로모션 수단이 나옴
왜(WHY) SNS 분석, 설문 조사, 포커스그룹 심층 면접 영수증 데이터만으로는 소비자의 행동 원인을 알기 어려울 때가 있으므로 다른 데이터에서 추정

조금 재미있는 내용은 데이터 앞에서 해야할 질문 10가지라는 제목의 2부에 나온다. 기억을 위해 간단하게 정리를 해보았다.

  1. 우리 회사가 돈을 버는 핵심 제품/서비스는 무엇인가: 데이터로 뭘 할지 모르는 상태에서 "돈을 벌 수 있는 데이터 분석을 해오세요"해도 소용이 없음. 대다수 오프라인 기업들은 데이터가 필수가 아니며, 제품 판매를 높이고 차별화를 주는 하나의 수단에 불과
  2. 우리 회사의 데이터 역량은 어느 정도인가: 분석 요건, 머신러닝, 고도화된 대고객 마케팅 기법을 이야기하지만… 미봉책으로 신규 데이터를 만들어내고 쌓고, 그러느라 서버를 구매하고, 프로젝트를 띄우고 컨설팅 업체에 돈을 지불하는 악순환을 반복
  3. 데이터의 필요성을 모두가 느끼고 있는가: 과거를 포함해 현재에도 데이터를 보지 않아도 잘 나가는 회사가 있지만, 세상이 변했기에 이름난 제품 하나로 시장을 휘어잡지 못함. 데이터를 통해 더 빠르고 더 확실한 방법으로 나아갈 방법을 찾아야 함. "빅데이터 그거 어차피 사람들이 이해도 잘 못하는데 꼭 해야 하나?"라는 질문을 하고 싶다면 자신이 데이터를 잘 이해하지 못하기 때문에 중요하지 않다고 생각하는 건 아닌지 되돌아 볼 필요가 있음.
  4. 데이터가 모든 것을 해결해줄까: 데이터가 많더라도 매출 집계 이외 아무런 분석도 하지 않는 조직이 많음. 데이터는 목적이 있을 때만 정돈이 가능한 특성이 있음.
  5. 듣도 보도 못한 것을 기대하는가: 실제로 데이터를 보지 않은 사람들이 새로움에 대해 더욱 집착하는 경향이 있음. "이거 내가 다 알던 건데 뭐가 새롭냐?"(지금까지는 감으로 알던 내용을 데이터로 증명했기 때문에 중요함) "다 알던 것을 뭐하러 데이터로 증명했지?"(정합성이나 로직을 따져 일단계 완료하는 데만 에너지가 필요함(2, 3차 분석으로 이어지는 토대))
  6. 내가 이해하는 만큼만 인정하려 하는가: 내 생각과 맞을 땐 "너무 뻔한 것 아니야? 이거 보기 전에도 난 알고 있었는데". 내 생각과 틀릴 땐 "데이터가 상식적이지 않는데?" 여기서 두 사람은 동일인일 가능성이 높음(의견과 아이디어가 있는 듯이 보이기 때문)
  7. 목적을 명확하게 세웠는가: "많이 팔릴 것을 만드는 것이 이번 프로젝트의 목적이다" 또는 "사람들이 많이 수집할 만한 제품을 만들어 와"는 실무자에게 전혀 도움이 안 됨. 목적 --> 프로젝트 --> 주제 --> 연구 문제 --> 통찰 --> 모델링 --> 전처리 --> 데이터 순서로 흘러감
  8. 매출 데이터만 중요할까: 매출은 소비자의 '마지막 결정의 결과'일 뿐이므로 행동 단위를 파악해야 함. 소비자 구매 전후를 많이 알수록 구매행동 결정의 이유를 정확히 알 수 있음.
  9. 많기만 하면 빅데이터일까: 단순한 문항 하나를 많은 사람을 대상으로 질문했다고 해서 빅데이터로 변신하지는 않음(설문조사를 단순 집계한 결과일 뿐)
  10. 시간 투자 없이 결과만 원하는가: 만일 빠르게 숫자만 확인하고 싶다면 반복적으로 수치를 확인할 수 있는 대시보드를 만들어라!

3부는 데이터 활용과 관련해 점검해야 하는 사항을 정리하고 있다.

  1. 프로젝트를 시작할 때 해야 할 질문들: i) 지금 하는 프로젝트는 누가 원하는 것인가? ii) 지루한 분석 작업을 꼭 해야 하는가?(시간이 충분할 때: 최대한 촘촘하게 경우를 나눠 데이터 분석 vs 목표가 명확할 때: 기존 연구 결과에서 일부를 차용해 이야기를 새롭게 구성) iii) 분석해야 하는 명제가 확실한가?
  2. 프로젝트를 하는 중에 해야 할 질문들: i) WHO(고객 정의) ii) WHEN(시계열 변화, 프로모션 시점) iii) WHAT(제품 카테고리, 개발 통찰력) iv) WHERE(점포 개발, 외부 GIS, 날씨) v) HOW(새로운 방법론, 프로모션) vi) WHY(소비자 마음의 원리)
  3. 보고서를 만들거나 보고할 때 고려해야 할 것들: i) %보다 복잡한 모델을 이해하는 직장인은 거의 없다 ii) 액션 플랜을 담고 있어야 한다 iii) 실행할 전략을 짜려면 비용을 알고 있어야 한다(예: 1+1 증정, 즉시 50% 할인, 구매 시 50% 쿠폰 증정의 차이점은?)

결론: 마케팅이나 심리학 등을 전공하신 분이라면 이 책이 크게 도움이 안 될 가능성이 높지만, 빅데이터나 분석 쪽에 입문을 하거나 아니면 관련 개발 업무를 하시는 분이라면 이 책을 읽으면 머리 속이 정리될 것이다.

EOB

월요일, 2월 03, 2020

[B급 프로그래머] 1월 5주 소식(빅데이터/인공지능, 읽을거리 부문)

(오늘의 짤방: Normal Distribution. 😆 via @GWOMaths)
  1. 빅데이터/인공지능
  2. 읽을거리
보너스: Inside a Google data center
EOB

토요일, 2월 01, 2020

[B급 프로그래머] MariaDB에서 root 암호 인증 방식이 먹히지 않는 이유(feat. unix_socket)

먼저 내 실수부터 고백을 하고 넘어가야겠다. 최근 서버 설치 작업을 손놓고 있다가 갑자기 현업(?)으로 복귀할 일이 생겼는데, MariaDB를 설치하는 과정에서 이해하기 힘든 상황에 부딪혔다. 간략하게 시나리오를 정리하면 다음과 같다.

  1. 우분투 16.04가 설치된 인스턴스에서 apt로 기본 MaraiDB 서버/클라이언트 패키지를 설치
  2. 여느 때와 마찬가지로 mysql_secure_installation 명령을 내려 보안 강화
  3. localsystem에서 mysql -u root -p로 로그인하려 했으나... 거부(!) 습관적으로 안전을(응?) 위해 root에 암호를 넣어야겠다는 생각이 발동...
  4. root shell에서 그냥 mysql로 접속하니 들어감(이 때 뭔가 쌔한 기분이 느껴지긴 했지만...)
  5. (검색을 해보니 unix_socket 플러그인(!)을 무력화하기 위한 여러 가지 방법이 있어 순진하게 이에 맞춰) root 계정을 암호 사용 방식으로 변경
  6. mysql -u root -p로 로그인 하니까 잘 들어감
  7. 환경 설정 파일에서 몇 가지 설정을 변경한 다음에 룰루랄라 신나서 적용을 위해 systemctl mysql restart하니까 오류 발생(systemctl status mysql 명령을 내려서 확인해보니 root로 접근 거부되는 상황이 벌어짐) ==> 당황하기 시작

마음이 급하신 개발자들을 위해 결론부터 정리하고 들어간다.

  1. 보안을 위해서나 시스템 연동을 위해서나 unix_socket 플러그인을 절대 무력화하지 마시고 그대로 사용해야 함
  2. root 이외 제한된 접근 권한이 있는 별도 계정을 만들어서 이를 사용해 접근하게 만들어야 함

잠시 인스턴트 커피를 마시고 정신을 차린 다음에 다양한 테스트를 해보다 보니까, 범인은 unix_socket 플러그인이었다. 원인을 파악해보니 MariaDB 10.4 이후(또는 우분투 16.04LTS에 apt으로 설치되는 MaraiDB 10.0)부터는 root 인증이 기존의 암호 기반 방식에서 유닉스 소켓 방식으로 변경되었기 때문이었다. MySQL 최신 버전에서는 플러그인을 사용해 다양한 인증 방식을 가능하게 만들었는데, MariaDB는 그 중에서도 로그인한 계정으로 암호없이 직접 접속이 가능한 unix_socket 방식을 기본으로 적용하면서 전통적인 암호 방식과 동작 방식이 달라져버렸다(비단 root뿐만 아니라 유닉스 계정과 MySQL 계정이 일치하기만 하면 unix_socket 방식으로 다른 인증 작업 없이 바로 로그인이 가능해진다). 이렇게 하는 이유는 root가 전지전능하다보니 굳이 데이터베이스 암호를 걸지 않더라도 우회하거나 망가뜨릴 방법이 무궁무진하며, 데이터베이스 root 암호를 소스코드 형상 관리 시스템 여기저기에 다 뿌리고 다니는 보안 취약성도 막을 수 있기 때문이다(자세한 내용은 다음 슬라이드 참고).

systemctl mysql restart가 먹히지 않은 이유도 바로 정책 변경으로 인해 systemctl 스크립트가 unix_socket을 가정하고 mysqld에 접근했기 때문이었는데, 이 문제를 우회하려면 /etc/mysql/debian.cnf 환경 설정 파일에 root 암호를 넣어야 하는 사소하기도 하고 찜찜하기도 하는 문제가 발생하므로 mysql.user 테이블의 plugin 필드를 업데이트해서 unix_socket 플러그인 방식으로 원상복귀한 다음에 문제를 해결했다(unix_socket을 제거하는 방법을 알려주고 부작용은 전혀 이야기하지 않는 다른 블로그와는 달리 MariaDB; 인증(Authentication) 문제 블로그 글은 상당히 이성적으로 분석을 해놓아서 마음에 들었다).

앞서 잠깐 언급했지만 유닉스 계정과 동일한 MySQL 계정(예: scott)을 만들고 플러그인을 unix_socket으로만 지정하면(예: CREATE USER scott IDENTIFIED VIA unix_socket;) 별도 암호없이 바로 접근 가능하므로 이를 활용하면 서비스 설정이 편해질 것이다. 단, MySQL workbench등의 도구로 외부에서 접근할 경우에는 여전히 전통적인 방식(예: 예전 암호 방식으로 되돌리려면 ALTER USER scott@localhost IDENTIFIED VIA mysql_native_password; SET PASSWORD = PASSWORD('tiger');을 사용해야 할 것이다.

공식적인 설명을 보고 싶으면, Authentication Plugin - Unix SocketAuthentication from MariaDB 10.4를 참고하기 바란다.

결론: unix_socket 방식으로 root 계정에 대한 접근 방법을 유지하라. 웹에서 검색해서 영혼없이 결과대로 따라했다가는(예: unix_socket 방법 폭파하기) 곤란한 상황에 처할지도 모른다.

EOB