그동안 사용하던 계정정보가 XUBUNTU 3.04 에서 XUBUNTU 14:04 LTS로 업그레이드 되면서 그래픽 설정과 관련된 정보가 훼손되어서 정상적으로 나타나지 않는 문제가 있었다. 그래서 계정을 새롭게 만들고 기존의 계정정보는 모두 소거시켰다. 그러고 나니, 이전에 마운트가 잘 되던 추가 HDD들의 정보를 볼 수 없는 문제가 발생했다.

해결은 간단하게 되었다.

$ cd /media
$ sudo chown {username}:{group} /media/{username}

명령을 내리는 것으로 처리완료!

결국은 내 계정이 마운트된 미디어들에 대한 접근권한이 없었기 때문에 발생한 문제다.

디렉토리에 대한 권한을 내 계정으로 변경하는 것으로 문제해결!


20140527 Jenkins 재시작 후 데이터 초기화 증상 해결

사내에서 사용하던 Jenkins가 구동되고 있는 서버가 정전으로 재가동 후 최초 설치상태로 초기화되는 현상이 나타났다.

멘붕!!!

Jenkins의 이런 증상을 처음 경험한 나로서는 어찌해야하는 물어볼 사람도 없고 인터넷 검색으로 뒤지기 시작한다.
그러다가 [Jenkins 관리 - 환경설정] 부분 상단에 HOME Directory 라는 항목의 값이 눈에 들어온다.

/{USER_HOME}/.hudson

이녀석! 이상하다! 내가 쓰고 있는 건 jenkins 인데!?

라는 생각과 함께 JENKINS_HOME 과 관련된 검색에 들어간다. +_+) 그러다가 아래 녀석을 찾았다.

여기서 말하는 JENKINS_HOME은 젠킨스가 실행되는 경로가 아닌, 젠킨스가 사용자 디렉토리에 생성한 ~/.jenkins 폴더를 가리키는 것이었다.
이후 이를 해결하는 방법은 어려움이 없었다. 환경설정에서 ‘홈 디렉토리Home Directory’ 항목의 오른쪽 물음표(?)를 클릭하면 JENKINS_HOME을 WAS에 설정하라는 안내를 한다.

Jenkins stores all the data files inside this directory in the file system. You can change this by either:
    1. Using your web container's admin tool to set the **JENKINS_HOME** environment entry.
    2. Setting the environment variable **JENKINS_HOME** before launching your web container.
    3. (Not recommended) modifying web.xml in jenkins.war (or its expanded image in your web container).
This value cannot be changed while Jenkins is running. This entry is mostly for you to make sure that your configuration is taking effect.

이후 문제는 쉽게해결 가능하다. 톰캣 서버의 ‘./bin’ 폴더에서 catalina.sh를 열어서

set JENKINS_HOME=/{USER_HOME}/.jenkins

항목만 추가해주고 톰캣을 구동시켜주면 끝이났다. +_+)b That's OK~!

이 문제를 해결하면서 젠킨스의 버전도 스리슬쩍 1.564 버전으로 변경했다.

데이터가 분리되어 있으니 젠킨스를 업그레이드 해도 별문제가 없을 거라고 생각했다.

찍었는데 맞았다!


 

 작업전 확인사항 

 

  • 사용자 폴더 밑에 '~/.jenkins' 라는 폴더가 있는지 확인
    • 젠킨스 설정 데이터가 저장되는 폴더다
  • 젠킨스를 구동하는 WAS의 실행환경변수로 'JENKINS_HOME'이 추가되어 있는지 확인



● 대충 훑어보는 Node.js

  • Node.js
  • Express
  • MongoDB in Node.js
  • Socket.IO
    • Long Polling.
    • RedisStore를 지정하면 레디스를 통해서 클러스터링이 가능하다.
  • 흠… @_@) 신기하게 보는구나…. 그렇게 해야 이 바닥에서 신기술들을 더욱 긍정적으로 받아들일 수 있게 되겠지…
  • 비동기 코딩패턴
    • CallBack
  • Node.js 는 잘 죽는다.
    • V8 엔진 메모리 릭memory leak
    • Catc가 안되는 에러가 나면 죽어버린다.
    • 해결책 1 - 다시 시작
      • forever
      • Supervisor
      • nodemon
      • PM2
      • 2개 이상의 node.js를 구동시키고 죽었을 때 알림을 보내도록 하고, 살릴 수 있을까?
    • 해결책 2 - process.o(‘ncaughtException’, )
      • 죽을 때 어떤 원인으로 죽었을지 모른다.
      • domainAPI를 사용한다.
  • Mocha test framework
    • 자바스크립트 테스트 프레임웤(웹/node.js 지원)
    • TDD 및 BDD 양쪽 지원
  • NewRelic
  • Passport
    • 인증모듈 제공
  • Winstone
  • Vert.x 는
    • 개념
      • JVM에서 동작
      • 고성능 네트워크 IO 서버인 netty 를 기반
      • 비동기는 지원하지만 Non blocking은 지원하지 않음
      • 동작구조는 싱글스레드(멀티스레드 지원)
      • 다양한 WAS에 Embedded 가능
    • Verticle
      • Vert.x Instance
      • 멀티스레드를 지원하기 때문에 성능이 뛰어날까?
    • 주의사항
      • HazelCast를 남용하면, Full GC Time 문제가 발생가능
  • Vert.x vs Node.js
    • 에러 추적 되고 안되고
    • 안정성이 좋고 V8 엔진 자체가 불안함
    • 웹개발 없고 express 등 웹 프레임워크 풍부함
    • 프로그래밍 언어가 다양하고 javascript
    • 비동기를 쓰레드풀을 이용해서 지원 싱글 스레드
  • 결론
    • Startup 이나 B2C 서비스는 Node.js로 시작
      • 자료 찾기 편리함
      • 자주 죽어서 문제가 될 때면 돈 벌었음
    • 기술력이 충분하고, 고성능, 고안전 서비스가 필요한 경우 Vert.x 고려
      • 기반 엔진 자체가 튼튼하여 성능과 안정성
      • 모듈 등이 적고 자료부족, 자체 기술력 높아야 함.

● 서버 사이드 레벨에서 자바 스크립트 엔진 Node.js 의 가능성과 한계성


  • 발표자 : 김호광(보이드 소프트)
  • 모바일 게임세계
    • Java 세상과 다른 히피 생태계
  • Node.js: 게임업계 열광의 이유 -> 개발속도가 빠르다.
    • Unity3D script로 node.js 통합 개발(웃음이 함께하는 발표)
    • 웹 프로그래머가 서버 프로그래머가 될 수 있다.
    • 카카오톡 게임도 이젠 월매출 50만원 시대!!
    • 시장이 ‘모’ 아니면 ‘도’
    • 개발기간은 짧아지고
    • 마케팅비용은 상승(평균 5억)
    • Protytyping이 빠른 Node.js 포텐셜 폭팍!!
    • 현실은…?
  • Node.js Live case
    • 개발환경
    • 사용자 증가
    • 서버 증설 - 인프라 증설 비용
    • 운영 헬게이트!!
    • Node.js가 이유없이 죽기 시작 - 랜덤 다운 - 가장 큰 문제구나.
    • 아이템이 다운과 함께 사라지다.
    • 새벽에 소환-라이브 디버깅 진행.
      • javascript V8 원래 서버엔진 아님
  • 튜닝포인트 1
    • 기존
      • 4 vCore, 4 nodeJS Server
    • 변경
      • 4 vCore, 2 nodeJS Server
      • 다운 21.5% 감소
    • vCore는 Hyper Thread 여러 개를 섞어 1 vCore
      • 리얼 CPU와는 다름
    • Thread 교착
      • Thread가 대기로 차게 되면 벽돌!
  • 튜닝포인트 2: 마공의 등장
    • 이기적인 클라우드 버그 이용
      • VM 생성시 Max Core 생성 후 4 vCore 생성
      • Max Core를 하면 물리서버 CPU를 차지
      • 클라우드 리소스 할당 소스 확인하여 찾은 것, OpenStack은 더 안좋다?
    • Hidden API Script
      • vCore를 2thread에서 4개로 변경
      • 급격한 리소스 사용률을 방지가능
    • 다운 15.5% 감소
  • 튜닝포인트 3
    • DB 이존성 줄임: IIS 아웃풋 캐시 (Ranking 등의 정적 데이터 처리)
      • 서비스단에서 캐싱 할건지 커널에서 캐싱할건지… 커널에서 캐싱하면 빨라짐
    • 다운 3.5% 감소
  • 삶이 지혜
    • Node.js 는 서비스 레벨에서 사용하려면 위험하다.
    • 게임 등 복잡한 로직에서는 어렵다.
    • 자신이 잘하는 언어를 사용해라.
    • 날림 Open금지
      • 디버깅
      • 플레잉 테스트 많이 해야함
      • 패키지 분석에 대한 처리
    • 서비스 운영 시나리오
      • 프로토타이핑이 빠르다는 것에 중점을 두고 사용하자.
  • Node.js 극복해야할 문제와 비전
    • 생태계는 풍성하고 좋음 -> 대세가 되어 인기가 상승, 트렌드
    • 근본적인 한계를 파악하고 사용하자.
    • Node.js와 우분투는 친분하지만 그 사이에서 생기는 상황들을 고려해야함
    • 방어직인 코딩을 해야한다.
    • 가능하면 예상한 것보다 많은 서버와 자원을 준비해둘 것.
    • 애저에서 Node.js를 잘 지원한다.
    • 잘 쓰면 성공하고, 못쓰면 주화입마.
  • 트랜잭션 처리에 대해서 미숙하다.
  • 게임에서는 DB에 요청을 많이 날린다.
  • 몽고DB는 로그 저장용으로만 사용.
  • 다운로드 받아서 그대로 사용하지 말고 IntelCompiler를 이용해서 컴파일해보라. 20% 정도 빨라짐.
  • 결론: 초딩은 무섭다!

● Socket.io 를 활용한 분산 채팅 서버 개발사례 공유




  • 발표자: 김요한 차장(LG CNS)
  • Transaction
    • 해이 사례
      • 링크드인: 모바일
      • 그루폰: CDN
      • 페이팔: 펑셔널 그리고 비동기 코딩
        • 문제가 생긴 것 패치 기다림
      • 이베이: 프론트는 노드, 백엔드 서비스는 그대로 유지
    • 언어적인 패러다임의 변환: 객체지향 -> Functional programming
    • 작은 부분부터 천천히 진행
    • 페이팔 적용 사례
    • 동시젒속자가 적은 초반에는 자바가 성능이 좋지만, 리퀘스트가 많을수록 효과적
    • vert.x 나 톰캣이 더 빠르기도 하다. CPU나 OS에 따라 다르기도 하다.
    • 싦무에서 성능에 민감한 부분은 C 코드로 개발한다.
    • 자바와 Node.js의 성능비교는 MySQL과 NoSQL 비교와 같다.
    • 250-500ms node process start/stop time
    • 장애가 발생하면 다시 시작
      • Forever
    • 배포시간이 줄어드는 건 상당한 장점이지만, 소프트 셧다운을 고려해서 개발해야 한다.
      • 100% 트랜잭션을 보장해야하는 경우에는 고려하지 마.
    • UI의 템플릿을 보여주는 경우
  • 프레임워크
    • Kraken.js -> Express 확장
    • Mean.io
    • Framework가 항상 좋은 것은 아니다.
  • 비즈니스를 먼저보고 프레임워크 적용을 고려

● Node.js 로 해보는 클라우드 서비스

  • 발표자: 김영욱 차장(한국 마이크로소프트 기술 에반젤리스트)


마이크로 소프트에서 Node.js를 통해서 클라우드 시작에 대한 점유율을 높이려고 하는 것으로 보인다.
.Node.js를 IntelCompiler로 재컴파일 하면 성능이 20% 정도 상승한다는 이야기가 이전 시간에 있었다.
.Azure를 앞세워 클라우드 시장에 본격적으로 진입한 마이크로소프트의 앞날은 과연 어떨까?







JDK8 의 람다 표현식에 대해서 어떤 글보다 잘 설명되어있다고 추천된 글.

http://blog.hartveld.com/2013_03_01_archive.html

JDK8 에서 가장 큰 특징이라면 Lamda expression 이라고 하는데...

슬슬 컴퓨터에 JDK8 설치하고 람다 표현식에 대해서 학습을 진행해야겠다.


그런데... 의욕이 안생겨. Orz...

회사 그만두고 노는 동안 살펴볼 수 있을까나?

공부하면서 저 글 번역해볼까?



쿠팡의 개발자 면접절차와 관련된 질문에 대해서는 더이상 답변드리지 않겠습니다.

저는 더이상 쿠팡에 관심이 없구요,

이미 떨어진지 1년이 넘은 상태라,

어떤 과정으로 면접이 진행되는지 알지 못합니다.


내부 추천을 받았다면, 추천을 해준 이에게

공채 등의 지원을 통해서 하시는거라면, 인사담당자에게

물으시는 것이 가장 효과적인 방법이라고 생각합니다.




쿠팡 기술면접에서 떨어진지 2달 정도 되었다.

이 이야기를 쓸까말까 잠시 고민을 좀 했다. 탈락된 직후에는 매우 감정적인 상태였기 때문에 자제했지만, 최근에 술마시고 이성을 잃고 격하게 반응하는 글을 쓴 적이 있다. 부끄럽다잉.

그러나 지금은 무덤덤한 상태이기 때문에 써도 되겠다 싶어서 이렇게 정리한다.

안티팡의 수장으로서, 안티팡Anti-Pang의 구성원들이 늘어나고 있는 현재 상황은 무척 고무적인 일(?)이지만, 나처럼 의욕상실과 무력감에 빠져서 허우적거리는 개발자들이 늘어나기를 바라지 않는 마음에 쓰기로 했다. 쿠쿠쿠.


내가 한참 부족한 탓에 떨어진 거긴 하지만…


쿠팡 입사에 관심을 가지고 있는 개발자들이 많지만, 정작 입사를 위해서 준비해야할 것을 모르는 이들이 많다.
그래서 200명 면접보고 20여명이 붙을까말까한 멋진 합격률을 보이고 있기에 조금이라도 보탬이 될까하고 이 글을 쓴다.

이건 어디까지나 내 개인적인 견해다.
지금 당장 쿠팡에는 자기네 내부 수요를 충족시킬만큼의 인력은 확보된 상태이기 때문에 성급히 인력을 확충할 필요가 없다.
그래서 사람을 가려뽑아도 된다. 추측하건데, 이제는 자신들 업무에 필요한 개발자보다는 기업 성장을 위해 필요한, 좋은 실력을 갖춘 개발자를 선별하는 쪽에 중점을 두고 있기 때문에 어지간한 실력을 갖추지 않으면 떨어질 가능성이 높다.

안티팡 탄생예고.

초기에 쿠팡에 들어간 사람들조차 ‘다시 입사절차 밟고는 못들어갈거야.’라고 이야기할 정도니까.

 그런 입사절차를 통과하려면 열심히 해줘야 하지 않겠나? 

쿠팡에 들어가고 싶다면 말이다.




내가 볼 때의 입사절차는,

코딩테스트(24시간) -> 전화면접 -> 기술면접 -> 임원면접

아, 참고로. 쿠팡에서 멀티스레드와 동시성에 관한 부분에 관심을 가지고 있다. 그러니 http://docs.oracle.com/javase/tutorial/essential/concurrency, http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/package-summary.html  

등을 살펴보면서 기본적인 이해를 가지고 임하기 바란다.

빅데이터는 그네들도 아직 제대로 해본 적 없으니 물어볼 가능성은 적다.

이었는데, 최근에는 24시간 코딩 테스트가 사라지고 전화면접 테스트가 진행된다고 한다. 찾아보세요.




전화면접은 2명의 면접관이 전화해서 30분 정도 진행되었다.
생각해보지 않았던 것들을 물어본다. 당황하지 말고 질문을 곱씹으면서 성심성의껏 대답해라.
붙고떨어지고는 면접관이 결정하는 거니까.




이 테스트를 통과한 사람들에게는 쿠팡건물 18층에서 진행되는 기술면접을 진행한다. 다수의 응시자가 각기 다른 면접장에서 동시에 면접이 진행된다. 기다리는 동안 살짝 뻘쭘하다.

이때, 교통비조로 10만원의 쿠팡상품권이 나온다.
3개월에 한번씩 응시가능하다고 쳤을 때, 일년에 네번 도전하면 40만원의 쿠팡캐쉬를 얻을 수 있다!
물론, 전화면접을 통과하고 1차 기술면접에 도달했을 때 이야기다.

3명의 면접관, 각 면접관과 1대 1로 각각 30분씩, 총 90분의 면접을 보는 기술면접이다.

중요한 건, 당황하지 말고 면접관의 질문을 잘 듣고 필요한 정보가 있다면 물어보고 아는대로 대답하는 것이다.
나는 떨어졌으니까, 내 말을 너무 믿지 말자.


이미지 출처: http://pragmaticstory.com/1819


첫번째는 간단한 알고리즘 문제를 주고 손코딩으로 화이트보드에 풀어보라고 한다. 

주어진 문제를 차분하게 종이에 끄적이면서 문제풀이를 해본적이 없고 IDE의 Auto completation에 익숙한 개발자에게는 참 낯선방식 중 하나가 될 것이다. 이에 대해서 미리미리 준비를 해두기 바란다.

손코딩뇌컴파일눈디버깅 - 하광성
http://www.slideshare.net/kwangswei/ss-30510586


두번째는 프로그래밍 개론. 이 때는 해외파 CTO(로 추측한다)와 통역담당자가 함께 들어왔다. 어색어색….
프로그래밍에 대한 이야기를 한다. 객체지향이 뭔지, 지금 4세대 언어가 널리 퍼진 이유가 뭔지 등등…

궁금한 거 있냐고 이야기할 때, 왜 iBatis를 쓰고 있는지 물어보지 마라. 쿠팡에서 사용하고 있는 올드한 기술들에 대해서 묻지 말자. 역정낸다.


세번째는 이력서를 중심으로 해서 자신이 진행했던 프로젝트에 대해서 화이트보드에 UML로 작성하고 이를 설명하도록 한다. 이 역시 연습하지 않으면 힘들거다.

UML 써본 적도 없고… 듣기로는 쿠팡 내부에서도 딱히 많이 쓰지도 않는 듯하고… 뭐 그렇다.


쿠팡에 들어가고 싶으면,
쿠팡에서 진행하는 절차에 맞춰 철저히 연습하고 임해라.
그러면 당신은 10%의 합격률에 들 수 있을 것이다.

난 쥐쥐.

난 할만큼 했다고 생각해. 이제는 내가 들어가고 싶다고 해서 들어갈 수 있는 레벨의 회사가 아니야.
이솝우화의 '포도나무'에 걸린 포도를 보며 투덜거리는 여우처럼 보여지더라도,
안될성 싶은 건 포기하고 다른 걸 하는 게 낫다고 생각하니까.



최근에 손코딩과 관련된 행사에 참여를 했었는데 꽤 재미나긴 하더라.
하지만, 이를 통해 어딘가 들어가려면 오랜시간 투자를 해야하는거지.

문득, 나는 개발이 적성에 맞지 않는건가?

하는 생각을 가지게 만드는 좋은 계기가 되었다.

이왕이면 탈락된 사람들에게,

무엇 때문에 떨어졌는지에 대한 피드백을 함께 제공한다면 안티팡 발생비율은 줄어들텐데...
하지만 안그러겠지.



+ Recent posts