안녕하세요 !!
Daum 제주 사옥(로드뷰보기)에서 같이 일하실 개발자분들을 모십니다.
담당하실 업무는
- 웹 서비스 설계, 분석, 개발 및 운영
- 대용량 트래픽 웹 서비스 개발 및 개선
- 빠른 기능 추가, 변경이 가능하도록 개발 및 개선
- Daum "전사 게시판 플랫폼(Gaia - 아고라, 텔존, 미즈넷 서비스 등에 적용)" 개발, 개선, 유지보수 및 운영
- "Daum View 서비스(http://v.daum.net, 구 블로거뉴스)" 개발, 유지보수 및 운영
지원자격은
- 제주 근무 가능한 분(제주 근무자 혜택)
- 컴퓨터공학/전산학/통계학 관련 학사 이상 또는 이에 상응하는 경력자
- java 기반 웹 어플리케이션 개발 역량 보유
- Apache, Tomcat, MySQL에 대한 지식 또는 개발 경험
- 원활한 커뮤니케이션 능력
- 창의적 문제해결 능력과 열정을 가진 인재
- 학습 능력이 있는 개발자
우대사항은(순서 무관)
- TDD, Refactoring, Design Pattern, OOAD(Object Oriented Analysis and Design) 경험 및 가능자
- Framework(spring, ibatis, velocity 등) 경험 및 가능자
- 개발환경(Linux, eclipse, maven, subversion, git 등) 경험 및 가능자
- NoSql, Hadoop, Lucene, Solr 경험 및 가능자
지원은
http://recruit.daum.net/Daum/recruit/currentOpportunities.do
http://recruit.daum.net/Daum/recruit/currentOpportunities.do
에서 "View 서비스 개발"이나 "전사 게시판 개발"로 지원해 주시면 됩니다 ^^
(지원하실 때 "지원자격", "우대사항"이 잘 표현될 수 있었으면 좋겠습니다)
문의사항은
mail: codetemplate@hanmail.net
twitter: @ctemplate
으로 주시면 됩니다.
많은 지원 부탁드립니다.
위 문서를 보고 하면되는데, 딱 하나, 위 문서에서 설정 파일로 사용하는 hadoop-site.xml은 deprecate됐다.
이 부분에 대한 처리 방식은 메일링 리스트에서 원인을 찾았다.
이 부분에 대한 처리 방식은 메일링 리스트에서 원인을 찾았다.
전체적인 설치 순서와 확인 방법을 알아보자(hadoop-site.xml를 변경된 파일들로 나눈 것을 제외하면 원문의 내용과 다를 것이 없다).
Step1, Step2
- 원문을 보면서 알아서들 하시기 바랍니다. 제 경우는 hadoop 유저를 생성하지 않았습니다.
- java update, localhost에 ssh 접속시 패스워드 없이 접속 가능하도록 설정하는 부분이 있다.
- 원문을 보면서 알아서들 하시기 바랍니다. 제 경우는 hadoop 유저를 생성하지 않았습니다.
- java update, localhost에 ssh 접속시 패스워드 없이 접속 가능하도록 설정하는 부분이 있다.
Step3
1. 설치
다운로드, 압축 풀어서 설치하시면 됩니다.
다운로드, 압축 풀어서 설치하시면 됩니다.
제 경우는 ~msbaek/lib/hadoop-0.20.2 디렉토리에 설치하였습니다.
2. conf/hadoop-env.sh 수정
문서에서 설명한 것 처럼, 아래 그림과 같이 JAVA_HOME 설정과 HADOOP_HEAPSIZE 설정을 해 주면 됩니다.
3 hadoop-site.xml
hadoop-site.xml은 deprecate됐다.
문서의 설정 중
hadoop.tmp.dir, fs.default.name -> core-site.xml
mapred.job.tracker, mapred.tasktracker.tasks.maximum -> mapred-site.xml
dfs.replication -> hdfs-site.xml
로 분리하여 저장한다(관련문서).
저장된 결과는 아래와 같다.
Step4
원문을 보면서 formatting(bin/hadoop namenode -format),
start(bin/start-all.sh) 해 본다.
start 후에 logs/* 파일들을 조사해서 특이한 오류가 없는지 확인
start(bin/start-all.sh) 해 본다.
start 후에 logs/* 파일들을 조사해서 특이한 오류가 없는지 확인
원문을 보면서 파일 복사 및 확인
bin/hadoop dfs -copyFromLocal conf input
bin/hadoop dfs -ls
Found 1 item
/user/hadoop/input <dir> 2008-09-11 13:33 rwxr-xr-x hadoop supergroup
또 예제를 수행해 본다.
1. Server 설정
1.1 General 탭 설정
1.2 Server Configuration 탭 설정
1.3 Server Configuration 탭/Server Options... 설정
2. Client 설정
2.1 General 탭 설정
2.2 Client Configuration 탭 설정
13" MacBook Air를 가지고 몇일 동안 너무 잘 사용했다. 그런데 가끔 iphone 동기화를 하려면 노트북이 어는 현상이 발생했다. 근데 이게 나만의 문제는 아니었다.
그리고 이렇게 되서 파워 스위치를 눌러서 끄고, 다시 켜는 작업을 수행하다 보면 디스크 검사시 복구할 수 없다는 오류 메시지가 나오곤 한다.
해결책은
1. Mac OS X v10.6.7 Supplemental Update for 13" MacBook Air (Late 2010) 설치
그리고 이렇게 되서 파워 스위치를 눌러서 끄고, 다시 켜는 작업을 수행하다 보면 디스크 검사시 복구할 수 없다는 오류 메시지가 나오곤 한다.
해결책은
1. Mac OS X v10.6.7 Supplemental Update for 13" MacBook Air (Late 2010) 설치
- http://support.apple.com/kb/DL1370
2. 다 설치하고 리부팅시 cmd+s를 눌러서 싱글 유저 모드로 부팅
- fsck, mount 등 수행
- restart
3. 권한 검사, 권한복구, 디스크 검사 수행
- 권한 검사/복구시 java 관련해서 권한이 잘 못 되었다는 메시지가 나오는데, 이는 무시하면됨.
이상의 작업을 수행했으니, 이제 더 이상 얼지 않기만을 기다림...
2. 다 설치하고 리부팅시 cmd+s를 눌러서 싱글 유저 모드로 부팅
- fsck, mount 등 수행
- restart
3. 권한 검사, 권한복구, 디스크 검사 수행
- 권한 검사/복구시 java 관련해서 권한이 잘 못 되었다는 메시지가 나오는데, 이는 무시하면됨.
이상의 작업을 수행했으니, 이제 더 이상 얼지 않기만을 기다림...
원문: http://biz.chosun.com/site/data/html_dir/2011/02/11/2011021101174.html
1회 컨설팅료 25만불의 사나이 골드스미스 박사
'하지만', '내 생각이 옳다', '이건 꼭 해야된다'고 말하지 말라.
"직원들의 일자리를 지키기 위해 밤잠 안 자고 뛰었는데, 날 싫어한다니 이해할 수가 없다"
- 열정적으로 일했지만, 직원들을 지나치게 몰아붙였다.
- 걸핏하면 화를 내고 싫은 소리를 했다.
- 일에 대한 열정과 진심을 직원들에게 긍정적으로 표현하는 방법을 몰랐다.
- 사람을 존중할 줄 몰랐다.
리더십 컨설팅 철학의 제1원칙 - "환경을 변화시킬 수 없다면 자신을 변화시켜라"
- 주변 환경이 내 뜻대로 안 된다고 화내지 마세요.
- 지금 내가 하는 일과 조직 속에서 행복을 찾으세요.
- 자신의 삶이 행복하고 의미 있어야 훌륭한 리더십이 나오고 회사도 좋아집니다.
기업의 리더들이 가장 많이 저지르는 실수 - '지나친 자기 확신(self-confidence)'과 '자기 중심적 태도(too much ego)'
- 대부분 리더들은 '내 생각이 옳다'고 확신
- 주변 사람들이 나를 어떻게 평가하는지 신경도 안 써요.
- 이런 리더를 주변에서 어떻게 대하겠어요? 비위나 맞추면서 뒤에선 험담하겠죠.
"리더는 무슨 일을 하기 전에 '꼭 해야 할 가치가 있는 일인가' 질문을 던져봐야 한다"
- 쓸데없는 지시로 불신을 키우거나 사기를 꺾고 자신의 리더십까지 망쳐버리는 걸 피할 수 있다.
- "CEO와 리더들이 하는 말과 행동의 절반은 쓸데없는 짓일 가능성이 크다"
"풍부한 일자리와 짧은 노동시간 등 부모 세대가 누려온 좋은 시절(good old days)은 절대 돌아오지 않습니다."
- 인도와 중국의 저임금·고숙련 노동자들과 경쟁해야 함.
- 가난하지만 대학을 졸업하고, 영어를 능숙하게 구사하며, 열심히 일하는 1억명의 젊은이와
- 그들이 당신처럼 하루종일 TV 보고, 인터넷 서핑이나 게임을 하면서 '세상이 썩었어'라고 불평할 것 같습니까?
- 그들이 미래의 당신 일자리를 뺏어 가도록 놔두지 마세요.
"CEO여! 웃음은 헤프게, 입은 무겁게 하라"
- 리더가 인상 쓰면 모두에게 독이다
- 리더의 긍정적 기운이 훌륭한 리더십의 핵심 ?
. "맞습니다. 나는 이를 모조(mojo)라고 부르죠.
. '내면에서 우러나와 외부로 발산되는, 지금 당신이 하고 있는 일에 대한 긍정적인 태도'를 말함.
. 모조라는 개념은 '모든 것은 내 안에서부터 나온다'라는 제 개인적인 깨달음에서 출발.
. 컨설턴트는 고객들이 변화하고 달라질 수 있도록 도와줄 뿐, 성과를 얻는 것은 고객들의 몫이라는 걸 깨달았죠.
. 즉 변화의 힘은 밖에서 주입되는 것이 아니라 안에서 나옵니다.
. 모조는 그런 변화를 불러일으킬 수 있는 당신 내면의 힘입니다.
- 쓸데없이 제안하거나 지시하지 마라
―리더들의 공통적인 문제가 뭡니까?
. "가장 큰 문제는 지나치게 자기 중심적인 태도입니다. '내가 하면 반드시 성공한다'는 미신의 함정(superstition trap)에 빠지죠. 이는 심각한 위험성이 있습니다. 과거 한국 민항기가 산에 부딪혀 추락한 적이 있죠? 그때 부기장이 충돌 위험성을 알았지만, 기장의 자기 확신이 너무 강해서 그냥 넘어갔다고 하더군요."
. 리더가 이런 태도를 보이면 아래 직원들은 정반대의 모습이 된다고 한다. 조직 하부의 젊은 직원들은 자신감을 잃고 윗사람의 눈치만 본다는 것
. 함부로 제안 말라. 누가 CEO의 제안을 제안으로만 받아들이겠는가. 명령이다.
. 리더들은 어떤 행동이나 말을 하기 전에 반드시 '과연 이걸 할 필요가 있는가' 자문(自問)해 봐야 합니다. CEO가 지시하는 일의 절반은 쓸데없는 일일 때가 많습니다.
. 보통 사람들은 하루 24시간 중 상당 부분을 TV나 인터넷 서핑에 낭비한다. 대화 시간의 65%는 남을 헐뜯거나 흉보는 데 쓴다. 이유는 '행동의 관성' 때문. 좀비(zombie)처럼 아무 생각 없이 TV를 켜서 보는 것처럼 말이다. "TV를 보지 말라는 게 아니라 생각 없이 습관대로 하지 말라"
- 관성의 족쇄를 깨라
―리더십 코치를 하면서 가장 강조하는 점은 뭡니까?
. "실천 (practice)이죠. 대부분 사람들이 리더십의 원칙은 어느 정도 이해해요. 하지만 그걸 제대로 실천하지는 못하죠. 머리로만 아는 리더십은 아무 쓸모가 없어요. 엄밀하게 말해 제대로 실천하기 전에는 리더십을 이해했다고 말할 수 없어요."
― 어떻게 변화를 위한 실천을 이끌어 낼 수 있을까요?
. "사람은 가던 방향대로 가고, 하던 것만 하고, 그동안 얘기하던 대로 말하려는 경향이 있습니다. 이런 관성의 족쇄(shackles of inertia)를 끊는 것이 정말 중요합니다. 그래서 끊임없이 이런 질문을 해보세요. '왜 내가 이런 일을 해야 하지?' TV를 볼 때나 멍하니 인터넷을 할 때도 마찬가지예요. 끊임없이 질문하지 않으면 이런 습관적 행동들이 우리를 완전히 지배하게 될 겁니다."
. 스스로 변화를 이끌어 낼 수 있도록 체크리스트를 활용하라
. 동료들과 함께 해야 할 일들을 매일 체크하라
. 지속적으로 체크하면 실천력을 높일 수 있고 변화가 나타난다
- 불교에서 리더십의 철학을 깨닫다
. 그는 철저한 현실주의자였다. 그는 "좋았던 지난날은 절대 오지 않는다"고 했다. 과거에 대한 미련을 버리란 얘기였다.
― 너무 가혹한 이야기 아닌가요?
. "기업과 노동자들에게 시장이 요구하는 기대치는 예전보다 훨씬 높습니다. 또 인터넷과 통신 기술의 발전으로 당신은 24시간 365일 일의 속박에서 벗어날 수 없게 됐습니다. 이런 상황에서 당신이 '이건 정말 불공평해'라고 말해봤자 무슨 소용이 있을까요? 현실을 직시해야 합니다."
모조(mojo)가 뭐죠?
. 美 흑인들 소원·부적 담은 '작은 주머니'서 유래
. 에너지·매력으로 통용… 영화에 쓰여 유명해져
. 내면에서 우러나 밖으로 드러나고 확산되는, 지금 하고 있는 일에 대한 긍정적 에너지
. 모조는 자신의 정체성(identity)과 객관적 성취감(achievement), 나에 대한 평판(reputation), 그리고 현실에 대한 수용(acceptance)이라는 네 가지 요소로 구성
. 이 네 가지가 서로 균형 있고 바람직하게 유지될 때 '모조가 높다'라고 할 수 있다.
15가지 '체크리스트'로 긍정의 힘 끌어내세요
. 익숙해진 생활의 관성을 깨고 변화를 불러일으키기 위해선 어떻게 해야 할까?
. "실천하기로 다짐한 항목들을 '체크리스트'로 만들어 동료나 가족과 함께 매일 체크하는 것이 효과적
. 절대로 스스로든 남에게든 부정적 평가(negative feedback)를 내리지 말라는 것이다.
. 예를 들어 친구가 오늘 팔굽혀펴기 운동을 30개 했다고 하자. 그때는 "그것 갖고 되겠느냐"고 말하기보다는 "60살 먹은 사람치고는 상당히 잘했는데"라며 힘을 북돋아 주는 것이 좋다.
. 부정적인 평가는 아무리 좋은 의도라도 죄책감만 불러일으키기 때문이다.
1회 컨설팅료 25만불의 사나이 골드스미스 박사
'하지만', '내 생각이 옳다', '이건 꼭 해야된다'고 말하지 말라.
"직원들의 일자리를 지키기 위해 밤잠 안 자고 뛰었는데, 날 싫어한다니 이해할 수가 없다"
- 열정적으로 일했지만, 직원들을 지나치게 몰아붙였다.
- 걸핏하면 화를 내고 싫은 소리를 했다.
- 일에 대한 열정과 진심을 직원들에게 긍정적으로 표현하는 방법을 몰랐다.
- 사람을 존중할 줄 몰랐다.
리더십 컨설팅 철학의 제1원칙 - "환경을 변화시킬 수 없다면 자신을 변화시켜라"
- 주변 환경이 내 뜻대로 안 된다고 화내지 마세요.
- 지금 내가 하는 일과 조직 속에서 행복을 찾으세요.
- 자신의 삶이 행복하고 의미 있어야 훌륭한 리더십이 나오고 회사도 좋아집니다.
기업의 리더들이 가장 많이 저지르는 실수 - '지나친 자기 확신(self-confidence)'과 '자기 중심적 태도(too much ego)'
- 대부분 리더들은 '내 생각이 옳다'고 확신
- 주변 사람들이 나를 어떻게 평가하는지 신경도 안 써요.
- 이런 리더를 주변에서 어떻게 대하겠어요? 비위나 맞추면서 뒤에선 험담하겠죠.
"리더는 무슨 일을 하기 전에 '꼭 해야 할 가치가 있는 일인가' 질문을 던져봐야 한다"
- 쓸데없는 지시로 불신을 키우거나 사기를 꺾고 자신의 리더십까지 망쳐버리는 걸 피할 수 있다.
- "CEO와 리더들이 하는 말과 행동의 절반은 쓸데없는 짓일 가능성이 크다"
"풍부한 일자리와 짧은 노동시간 등 부모 세대가 누려온 좋은 시절(good old days)은 절대 돌아오지 않습니다."
- 인도와 중국의 저임금·고숙련 노동자들과 경쟁해야 함.
- 가난하지만 대학을 졸업하고, 영어를 능숙하게 구사하며, 열심히 일하는 1억명의 젊은이와
- 그들이 당신처럼 하루종일 TV 보고, 인터넷 서핑이나 게임을 하면서 '세상이 썩었어'라고 불평할 것 같습니까?
- 그들이 미래의 당신 일자리를 뺏어 가도록 놔두지 마세요.
"CEO여! 웃음은 헤프게, 입은 무겁게 하라"
- 리더가 인상 쓰면 모두에게 독이다
- 리더의 긍정적 기운이 훌륭한 리더십의 핵심 ?
. "맞습니다. 나는 이를 모조(mojo)라고 부르죠.
. '내면에서 우러나와 외부로 발산되는, 지금 당신이 하고 있는 일에 대한 긍정적인 태도'를 말함.
. 모조라는 개념은 '모든 것은 내 안에서부터 나온다'라는 제 개인적인 깨달음에서 출발.
. 컨설턴트는 고객들이 변화하고 달라질 수 있도록 도와줄 뿐, 성과를 얻는 것은 고객들의 몫이라는 걸 깨달았죠.
. 즉 변화의 힘은 밖에서 주입되는 것이 아니라 안에서 나옵니다.
. 모조는 그런 변화를 불러일으킬 수 있는 당신 내면의 힘입니다.
- 쓸데없이 제안하거나 지시하지 마라
―리더들의 공통적인 문제가 뭡니까?
. "가장 큰 문제는 지나치게 자기 중심적인 태도입니다. '내가 하면 반드시 성공한다'는 미신의 함정(superstition trap)에 빠지죠. 이는 심각한 위험성이 있습니다. 과거 한국 민항기가 산에 부딪혀 추락한 적이 있죠? 그때 부기장이 충돌 위험성을 알았지만, 기장의 자기 확신이 너무 강해서 그냥 넘어갔다고 하더군요."
. 리더가 이런 태도를 보이면 아래 직원들은 정반대의 모습이 된다고 한다. 조직 하부의 젊은 직원들은 자신감을 잃고 윗사람의 눈치만 본다는 것
. 함부로 제안 말라. 누가 CEO의 제안을 제안으로만 받아들이겠는가. 명령이다.
. 리더들은 어떤 행동이나 말을 하기 전에 반드시 '과연 이걸 할 필요가 있는가' 자문(自問)해 봐야 합니다. CEO가 지시하는 일의 절반은 쓸데없는 일일 때가 많습니다.
. 보통 사람들은 하루 24시간 중 상당 부분을 TV나 인터넷 서핑에 낭비한다. 대화 시간의 65%는 남을 헐뜯거나 흉보는 데 쓴다. 이유는 '행동의 관성' 때문. 좀비(zombie)처럼 아무 생각 없이 TV를 켜서 보는 것처럼 말이다. "TV를 보지 말라는 게 아니라 생각 없이 습관대로 하지 말라"
- 관성의 족쇄를 깨라
―리더십 코치를 하면서 가장 강조하는 점은 뭡니까?
. "실천 (practice)이죠. 대부분 사람들이 리더십의 원칙은 어느 정도 이해해요. 하지만 그걸 제대로 실천하지는 못하죠. 머리로만 아는 리더십은 아무 쓸모가 없어요. 엄밀하게 말해 제대로 실천하기 전에는 리더십을 이해했다고 말할 수 없어요."
― 어떻게 변화를 위한 실천을 이끌어 낼 수 있을까요?
. "사람은 가던 방향대로 가고, 하던 것만 하고, 그동안 얘기하던 대로 말하려는 경향이 있습니다. 이런 관성의 족쇄(shackles of inertia)를 끊는 것이 정말 중요합니다. 그래서 끊임없이 이런 질문을 해보세요. '왜 내가 이런 일을 해야 하지?' TV를 볼 때나 멍하니 인터넷을 할 때도 마찬가지예요. 끊임없이 질문하지 않으면 이런 습관적 행동들이 우리를 완전히 지배하게 될 겁니다."
. 스스로 변화를 이끌어 낼 수 있도록 체크리스트를 활용하라
. 동료들과 함께 해야 할 일들을 매일 체크하라
. 지속적으로 체크하면 실천력을 높일 수 있고 변화가 나타난다
- 불교에서 리더십의 철학을 깨닫다
. 그는 철저한 현실주의자였다. 그는 "좋았던 지난날은 절대 오지 않는다"고 했다. 과거에 대한 미련을 버리란 얘기였다.
― 너무 가혹한 이야기 아닌가요?
. "기업과 노동자들에게 시장이 요구하는 기대치는 예전보다 훨씬 높습니다. 또 인터넷과 통신 기술의 발전으로 당신은 24시간 365일 일의 속박에서 벗어날 수 없게 됐습니다. 이런 상황에서 당신이 '이건 정말 불공평해'라고 말해봤자 무슨 소용이 있을까요? 현실을 직시해야 합니다."
모조(mojo)가 뭐죠?
. 美 흑인들 소원·부적 담은 '작은 주머니'서 유래
. 에너지·매력으로 통용… 영화에 쓰여 유명해져
. 내면에서 우러나 밖으로 드러나고 확산되는, 지금 하고 있는 일에 대한 긍정적 에너지
. 모조는 자신의 정체성(identity)과 객관적 성취감(achievement), 나에 대한 평판(reputation), 그리고 현실에 대한 수용(acceptance)이라는 네 가지 요소로 구성
. 이 네 가지가 서로 균형 있고 바람직하게 유지될 때 '모조가 높다'라고 할 수 있다.
15가지 '체크리스트'로 긍정의 힘 끌어내세요
. 익숙해진 생활의 관성을 깨고 변화를 불러일으키기 위해선 어떻게 해야 할까?
. "실천하기로 다짐한 항목들을 '체크리스트'로 만들어 동료나 가족과 함께 매일 체크하는 것이 효과적
. 절대로 스스로든 남에게든 부정적 평가(negative feedback)를 내리지 말라는 것이다.
. 예를 들어 친구가 오늘 팔굽혀펴기 운동을 30개 했다고 하자. 그때는 "그것 갖고 되겠느냐"고 말하기보다는 "60살 먹은 사람치고는 상당히 잘했는데"라며 힘을 북돋아 주는 것이 좋다.
. 부정적인 평가는 아무리 좋은 의도라도 죄책감만 불러일으키기 때문이다.
http://www.readwriteweb.com/cloud/2011/01/how-twitter-uses-nosql.php
Twitter 사용자들은 하루에 12 테라바이트(연 거의 4 페타바이트)의 데이터를 생산한다고 한다.
이러한 방대한 양의 데이터를 사용하는 트위터에서는 아래와 같은 NoSQL들을 사용한다고 한다.
Scribe(https://github.com/facebook/scribe)
- syslog는 더 이상 사용 불가.
- facebook에 의해 오픈소스화된 로그 수집 프레임워크인 scribe를 사용함.
- twitter는 scribe를 이용해서 로그를 hadoop에 저장.
Cloudera(http://www.cloudera.com/)'s Hadoop
- mysql은 분석 업무에 적합하지 않아서 hadoop을 사용
Pig
- hadoop을 사용하는 가장 좋은 방법은 자바를 이용한는 것이지만,
- 자바는 복잡하고 빠르게 반복 작업을 하기에는 적합하지 않다.
- hadoop 위에 구현된 상위 레벨 언어인 Pig(http://pig.apache.org/)를 사용한다.
Hbase(http://hbase.apache.org/)
- hadoop의 상위에 위치. low-latency, data mutability를 위해
- 사용자 검색 기능 강화를 위해 사용
FlockDB(https://github.com/twitter/flockdb)
- real-time, distributed DB.
- twitter에 의해 생성/오픈 소스화됨.
- twitter는 소셜 그래프 분석을 위해 사용함.
- still mysql underneath, but it's very fast
Cassandra(http://cassandra.apache.org/)
- Cassandra(facebook이 만든 NoSQL)는 아직 실험 단계(atomic counting에)이다.
각각에 대해서 살펴 볼 필요가 있을 듯 하다.
Twitter 사용자들은 하루에 12 테라바이트(연 거의 4 페타바이트)의 데이터를 생산한다고 한다.
이러한 방대한 양의 데이터를 사용하는 트위터에서는 아래와 같은 NoSQL들을 사용한다고 한다.
Scribe(https://github.com/facebook/scribe)
- syslog는 더 이상 사용 불가.
- facebook에 의해 오픈소스화된 로그 수집 프레임워크인 scribe를 사용함.
- twitter는 scribe를 이용해서 로그를 hadoop에 저장.
Cloudera(http://www.cloudera.com/)'s Hadoop
- mysql은 분석 업무에 적합하지 않아서 hadoop을 사용
Pig
- hadoop을 사용하는 가장 좋은 방법은 자바를 이용한는 것이지만,
- 자바는 복잡하고 빠르게 반복 작업을 하기에는 적합하지 않다.
- hadoop 위에 구현된 상위 레벨 언어인 Pig(http://pig.apache.org/)를 사용한다.
Hbase(http://hbase.apache.org/)
- hadoop의 상위에 위치. low-latency, data mutability를 위해
- 사용자 검색 기능 강화를 위해 사용
FlockDB(https://github.com/twitter/flockdb)
- real-time, distributed DB.
- twitter에 의해 생성/오픈 소스화됨.
- twitter는 소셜 그래프 분석을 위해 사용함.
- still mysql underneath, but it's very fast
Cassandra(http://cassandra.apache.org/)
- Cassandra(facebook이 만든 NoSQL)는 아직 실험 단계(atomic counting에)이다.
각각에 대해서 살펴 볼 필요가 있을 듯 하다.
원본: http://www.habuma.com/spring/spring3.pdf
1. Spring Expression Language
. Wires values evaluated from expressions
. Works in XML and annotations
<bean class="com.springinaction.peanuts.Blanket">
<property name="color" value="#{someOtherBean.color}" />
</bean>
@Component
public class Blanket {
@Value("#{someOtherBean.color}")
private String color;
public Blanket() {
}
// ...
}
2. Expression variables
. Any bean ID
. systemProperties
. Scope/Context-specific...
. contextProperties
. contextAttributes
. request
. session
2.1 SpEL examples
. Referencing bean properties "#{settingBean.databaseUrl}"
. Referencing system properties "#{systemProperties.favoriteColor}"
. Evaluating truth "#{systemProperties.favoriteColor == 'red'}"
. Using static methods "#{T(java.lang.Math).random()}"
. Templated Strings "The time is #{T(java.lang.System).currentTimeMillis()}"
. Collection projection "#{snoopyPersonas.![name]}"
3. @PathVariable
3.1 Spring 2.5:
@Controller
public class SpittleListController {
@RequestMapping("/spittleList.htm")
public String displaySpittleList(@RequestParam("username") String userName) {
// ...
return "spittleList";
}
}
http://localhost:8080/spitter/spittleList.htm?username=habuma
3.2 Spring 3.0:
@Controller
public class SpittleListController {
@RequestMapping("/{username}/list")
public String displaySpittleList(@PathVariable("username") String userName) {
// ...
return "spittleList";
}
}
http://localhost:8080/spitter/habuma/list
4. @RequestHeader
4.1 Spring 2.5:
@Controller
public class HomeController {
@RequestMapping("/home")
public String displayHomePage(HttpServletRequest request) {
String userAgent = request.getHeader("User-Agent");
// ...
return "home";
}
}
4.2 Spring 3.0:
@Controller
public class HomeController {
@RequestMapping("/home")
public String displayHomePage(@RequestHeader("User-Agent") String userAgent) {
// ...
return "home";
}
}
5. @CookieValue
5.1 Spring 2.5:
@Controller
public class HomeController {
@RequestMapping("/home")
public String displayHomePage(HttpServletRequest request) {
String lastVisit = "never";
Cookie[] cookies = request.getCookies();
for (Cookie cookie : cookies) {
if("LastVisit".equals(cookie.getName())) {
lastVisit = cookie.getValue();
}
}
// ...
return "home";
}
}
5.2 Spring 3.0:
@Controller
public class HomeController {
@RequestMapping("/home")
public String displayHomePage(@CookieValue("LastVisit") String lastVisit) {
// ...
return "home";
}
}
6. default values
. New for @RequestParam
@RequestParam(value="productId", defaultValue="1234") String productId
. Standard issue for @RequestHeader and @CookieValue
@RequestHeader(value="User-Agent", defaultValue="1234") String userAgent
@CookieValue(value="LastVisit", defaultValue="1234") String lastVisit
7. <spring:url>
. New JSP tag Generates context-senstive URL
<spring:url value="/spittle/{id}/edit" var="editUrl" escapeXml="true">
<spring:param name="id" value="${spittle.id}" />
</spring:url>
<a href="${editUrl}">Do something</a>
8. Declarative Validation
. Either Hibernate or JSR-303 or both Not in Spring 3.0.0.M3
9. HTTP Method Conversion
. HTTP defines four methods: GET, POST, DELETE, and PUT
. HTML only supports 2: GET and POST
. Spring 3’s HiddenHttpMethodFilter fixes that
. Spring MVC form tags support hidden HTTP methods
<form:form method="delete">
<p class="submit"><input type="submit" value="Delete Spittle"/></p>
</form:form>
. Controllers can handle all HTTP methods
@RequestMapping(method = RequestMethod.DELETE)
public String deleteSpittle(@PathVariable long spittleId) {
spittleService.deleteSpittle(spittleId);
return "redirect:/home";
}
10. REST consumption
. New RestTemplate
Read
RestTemplate template = new RestTemplate();
template.getForObject("http://localhost:8080/spitter/users/${id}", String.class, userId);
Create
RestTemplate template = new RestTemplate();
SpitterUser user = new SpitterUser(userName, password);
template.postForLocation("http://localhost:8080/spitter/users/${id}", user, userId);
Delete
RestTemplate template = new RestTemplate();
template.delete("http://localhost:8080/spitter/users/${id}", userId);
11. JavaConfig
@Configuration
public class PeanutsConfiguration {
@Bean
public Linus linus() {
Linus linus = new Linus();
linus.setBlanket(blanket());
return linus;
}
@Bean
private Blanket blanket() {
Blanket blanket = new Blanket();
blanket.setColor("blue");
return blanket;
}
}
@Component
public class KiteEatingTree implements DeciduousTree {
public void shedLeaves() {
// ...
}
@Bean
public Kite kite() {
return new Kite();
}
}
1. Spring Expression Language
. Wires values evaluated from expressions
. Works in XML and annotations
<bean class="com.springinaction.peanuts.Blanket">
<property name="color" value="#{someOtherBean.color}" />
</bean>
@Component
public class Blanket {
@Value("#{someOtherBean.color}")
private String color;
public Blanket() {
}
// ...
}
2. Expression variables
. Any bean ID
. systemProperties
. Scope/Context-specific...
. contextProperties
. contextAttributes
. request
. session
2.1 SpEL examples
. Referencing bean properties "#{settingBean.databaseUrl}"
. Referencing system properties "#{systemProperties.favoriteColor}"
. Evaluating truth "#{systemProperties.favoriteColor == 'red'}"
. Using static methods "#{T(java.lang.Math).random()}"
. Templated Strings "The time is #{T(java.lang.System).currentTimeMillis()}"
. Collection projection "#{snoopyPersonas.![name]}"
3. @PathVariable
3.1 Spring 2.5:
@Controller
public class SpittleListController {
@RequestMapping("/spittleList.htm")
public String displaySpittleList(@RequestParam("username") String userName) {
// ...
return "spittleList";
}
}
http://localhost:8080/spitter/spittleList.htm?username=habuma
3.2 Spring 3.0:
@Controller
public class SpittleListController {
@RequestMapping("/{username}/list")
public String displaySpittleList(@PathVariable("username") String userName) {
// ...
return "spittleList";
}
}
http://localhost:8080/spitter/habuma/list
4. @RequestHeader
4.1 Spring 2.5:
@Controller
public class HomeController {
@RequestMapping("/home")
public String displayHomePage(HttpServletRequest request) {
String userAgent = request.getHeader("User-Agent");
// ...
return "home";
}
}
4.2 Spring 3.0:
@Controller
public class HomeController {
@RequestMapping("/home")
public String displayHomePage(@RequestHeader("User-Agent") String userAgent) {
// ...
return "home";
}
}
5. @CookieValue
5.1 Spring 2.5:
@Controller
public class HomeController {
@RequestMapping("/home")
public String displayHomePage(HttpServletRequest request) {
String lastVisit = "never";
Cookie[] cookies = request.getCookies();
for (Cookie cookie : cookies) {
if("LastVisit".equals(cookie.getName())) {
lastVisit = cookie.getValue();
}
}
// ...
return "home";
}
}
5.2 Spring 3.0:
@Controller
public class HomeController {
@RequestMapping("/home")
public String displayHomePage(@CookieValue("LastVisit") String lastVisit) {
// ...
return "home";
}
}
6. default values
. New for @RequestParam
@RequestParam(value="productId", defaultValue="1234") String productId
. Standard issue for @RequestHeader and @CookieValue
@RequestHeader(value="User-Agent", defaultValue="1234") String userAgent
@CookieValue(value="LastVisit", defaultValue="1234") String lastVisit
7. <spring:url>
. New JSP tag Generates context-senstive URL
<spring:url value="/spittle/{id}/edit" var="editUrl" escapeXml="true">
<spring:param name="id" value="${spittle.id}" />
</spring:url>
<a href="${editUrl}">Do something</a>
8. Declarative Validation
. Either Hibernate or JSR-303 or both Not in Spring 3.0.0.M3
9. HTTP Method Conversion
. HTTP defines four methods: GET, POST, DELETE, and PUT
. HTML only supports 2: GET and POST
. Spring 3’s HiddenHttpMethodFilter fixes that
. Spring MVC form tags support hidden HTTP methods
<form:form method="delete">
<p class="submit"><input type="submit" value="Delete Spittle"/></p>
</form:form>
. Controllers can handle all HTTP methods
@RequestMapping(method = RequestMethod.DELETE)
public String deleteSpittle(@PathVariable long spittleId) {
spittleService.deleteSpittle(spittleId);
return "redirect:/home";
}
10. REST consumption
. New RestTemplate
Read
RestTemplate template = new RestTemplate();
template.getForObject("http://localhost:8080/spitter/users/${id}", String.class, userId);
Create
RestTemplate template = new RestTemplate();
SpitterUser user = new SpitterUser(userName, password);
template.postForLocation("http://localhost:8080/spitter/users/${id}", user, userId);
Delete
RestTemplate template = new RestTemplate();
template.delete("http://localhost:8080/spitter/users/${id}", userId);
11. JavaConfig
@Configuration
public class PeanutsConfiguration {
@Bean
public Linus linus() {
Linus linus = new Linus();
linus.setBlanket(blanket());
return linus;
}
@Bean
private Blanket blanket() {
Blanket blanket = new Blanket();
blanket.setColor("blue");
return blanket;
}
}
@Component
public class KiteEatingTree implements DeciduousTree {
public void shedLeaves() {
// ...
}
@Bean
public Kite kite() {
return new Kite();
}
}
이번 macheist에서 무료 소프트웨어 다운로드 행사가 있었다.
6일 전에 받은 daisy disk도 아주 만족스러웠는데, 이번에도 2개 정도는 아주 만족스런 소프트웨어가 있었다.
하나는 화면 전체를 까맣게 하고 초록색 글씨로 텍스트만을 쓸수 있도록 해 주는 WriteRoom인데, 이게 단순함에도 불구하고, 딴 생각 없이 글 작성에 집중할 수 있게 해 준다는 큰 장점이 있다. 대단해 보이지 않지만 써 보면 만족스러운 소프트웨어라고 생각이 든다.
그 다음으로는 처음 접해 보는 소프트웨어로 ShoveBox가 있다.
ShoveBox는 text, image, bookmark, web archive, pdf 등을 clipping하여 저장할 수 있다.
2가지 방법으로 데이터를 shovebox에 추가할 수 있다.
1. 드래그하여 상단 타스크바로 갖다 놓기
. clipping - 워드프로세서, IM 대화, Url 등을 드래그 드랍
. files - plain text file, rich text files, word documents, PDFs, images files(jpeg, gif, tiff, etc), weblocs, text clippings
2. 수작업으로 등록
. QuickJot
. Import Clipboard
. New Text Note
. From iSight
위의 수작업 등록을 나는 아래와 같이 핫키를 설정해 놓았다.
cmd+control+o organize - invoke inbox
cmd+control+q show quick jot
cmd+control+p paste to shovebox
cmd+control+n new text not
Things의 Someday에 등록하는 것과 뭐가 다를지 모르겠지만, 일단 잠시 써 보기로 했다.
6일 전에 받은 daisy disk도 아주 만족스러웠는데, 이번에도 2개 정도는 아주 만족스런 소프트웨어가 있었다.
하나는 화면 전체를 까맣게 하고 초록색 글씨로 텍스트만을 쓸수 있도록 해 주는 WriteRoom인데, 이게 단순함에도 불구하고, 딴 생각 없이 글 작성에 집중할 수 있게 해 준다는 큰 장점이 있다. 대단해 보이지 않지만 써 보면 만족스러운 소프트웨어라고 생각이 든다.
그 다음으로는 처음 접해 보는 소프트웨어로 ShoveBox가 있다.
ShoveBox는 text, image, bookmark, web archive, pdf 등을 clipping하여 저장할 수 있다.
2가지 방법으로 데이터를 shovebox에 추가할 수 있다.
1. 드래그하여 상단 타스크바로 갖다 놓기
. clipping - 워드프로세서, IM 대화, Url 등을 드래그 드랍
. files - plain text file, rich text files, word documents, PDFs, images files(jpeg, gif, tiff, etc), weblocs, text clippings
2. 수작업으로 등록
. QuickJot
. Import Clipboard
. New Text Note
. From iSight
위의 수작업 등록을 나는 아래와 같이 핫키를 설정해 놓았다.
cmd+control+o organize - invoke inbox
cmd+control+q show quick jot
cmd+control+p paste to shovebox
cmd+control+n new text not
Things의 Someday에 등록하는 것과 뭐가 다를지 모르겠지만, 일단 잠시 써 보기로 했다.
Google Wave를 시작하면서 구글에서 제공하는 유튜브 비디오를 중심으로 간략하게 정리해 본다.
1. Welcome to google wave
2. Getting Started with Google Wave
2.1 The Basics
2.2 Working with waves
3.1 Organizing events
3.5 Photo sharing
3.6 Google Wave in action
비디오 보기
4. Google Wave extensions
참고문서
1. Welcome to google wave
2. Getting Started with Google Wave
2.1 The Basics
- Starting a new wave
- Replying to a wave
- Replying with Shift+Enter
- Editing waves
- Reading through waves
- Updating your profile
2.2 Working with waves
- Using Playback
- Installing extensions
- extension을 사용하면 웨이브에 보다 풍부한 컨텐츠/상호작용을 추가하고, 다른 시스템과 연동할 수 있다.
- 예. 수도쿠 게임, 찬성/반대수 표현 도표
- Attaching photos and files
- 파일을 웨이브에 첨부하기 하기 위해서는 편집 모드를 시작하고 아래와 방법 중 하나의 방법으로 파일을 첨부할 수 있다.
- 페이퍼클립을 클릭하고 데스크탑에서 파일을 선택
- 데스크탑에서 웨이브로 파일을 드래그 & 드랍. 이 경우 해당 브라우저를 위한 구글 기어스 설치가 요구된다.
- Clearing your inbox
- 아래의 2가지 방법으로 인박스의 웨이브를 제거할 수 있다.
- Archive: takes a wave out of your inbox until someone updates it
- Mute: takes a wave out of your inbox unless someone adds a private reply to you
- You can always find these waves again by searching for them.
3.1 Organizing events
- 경우에 따라 다른 툴을 사용하지 않고 아이디어, 일정 제안, 메뉴, 초대장 등을 하나의 툴로 관리할 수 있다.
- 개짓(gadget)을 이용해서 이벤트에 날씨, 지도 등을 추가할 수 있다.
- 간단한 이벤트 계획 웨이브 예
- 공동작업으로 회의 주제를 준비할 때, 노트를 하고, 결정 사항을 기록하는 등의 짐을 나눌 수 있다(이런 경우 같은 웨이브에 있다고 한다).
- 팀원들은 거의 실시간으로 follow할 수 있다. 혹은 Playback을 이용해서 이력을 검토할 수 있다. 회의가 끝나더라도 웨이브를 통해 계속 대화를 이어나갈 수 있다.
- 회의록 예
- 실시간으로 공동 작업을 하여 초안을 잡고, 토의하고, 피드백을 구하는 행위를 한 곳(웨이브)에서 할 수 있다(메일을 보내고, 첨부 파일을 보내고, 다수의 복사본 - 동기화가 안 된 - 을 만드는 고생을 하지 않고).
- 예제 프로젝트
3.5 Photo sharing
3.6 Google Wave in action
비디오 보기
4. Google Wave extensions
참고문서
Stubbing consecutive calls
동일 메소드가 여러번 호출되고, 호출될 때 마다 다른 값을 반환하도록 설정하는 방법
@Before
public void before() {
...
when(articleRepository.findDeletedByOwnerHistoriesFor(targetDate))
.thenReturn(deletedByOwnerHistoryList)
.thenReturn(new ArrayList<DeletedByOwnerHistory>());
}
위의 코드 예에서 articleRepository#findDeletedByOwnerHistoriesFor(targetDate)가 첫번째 호출될 때는 deletedByOwnerHistoryList를 반환하고, 그 이후로 호출될 때는 new ArrayList<DeletedByOwnerHistory>()를 반환한다.
동일 메소드가 여러번 호출되고, 호출될 때 마다 다른 값을 반환하도록 설정하는 방법
@Before
public void before() {
...
when(articleRepository.findDeletedByOwnerHistoriesFor(targetDate))
.thenReturn(deletedByOwnerHistoryList)
.thenReturn(new ArrayList<DeletedByOwnerHistory>());
}
위의 코드 예에서 articleRepository#findDeletedByOwnerHistoriesFor(targetDate)가 첫번째 호출될 때는 deletedByOwnerHistoryList를 반환하고, 그 이후로 호출될 때는 new ArrayList<DeletedByOwnerHistory>()를 반환한다.

Prev
Rss Feed