티스토리 툴바

Search results

'전체'에 해당하는 글들

  1. 00:17:12  일기
  2. 2012/02/16  일기
  3. 2012/02/16  Combine input records가 Map output records보다 많은 이유
  4. 2012/02/14  생일
  5. 2012/02/11  의미 없는 싸이클 (2)
  6. 2012/02/09  KT 인터넷으로 변경
  7. 2012/02/08  남이 짠 코드 고치기
  8. 2012/02/06  버스카드 실시간 환승의 비밀
  9. 2012/02/05  [리뷰] 부러진 화살을 보고
  10. 2012/02/02  일기

몇 가지 단편적인 것만 좀 적어보면,

#1. 회사에서 2주 정도 하던 일을 마무리 짓고, 새로운 일을 시작하였다. 원래 계획은 이전에 하던 일에 좀 더 시간 투자를 해서 품질을 더 끌어 올리는 것이었지만, 일의 우선 순위가 약간 바뀐 관계로.. 우선은 기존 코드의 성능 향상 정도에 만족하기로 했다. (그래도 나의 삽질로 인해 약 20% 정도 성능 향상이 있었음 음하하)

#2. 새로운 일을 본격적으로 시작하려면, 데이터가 필요한데, 정작 필요한 데이터를 다음 주 중에나 줄 수 있다고 한다. 그래서 직접 crawl을 해서 데이터를 모으고 있다. ㅡ_ㅡa 대체 왜 DB에 있는 데이터를 전달해 주는데 1~2주나 걸리는 건지 알 수가 없다. 에혀..

#3. 오늘 오전에는 회사에서 외부 강사님을 모시고 하는 사내 강좌에 다녀왔다. 나는 회사가 제공해 주는 혜택 (특히나 교육 관련)은 최대한 받으려고 노력하는 편인데, 의외로 주변 팀 사람들은 좀 무관심한 것 같다. 원래 하던 업무를 내려놓고, 다른 주제에서 새로운 시각을 접하면, 그것만큼 또 도움이 되는 게 없는데 : ) 어쨌든 오늘 건진 한 마디.

20120223_114645

참고로 연사님은 러브하우스로 유명한 양진석 교수님.
그런데 왜 건축 얘기를 하시다가 여기까지 오셨지? ㅋㅋ

'Diary' 카테고리의 다른 글

일기  (0) 00:17:12
의미 없는 싸이클  (2) 2012/02/11
KT 인터넷으로 변경  (0) 2012/02/09
남이 짠 코드 고치기  (0) 2012/02/08
일기  (0) 2012/02/02
조직개편  (0) 2012/01/12
일기 :: 2012/02/24 00:17 Diary

#1. 요즘 업무로 진행 중인 코드 리팩토링이 거의 마무리 단계에 왔다. 오늘 대충 테스트를 돌려보니 약 20 %의 성능 향상이 있는 듯. 이 정도면 뭐.. ㅎㅎ

#2. 오늘 건대에서 있었던 어떻게 원하는 것을 얻는가 강연에 다녀왔다. 사실 이 분이 누군지는 잘 몰랐지만, 입장료 3만원에 3.2만 원어치 책을 준다기에 혹해서 ;; 그리고 유명한 분이라기에 ㅎㅎ 강연 내용이 좋긴 했는데, 졸려서 중간에 10분쯤 졸았고, 아무래도 통역이다 보니 조~금 긴장감이 떨어지는 것은 어쩔 수 없는 것 같다.

20120216_192928

#3. 강연을 듣고 집에 왔더니 예비군 교육훈련 소집통지서가 딱~~! 드디어 나도 예비군 시작임. 헐헐

일기 :: 2012/02/16 23:34 분류없음

팀 매니저님께서 결과를 보시며 의문을 표하시기에, 조사해봄.

일단 Hadoop Definite Guide 책에서 Combiner Function에 대해 찾아보면,

Many MapReduce jobs are limited by the bandwidth available on the cluster, so it pays to minimize the data transferred between map and reduce tasks. Hadoop allows the user to specify a combiner function to be run on the map output—the combiner function’s output forms the input to the reduce function.
from Hadoop Definite Guide 2nd edition, Ch2. MapReduce

이렇게 나와 있다. 대충 정리해보면, map output에 대해 combiner를 적용한 다음, 이 결과가 reduce의 input으로 쓰이며, combiner를 적용함으로써, map에서 reduce로 전송되는 데이터 양을 줄일 수 있다라고 설명하고 있다.

이렇게만 보면, map의 output이 combiner의 input으로 사용되는 것처럼 보이므로, map output records와 combine input records가 일치해야 하는 것처럼 보인다. 그러나 실제로는 combine input records가 더 큰 경우가 많다. (항상 많은지는 모르겠음) 왜 그럴까?

천신만고 끝에 찾은 힌트 하나

After the shuffle each reducer will have one input for each map. The reducer needs to merge these inputs in order to begin processing. It is not efficient to merge too many inputs simultaneously. Thus, if the number of inputs exceeds a certain value, the data will be merged and rewritten to disk before being given to the reducer. During this merge the combiner will be applied in an attempt to reduce the size of the input data.
from Oreilly

나는 지금까지 combiner는 mapper에서만 동작하는지 알았는데, 실제로는 reducer에서 data를 shuffle하는 단계 (정확히는 merge)에서도 combiner가 동작을 한다!

좀 더 자세히 설명을 하면,

image
from Hadoop Definite Guide 2nd edition, Ch6. How MapReduce Works

  1. map의 output을 memory에 쓰다가, 할당된 memory buffer (기본은 100 MB)의 일정 비율 (기본은 80%)을 넘어서면, 현재 memory에 저장된 map의 output을 mapper node의 local file로 쓴다. (이 과정을 spill이라고 함)
  2. 실제 file로 쓰기 전에, 해당 data가 전송될 reducer 단위로 partitioning을 하고, 각각의 partition에 대해 백그라운드 thread가 in-memory sorting을 수행한 다음, sort의 output에 대해 combine 함수가 실행된다.
  3. memory buffer가 spill threashold에 다다르면, 새로운 spill file이 생성되며, 실제 map task가 수행되는 동안, 이러한 spill file이 여러 개 생성된다. map task 가 끝나기 전에, 여러 개의 spill file들을 하나의 파일로 합치게 되는데, 이렇게 하나의 파일로 merge를 하는 단계에서도 combine 함수가 실행된다.
  4. mapper의 결과가 reducer로 copy된 다음, reducer에서 여러 mapper에서 온 결과들을 sort하는 과정을 거치는데, 이 때 각각의 merge 단계에서도 combine 함수가 실행된다.

요약하면, mapper 뿐만이 아니라, reducer 단계에서도 combine 함수가 적용될 수 있으므로, Combine input records의 수가 Map output records의 수 보다 클 수도 있다.

※ 여기서 개발자들이 combiner를 사용할 때 유의해야 할 점은, combiner의 input으로 항상 map의 output이 들어온다 라고 가정을 하면 안 된다는 점이다. 위 설명에서도 알 수 있듯이, combiner의 output이 다시 combiner의 input으로 들어올 수 있다. 그러므로, combiner의 input은 map의 output format 뿐만 아니라, combiner의 output format도 적절히 처리할 수 있어야 한다.

이 회사 와서 느낀 점 하나.

1. 맨날 무언가를 취합해서 달란다.
2. 열심히 의견을 적는다.
3. 대부분 피드백은 없고, 달라지는 것도 없다.
4. 그리고 얼마 뒤에 또 비슷한 문제에 대해 의견을 달라고 한다. (그 동안 가져간 건 다 어쩌고 –_-)
5. 몇 번 경험하고 나면, 열심히 리소스를 들여서 의견 내는 건 줄어들고, “어차피 해봐야 바뀌는 건 없을거야”라는 비관론자가 된다.

추측컨데 담당자 선에서 잘리거나, 혹은 담당자가 본인이 나름 정리하거나, 적절히 필터링해서 전달하는 모양인데, 이렇게 되면, 몇 단계를 거쳐서 “잘 정제된” 의견을 받아보는 결정권자는 사태의 본질과 핵심을 전혀 이해하지 못한다. 문제는 전혀 해결되지 않고..

+ 내 생각에는 이메일로 의견을 달라는 것은 거의 무의미한 것 같고, 누구나 볼 수 있고, 의견과 반론을 제시할 수 있는 게시판이 그나마 가장 나은 의견수렴의 장인 듯 하다.

'Diary' 카테고리의 다른 글

일기  (0) 00:17:12
의미 없는 싸이클  (2) 2012/02/11
KT 인터넷으로 변경  (0) 2012/02/09
남이 짠 코드 고치기  (0) 2012/02/08
일기  (0) 2012/02/02
조직개편  (0) 2012/01/12
─ tag  회사생활
의미 없는 싸이클 :: 2012/02/11 00:21 Diary

여차저차 해서 집 인터넷을 SK 브로드밴드에서 KT로 변경하였다. 변경하면서 몇 가지 느낀 점을 적어보면,

  1. SKB는 내 기억에 설치 기사님께서 방문 약속 하루 전에 직접 전화를 주셨고, 시간 약속을 잡았었다. 그런데 KT는 직접 100 고객센터로 전화해서 시간 약속을 잡으려고 했지만, 2월 7일 오전에 설치 일정이 이미 잡혀 있고, 설치 기사님이 사전에 연락을 줄 거라고만 안내 해 줬다.
    7일 오전에 설치 예정이면 6일에는 연락이 왔어야 하는데, 당일 오전 9시에 전화가 와서 지금 설치하러 온다고 말하는 기사님의 센스에 당황했다. ㅡ.ㅡ; 당연히 나는 이미 출근을 했기 때문에 8일 오전 9시로 다시 약속을 잡았다.
  2. SKB는 설치 전 날 휴대폰 문자 메시지를 통해 xx일 오전 xx 시에 기사님 방문 예정이라고 알려줬던 걸로 기억하는데, KT는 그런 거 없다.
  3. 아무래도 직장인이다 보니, 오전 8시나 오후 6시 이후에 설치 받는 것을 선호한다. SKB는 기사님이 오후 7시까지 근무하기 때문에 오후 6시 반에 오셔서 인터넷 설치를 해 주셨었다. 그런데 KT는 무조건 오전 9시부터 시작하고 마지막 설치 타임은 5시라고.. 평일에 시간 안 맞으면 주말에 설치하란다. –_-; 
    물론 내가 KT 기사님더러 오전 9시부터 오후 7시까지 근무 해 달라는 요구는 하는 것은 아니다. 한 지역에 설치 기사님이 여러 분 계실 경우, 한 분은 오전 8시~ 오후 5시까지, 다른 분은 오전 10시 ~ 오후 6시까지 탄력적으로 근무를 시키는 방법도 있지 않을까? 설사 지역에 기사님이 한 분 밖에 없더라도, 설치 일정에 따라 오전 8시~ 오후 5시 근무, 오전 10시 ~ 오후 7시 근무처럼 그날 그날 설치 일정에 따라 탄력근무제를 도입하면 충분히 해결 가능할 듯 한데.. 하여간 KT..
  4. 하여간 오전 9시에 설치하러 온다기에, 계속 기다리고 있었는데, 9시 5분쯤 전화가 왔다. 지금 설치하러 갈 예정인데, 시간 되시냐고.. 언제쯤 도착하시냐고 물어봤더니, 10분 쯤 걸린단다. 그러고는 또 연락이 없길래, 9시 25분쯤 전화를 드렸더니, 아래에서 작업하고 계시단다. 그리고 실제 집에 방문한 시각은 9시 반쯤? “9시에 설치하러 온다”의 의미가 9시에 본인 회사에서 출발한다라는 의미일 줄이야.. 덕분에 난 지각.
  5. 안 그래도 이미지 안 좋은 KT가 더 싫어졌지만, KT에 좋은 얘기도 좀 해주면, SKB에 비해 해외 사이트 접속 시 확실한 속도 차이를 느낄 수 있다. 지메일 속도가 확연히 빨라진 것은 물론이고, SKB에서는 YouTube 동영상 시청 시 360p 화질에서도 끊길 때가 많았는데, KT는 720p 화질도 거의 끊김 없이 한 번에 볼 수 있다. (물론 3년 약정 시, SKB는 2.7만원, KT는 3.4만원 정도로, 가격도 7천원 정도 비싸다는 단점이 있기는 하지만)

총평 : KT가 전반적으로 SKB에 비해 서비스는 구리지만, 해외 사이트(gmail, YouTube 등) 접속 시 훨씬 쾌적하게 인터넷을 쓸 수 있음.

'Diary' 카테고리의 다른 글

일기  (0) 00:17:12
의미 없는 싸이클  (2) 2012/02/11
KT 인터넷으로 변경  (0) 2012/02/09
남이 짠 코드 고치기  (0) 2012/02/08
일기  (0) 2012/02/02
조직개편  (0) 2012/01/12
─ tag  KT, SKB, 올레, 인터넷

요즘 회사에서 하고 있는 일이 남이 짠 코드를 읽고, 해석하고, 개선 사항이 있으면 찾아서 고치는 일이다. 그렇게 완전 발로 짠 코드는 아닌데, 그래도 이 업계 특성 상, 외주 개발자가 적당히 개발해 놓은 코드라.. 코드를 읽으면서 그렇게 기쁘지는 않다 T_T

다행이 코드 상단에는 이 클래스가 하는 역할이 무엇이다 정도는 주석이 달려 있는데, 문제는 코드 구석에 달려 있는 알 수 없는 부분들.. 예컨대, hashCode()를 override를 해 놨는데, 그냥 단순히 a << 4 + b 이런 식으로 hash code를 계산해 놓았다. 뭔가 일반적인 케이스가 아닌 듯 하여, 일단 코드를 바꿔 놓고 다시 한참을 보다보니, 다른 코드에서는 또 hash code를 a << 8 + b 이런 식으로 계산하고 있다. 뭔가 data에 특성과 hadoop cluster의 규모를 고려하여 최적화를 시켜 놓은 건가.. 해서 다시 아까 고친 코드를 원래대로 돌려 놓으면서도 알 수 없는 이 찝찝함이란.. 그냥 개발자가 생각 없이 박아 놓은 코드인지, 아니면 최적화를 위한 고민의 산물인지 알 수 없는 코드들. 그런데 그런 부분들에는 주석이 없다. 에휴 –_-

그리고 또 문제는 테스트 케이스가 전혀 없으므로, 코드를 고쳐도 제대로 고쳤는지 확인할 방법이 없다는 것. 그래서 일단 기존 코드에서 돌아가는 테스트 케이스를 먼저 만들고, 코드를 고친 다음, 아까 만든 테스트 케이스가 제대로 동작하는지 일일이 확인하면서 고쳐 나가고 있다. 정답 없는 문제에 내가 정답 케이스를 만들고, 그 정답 케이스에 맞춰서 문제를 조금씩 수정해 나가는 이 오묘한 감정이란.. ㅋㅋ

'Diary' 카테고리의 다른 글

의미 없는 싸이클  (2) 2012/02/11
KT 인터넷으로 변경  (0) 2012/02/09
남이 짠 코드 고치기  (0) 2012/02/08
일기  (0) 2012/02/02
조직개편  (0) 2012/01/12
요즘 만들고 있는 것  (0) 2012/01/09

지난 번 번개 회식에서 논쟁 아닌 논쟁이 되었던 주제가 바로 버스 카드였다. 당시 논쟁의 이슈는,

  1. 버스의 도착 예정 시각을 알 수 있는 것으로 보아, 각각의 버스는 중앙 서버와 통신을 하고 있을 것이다.
  2. 버스 카드는 “아마도” read-only 매체일 것이다. (write가 가능 하려면 전원이 필요한텐데, 버스카드나 신용 카드를 electric charge를 한 적이 없으므로)
  3. 버스에서 하차를 한 다음, 10초 안에 다른 버스를 탑승하더라도 단말기는 정상적으로 환승을 인식한다.
  4. 실시간 환승을 처리하기 위해서는, 버스카드 단말기도 중앙 서버와 통신을 하는 것일까?
  5. 설사 통신을 한다고 하더라도, 실시간 통신은 말이 안 된다. 3G bandwidth를 생각해보면..
  6. 그나저나 버스랑 중앙 서버는 뭘로 통신을 하는 거지? 3G? 2G? 별도 통신망?

그날 번개 회식에서 내가 막내(..) 였던 이유로 다음날까지 조사를 하기로 해서 열심히 구글링을 해 봤다. 그냥 버리기는 아까워서 아래와 같이 정리를 해 보았음.

Q) 버스는 어떻게 중앙 서버와 통신을 하나?
A) 자치단체 별로 다르다. 서울(에어미디 무선데이터망), 울산 (에어미디어 무선데이터망 –> SKT CDMA), 순천 (WCDMA), 대구 (CDMA) 등등 다양하다. 그 외에 Beacon 방식도 있다고 하니 참고. 그리고 비용은 버스 한 대당 1만원~1.5만원 정도라고.

Q) 버스의 교통카드 단말기는 언제 중앙 서버와 통신하나?
A) 버스에 장착된 터미널은 기본적으로 오프라인 결재형 터미널이다. 즉, 실시간으로 결재 이력을 서버로 보내지 않는다. 버스가 종점에 도착하면, 한 번에 거래된 데이터를 모아서 서버로 전송한다고 한다. 아래는 자세한 설명.


출처 : 전자지불시스템의 개념 정의, 시스템 구성 및 구성요소 설명

Q) 그렇다면 실시간 환승 처리는 대체 어떻게 하는 건가?
A) 교통IC카드는 단순히 단방향 통신 매체가 아닌, 소형컴퓨터 시스템으로, 카드의 잔액 및 환승 여부 등을 처리한다고 한다. (아,, 문화적 충격)

출처 : 전자지불시스템의 개념 정의, 시스템 구성 및 구성요소 설명

교통카드나 교통카드 기능이 담긴 신용카드는 단말기에 갖다 대기만 하면 버스나 지하철에 탈 수 있어 매우 편리하다. 교통비로 얼마가 나갔는지, 카드에 금액이 얼마나 남았는지, 환승했는지 여부 등 다양한 정보를 처리하는 저장하는 작업은 교통카드에 내장된 IC(Integrated Circuit, 집적회로)칩이 담당하고 있다. IC칩은 데이터를 저장할 뿐만 아니라 연산도 가능해 결제에 사용하거나 계좌 접근확인 등 다양한 기능을 수행할 수 있다. 교통카드 외에도 신용카드, 선불?직불카드 등에도 IC칩이 사용된다. 다만 신용카드로 결제하거나 ATM을 이용할 때 카드와 기계를 직접 접촉하는 것과 달리 교통카드는 단말기에 가까이 가져만 가도 동작한다. 이는 RFID 기술을 이용해 라디오 전파로 데이터를 주고받기 때문이다. 단말기에서 요금 정보를 교통카드로 보내면 IC칩이 남은 잔액을 파악하고 요구된 교통비를 뺀 후 지불이 완료됐다는 신호를 단말기에 전달한다.
”교통카드, 대기만 하면 인식하는 건…” ebuzz 김도형 기자

Q) 그럼 도대체 카드의 전원은 누가 공급하냐!!
A) 세상에.. 무선 충전이라니.. 아래 참고.

전파를 보내려면 전력이 필요하지만 교통카드는 따로 건전지가 달려있지 않다. 대신 카드 모서리에 전선이 여러 번 겹쳐 감긴 코일이 내장됐다. 교통카드 단말기는 일정한 주기로 세기가 변하는 자기장을 내보내고 있다. 여기에 교통카드를 가까이 대면 내부에 코일이 반응해 전파를 보내기 충분한 전력을 얻게 된다. 참고로 자기장 변화에 의해 전류가 흐르는 현상을 전자기 유도라 한다. 전자기 유도는 교통카드 뿐 아니라 무선 충전이나 인덕션레인지 등에도 활용되고 있다.
”교통카드, 대기만 하면 인식하는 건…” ebuzz 김도형 기자

덕분에 식견이 많이 넓어졌음.

─ tag  교통카드, 버스

예전부터 궁금했던 점이 HR 사람들은 누가 평가하는가? 하는 점이었다. 물론 나 같은 팀원들이야 팀 목표에 align되어, 팀장님들이 평가하는 경우가 대부분이지만, 팀장급 이상이 되면 목표 설정 자체가 그리 호락호락하지 않다. (정치적인 팀장들은 상대적으로 쉬운 목표를 설정하고, 어려운 목표로 포장한다) 결국 정량적으로 성과를 파악하기 어려운 대부분의 부서의 경우, 결국 누군가 정성적인 판단을 해야 할 수 밖에 없고, 이때 HR 부서가 힘을 발휘한다. 문제는 HR 부서의 목표는 누가 정해주는가 하는 점이다. (이건 뭐 고양이 목에 방울달기?)

부러진 화살이라는 영화를 보고, 비슷한 생각이 들었다. 사법부 (특히나 판사, 검사)들이 피해자, 혹은 피의자가 되었을 때, 누가 합리적인 판단을 내려줄 것인가? 사법고시 합격생들 대부분이 특정 대학에 편중되어 있고, 거기다 사법연수원이라는 곳에서 2년 동안 함께 고생을 하며, 알게모르게 그들만의 카르텔이 쌓인 상황에서, 과연 그들 사이에게 합리적인 법적 판단을 기대할 수 있을까?

피의자는 감히 사법부에 '테러'를 가했다고 의심되는 상황이고, 한 다리 건너면 아는 사이인 동료가 피해자인데다, 자신의 인사권을 쥐고 있는 윗사람들도 다들 한 마디씩 할텐데, 이런 상황에서 피의자와 피해자 사이에 공정한 재판을 기대한다? 누가봐도 무리인 상황아닌가?

영화는 영화일뿐, 픽션으로 받아들여야 하겠지만, 사법부 구성원이 포함되는 사건에 대해서는 적어도 현재와 같은 시스템에서 사법부가 단독으로 재판을 진행하고, 법적 판단을 내려서는 안된다는 생각을 가지게 해 준 것만으로도 이 영화는 충분히 역할을 했다고 본다.

'리뷰' 카테고리의 다른 글

[리뷰] 부러진 화살을 보고  (0) 2012/02/05
연극 키사라기 미키짱을 보고  (2) 2011/07/18
[후기] 한국 마사지  (0) 2011/04/05
[추천곡] 이 노래를 추천합니다~  (0) 2011/01/30
요즘 좋아하는 것  (0) 2010/12/06
연극 쉬어매드니스를 보고  (0) 2010/10/26

설날이 지나고 생긴 많은 일들에 대해서도 적어야 하고, 1월 달 정산도 해야 하지만, 오늘은 좀 졸리니 대충 쓰고 자야겠다.

지금 회사에 와서 처음 한 일을 특허로 쓰면서 정리를 했는데.. 내용이 많이 부실하다. (솔직히 말하면 특허로 쓸 만큼 대단한 내용이 아님 ;; ) 하지만 이미 쓰겠다고 질러놓은 상황이라.. 제안서를 쓰긴 써야겠고, 해서 백그라운드 설명만 잔뜩 적힌 제안서가 되어 버렸다. 에잉;; 몰라 일단 난 다 썼으니, 법무팀에서 처리하겠지 뭐.

그래도 일단 제일 귀찮았던 특허 쓰기가 완료되었으니, 이번 주랑 다음 주에는 좀 더 의미 있고, 재미있는 일을 해 보아야겠다.

'Diary' 카테고리의 다른 글

KT 인터넷으로 변경  (0) 2012/02/09
남이 짠 코드 고치기  (0) 2012/02/08
일기  (0) 2012/02/02
조직개편  (0) 2012/01/12
요즘 만들고 있는 것  (0) 2012/01/09
딱 30분만 자야지  (0) 2012/01/08
일기 :: 2012/02/02 23:37 Diary
openclose