Whiteship's Note

'모하니?'에 해당되는 글 934건

  1. 2009.11.30 [웹 사이트 속도 향상 베스트 프랙티스 8] 자바스크립트와 CSS 외부화하기 (3)
  2. 2009.11.29 오늘은 내가 요리사 - 탕수육 (6)
  3. 2009.11.27 봄싹 사이트 1.0 M1 오픈 임박!! (4)
  4. 2009.11.26 그래!! 이정도는 해야 앵무새라고 할 수 있지! (2)
  5. 2009.11.25 [웹 사이트 속도 향상 베스트 프랙티스 7] CSS expression 사용하지 않기
  6. 2009.11.24 애노테이션 VS XML, 상속, static method call, ... (4)
  7. 2009.11.24 [웹 사이트 속도 향상 베스트 프랙티스 6] 스크립트를 바닦에 두기
  8. 2009.11.24 봄싹을 알리러 갑니다. (6)
  9. 2009.11.23 한 순간... (8)
  10. 2009.11.23 [웹 사이트 속도 향상 베스트 프랙티스 5] 스타일시트를 HEAD에 넣기 (2)
  11. 2009.11.21 봄싹에서 자바 코드가 차지하는 비중은 1/3 (2)
  12. 2009.11.21 [피아노] 아내와 연탄곡 - 말할 수 없는 비밀 (2)
  13. 2009.11.19 [웹 사이트 속도 향상 베스트 프랙티스 4] 컴포넌트 압축하기(Gzip Components)
  14. 2009.11.18 [웹 사이트 속도 향상 베스트 프랙티스 3] Expires 또는 Cache-Control 헤더 추가하기
  15. 2009.11.17 [웹 사이트 속도 향상 베스트 프랙티스 2] CDN(Content Delivery Network) 사용하기 (2)
  16. 2009.11.17 인터넷의 의미 - 친절
  17. 2009.11.17 I have been serializing my packages.
  18. 2009.11.16 [웹 사이트 속도 향상 베스트 프랙티스 1] HTTP 요청 최소화 하기 (4)
  19. 2009.11.16 [봄싹 축하] 제 9회 다음 DevDay 대상! (다음 에디터 플러긴 WordAssist) (6)
  20. 2009.11.13 [WCG 2009] 요즘 하고 있었군요. (4)
  21. 2009.11.12 [코딩] 데이터를 요청하지 말고 작업을 요청하라. (2)
  22. 2009.11.10 [하이버네이트] @BatchSize로 쿼리 갯수 대폭 줄이기
  23. 2009.11.09 [봄싹] 커뮤니티 지원 요청 실패 (12)
  24. 2009.11.03 [스노우보딩] 오예~ 09/10 시즌 시작이구나!
  25. 2009.11.02 [Atlassian] 이직 계획 (2)
  26. 2009.10.31 [하이버네이트] 컬럼 타입은 어떻게 명시하는게 좋을까?
  27. 2009.10.29 [봄싹] XP 적용 시나리오 3. 개발하기
  28. 2009.10.29 [봄싹] XP 적용 시나리오 2. 배포 계획하기
  29. 2009.10.29 [봄싹] XP 적용 시나리오 1. 스토리 만들기
  30. 2009.10.28 창의적인 일에 인센티브가 어떤 작용을 할까? (6)

[웹 사이트 속도 향상 베스트 프랙티스 8] 자바스크립트와 CSS 외부화하기

모하니?/Coding : 2009. 11. 30. 12:38


http://developer.yahoo.com/performance/rules.html#external

Make JavaScript and CSS External

tag: javascript, css

많은 성능관련 규칙들이 어떻게 관리중인 컴포넌트들을 외부화 하는지를 다루고 있다. 하지만, 그 전에 보다 기본적인 질문에대해 생각해봐야 한다. 자바스크립트와 CSS는 외부 파일에 들어있어야 하는가 아니면 페이지 자체에 포함되어 있어야 하는가?

실제로는 외부 파일을 사용함으로써, 브라우저가 자바스크립트와 CSS를 캐시하여 페이지 로딩 속도를 향상시킬 수 있다. HTML 문서에 들어있는 자바스크립트와 CSS는 매번 HTML 문서를 요청받을 때마다 다운로드 된다. 이렇게 하면 필요한 HTTP 요청을 줄일 수 있기는 하지만, HTML 문서 크기를 증가시킨다. 반면에, 만약 자바스크립트와 CSS를 외부 파일로 두고 브라우저가 캐시할 수 있게 하면 HTML 문서 사이즈도 줄이고 HTTP 요청 수의 증가도 없다.

그렇다면, 중요한 것은 요청되는 HTML 문서의 양에 비해 상대적으로 캐시 해야하는 자바스크립트와 CSS 컴포넌트 빈도이다. 수치화하기 어려울 수 있지만, 이 요소는 다양한 척도를 통해 계산할 수 있다. 만약 사이트의 사용자가 세션 당 여러 페이지를 요청하고 페이지의 대부분에서 동일한 스크립트와 스타일시트를 재사용한다면, 외부 파일 캐시를 통해 얻을 수 있는 잠재적인 장점이 더 크다.

대부분의 웹 사이트는 이러한 척도 중간에 놓여있다. 그러한 사이트에서 최선은 선택은 보통 자바스크립트와 CSS를 외부 파일로 배포하는 것이다. 페이지에 포함시키는 것이 더 좋을 수 있는 예외로 야후의 첫 페이지와 마이 야후 같은 홈 페이지가 있다. 홈 페이지는 세션당 페이지 뷰가 거의 없다. (대부분 하나다) 따라서 자바스크립트와 CSS를 페이지에 포함시키는 것이 최종 사용자 응답 시간을 줄일 수 있다.

여러 페이지 뷰로 연결되는 첫 페이지의 경우, 외부 파일을 통해 캐시 장점을 이용하는 것 말고도 HTTP 요청을 줄이는 기술들이 있다. 그런 기술 중 하나가 자바스크립트와 CSS를 첫 페이지에 두지만, 외부 파일을 페이지 로딩이 끝난 뒤에 동적으로 다운로드하는 것이다. 그 다음 연쇄적으로 호출되는 페이지들은 이미 브라우저의 캐시된 외부 파일을 참조할 것이다.

top

  1. Favicon of http://blog.outsider.ne.kr BlogIcon Outsider 2009.12.01 13:18 PERM. MOD/DEL REPLY

    이거 제목 잘못된듯... 지난번 제목 다시올라갔네... 8번이어야 되는데...
    css expression피하기인데 외부파일얘기나와서 먼가했는데.. ㅎㅎ

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2009.12.01 13:25 신고 PERM MOD/DEL

    호곡 감사합니다.
    제목이 넘 길어서 이전 글에서 복사해오다가 이런 일이;;
    C&P의 병폐로군요.ㅋ

    Favicon of http://blog.outsider.ne.kr BlogIcon Outsider 2009.12.01 13:37 PERM MOD/DEL

    C&P.. ㅎㅎ 은근 자주하게 되는 실수중 하나지.. ㅋ

Write a comment.


오늘은 내가 요리사 - 탕수육

모하니?/그냥 놀아 : 2009. 11. 29. 21:08


주말은 원래 집청소와 요리가 제 담당입니다. 주중에는 아내가 다 해주지만, 주말 만큼은 제가 하려고 노력중이죠. 하지만;; 생각만큼 많이 도와주진 못합니다.ㅋ 할 줄 아는게 있어야죠.ㅋㅋㅋ 결혼하기 전에 라면 끓여먹을줄만 알았지 전기밥솥으로 밥하는 방법도 몰랐으니 말이죠.

어찌됐든, 오늘의 요리는 탕수육이었습니다. 물론 아내가 메인 주방장이었고 저는 보조였습니다.

012


만들면서는 이 손 많이 가는걸.. 그냥 사먹고 말지.. 괜히 탕수육을 먹는다고 그랬나.. 했었는데, 직접 만든 탕수육을 먹어보니 감회가 새롭더군요. 캬캬캬 재밌고 맛있었습니다.

top

TAG 탕수육
  1. Favicon of http://ihoney.pe.kr BlogIcon 허니몬 2009.11.29 23:56 PERM. MOD/DEL REPLY

    ^^ 맛있어보이네요. ㅎㅎ.

    ㅡㅅ-)/ 주말도 끝나가네요. 힘찬 월요일 시작하세요.

    Favicon of http://whiteship.me BlogIcon 기선 2009.11.30 09:52 PERM MOD/DEL

    감사합니다!
    좋은 한 주 되세요~

  2. Favicon of https://dazzilove2.tistory.com BlogIcon dazzi 2009.11.30 10:08 신고 PERM. MOD/DEL REPLY

    와우.. 아내분이 재주꾼이시군요.~~
    난 요리하라그러면 겁부터 나던데. ㅠㅡ

    Favicon of http://whiteship.me BlogIcon 기선 2009.11.30 10:13 PERM MOD/DEL

    저거보단 삼계탕이 기가 막혀요.ㅋㅋ

  3. Miracle 2009.11.30 10:08 PERM. MOD/DEL REPLY

    아... 배고프네 -ㅁ-;

    Favicon of http://whiteship.me BlogIcon 기선 2009.11.30 10:13 PERM MOD/DEL

    나중에 성윤이랑 놀러오세요.ㅋ

Write a comment.


봄싹 사이트 1.0 M1 오픈 임박!!

모하니?/Coding : 2009. 11. 27. 08:35


현재 봄싹 사이트(0.9)에서 보다 더 스터디 관리 기능을 보강했으며, 위키 디자인을 개선하여 편의성을 높였습니다. 트위터와 이메링을 비롯한 다양한 알림 서비스도 이용하실 수 있습니다. 특히 구글 토크를 사용하시는 분들은 스터디나 모임이 있을 때 메시지를 받을 실 수 있는것은 기본이고, 채팅창에서 study? meeting? 으로 현재 진행중인 스터디와 모임 정보를 확인하실 수도 있습니다. 홈 페이지에는 낙서장과 공지 사항을 추가했으며 스터디-모임 목록, 위키 목록으로 바로 이동할 수 도 있습니다. 또한 컨텐츠 작업으로, 스프링 3.0 레퍼런스 번역이 활발히 진행중입니다. 위키를 더 개선하고나면 저도 본격적으로 봄싹 컨텐츠 만들기 작업에 돌입할 생각입니다. 스프링소스 블로그 번역, 각종 웹 아티클 번역 자료를 봄싹 위키에 정리할 겁니다. 아무래도 제 블로그 보다는 위키가 찾아보기 편하니까요. (블로그에도 올리긴 할 겁니다.ㅋ)

내용적인 면이나 기능적인 면을 떠나서 이번 배포의 가장 큰 주안점은 바로 디자인입니다.

불과 두 달 사이에 획기적으로 달라진 봄싹 1.0 M1은 내일 낮에 오픈합니다.


Develop with passion! Evolve with SpringSprout!!




top

TAG 1.0 M1, 봄싹
  1. Favicon of http://blog.lckymn.com BlogIcon Kevin 2009.11.28 18:59 PERM. MOD/DEL REPLY

    오! 공개되었나요?
    한번 가봐야겠습니다. :)

    Favicon of http://whiteship.tistory.com BlogIcon 기선 2009.11.28 21:19 PERM MOD/DEL

    넵!!

  2. Favicon of http://blog.lckymn.com BlogIcon Kevin 2009.11.28 19:09 PERM. MOD/DEL REPLY

    가보고 왔습니다. 깔끔하고 이쁜데요. :)
    M1 버전 공개를 축하드립니다.

    Favicon of http://whiteship.tistory.com BlogIcon 기선 2009.11.28 21:20 PERM MOD/DEL

    헤헷 감사합니다. :)

Write a comment.


그래!! 이정도는 해야 앵무새라고 할 수 있지!

모하니?/Watching : 2009. 11. 26. 11:48




앵무새인지.. 뭔지... 녹음기가 달려있나?ㅋㅋ



top

TAG 앵무새
  1. Favicon of http://blog.lckymn.com BlogIcon Kevin 2009.11.26 17:11 PERM. MOD/DEL REPLY

    호주산 금조 (Lyrebird) 군요.
    금조의 금은 현악기인 '금'과 글자가 같습니다. 가야'금' 같은것 말이죠.

    첫 영상에서 말소리 흉내는 진짜가 아니라
    해당 프로그램 선전용으로 만든거 같군요.

    그래도 실제로 이정도는 합니다.
    https://www.youtube.com/watch?v=VjE0Kdfos4Y
    https://www.youtube.com/watch?v=O1kl7w3sdDE

    Favicon of http://whiteship.me BlogIcon 기선 2009.11.26 18:03 PERM MOD/DEL

    금조였군요.
    신기한 새네요.. 말소리를 따라한게 진짜라면;;
    동물원에서 돈 좀 벌 수 있을것 같아요.ㅋ

Write a comment.


[웹 사이트 속도 향상 베스트 프랙티스 7] CSS expression 사용하지 않기

모하니?/Coding : 2009. 11. 25. 10:56


http://developer.yahoo.com/performance/rules.html#css_expressions

Avoid CSS Expressions

tag: css

CSS expression은 CSS 속성을 동적으로 설정할 수 있는 강력(하면서도 위험)한 방법이다. IE 버전5 부터 지원되기 시작했다. 예를 들어, CSS 표현식을 사용하여 배경 색을 매 시마다 다르게 설정할 수 있다.

      background-color: expression( (new Date()).getHours()%2 ? "#B8D4FF" : "#F08A00" );

여기 보시다시피, expression 메서드는 자바스크립트 표현식을 받아들인다. CSS 속성은 자바스크립트 표현식을 계산한 결과로 설정된다.. expression 메서드는 다른 브라우저에서는 무시된다. 따라서 여러 브라우저에 걸쳐 일관적인 경험을 제공하고자 할 때 IE에 속성을 설정하는 방법으로 유용하다.

expression의 문제는 사람들이 예상한 것보다 훨씬 빈번히 계산된다는 것이다. 페이지가 렌더링 되고 크기 조절이 될 때에만 계산되는 것이 아니라, 페이지를 스크롤 하거나 사용자가 페이지 위에서 마우스를 움직일떄에도 계산한다. CSS 표현식에 카운터를 추가하여 CSS expression을 얼마나 계산했는지 추적할 수 있다. 마우스를 페이지에서 움직이면 거의 10,000 번이 넘게 계산을 수행한다.

CSS expression 계산 횟수를 줄일 수 있는 방법은 딱 한 번만 expression를 수행하도록 하는 것이다. 처음 expressio을 계산할때 stype 속성을 CSS expression 대신 명시적인 값으로 교체한다. 만약 스타일 속성이 반드시 페이지가 살아있는 동안 동적으로 바뀌어야 한다면, CSS Css expression 대신 이벤트 핸들러를 사용하는것도 하나의 대안이다. 만약 반드시 Css expression을 사용해야 한다면,수 천번 계산될 거라는 것과 그로인해 페이지 성능에 영향을줄수 있다는 것을 염두하라.
top

Write a comment.


애노테이션 VS XML, 상속, static method call, ...

모하니?/Coding : 2009. 11. 24. 14:20


봄싹 그룹스에서 애노테이션과 XML에 대한 논쟁이 어제 낮부터 오늘 낮까지 24시간 동안 불이 날 정도로 이어지고 있습니다. 하지만 애노테이션은 XML 하고만 비교당할 수 있는게 아닙니다.

스프링 테스트는 어떤가요?  이건 "애노테이션 VS 상속"의 문제입니다.
스프링 컨트롤러는 어떤가요? 그것도 "애노테이션 VS 상속"의 문제입니다.
Mockito의 @Mock은 어떤가요? 이건 "애노테이션 VS static method call"의 문제 아닐까요?

이렇게 여러 기술(?)과 비교 당할 수 밖에 없는 애노테이션이 저는 불쌍하고 애처롭습니다.

애노테이션아. 넌 왜 그렇게 유능해서(?).. 여러명한테 동시에 비교를 당해야 하는거니? 불쌍해서 봐줄수가 없구나.. 흑흑..
top

  1. Favicon of http://blog.lckymn.com BlogIcon Kevin 2009.11.24 15:20 PERM. MOD/DEL REPLY

    이제는 getter()와 setter() 뿐 아니라
    constructor, toString(), hashCode(), equals() 는 물론이고
    try-catch블록하고도 비교당하게 생겼습니다. :)
    http://projectlombok.org/

    근데 XML은 과거 J2EE에서 좀 과용내지 남용된 면이...

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2009.11.24 15:38 신고 PERM MOD/DEL

    와우.. 완전 멋지네요!!

    Favicon of http://scroogy.tistory.com/ BlogIcon 스쿨쥐 2009.11.24 16:31 PERM MOD/DEL

    +_+ 엄청나네요... 정말 멋집니다...

  2. 자바짜바 2009.11.25 00:18 PERM. MOD/DEL REPLY

    헐... 롬복, 대단하네요, 저런 생각을 했단 자체가... -_-;;

Write a comment.


[웹 사이트 속도 향상 베스트 프랙티스 6] 스크립트를 바닦에 두기

모하니?/Coding : 2009. 11. 24. 11:24


http://developer.yahoo.com/performance/rules.html#js_bottom

Put Scripts at the Bottom

tag: javascript

스크립트가 야기할 수 있는 문제는 병렬적인 다운로드를 막는다는 것이다. HTTP/1.1 표준은 브라우저가 호스트 이름당 두 개 이상의 컴포넌트를 병렬적으로 다운로지 하지 않도록 제안하고 있다. 만약 이미지를 여러 호스트 이름에서 제공한다면, 병렬적으로 두 개 이상의 다운로드가 발생하게 할 수 있다. 하지만, 어떤 스크립트를 하나 다운로드 할 때, 브라우저는 심지어 다른 호스트 이름에 있는 것이라 하더라도, 어떠한 다운로드도 시작하지 않는다.

어떤 상황에서는 스크립트를 바닦으로 옮기는 것이 쉽지 않을 수 있다. 예를들어, 만약 스크립트가 document를 사용하여 페이지의 내용 중 일부를 채우는 것이라면 페이지 하단으로 옮길 수가 없다. 또한 스코프와 관련된 이슈도 있을 수 있다. 대부분의 경우, 이런 상황에 대한 차선책이 있기 마련이다.

보통 자주 사용하는 차선책으로 지연된(deffered) 스크립트를 사용하는 방법이 있다. DEFER 속성은 해당 스크립트가 document.write를 가지고 있지 않다고 알려주며 브라우저가 계속해서 랜더링을 할 수 있는 단서가 된다. 불행히도, 파이어폭스는 DEFER 속성을 지원하지 않는다. IE에서는 스크립트를 지연시킬 수 있지만, 원하는 만큼은 아니다. 만약 스크립트를 지연시킬 수 있다면, 페이지의 바닦으로 옮길 수도 있을 것이다. 그렇게 하면 웹 페이지의 로딩 속도가 더 빨라질 것이다.
top

Write a comment.


봄싹을 알리러 갑니다.

모하니?/Planning : 2009. 11. 24. 10:47


http://www.ibm.com//developerworks/kr/event/seminar/dwlive_1205/index.html
http://www-903.ibm.com/kr/event/seminar/seminar.jsp?seminar_id=440

오늘 저녁에는 KSUG 모임에 가서 봄싹 사이트 개발과 관련된 내용을 요약해서 발표합니다.

다음주 토요일에는 한국 IBM "웹 개발 다반사"라는 행사에서 봄싹에 대해 발표 하고자 제의한 상태입니다. 페차쿠차 형식으로 발표를 진행한다는데.. 뭔지 다들 아시겠죠? 한 장을 20초 내로 넘기면서 총 20장 정도로 약 6.7분간 발표하는 독특한 발표형식입니다.

내년 봄에 날이 좀 따뜻해지기 시작하면, 봄싹 세미나를 할 계획을 가지고 있는데, 위 두 가지 활동은 그 사전 준비에 해당하는 활동이라고 볼 수 있습니다. 이밖에도 각종 행사에 봄싹 타이틀을 걸고 출전할 계획도 가지고 있습니다.

봄싹은 더이상 스터디만 하는 커뮤니티가 아닙니다. 온라인에서 잡담만 나누는 커뮤니티도 아닙니다. 이미 올해 중반부터는 스터디 보다는 개발에 더 많은 비중을 두고 있고, 현재도 스터디 계획 못지 않게 여러가지 개발 계획을 가지고 있습니다. 개발 뿐인가요? 번역과 베타리딩에 대한 계획도 있고, 각종 대회 출전 계획도 있습니다. 모임의 형태가 완전히 달라졌습니다. 한마디로 진보했습니다. 그리고 그 속에서 팀원들의 스킬도 여러 면에서 향상되고 있습니다. 단순히 개발 스킬 뿐 아니라, 커뮤니테이션 스킬과 발표 스킬 그리고 운영 능력을 키우고 있습니다.

이러한 발전을 이룩한건 전부 다 봄싹 팀원들이 각자 열심히 노력한 결과이자 과정이며, 그것들을 여과나 포장없이 순수하게 공유하고 받아들이는 팀원들의 마인드가 중요했다고 생각합니다. 이러한 발전 속에서 기술적으로 혹은 문화적으로 어떠한 일들이 있었는지 내용들을 정리해서 발표해야겠습니다.

궁금하신 분들은 KSUG는 장소가 협소하니, 다음주 "웹 개발 다반사 행사"에서 뵐 수 있을지도;

ps: 아직 발표 주제로 채택도 안 됐는데 이렇게 써도 될라나.ㅋㅋㅋ

'모하니? > Planning' 카테고리의 다른 글

백기선's 2010 Weekly Report - 2/23  (2) 2010.02.23
목표 실천은 진행 중  (12) 2010.02.17
백기선 2010 목표  (12) 2010.02.15
봄싹 Career Path  (6) 2009.12.17
이번주 토요일 IBM dW "웹 개발 다반사"  (2) 2009.12.03
봄싹을 알리러 갑니다.  (6) 2009.11.24
[Atlassian] 이직 계획  (2) 2009.11.02
[ToDo] 20091016  (0) 2009.10.16
[ToDo] 오늘 할 일 - 할일(예상 소요 시간)(실제 소요 시간)  (4) 2009.10.15
2009년 마무리로 할 일  (4) 2009.10.08
9월에 할 일 정리  (10) 2009.08.31
top

  1. Favicon of https://helols.tistory.com BlogIcon is윤군 2009.11.24 12:01 신고 PERM. MOD/DEL REPLY

    아멘;;;

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2009.11.24 14:41 신고 PERM MOD/DEL

    너가 좀 해

  2. 처루 2009.11.24 12:57 PERM. MOD/DEL REPLY

    하루 빨리 참여하고 싶은데, 쉽지 않네요. 이직한지 얼마 지나지 않아서 적응하느라 고생중이예요. ㅋ / 굉장히 참여하고 싶은 곳으로 점점 바뀌고 있네요. 힘내세요!

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2009.11.24 14:41 신고 PERM MOD/DEL

    넵 응원 감사합니다~

  3. Favicon of http://nije.pe.kr BlogIcon 김재진 2009.11.25 08:56 PERM. MOD/DEL REPLY

    아우 좀 쉬라니깐요 ㅎㅎㅎ 화이팅!!

    Favicon of http://whiteship.me BlogIcon 기선 2009.11.25 10:37 PERM MOD/DEL

    다음엔 너랑 성윤이가 좀 해~

Write a comment.


한 순간...

모하니?/Thinking : 2009. 11. 23. 23:43


독방에 틀어박혀 미친듯이 개발만 하고 싶다는 생각이 들어서 와이프에게 물어봤다.

"자기야.. 나 휴가내고, 한 달만 미친듯이 개발만 하면 안 될까?"

참.. 내가 생각해도 어이가 없는 질문이기는 하다. 아내가 현명하게 대처해줘서 고마울 뿐이다.

한순간 가장으로써의 의무를 망각했던 것 같다. 하고 싶은 걸 하는 건 좋치만 중용은 지켜야겠다.

일단은 번역이 우선인가... 에흄;
top

  1. Favicon of http://blog.lckymn.com BlogIcon Kevin 2009.11.24 00:31 PERM. MOD/DEL REPLY

    한가지만 하다가는 빅뱅이론에 나오는 쉘던처럼 될지도 모릅니다... :)

    사실 한가지만 하는거는 그 한가지 문제를 해결하는데도
    별로 좋지 못한 생각 같습니다.
    며칠전에 제 블로그에 쓴 글에서도 언급하긴 했는데...
    저는 프로그래밍 관련 혹은 소프트웨어 디자인 관련
    문제 해결 방법이 운동하다가, 설거지하다가, 잠 자려고 누웠다가
    심지어는 꿈속에서도 떠오르곤 합니다. :)

    두뇌도 휴식이 필요하고, 두뇌의 다른쪽 부분도
    사용을 해주는게 좋은거 같아요.

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2009.11.24 00:36 신고 PERM MOD/DEL

    아. 말씀을 듣고보니; 저도 그런 경우가 종종 있어요.

    그런데 아마도 그런 일이 생기는 건, 머릿속에서도 개발이 끝나지 않아서 그런게 아닐까 싶기도 해요. ㅋㅋ

  2. Favicon of http://toby.epril.com BlogIcon 토비 2009.11.24 07:44 PERM. MOD/DEL REPLY

    한달간 미친듯이 번역만?

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2009.11.24 10:51 신고 PERM MOD/DEL

    번역은 정말 한달간 미친듯이해서 끝내는게 효율적일듯;;

  3. Favicon of http://nije.pe.kr BlogIcon 김재진 2009.11.24 08:22 PERM. MOD/DEL REPLY

    한달간 코딩을 일절하지 않고 형수님이랑 놀아보세요 그것도 나쁘지 않을 듯

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2009.11.24 10:50 신고 PERM MOD/DEL

    해외여행(제주도, 보라카이, 마닐라), 피아노, 영화, 스노우보드, 스윙 댄스, 수영, 이제는 닌텐도Wii까지..

    우린 열심히 잘 놀고 있다구!!

  4. Favicon of https://helols.tistory.com BlogIcon is윤군 2009.11.24 12:01 신고 PERM. MOD/DEL REPLY

    전 지금 심정으론 한 두달정도쯤..;;;
    필요함; ㅠㅠ

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2009.11.24 14:42 신고 PERM MOD/DEL

    두 달간 어디서 합숙이라도 할까;;;ㅋㅋ

Write a comment.


[웹 사이트 속도 향상 베스트 프랙티스 5] 스타일시트를 HEAD에 넣기

모하니?/Coding : 2009. 11. 23. 15:53


http://developer.yahoo.com/performance/rules.html#css_top

Put Stylesheets at the Top

tag: css

야후에서 성능 조사를 하는 동안, 스타일 시트를 문서의 HEAD로 옮기는 것이 페이지 로딩을 더 빠르게 해준다는 것을 발견했다. 스타일 시트를 HEAD에 놓음으로써, 페이지 랜더링이 더 빨라지기 때문이다.

성능을 고려하는 화면 엔지니어는 페이지 로딩이 빨라지길 원한다. 즉, 브라우저가 어떤 내용이던지 가능한 빨리 보여주길 원한다. 이것은 느린 인터넷 연결을 사용하는 사용자와 보여줄 내용이 많은 페이지에서 특히 중요하다. 진행 상태 표시와 같은 시각적인 피드백을 주는 것의 중요함에 대해서는 설문조사가 잘 되어 있고 잘 문서화 되어 있다. 우리의 경우 HTML 페이지가 곧 진행 상태 표시기이다! 브라우저는 페이지 헤더를 빠르게 로딩할 때 네비게이션 바, 화면 윗 부분의 로고 등 모든 시각적인 피드백을 해당 페이지를 기다리는 사용자에게 제공한다. 그런식으로 전반적인 사용자 경험을 향상시킬 수 있다.

스타일시트를 문서의 바닥으로 넣는 것의 문제는 IE를 포함한 대부분의 브라우저에서 빠른 랜더링을 방해하기 때문이다. 이들 브라우저는 문서의 스타일이 바뀌면 페이지의 요소들을 다시 그려야 하는 것을 방지하기 위해 랜더링을 막아둔다. 그 때 사용자는 하얀색의 빈 화면에 머물러 있게 된다.

HTML 표준은 분명히 스타일시트를 페이지의 HEAD에 포함시킬 것을 기술하고 있다. "[LINK]는 얼마나 많이 있던 문서의 HEAD 부분에만 있어야 한다." 그 어떠한 대안도 비어있는 하얀 화면이나 스타일이 없는 내용으로 채워진 플래시 등의 위험을 감당할 만한 가치가 없다. 최적의 해결책은 HTML 표준을 따라 스타일시트를 문서 HEAD 안에서 로딩하는 것이다.
top

  1. 처루 2009.11.24 08:38 PERM. MOD/DEL REPLY

    반면 스크립트는 바닥으로 보내는 것이 유용하다는 말도 들었어요.

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2009.11.24 10:51 신고 PERM MOD/DEL

    네 맞습니다. 그 내용이 오늘 정리할 내용입니다.ㅋ

Write a comment.


봄싹에서 자바 코드가 차지하는 비중은 1/3

모하니?/Thinking : 2009. 11. 21. 14:05


현재 봄싹 소스 코드를 분석해본 결과, 절반에 가까운 코드가 화면 관련 코드입니다.

자바스크립트, CSS, JSP까지 치면, 절반이 넘고, 자바 코드는 1/3에 불과하군요.

화면 개발이 얼마나 중요하고 심오한가를 느낌으로만 짐작하고 있었는데, 이렇게 실체적인 데이터를 보니까 새록 새록 합니다.

화면 개발자들 멋지십니다.
top

  1. Favicon of http://blog.lckymn.com BlogIcon Kevin 2009.11.21 19:14 PERM. MOD/DEL REPLY

    UI 중요하죠. 결국 사용자들이 볼수 있는건 이것뿐이기 때문에... :)

    근데 사실 Spring Framework까지 Java 소스로 넣어야 하는거 아닌가요? :D
    그렇게 치면 Java code양이 상당히 늘어나겠죠...

    아니면, UI를 GWT로 작성하면... ^O^

    Favicon of http://whiteship.me BlogIcon 기선 2009.11.22 23:09 PERM MOD/DEL

    그러게요. 그 부분이 좀;;
    스프링, 하이버 등 모든 자바 lib을 다 치면;; 분량이 엄청날 것 같습니다.

    위의 통계치에서 자바스크립트 라이브러리들을 빼던지, 자바 라이브러리를 다 넣던지.. 해야지 공정하겠네요.ㅋ

Write a comment.


[피아노] 아내와 연탄곡 - 말할 수 없는 비밀






저희 부부는 이러고 놀아요.

제가 좀 많이 틀렸지만, 그나마 나은 걸로 골랐습니다. 캬캬캬
이제 스터디 가야겠군요.

top

  1. Favicon of http://blog.lckymn.com BlogIcon Kevin 2009.11.21 15:49 PERM. MOD/DEL REPLY

    오... 피아노도 칠줄 아시는군요. 부럽습니다. :)

    Favicon of http://whiteship.me BlogIcon 기선 2009.11.22 23:07 PERM MOD/DEL

    ㅋㅋ그냥 치기만 할 뿐이에요.
    연주는 못해요.

Write a comment.


[웹 사이트 속도 향상 베스트 프랙티스 4] 컴포넌트 압축하기(Gzip Components)

모하니?/Coding : 2009. 11. 19. 13:02


http://developer.yahoo.com/performance/rules.html#gzip

Gzip Components

tag: server

HTTP 요청과 응답을 네트워크로 전송하는데 걸리는 시간을 화면 개발자들과의 논의를 통해 극적으로 줄일 수 있다. 물론 최종 사용자의 인터넷 속도는 개발 팀과 관계없는 인터넷 서비스 제공처와 접근하려는 곳과의 거리에 따라 달라지기는 한다. 하지만 그 외밖에도 응답 시간에 영향을 주는 변수들이 있다. 압축을 기용하면 HTTP 응답의 크기를 줄여서 응답 시간을 빠르게 할 수 있다.

HTTP/1.1 부터, 웹 클라이언트는 HTTP 요청의 Accept-Encoding 헤더를 사용하여 압축 형태를 지원한다는 것을 알려줄 수 있게 되었다.

      Accept-Encoding: gzip, deflate

만약에 웹서버가 요청에 들어있는 이 헤더를 본다면, 응답을 클라이언트가 나열한 방법으로 압축할 수가 있다. 웹 서버는 웹 클라이언트에게 응답의 Content-Encoding 헤더를 사용하여 사용한 방법을 알려준다.

      Content-Encoding: gzip

Gzip은 근래 가장 유명하고 효율적인 압축 기술로, GNU 프로젝트에 의해 만들어졌으며 RFC 1952로 표준화 되었다. 다른 압축 기술중 여러분이 보고 싶어하는 것으로 deflate가 있지만 Gzip에 비해서 덜 효율적이며 덜 알려져있다.

Gzip 압축은 응답의 크기를 약 70% 가량 쥴여준다. 아마도 근래의 브라우저를 떠돌고 있는 인터넷 트래픽 중 90%는 gzip을 지원한다고 선언해 두었을 것이다. 만약 아파치를 사용하고 있다면, gzip 모듈 설정 방법은 버전에 따라 다르다. 아차피 1.3은 mod_gzip을 사용하고 아파치 2는 mod_deflate를 사용한다.

브라우저와 프록시를 사용할 때 브라우저가 예상한 것과 실제로 압축하여 받은 내용이 일치하지 않는 이슈가 있다. 다행히도, 구 버전 브라우저 사용이 점차 줄어듬에 따라 그런 이슈도 줄어들고 있다. 아파치 모듈은 Vary 응답 헤더를 사용하여 자동으로 적절한 타입을 찾도록 도와준다.

서버는 파일 타입에 따라 무엇을 gzip으로 압축할지 선택하지만, 실제로 무엇을 압축할지 결정한 것을 보면 매우 제한적이다. 대부분의 웹 사이트는 그들의 HTML 문서를 gzip으로 압축한다. 스크립트와 스타일시트도 압축할 만한 가치가 있는데 대부분의 사이트는 이것을 간과한다. 사실, 응답에 들어가는 모든 XML, JSON, 이미지, PDF 파일 등은 압축하지 말아야 한다. 이미 압축되어있는 형태기 때문이다. 그것들을 압축하는 것은 CPU를 낭비하는 것일 뿐 아니라 잠재적으로 파일 사이즈를 늘리는거나 마찬가지다.

Gzip으로 가능한 많은 타입을 압축하는 것은 페이지의 무게를 줄이고 사용자 경험을 가속화하는 쉬운 방법이다.


top

Write a comment.


[웹 사이트 속도 향상 베스트 프랙티스 3] Expires 또는 Cache-Control 헤더 추가하기

모하니?/Coding : 2009. 11. 18. 16:34


http://developer.yahoo.com/performance/rules.html#expires

Add an Expires or a Cache-Control Header

tag: server

이 규칙에는 두 가지가 있다.

* 정적 컴포넌트인 경우: 아주 긴 시간으로 Expires 헤더를 설정하여 "Neber expire" 정책을 구현한다.
* 동적 컴포넌트인 경우: 적절한 Cache-Control 헤더를 사용하여 브라우저를 도와준다.

웹 페이지 디자인은 점점 더 풍부해지고 있다. 즉 보다 많은 스크립트, 스타일시트, 이미지, 플래시가 페이지에 들어간다는 것이다. 여러분 페이지를 처음 방문하는 사용자는 아마도 몇 개의 HTTP 요청을 보내야 할 것이다. 하지만 Expires 헤더를 사용하여 그런 컴포넌트들을 캐시가 가능하도록 설정할 수 있다. 이렇게 하면 연속하여 페이지를 참조할 때 불필요한 HTTP 요청을 줄일 수 있다. Expires 헤더는 대부분 이미지에 자주 사용하지만, 스크립트, 스타일시트, 플래시 컴포넌트를 포함한 모든 컴포넌트에도 활용할 수 있다.

브라우저(와 프록시)는 캐시를 사용하여 HTTP 요청과 사이즈를 줄이고, 웹 페이지 로딩 속도를 높인다. 웹 서버는 Expires 헤더를 HTTP 응답에 사용하여 클라이언트가 얼마나 오래 컴포넌트를 캐시할지 알려준다. 다음은 아주 오래동안 캐시를 보관하도록 설정한 Expires 헤더이다. 브라우저에게 이 응답은 2010년 4월 15일까지 변하지 않을꺼라고 알려준다.

      Expires: Thu, 15 Apr 2010 20:00:00 GMT

만약 여러분의 서버가 아파치라면, ExpiresDefault 지시자를 사용하여 현재 시간 기준으로 상대적인 만료 날자를 설정하라. 다음 예제는 만료 날짜를 요청을 받은 시점 부터 10년 뒤로 설정하는 ExpiresDefault 지시어다.

      ExpiresDefault "access plus 10 years"

명심해야 할 것이 있다. 만약 아주 오래 살도록 Expried 헤더를 사용한 경우에는 컴포넌트를 변경할 때 마다 반드시 컴포넌트의 파일이름을 변경해 주어야 한다. 야후에서는 이런 작업을 빌드 과정 중 하나로 만들어 사용한다. 컴포넌트의 파일 이름에 버전 넘버를 명시해주는 것이다. 예를 들어 yahoo_2.0.6.js 처럼.

아주 오래 캐시를 유지하도록 설정한 Expires 헤더는 이미 여러분의 사이트를 방문했던 사용자가 보는 페이지에만 적용된다. 사이트를 처음 방문하는 사용자의 HTTP 요청이거나 브라우저의 캐시가 비어있는 경우에는 아무런 영향이 없다. 따라서 이런 성능 개선의 효과는 사용자가 어느정도 '준비된 캐시'를 가지고 페이지를 얼마나 자주 방문하느냐에 달려있다. ('준비된 캐시'에는 페이지의 모든 컴포넌트를 이미 가지고 있다.) 우리는 야후에서 이것을 측정했고 그 결과 준비된 캐시를 가지고 방문하는 페이지 뷰의 수가 75~85%에 달한다는 것을 발견했다. 아주 왜 캐시를 유지하는 Expires 헤더를 사용함으로써, 브라우저가 캐시할 컴포넌트 수를 늘리고 연쇄적으로 페이지를 볼 때 사용자 인터넷 연결에 한 바이트로 보내지 않을 수 있다.

참조: http://www.mnot.net/cache_docs/
top

Write a comment.


[웹 사이트 속도 향상 베스트 프랙티스 2] CDN(Content Delivery Network) 사용하기

모하니?/Coding : 2009. 11. 17. 21:39


http://developer.yahoo.com/performance/rules.html#cdn

Use a Content Delivery Network

tag: server

여러분 웹 서버에 대한 사용자 접근은 응답 시간에 영향을 준다. 컨텐츠를 여러개로 분산되어 있는 서버에 배포한다면 사용자 시점에서 페이지 로딩을 빠르게 할 수 있다. 하지만 무엇부터 시작해야 할까?

지리학적으로 분산되어 있는 컨텐트(geographically dispersed content)를 구현할 때 제일 먼저 할 것은, 여러분의 웹 애플리케이션을 분산 아키텍처로 다시 설계하는 짓을 하지 않는 것이다. 애플리케이션에따라, 아키텍처의 변경은 여러 곳에 위치한 서버를 넘나드는 '세션 상태 동기'와 '데이터베이스 트랜잭션 복사' 작업의 압박을 받을 수 있다. 사용자와 컨텐츠 사이의 거리를 좁히려는 시도는 그러한 애플리케이션 아키텍처 변경 단계로 말미암아 연기 되거나 그 단계를 못 벗어날지도 모른다.

기억할 것은 80-90%의 최종 사용자 응답 시간은 페이지의 컴포넌트들(이미지, 스타일시트, 스크립트, 플래시 등)을 다운로드 하는데 소비 된다는 것이다. 바로 이것이 성능에 있어서 황금 법칙이다. 여러분 애플리케이션 아키텍처를 다시 설계하는 어려운 작업부터 시작하지 말고, 정적인 컨텐츠들을 분리하는 것부터 먼저 하는 것이 더 좋다. 응답 시간을 크게 줄여줄 뿐 아니라, 고마운 CDN 덕분에 그 작업도 쉽다.

CDN은 보다 효율적으로 사용자에게 컨텐츠를 제공하기 위해 여러 곳으로 분산되어 있는 웹 서버 집합이다. 특정 사용자에게 컨텐츠를 제공할 서버는 기본적으로 네트워크 접근성 측정을 기반으로 선택된다. 예를 들어, 가장 낮은 네트워크 홉(hop)을 가지고 있거나 가장 빠른 응답 시간을 가지고 있는 것이 선택된다.

몇몇 대규모 인터넷 회사들은 자신들의 CDN을 가지고 있지만, Akamai Technologies, Mirror Image Internet, Limeight Networks 같은 CDN 서비스 제공자를 사용하는 것이 비용적으로 효율적이다. 신생 회사나 개인적인 웹 사이트의 경우 CDN 서비스 비용이 비쌀수도 있지만, 여러분의 대상 고객이 점점 증가하고 점점 글로벌화 됨에 따라, 첫 응답 시간을 높이기 위해 CDN이 필요해질 것이다. 야후에서 정적인 컨텐츠를 웹 서버에서 CDN으로 옮김으로써 사용자 응답 시간을 20% 이상 향상 시켰다. CDN으로 바꾸는데 필요한 것은 여러분의 웹 사이트 속도를 극적으로 향상시키는것에 비해 상대적으로 간단하게 코드를 변경하기만 하면 된다.
top

  1. Favicon of http://bcho.tistory.com BlogIcon 조대협 2009.11.17 23:06 PERM. MOD/DEL REPLY

    CDN은 글로벌 사이즈의 시스템에서는 많이 사용하고 있고,요즘은 ERP와 같은 글로벌 싱글 인스턴스 아키텍쳐나 글로벌 사이즈 그룹웨어에서 ADN (Application Delivery Network)들도 많이 사용하고 있습니다.

    Favicon of http://whiteship.tistory.com BlogIcon 기선 2009.11.18 00:50 PERM MOD/DEL

    오호.. 그런것도 있군요.
    좋은 정보 감사합니다~

Write a comment.


인터넷의 의미 - 친절

모하니?/Watching : 2009. 11. 17. 21:11




악플러보다 친플러들이 많다는 거...
top

TAG 인터넷

Write a comment.


I have been serializing my packages.

모하니?/그냥 놀아 : 2009. 11. 17. 19:02


좀전부터 계속 하고 있었고 지금 이 순간에도 하는 중이었기 때문에 현재 완료 진행형을 사용했습니다. 내일 회사가 합정에서 압구정으로 이사를 가기 때문에 짐정리를 하고 있었는데, 이전에도 한 번 비유한 적이 있지만 '이사'라는 건 꼭 자바의 '직렬화'랑 비슷합니다.

짐을 죄다 이동할 수 있는 형태로 쌓아두고, 이동한 다음, 다시 다 풀어제끼니 말이죠.
그 모양새가 딱 직렬화, 역질렬화랑 매치되지 않나요.
아님 말구요.ㅋ

부디 내일 이사가 일찍 끝나길...

ps: 대체 이 회사에 들어와서 이사를 몇 번이나 하는거야. T.T 벌써 세 번째. 아흑..


top

Write a comment.


[웹 사이트 속도 향상 베스트 프랙티스 1] HTTP 요청 최소화 하기

모하니?/Coding : 2009. 11. 16. 18:46


참조: http://developer.yahoo.com/performance/rules.html#num_http

HTTP 요청 최소화하기(Minimize HTTP Requests)

tag: content

사용자 응답 시간 중 80%가 브라우저 단(front-end)에서 소요된다. 이 시간 중 대부분이 페이지의 모든 컴포넌트들(이미지, 스타일시트, 스크립트, 플래시 등)을 다운로드 하는데 소요된다. 컴포넌트의 갯수를 줄이면 페이지를 랜더링하는데 필요한 HTTP 요청의 수도 줄어들게 된다. 바로 이것이 페이지 로딩 속도를 높이는 핵심이다.

화면에 있는 컴포넌트의 수를 줄이는 한가지 방법은 페이지의 디자인을 단순하게 만드는 것이다. 하지만 꽤 복잡한 컨텐츠로 구성되어 있는 페이지를 만들 때도 빠른 응답 속도를 보장할 수 있는 방법은 없을까? 이제부터 풍요롭게 디자인된 페이지를 지원하면서도 HTTP 요청을 줄이는 기술을 몇 가지 살펴보자.

묶음 파일(Combined files)이란 모든 스크립트를 하나의 스크립트로 묶고, 그와 비슷하게 모든 CSS를 하나의 스타일시트로 묶어서 HTTP 요청을 요청을 줄이는 방법이다. 묶음 파일은 페이지 마다 필요한 스크립트와 스타일시트가 다를 때 좀 더 도전적인 과제가 될 수 있지만, 이러한 것을 배포 절차 중 하나로 만든다면 응답 시간을 줄일 수 있다.

CSS Sprites는 이미지 요청 수를 줄일 때 선호하는 방법이다. 배경 이미지들을 하나의 단일 이미지로 묶고 background-image와 background-position 속성을 사용해서 이미지의 일부를 보여주는 것이다.

Image map은 여러 개의 이미지 파일을 하나의 이미지로 만든다. 전체 사이즈는 거의 같겠지만, HTTP 요청의 수가 줄어들어 페이지 로딩 속도가 빨라진다. 이미지 맵은 네비게이션 바와 같이 연속적으로 나타나는 이미지 일 때 적합하다. 이미지 맵의 좌표를 정의하는 것은 매우 지루하고 오류를 범하기 쉬울 것이다. 이미지 맵을 사용하여 네비게이션을 하는 것 또한 적용하기 쉽지 않다. 따라서 권장하는 방법은 아니다.

인라인 이미지(inline image)는 data: URL 스키마를 사용하여 이미지 데이타를 실제 페이지에 첨부한다. 이렇게 하면 HTML 문서의 크기가 늘어난다. 인라인 이미지를 (캐싱을 사용하는) 스타일시트에 넣는 방법으로 HTTP 요청을 줄이고 문서 크기가 늘어나는 것을 방지할 수 있다. 하지만 아직 인라인 이미지를 모든 주요 브라우저에서 지원하고 있지는 않다.

페이지에 필요한 HTTP 요청을 줄이는 것부터가 시작이다. 특히 이것은 첫 방문자를 위한 성능 향상에서 가장 중요한 가이드라인이다.  Tenni Theurer의 블로그 글 Browser Cache Usage - Exposed!에 따르면, 매일 여러분의 사이트 방문자 중 40~60%는 캐시가 비어있는 상태에서 찾아온다. 처음 방문하는 유저를 위해 페이지 로딩 속도를 높이는 것은 더 나은 사용자 경험에 있어서 핵심이다.
top

  1. Favicon of http://blog.lckymn.com BlogIcon Kevin 2009.11.17 12:35 PERM. MOD/DEL REPLY

    아니면 아예 HTTP 프로토콜을
    웹환경에서 더 빠른 속도를 낼수 있는 다른 프로토콜로
    바꿔 버리는 방법도 있겠죠... :)

    http://blog.chromium.org/2009/11/2x-faster-web.html

    http://dev.chromium.org/spdy/spdy-whitepaper

    http://dev.chromium.org/spdy/spdy-protocol

    Favicon of http://whiteship.me BlogIcon 기선 2009.11.17 13:11 PERM MOD/DEL

    허곡;; 이건 또 뭔가요.
    SPeeDY~ 구글에서 만든 '빠른' 프로토콜 인가 보군요.

    Favicon of http://blog.lckymn.com BlogIcon Kevin 2009.11.17 13:36 PERM MOD/DEL

    네, 구글에서 HTTP를 대체할 프로토콜로 내놓은 녀석이죠.
    HTTP는 큰 파일 하나를 전송하기에는 좋은데, 현재의 웹처럼 작은 파일들을 여러개 보내는데는 성능이 형편없다는걸 감안해서 이에 적합한 프로토콜을 만드는 모양입니다.
    표준으로 체택이 될지 안 될지는 모르겠지만, 더 나은걸 사용할수 있다면 좋지 않을까 합니다.

    그나저나 구글은 최근에 GO 라는 프로그래밍 언어도 만들고,
    (보니까 거의 C++과 Python 을 대체할 언어로 만든거 같습니다).
    OS도 만들고, 프로토콜도 만들고...

    하드웨어 제조 빼고는 안 하는게 없는거 같네요. :)

    Favicon of http://whiteship.me BlogIcon 기선 2009.11.17 15:13 PERM MOD/DEL

    그러네요. 정말 세계 정복을 하려는 듯;;

Write a comment.


[봄싹 축하] 제 9회 다음 DevDay 대상! (다음 에디터 플러긴 WordAssist)

모하니?/Thinking : 2009. 11. 16. 11:38


다음 에디터 plugin 계발 계획? 생각? 삽질?
다음 에디터 PulgIn !! wordAssist

봄싹에서 같이 스터디 중인 분들 중에 총 세 분이 출전해서, 그 중 두 분이 한 팀으로 만든 다음 에디터 플러그인이 대상을 탔습니다. 상품으로 닌텐도 Wii를 받아왔고, 그것을 현금화 한 금액 중에서 참가 경비를 제외한 거의 전액을 봄싹에 기부했습니다.

저역시 지난번 제주도에서 열린 다음 DebDay에 참석하고 왔었지만, 사실 상에는 관심이 없었고 와이프랑 제주도로 놀러 갈 생각이었기 때문에 이런 성과는 기대도 하지 않았었는데, 이번에 참가한 팀은 아이디어도 멋졌고 그걸 매우 짧은 시간 안에 만들고 그것으로 상까지 받아왔다는 소식에 정말 놀라지 않을 수 없었습니다. 게다가 전액 기부라니 너무 완벽해서 샘이 날 정도입니다.

이번에 입상한 에디터 플러그인은 봄싹에서 별도의 프로젝트로 계속 관리를 해 나갈 것이며, 다음 에디터 및 WordAssist는 봄싹 사이트에 최대한 빨리 적용할 겁니다. (아마도 위키쪽에..)

흑.. 너무 멋지자나. ㅠ.ㅠ
top

  1. Favicon of http://blog.outsider.ne.kr BlogIcon Outsider 2009.11.16 11:54 PERM. MOD/DEL REPLY

    아이디어에서 구현까지 퍼펙트한...
    짝짝짝!!!

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2009.11.16 13:20 신고 PERM MOD/DEL

    그러게요. 정말 박수가 나오네요. 캬~

  2. Favicon of http://blog.daum.net/neouser BlogIcon 달려라네오 2009.11.16 12:56 PERM. MOD/DEL REPLY

    매번 눈팅으로 블로깅하는것 구경만 했는데 이번에는 축적한번 날려야겠군요!
    부럽습니다!!! ㅎㅎㅎ (그리고 축하합니다.^^)

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2009.11.16 13:21 신고 PERM MOD/DEL

    넵~ 봄싹을 축하해 주셔서 감사합니다. :)

  3. 충굴 2009.11.16 13:01 PERM. MOD/DEL REPLY

    축하드립니다.^^

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2009.11.16 13:22 신고 PERM MOD/DEL

    역시 감사합니다. ㅎㅎ

    이거..재주는 성윤이랑 정우형이 부리고 축하는 봄싹이 받는군요.ㅋ

Write a comment.


[WCG 2009] 요즘 하고 있었군요.

모하니?/Watching : 2009. 11. 13. 17:14


http://www.wcg.com/6th/tv/live_streaming_WCG2009.asp?ch=1&lang=5&ca=0&qu=on

라이브로 볼 수 있네요.

스타 안 본지 한참 됐는데 오랜 만이로군요.
이제동, 송병구, 김택용 파이팅~
top

TAG wcg
  1. Favicon of http://blog.naver.com/j81811 BlogIcon aStRe 2009.11.13 20:35 PERM. MOD/DEL REPLY

    WCG~ 다 ㅋㅋㅋ 02.03.04 동영상에 보면 종종 내가 나오는데;; ㅋㅋㅋ

    Favicon of http://whiteship.tistory.com BlogIcon 기선 2009.11.14 11:47 PERM MOD/DEL

    3년이나 활동했어.. 오호..
    그 때면 임요한, 홍진호가 나갔을라나..

  2. Favicon of http://blog.naver.com/j81811 BlogIcon aStRe 2009.11.15 22:57 PERM. MOD/DEL REPLY

    그러엄~! 밥상 친구 임요한이지 ㅋㅋ

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2009.11.15 23:02 신고 PERM MOD/DEL

    오오오오.. 싸인이라도 좀 받아두지 그랬어!

Write a comment.


[코딩] 데이터를 요청하지 말고 작업을 요청하라.

모하니?/Coding : 2009. 11. 12. 18:45


어떤 컨트롤러 안에 다음과 같은 코드가 있습니다.

    @RequestMapping("/study/{studyId}/meeting/delete/{meetingId}")
    public String deleteMeeting(@PathVariable int studyId,
            @PathVariable int meetingId) {
        Meeting meeting = meetingService.getById(meetingId);
        meetingService.deleteMeeting(meeting);
        return redirectStudyView(studyId);
    }

안그래도 컨트롤러 코드를 보면 항상 무언가 미적지근한 것이 있었는데, 그 원인을 이제야 알겠네요. 이 글의 제목에 적혀있는 객체지향 원리(?)를 생각해볼때 위와 같은 코드의 문제점은 무엇일까요?

이상하죠.. meeting을 model에 주어 담을 것도 아닌데, 뭐하러 가져와서 다시 service쪽에 넘겨주는 걸까요. 저런 식으로 코딩한 부분이 한 두군데가 아닙니다. 죄다 고쳐야겠어요. 크헉!!!!;;;;;




top

TAG 코딩
  1. Favicon of https://helols.tistory.com BlogIcon is윤군 2009.11.13 17:54 신고 PERM. MOD/DEL REPLY

    딱 형 스타일이네요 ;;ㅋㅋ

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2009.11.13 18:20 신고 PERM MOD/DEL

    ㅇㅇ내가 짠거야.ㅠ.ㅠ

Write a comment.


[하이버네이트] @BatchSize로 쿼리 갯수 대폭 줄이기

모하니?/Coding : 2009. 11. 10. 01:04


참조:
- http://docs.jboss.org/hibernate/core/3.3/reference/en/html/performance.html
- http://docs.jboss.org/hibernate/stable/annotations/api/org/hibernate/annotations/BatchSize.html

스터디의 회원은 각각 Collection<Study, Integer> 타입의 목록을 가지고 있습니다. 스터디당 참여율이나 신뢰도가 들어있는 콜렉션입니다. 그리고 스터디를 보여줄 때 각 회원들의 참여율과 신뢰도를 보여주도록 되어 있는데, 문제는 쿼리입니다.

Hibernate: select studyatten0_.Member_id as Member1_0_, studyatten0_.element as element0_, studyatten0_.mapkey_id as mapkey3_0_ from Member_studyAttendanceRates studyatten0_ where studyatten0_.Member_id=?
Hibernate: select studytrust0_.Member_id as Member1_0_, studytrust0_.element as element0_, studytrust0_.mapkey_id as mapkey3_0_ from Member_studyTrustRates studytrust0_ where studytrust0_.Member_id=?
Hibernate: select studyatten0_.Member_id as Member1_0_, studyatten0_.element as element0_, studyatten0_.mapkey_id as mapkey3_0_ from Member_studyAttendanceRates studyatten0_ where studyatten0_.Member_id=?
Hibernate: select studytrust0_.Member_id as Member1_0_, studytrust0_.element as element0_, studytrust0_.mapkey_id as mapkey3_0_ from Member_studyTrustRates studytrust0_ where studytrust0_.Member_id=?
Hibernate: select studyatten0_.Member_id as Member1_0_, studyatten0_.element as element0_, studyatten0_.mapkey_id as mapkey3_0_ from Member_studyAttendanceRates studyatten0_ where studyatten0_.Member_id=?
Hibernate: select studytrust0_.Member_id as Member1_0_, studytrust0_.element as element0_, studytrust0_.mapkey_id as mapkey3_0_ from Member_studyTrustRates studytrust0_ where studytrust0_.Member_id=?
Hibernate: select studyatten0_.Member_id as Member1_0_, studyatten0_.element as element0_, studyatten0_.mapkey_id as mapkey3_0_ from Member_studyAttendanceRates studyatten0_ where studyatten0_.Member_id=?
Hibernate: select studytrust0_.Member_id as Member1_0_, studytrust0_.element as element0_, studytrust0_.mapkey_id as mapkey3_0_ from Member_studyTrustRates studytrust0_ where studytrust0_.Member_id=?
Hibernate: select studyatten0_.Member_id as Member1_0_, studyatten0_.element as element0_, studyatten0_.mapkey_id as mapkey3_0_ from Member_studyAttendanceRates studyatten0_ where studyatten0_.Member_id=?
Hibernate: select studytrust0_.Member_id as Member1_0_, studytrust0_.element as element0_, studytrust0_.mapkey_id as mapkey3_0_ from Member_studyTrustRates studytrust0_ where studytrust0_.Member_id=?
Hibernate: select studyatten0_.Member_id as Member1_0_, studyatten0_.element as element0_, studyatten0_.mapkey_id as mapkey3_0_ from Member_studyAttendanceRates studyatten0_ where studyatten0_.Member_id=?
Hibernate: select studytrust0_.Member_id as Member1_0_, studytrust0_.element as element0_, studytrust0_.mapkey_id as mapkey3_0_ from Member_studyTrustRates studytrust0_ where studytrust0_.Member_id=?
Hibernate: select studyatten0_.Member_id as Member1_0_, studyatten0_.element as element0_, studyatten0_.mapkey_id as mapkey3_0_ from Member_studyAttendanceRates studyatten0_ where studyatten0_.Member_id=?
Hibernate: select studytrust0_.Member_id as Member1_0_, studytrust0_.element as element0_, studytrust0_.mapkey_id as mapkey3_0_ from Member_studyTrustRates studytrust0_ where studytrust0_.Member_id=?
Hibernate: select studyatten0_.Member_id as Member1_0_, studyatten0_.element as element0_, studyatten0_.mapkey_id as mapkey3_0_ from Member_studyAttendanceRates studyatten0_ where studyatten0_.Member_id=?
Hibernate: select studytrust0_.Member_id as Member1_0_, studytrust0_.element as element0_, studytrust0_.mapkey_id as mapkey3_0_ from Member_studyTrustRates studytrust0_ where studytrust0_.Member_id=?
Hibernate: select studyatten0_.Member_id as Member1_0_, studyatten0_.element as element0_, studyatten0_.mapkey_id as mapkey3_0_ from Member_studyAttendanceRates studyatten0_ where studyatten0_.Member_id=?
Hibernate: select studytrust0_.Member_id as Member1_0_, studytrust0_.element as element0_, studytrust0_.mapkey_id as mapkey3_0_ from Member_studyTrustRates studytrust0_ where studytrust0_.Member_id=?
Hibernate: select studyatten0_.Member_id as Member1_0_, studyatten0_.element as element0_, studyatten0_.mapkey_id as mapkey3_0_ from Member_studyAttendanceRates studyatten0_ where studyatten0_.Member_id=?
Hibernate: select studytrust0_.Member_id as Member1_0_, studytrust0_.element as element0_, studytrust0_.mapkey_id as mapkey3_0_ from Member_studyTrustRates studytrust0_ where studytrust0_.Member_id=?
Hibernate: select studyatten0_.Member_id as Member1_0_, studyatten0_.element as element0_, studyatten0_.mapkey_id as mapkey3_0_ from Member_studyAttendanceRates studyatten0_ where studyatten0_.Member_id=?
Hibernate: select studytrust0_.Member_id as Member1_0_, studytrust0_.element as element0_, studytrust0_.mapkey_id as mapkey3_0_ from Member_studyTrustRates studytrust0_ where studytrust0_.Member_id=?
Hibernate: select studyatten0_.Member_id as Member1_0_, studyatten0_.element as element0_, studyatten0_.mapkey_id as mapkey3_0_ from Member_studyAttendanceRates studyatten0_ where studyatten0_.Member_id=?
Hibernate: select studytrust0_.Member_id as Member1_0_, studytrust0_.element as element0_, studytrust0_.mapkey_id as mapkey3_0_ from Member_studyTrustRates studytrust0_ where studytrust0_.Member_id=?
Hibernate: select studyatten0_.Member_id as Member1_0_, studyatten0_.element as element0_, studyatten0_.mapkey_id as mapkey3_0_ from Member_studyAttendanceRates studyatten0_ where studyatten0_.Member_id=?
Hibernate: select studytrust0_.Member_id as Member1_0_, studytrust0_.element as element0_, studytrust0_.mapkey_id as mapkey3_0_ from Member_studyTrustRates studytrust0_ where studytrust0_.Member_id=?
Hibernate: select studyatten0_.Member_id as Member1_0_, studyatten0_.element as element0_, studyatten0_.mapkey_id as mapkey3_0_ from Member_studyAttendanceRates studyatten0_ where studyatten0_.Member_id=?
Hibernate: select studytrust0_.Member_id as Member1_0_, studytrust0_.element as element0_, studytrust0_.mapkey_id as mapkey3_0_ from Member_studyTrustRates studytrust0_ where studytrust0_.Member_id=?
Hibernate: select studyatten0_.Member_id as Member1_0_, studyatten0_.element as element0_, studyatten0_.mapkey_id as mapkey3_0_ from Member_studyAttendanceRates studyatten0_ where studyatten0_.Member_id=?
Hibernate: select studytrust0_.Member_id as Member1_0_, studytrust0_.element as element0_, studytrust0_.mapkey_id as mapkey3_0_ from Member_studyTrustRates studytrust0_ where studytrust0_.Member_id=?
Hibernate: select studyatten0_.Member_id as Member1_0_, studyatten0_.element as element0_, studyatten0_.mapkey_id as mapkey3_0_ from Member_studyAttendanceRates studyatten0_ where studyatten0_.Member_id=?
Hibernate: select studytrust0_.Member_id as Member1_0_, studytrust0_.element as element0_, studytrust0_.mapkey_id as mapkey3_0_ from Member_studyTrustRates studytrust0_ where studytrust0_.Member_id=?
Hibernate: select studyatten0_.Member_id as Member1_0_, studyatten0_.element as element0_, studyatten0_.mapkey_id as mapkey3_0_ from Member_studyAttendanceRates studyatten0_ where studyatten0_.Member_id=?
Hibernate: select studytrust0_.Member_id as Member1_0_, studytrust0_.element as element0_, studytrust0_.mapkey_id as mapkey3_0_ from Member_studyTrustRates studytrust0_ where studytrust0_.Member_id=?
Hibernate: select studyatten0_.Member_id as Member1_0_, studyatten0_.element as element0_, studyatten0_.mapkey_id as mapkey3_0_ from Member_studyAttendanceRates studyatten0_ where studyatten0_.Member_id=?
Hibernate: select studytrust0_.Member_id as Member1_0_, studytrust0_.element as element0_, studytrust0_.mapkey_id as mapkey3_0_ from Member_studyTrustRates studytrust0_ where studytrust0_.Member_id=?
Hibernate: select studyatten0_.Member_id as Member1_0_, studyatten0_.element as element0_, studyatten0_.mapkey_id as mapkey3_0_ from Member_studyAttendanceRates studyatten0_ where studyatten0_.Member_id=?
Hibernate: select studytrust0_.Member_id as Member1_0_, studytrust0_.element as element0_, studytrust0_.mapkey_id as mapkey3_0_ from Member_studyTrustRates studytrust0_ where studytrust0_.Member_id=?
Hibernate: select studyatten0_.Member_id as Member1_0_, studyatten0_.element as element0_, studyatten0_.mapkey_id as mapkey3_0_ from Member_studyAttendanceRates studyatten0_ where studyatten0_.Member_id=?
Hibernate: select studytrust0_.Member_id as Member1_0_, studytrust0_.element as element0_, studytrust0_.mapkey_id as mapkey3_0_ from Member_studyTrustRates studytrust0_ where studytrust0_.Member_id=?
Hibernate: select studyatten0_.Member_id as Member1_0_, studyatten0_.element as element0_, studyatten0_.mapkey_id as mapkey3_0_ from Member_studyAttendanceRates studyatten0_ where studyatten0_.Member_id=?
Hibernate: select studytrust0_.Member_id as Member1_0_, studytrust0_.element as element0_, studytrust0_.mapkey_id as mapkey3_0_ from Member_studyTrustRates studytrust0_ where studytrust0_.Member_id=?
Hibernate: select studyatten0_.Member_id as Member1_0_, studyatten0_.element as element0_, studyatten0_.mapkey_id as mapkey3_0_ from Member_studyAttendanceRates studyatten0_ where studyatten0_.Member_id=?
Hibernate: select studytrust0_.Member_id as Member1_0_, studytrust0_.element as element0_, studytrust0_.mapkey_id as mapkey3_0_ from Member_studyTrustRates studytrust0_ where studytrust0_.Member_id=?
Hibernate: select studyatten0_.Member_id as Member1_0_, studyatten0_.element as element0_, studyatten0_.mapkey_id as mapkey3_0_ from Member_studyAttendanceRates studyatten0_ where studyatten0_.Member_id=?
Hibernate: select studytrust0_.Member_id as Member1_0_, studytrust0_.element as element0_, studytrust0_.mapkey_id as mapkey3_0_ from Member_studyTrustRates studytrust0_ where studytrust0_.Member_id=?
Hibernate: select studyatten0_.Member_id as Member1_0_, studyatten0_.element as element0_, studyatten0_.mapkey_id as mapkey3_0_ from Member_studyAttendanceRates studyatten0_ where studyatten0_.Member_id=?
Hibernate: select studytrust0_.Member_id as Member1_0_, studytrust0_.element as element0_, studytrust0_.mapkey_id as mapkey3_0_ from Member_studyTrustRates studytrust0_ where studytrust0_.Member_id=?
Hibernate: select studyatten0_.Member_id as Member1_0_, studyatten0_.element as element0_, studyatten0_.mapkey_id as mapkey3_0_ from Member_studyAttendanceRates studyatten0_ where studyatten0_.Member_id=?
Hibernate: select studytrust0_.Member_id as Member1_0_, studytrust0_.element as element0_, studytrust0_.mapkey_id as mapkey3_0_ from Member_studyTrustRates studytrust0_ where studytrust0_.Member_id=?

이런 쿼리가 회원 수*2 만큼 생성됩니다. 한 회원당 attendanceRate와 trustRate를 가지고 있기 떄문이죠. 바로 이런 경우 @BatchSize를 사용하면 쿼리를 대폭 줄일 수 있습니다. 설정은 간단하죠;

    @CollectionOfElements(targetElement = Integer.class)
    @Cache(usage=CacheConcurrencyStrategy.READ_WRITE)
    @BatchSize(size=30)
    private Map<Study, Integer> studyAttendanceRates;

    @CollectionOfElements(targetElement = Integer.class)
    @Cache(usage=CacheConcurrencyStrategy.READ_WRITE)
    @BatchSize(size=30)
    private Map<Study, Integer> studyTrustRates;

설정을 한 뒤 쿼리 갯수는 대폭 줄어들게 됩니다. 물론 그만큼 빨라지죠.

Hibernate: select studyatten0_.Member_id as Member1_0_, studyatten0_.element as element0_, studyatten0_.mapkey_id as mapkey3_0_ from Member_studyAttendanceRates studyatten0_ where studyatten0_.Member_id in (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
Hibernate: select studytrust0_.Member_id as Member1_0_, studytrust0_.element as element0_, studytrust0_.mapkey_id as mapkey3_0_ from Member_studyTrustRates studytrust0_ where studytrust0_.Member_id in (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
Hibernate: select studyatten0_.Member_id as Member1_0_, studyatten0_.element as element0_, studyatten0_.mapkey_id as mapkey3_0_ from Member_studyAttendanceRates studyatten0_ where studyatten0_.Member_id in (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
Hibernate: select studytrust0_.Member_id as Member1_0_, studytrust0_.element as element0_, studytrust0_.mapkey_id as mapkey3_0_ from Member_studyTrustRates studytrust0_ where studytrust0_.Member_id in (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
Hibernate: select studytrust0_.Member_id as Member1_0_, studytrust0_.element as element0_, studytrust0_.mapkey_id as mapkey3_0_ from Member_studyTrustRates studytrust0_ where studytrust0_.Member_id in (?, ?)
Hibernate: select studyatten0_.Member_id as Member1_0_, studyatten0_.element as element0_, studyatten0_.mapkey_id as mapkey3_0_ from Member_studyAttendanceRates studyatten0_ where studyatten0_.Member_id in (?, ?)

top

Write a comment.


[봄싹] 커뮤니티 지원 요청 실패

모하니?/Thinking : 2009. 11. 9. 21:33


D모 업체에 오픈 소스 커뮤니티 호스팅을 지원해주는 서비스가 있길래, 봄싹 커뮤니티를 지원해 주십사 요청을 했었지만, 실패했다. 제한된 리소스로 말미암아 좀 더 대중적으로 영향력 있고 관심가질 만한 커뮤니티를 지원해줘야하는데, 봄싹은 현재 부적절하다고 판단한 듯 하다.

그렇긴 하다. 현재 봄싹 스터디는 이제 막 1년을 넘긴 새싹과도 같은 커뮤니티이고, 그 특성상 유명세나 회원수 부풀리기에는 관심이 없는 커뮤니티이다. 현재로써는 스프링, 하이버네이트, 스프링 웹 플로우, 스프링 시큐리티, Maven, Nexus, Git, SVN, CI 및 개발 환경(Wiki, IntelliJ, Redmine, Github, Atlassian의 모든 제품) 등을 실험적으로 사이트 개발에 적용하고 그 소스 및 과정을 오픈하고 있다는 것 외에는 딱히 이렇다할 오픈 소스 제품이 없는 것도 사실이다.

하지만 미래를 볼 때, 봄싹 스터디는 충분히 지원을 받을 만한 가치가 있는 커뮤니티라고 생각한다. 개발자는 그 어느 직종 보다도 꾸준한 학습이 필요한 직종이 아닌가 생각한다. 그런면에서 봄싹은 1년이 넘도록 꾸준히 스프링을 중심으로 자바 개발에 관한 학습을 했으며, 지금 이 시간에도 계속해서 학습을 하고 있다. 물론 앞으로도 계속해서 학습을 해 나갈 것이다. 그리고 중요한 것은 그 학습한 내용들을 될수 있는한 모두 공개하고 있다는 것이다. 봄싹 스터디에 직접 참여하지 못하는 분들일지라도 온라인을 통해 충분히 학습 내용을 간접경험할 수 있다. 음성 녹화부터 최근에는 캠코더 촬영까지 갖은 방법을 동원하고 있다.

현재 봄싹 사이트는 내가 다니고 있는 회사 서버에 올려져 있다. 봄싹의 새 이슈 트래커(Jira), Nexus, 구 이슈 트래커(Redmine) 등은 봄싹 스터디 회원팀원 중 한명의 개인 컴퓨터를 개발 서버로 세팅해놓고 쓰고 있다. 램이 1G다. JIra가 먹는 메모리만 400M가까이 되서 최근에 자신이 쓰던 컴터의 2G 램을 떼어서 서버에 붙였다. 도메인은 위키북스의 Pro Spring 2.5 책을 베타리딩하고 받은 사례금으로 장만했다. 스터디 장소는 한빛교육센터의 도움으로 간간히 장소비 없이 스터디를 할 수 있게 되었다.

이런 환경에서도 봄싹은 매주 토요일 오전 10시 ~ 오후 1시 꾸준히 활동하고 있다. 매주다. 매주. 한 주는 스프링 스터디를 하고 한 주는 사이트 개발을 하고 있다. 주중에 일하고 주말 중 토요일을 하루 종일 스터디에 투자하는 회원팀원도 있다. 오프라인 모임만 매주 하는 것이지 사실 온라인에서는 매일 개발과 관련된 토론이 오고가며, 개인적으로 사이트 개발을 진행하거나 학습한 것을 공유하고 있다.

나는 절대로 한번도 그렇게 해달라고 요청한 적이 없다. 모두 스스로가 하고 싶어서 자발적으로 참여하는 것이고 그렇게 하지 못한다고 눈총을 주거나 면박을 주지도 않는다. 오히려 그렇게 열심히 학습하고 있는 개발자를 응원하고 그 회원팀원으로부터 자극을 받는 듯 하다. 나는 봄싹 스터디의 운영진 중 한 명으로써 그렇게 열심히 참여하는 사람들에게 좀 더 쾌적한 스터디 환경을 마련해주고 싶다. 그래서 항상 고민한다.

어떻게 하면 돈을 덜 들이고 스터디에 참여할 수 있을까? 어떻게 하면 조용하고 코딩하기 좋은 장소를 얻을 수 없을까? 발표자에게 어떤식으로 보상을 해줘야 할까? 발표자료는 어떻게 보관하고 공유할까? 어떤 형태로 발표를 기록해 주어야 할까? 어떻게 스터디 일정을 알리고 공유할까? 어떻게 하면 스터디 관리를 쉽게 할 수 있을까? 등등의 고민을 항상하고 있고, 그 해결책을 계속해서 구상하고 있다. 여태까지 모색한 방법 중 하나가 바로 봄싹 사이트 개발이고, 또 다른 방법 하나는 이번에 시도했던 커뮤니티 지원을 받는것이다. 그나마 다행으로 봄싹 사이트 개발은 어느 정도 효과를 보고 있는 것 같다. 하지만 그것으로는 부족하다.

봄싹은 분명히 보다 좋은 환경이 필요하다. 봄싹 스터디에 참여하는 개발자들이 편하게 스터디를 할 수 있는 공간이 필요하며, 편하게 필요한 애플리케이션을 돌려볼만한 웹 서버와 호스팅이 필요하다. 환경적인 기회를 강조한 "아웃라이어"라는 책을 봤다면 이해할 수 있을 것이다. 봄싹은 어떻게든 지금처럼 이어나갈 수 있을지도 모르겠다. 그러나 더 좋은 환경에서 자랄 수 있게 도와준다면 봄싹은 더 빨리 더 무성한 꽃을 피울 수 있을 것이다.

뭐.. 어쨋거나 하나가 실패했으니 다른 방법을 더 열심히 잘 준비해야겠다.

출처: http://noandnot.tistory.com/41

봄싹 파이팅!!!
top

  1. Favicon of http://toby.epril.com BlogIcon 토비 2009.11.09 22:34 PERM. MOD/DEL REPLY

    구글 서비스를 넘 많이 써서 그래. D카페를 썼어야지.

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2009.11.09 23:20 신고 PERM MOD/DEL

    그래서;; D에디터를 전격 도입할까 고려중이에요 ㅋㅋㅋ

  2. Favicon of http://blog.openframework.or.kr BlogIcon 이동국 2009.11.09 23:08 PERM. MOD/DEL REPLY

    저도 예전에 지원요청했다가. 짤렸습니다.
    규모가 안되면 안 받아준다는 느낌을 많이 받았습니다.
    그쪽의 기준을 대면 국내에 지원을 받을 수 있는 커뮤니티가 얼마나 될지.. 진입장벽이 너무 높다면 그렇게 기준으로 좀더 명확히 제시해주면 좋겠다는 생각을 했습니다.
    열심히 지원 요청했다가 한동안 허탈감을 느끼게 하는 곳이 되어 버렸죠..

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2009.11.09 23:21 신고 PERM MOD/DEL

    그 부분이 저도 많이 아쉬워요.

    사실 그정도 규모로 성장한 커뮤니티는 별로 지원이 필요 없을정도인데, 사이트 호스팅 좀 해주고 대문에 로고 걸어서 홍보하는 것 밖에 더 되나요.

    앞으로 성장할 역량과 가능성이 큰 커뮤니티를 지원해줘야 진정한 오픈 소스 커뮤니티 지원이 아닐런지 말이죠.

  3. 심홍섭 2009.11.10 00:11 PERM. MOD/DEL REPLY

    너무 낙심하지 마세요~~
    그런 열정을 보고 찾아오는 사람도 있잖아요~(저 같이ㅋㅋ)

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2009.11.10 00:33 신고 PERM MOD/DEL

    낙심은 무슨;; 내가 낙심한 것 같아?? @_@;
    오히려 더 열심히 할 수 있는 계기가 됐는걸 뭐.

  4. 충굴 2009.11.10 11:06 PERM. MOD/DEL REPLY

    혹시 D업체라 하면 Daum을 말씀하시는건가요?
    한번 알아봐야겠습니다.
    충분히 호스팅 지원 받을 만 한거 같은데...^^
    화이팅입니다!

    ps. 아... 물어보니 역시나 규모와 영향력을 따진다고 하네요..ㅠㅠ
    아쉽네요... 개발자들에게는 좋은 레퍼런스가 많을듯한데...

    Favicon of http://whiteship.me BlogIcon 기선 2009.11.10 11:18 PERM MOD/DEL

    넵.. 응원해주시고 알아봐주셔서 감사합니다. :)

    봄싹은 헝그리 정신으로다가...

  5. Favicon of http://blog.outsider.ne.kr BlogIcon Outsider 2009.11.10 11:14 PERM. MOD/DEL REPLY

    봄싹 화이팅....~~

    Favicon of http://whiteship.me BlogIcon 기선 2009.11.10 11:34 PERM MOD/DEL

    넵 화이팅이요!

  6. Favicon of https://helols.tistory.com BlogIcon is윤군 2009.11.11 23:37 신고 PERM. MOD/DEL REPLY

    회원 이러니 이상한데;;ㅎㅎ
    이렇게 장문의 글을 쓸시간이었다면 코딩한줄 더 했어야죠 ;;ㅋㅋㅋ

    호스팅은 NullPe 오픈해서 트래픽이 딸리면;;ㅎ
    제가 사비를 털어서라도 하나 하던동..ㅋㅋ

    열공 열개발 합시다!! Good night! zz

    Favicon of http://whiteship.me BlogIcon 기선 2009.11.12 09:31 PERM MOD/DEL

    왜 네 사비를 쓰냐;;
    그런 일이 생기기 전에 봄싹 자금을 마련해야지.

    이 글은 글쓰기 연습일 뿐이야.
    좀 체계적인 글쓰기 연습이 필요해서;;

    암튼 잘 키워보자!!
    봄싹은 성공할꺼야.

Write a comment.


[스노우보딩] 오예~ 09/10 시즌 시작이구나!

모하니?/그냥 놀아 : 2009. 11. 3. 10:35



ㅎㅎㅎ와이프랑 처음 만난 성우 리조트 벌써 개장했네요!!! 예~압! 올 해는 장비보관소를 랜탈했으니 보드를 들고 다니거나 시즌방에 장비 놓고 왔다갔다 할 일 없이, 깔끔하게 아침에 버스 타고 가서 조금 타고 오후에는 서울로 돌아올 수 있겠습니다.

일요일 당일 치기 light 버전 스케줄

아침 5시 기상 -> 6시 반에 영등포에서 셔틀 버스 타고 -> 8시반 ~9시 도착 -> 놀기 -> 1시 셔틀탑승 -> 3시쯤 마포로 도착 -> 집에 가면 4시 -> 씻고 정리하면 5시 -> 5시 부턴 맘대로..

일요일 당일 치기 full 버전 스케줄

아침 5시 기상 -> 6시 반에 영등포에서 셔틀 버스 타고 -> 8시반 ~9시 도착 -> 놀기 -> 5시 셔틀탑승 -> 8시쯤 영등포 도착 -> 집에 가면 8시 30분 -> 씻고 정리하면 9시 -> 9시 부턴 휴식..

토요일 ~ 일요일 1박 2일 야간-심야 보딩 스케줄

토요일 오전 개인 스케쥴 -> 3시 신촌에서 셔틀 버스 탑승 -> 5~6시 도착 -> 시즌방에서 저녁 먹고 놀기 -> 10시 부터 새벽 2시까지 보딩 -> 시즌방에서 잠자기 -> 오전 8시 기상 -> 오전 9시 다시 보드 타기 -> 오후 1시 셔툴 탑승 -> 그 뒤는 집으로~

크게 이렇게 세 가지 스케줄로 다녀올 수 있는데, 주로 일요일 당일 치기 light 버전으로 다녀올 생각입니다.

시즌권이 공구로 35만원 정도인데, 셔틀 버스비만 한 번에 왕복 3만원 쯤 하고, 리프트 비용도 5~6만원 정도 하기 때문에.. 사실 5번만 다녀와도 본전을 뽑는건죠. 올해는 11월 부터 개장을 했으니.. 최소한 10번 많게는 15번도 다녀올 수 있겠습니다.

올해는 구피 S턴 말고, 레귤러 S턴도 몸에 익히고, 원 에이티에 도전해야지!! 캬캬캬!
좋아!! 주말마다 시원하게 나들이 다녀오겠구나~
top

Write a comment.


[Atlassian] 이직 계획

모하니?/Planning : 2009. 11. 2. 10:40


아틀라샨에 가려니 할 일이 많군요.

호주 독립 기술 이민
- 경력 4년 채우기(이번 달 끝나면 경력 2년째인가.. 뭐 첫 직장 빼면 내년 1월까지가 경력 2년)
- IELTS 과락없이 7.0 넘기기
- 졸업 증명서, 성적 증명서 떼기 -> 이민 상담 받기
- 필요한 서류 준비해두기

영어 스킬
- 쌩 기초(그래머 인 유즈, 리딩)
- 에세이 쓰기(체계적인 글 쓰기 연습 필요)
- PT 스터디
  - 짧은 발표 통으로 외우기
  - 신문 기사를 읽고 그걸 다시 내 방식대로 표현하기

개발 스킬
- Java, JavaEE 기초
- 오라클
- 리눅스
- SOA
- ESB
- BPM
- 각종 XML 툴
- EJB 2.x
- WAS
  - JBoss 4, 5
  - WebLogic 8, 9, 10
  - WebSphere 6

아틀라샨 최적화
- 이슈 올리기
- 플러긴 개발하기
- 개발자랑 친해지기
- 블로그 모니터링

꼭 들어가고야 말겠어.. 아틀라샨!!  2년만 기다려!!

'모하니? > Planning' 카테고리의 다른 글

목표 실천은 진행 중  (12) 2010.02.17
백기선 2010 목표  (12) 2010.02.15
봄싹 Career Path  (6) 2009.12.17
이번주 토요일 IBM dW "웹 개발 다반사"  (2) 2009.12.03
봄싹을 알리러 갑니다.  (6) 2009.11.24
[Atlassian] 이직 계획  (2) 2009.11.02
[ToDo] 20091016  (0) 2009.10.16
[ToDo] 오늘 할 일 - 할일(예상 소요 시간)(실제 소요 시간)  (4) 2009.10.15
2009년 마무리로 할 일  (4) 2009.10.08
9월에 할 일 정리  (10) 2009.08.31
공부할 것 정리  (6) 2009.03.16
top

  1. Favicon of https://dazzilove2.tistory.com BlogIcon dazzi 2009.11.02 13:49 신고 PERM. MOD/DEL REPLY

    멋져부러요~ 꼭 성공하기를 빌어요~ ^^*
    다찌는 대한민국 아줌마 개발자로 우뚝 서도록 노력하겠슴돠! ㅎㅎㅎ

    Favicon of http://whiteship.tistory.com BlogIcon 기선 2009.11.02 20:19 PERM MOD/DEL

    ㅎㅎ넵 일단은. 영어부터.. @_@

Write a comment.


[하이버네이트] 컬럼 타입은 어떻게 명시하는게 좋을까?

모하니?/Coding : 2009. 10. 31. 22:30


       @Column(columnDefinition="TEXT")
       private String descr;

이런 방법이 있습니다. 별로 좋은 방법은 아닙니다. postgresql에서는 괜찮지만, HSQL에서는 저 TEXT라는 SQL 타입이  못해서 해당 테이블을 만들지 못할겁니다.

columnDefinition 이 속성 자체가 컬럼 만들 때 사용할 SQL을 입력하는 부분이기 때문에, 각기 다른 밴더 DB에서 못 인식하는 경우도 생길 수 있는거죠.

그래서 타입을 선언하고 싶을 때는 하이버네이트 타입을 선언할 수 있는 @Type을 사용하는 것이 좋겠습니다. 그러면 하이버네이트가 컬럼을 만들 때 @Type에 선언된 하이버네이트 타입을 보고 DB에 적당한 SQL을 이용해서 컬럼을 만들어 줄 것이기 때문이죠.

    @Column
    @Type(type = "text")
    private String descr;

그래서, 이렇게 하는게 좋겠습니다.



top

Write a comment.


[봄싹] XP 적용 시나리오 3. 개발하기

모하니?/Coding : 2009. 10. 29. 00:57


본격적으로 개발을 해야하는데, 봄싹에서는 오프라인에서 페어로 작업을 해보기도 했지만, 그렇게 자주 충분히 페어 프로그래밍을 했다고 볼 수는 없습니다. 앞으로도 좀 더 꾸준히 시도를 해봐야 그 효용이나 장단점을 파악할 수 있을 것 같습니다. 개인적으로는 뭔가 대화를 나누면서 코딩할 상대가 있어서 안심이 되긴 합니다. DB update 쿼리가 어떻게 되더라? 이거 무슨 리팩토링이지? 이 메서드 이름 맘에 들어? 여기 중복인데 어떻게 제거하면 좋을지 잘 모르겠네.. 같은 식으로 대화를 나눌 수 상대와 함께라면 좋치 않겠어요?


먼저 개발을 진행하기에 앞서 구현하려는 기능을 한 번도 만들어 본적이 없다면, 어느 정도 자신있게 개발을 진행할만큼의 학습이 필요합니다. 그 과정을 파일럿이고 표현했는데, XP 책에서도 파일럿이라고 헀었는지 잘 모르겠습니다. (뭐라고 했는지 찾아보려고 다시 살펴 봤는데 못 찾아서 그냥 썼습니다.)

그다음 과정은 좀 특이하게 바로 개발을 진행하지 않고, 인수 테스트를 만듭니다. 고객이 해당 작업이 완료 됐다는 것을 확인할 수 있는 모종의 장치를 마련하는 것이죠. 고객이 코드를 볼 수 있다면 아주 행복할텐데, 봄싹은 다행히(?) 고객이 전부 개발자 입니다. 굳이 엑셀로 이쁜 포맷을 만들고, 테스트에서 엑셀 로딩해서, 결과를 엑셀에 다시 찍어주고, 고객은 엑셀에서 수식 비교로 해당 테스트가 잘 됐나 안 됐나 확인하는 귀찮은 일은 할 필요가 없습니다. 그렇치만, 인수 테스트 코드가 고객이 원하는 시나리오를 제대로 표현해주지 못하거나, 고객이 개발자인데도 테스트 코드를 읽기가 난해하다면 테스트를 수정해야겠죠.

그다음은 페어 프로그래밍과 TDD로 해당 작업을 구현하는 일입니다. 페어 프로그래밍은 사실 오프라인에서 만났을 때의 얘기지 주중 저녁이나 회사에서 틈틈히 코딩을 하는 봄싹 개발자에데는 다소 난해한 일입니다. 그래도 메신저등을 통해서 의견은 주고 받을 수 있으니 그것도 페어 프로그래밍으로 치도록 하죠.

그렇게헤서 작업이 끝나면, 담당자 두 명은 자신들이 예상했던 난이도와 시간에 비해 실제로는 난이도가 어땠으며 실제로 소요된 시간은 어느정도인지 기록합니다. 고객은 해당 작업 결과를 본 뒤 간략한 피드백을 줍니다. "담부턴 더 빨리 만들어 주세요" 라던지.. "참 잘했어요" 라던지 ㅋ

top

Write a comment.


[봄싹] XP 적용 시나리오 2. 배포 계획하기

모하니?/Coding : 2009. 10. 29. 00:43


봄싹이 언제 배포됐었더라... 기억이 가물가물 합니다. 8월 30일이었나. 이제 두 달을 향해가고 있군요. 다음 배포 일정은 임의로 11월 30일로 잡아두었습니다. 세 달은 지나치게 긴 것 같습니다. 이미 봄싹 개발자들끼리는 새로운 UI를 만끽하고 있는데 봄싹 회원들에게 멋진 UI를 빨리 보여드리지 못하는게 아쉽습니다. 배포 일정과 스코프를 잘못 계획했기 때문입니다. UI 개선만을 1차 유지보수 스코프로 정하고 배포했다면 이미 봄싹 회원들은 멋진 UI를 감상하고 계실텐데 말이죠...


먼저 배포 일정을 잡은 다음, 모든 개발자들의 측정이 완료된 스토리 카드 중에서 해당 일정 안에 개발을 할 수 있을 것으로 보이는 스토리 카드들을 고릅니다. 이 일은 전적으로 고객이 합니다. 고객 생각에 어떤 것이 가장 필요하고 비즈니스에 도움이 되는지 생각해서 고르면 되겠죠. 일단 최대한 빨리 중요한 것부터 서비스하고 싶다면 다소 어렵고 일정이 긴 스토리 하나만 고를 수 있겠고, 중요한 건 나중에 공개하고 일단은 기반이 되는 소소한 것들 부터 서비스하고 싶다면, 쉽고, 개발 일정이 짧게 걸릴 것으로 측정된 것들을 고르면 되겠습니다.

그런다음, 하나의 스토리를 구현하는데 필요한 세부 작업들을 개발자들과 논의합니다.

"발표 도메인 객체를 추가해야겠습니다."
"발표와 모임 객체에 연관 관계를 설정해야 겠어요."
"발표에 댓글/첨부자료/발표자 정보가 필요하겠군요."
"새로운 모임을 추가할 때 아예 발표 정보도 추가할 수 있도록 하죠."
"스프링 웹 플로우 학습이 필요할 것 같습니다."
"발표정보 추가할 때 발표자를 선택하는 부분에서는 Ajax를 도입할 수도 있겠네요."
...

이런식으로 하나의 스토리를 구현하는데 필요한 세부적인 작업목록들을 만들어 나갑니다. 이때, 개발자들이 의견을 많이 주어야 하며, 작업 목록 작성은 고객이 담당합니다.

고객이 작업 목록 하나를 작성할 때 마다, 스토리를 등록했을 때 처럼, 평가하는 과정을 거칩니다. 해당 작업은 덩어리가 너무 크다거나, 좀 더 명시적으로 수정해 달라거나 의견을 제시하면서 투표를 할 수 있죠. 혹은 고객이 명시한 작업을 코딩할 수 있겠다는 판단이 들면, 난이도, 걸리는 시간, 같이 작업하고 싶은 사람을 적어서 측정해줍니다.

고객은 가장 낮은 난이도를 제시한 개발자, 가장 낮은 시간을 제시한 개발자, 가장 많은 지명도를 가진 개발자 등의 정보 통계를 보고 해당 작업의 적입자를 찾아서 작업 담당자와 그 파트너를 지정해줍니다. 이렇게해서 하나의 작업에 두 명의 담당자를 지정해 주는겁니다.

그럼 이제 그 두명의 담당자는 서로 의견을 나눠가며 개발을 진행하면 되겠죠!

다음은 개발 과정에 대해 생각해보죠.
top

Write a comment.


[봄싹] XP 적용 시나리오 1. 스토리 만들기

모하니?/Coding : 2009. 10. 29. 00:21


봄싹 프로젝트 개발이 지나치게 자유롭다 보니 프로젝트 스코프도 애매해지기 시작했고, 현재 누가 어디를 얼만큼 개발했는지 파악하기가 힘들어졌습니다. 나름대로, 이슈트래커, CI 환경, VCS까지 갖출 건 다 갖추고 진행하고 있지만 그래도 뭔가 좀 부족한 감이 없지 않습니다. 그래서 XP 책에서 읽은 내용을 토대로 봄싹 나름대로의 개발 프로세스를 정리해볼까 합니다.

물론, XP installed 책에 나와있는 그대로 할 필요도 없고, 그 책도 일종의 권고사항이지 반드시 따라야 하는 건 아니것 같기 때문에 제 맘대로 봄싹에 필요하면서도 재미있게 개발을 진행할 수 있는 방법을 궁리해봤습니다. xp 책은 그런면에서 좋은 아이디어를 떠올리는데 아주 좋더군요!


먼저, 현재 이슈트래커나, 구글 그룹에 올리고 있는 할 일을 스토리로 정리하는 방법을 생각해봤습니다. 누군가가 고객의 입장에서 스토리를 하나 만듭니다.

"모임에서 있었던 발표 정보를 별도로 관리하면 좋겠다."

이런 카드를 만드는 순간, 그 사람은 고객이 됩니다. 그리고 해당 스토리를 수정/삭제/세부 스토리 등록 등을 하는 권한이 생기죠. 그리고 이 카드가 생기는 순간 모든 개발자에게 메시지가 갑니다. 평가해 달라고..

그럼 일부의 개발자들은 해당 스토리가 너무 애매하다고 더 구체적으로 설명해 달라고 "고치자"를 클릭하며 어떻게 고쳐달라며 '의견'을 제시합니다.

또 다른 일부의 개발자들은 해당 스토리가 너무 방대하다면 좀 더 세부적으로 쪼개 달라며 "나누자"를 클릭하고 어떻게 나누면 좋겠는지 '의견'을 제시합니다.

또 다른 일부의 개발자들은 현재 스토리를 개발할 수 있다는 판단하게 '얼마나 걸릴지', '난이도가 어느정도인지', '누구와 함께하고 싶은지' "측정"을 합니다.

모든 개발자들의 측정이 이루어지기 전까지 사용자는 개발자들의 의견을 반영하여 계속해서 스토리를 수정하거나, 스토리의 하위 스토리를 등록하게 되고, 개발자는 스토리가 변경되거나, 새로운 스터디가 추가될 때마다 계속해서 측정 또는 투표를 할 수 있습니다.

이런식으로 스토리를 정제해 나가는 겁니다. 재밌지 않을까요? JIRA를 어떻게 잘 설정해서 쓰면 이렇게 할 수 있을것도 같긴 한데.. 좀.. 복잡해 보이는 UI가 위 시나리오에 적당해 보이지는 않습니다. 적당한 툴이 있으면 좋겠는데 없으면 봄싹 이슈트래커도 나중에 만들어야겠네요.

다음은 이렇게 정리된 스토리들을 가지고 배포 계획을 세우는 방법에 대해 생각해보겠습니다.

top

Write a comment.


창의적인 일에 인센티브가 어떤 작용을 할까?

모하니?/Thinking : 2009. 10. 28. 17:31



재미있군요. 자막을 클릭하시면 한글 자막으로도 보실 수 있습니다.
top

  1. Favicon of http://blog.lckymn.com BlogIcon Kevin 2009.10.28 21:45 PERM. MOD/DEL REPLY

    아... 이거 지난달 중순쯤에 본거 같은데,
    경험에 비추어보면, 이건 사실인거 같다는 생각을 했습니다.

    암튼 그래서 저는 좋아하는거 하면서 살고 있습니다.
    돈 보다도... 가능하면 제가 원하는 시간에 원하는 일을 하려구요.

    기선님께서도 좋아하는 프로젝트를 진행중이시라 잘 아시겠지만,
    진짜 그렇게 해보니까 생산성이 엄청나게 향상 되더라구요.

    Favicon of http://whiteship.tistory.com BlogIcon 기선 2009.10.28 22:31 PERM MOD/DEL

    그러게요. 저도 저걸 보면서

    - 봄싹 사이트 개발
    - 회사 프로젝트
    - 번역

    등을 비교해 보니까 저는 봄싹 사이트 개발을 다른 것에 비해서 월등히 좋아하며 효율도 좋다는 것을 새삼 떠올릴 수 있었습니다.

  2. Favicon of http://lckymn.com BlogIcon Kevin 2010.06.02 14:38 PERM. MOD/DEL REPLY

    https://www.youtube.com/watch?v=u6XAPnuFjJc
    같은 사람의 같은 얘기를 다른 방식으로 설명하는 영상이 새로 나왔네요. :)
    좀더 세분화해서 자세히 설명하는듯...

    Favicon of http://whiteship.me BlogIcon 기선 2010.06.02 17:17 PERM MOD/DEL

    흑흑 그래도 전 인센티브가 좋아요.ㅋㅋㅋ

    Favicon of http://lckymn.com BlogIcon Kevin 2010.06.05 19:11 PERM MOD/DEL

    인센티브 좋죠. :) 저얘기가 꼭 돈을 적게 준다는 말은 아니고,
    돈 때문에 걱정하지 않을 정도로 주기는 하는데,
    중요한건 일에 대한 동기유발이나 창의적 사고를 하려는
    노력이 돈 때문이 아니라 좋아서 해야 훨씬 휼륭한 결과가
    나온다는 얘기겠죠. 그리고 돈만 가지고 하려고 하면, 오히려 악영향이...

    뭐, 다른 한편으로는, 실력있고 창의적인 사람이
    단순히 돈만 보고 자신이 일할곳을 고를것 같지는 않습니다.

    가령, 기선님께서 생각하시는 평균적 급여가 5라고 했을때,
    새로 일할 회사를 찾고 있습니다.
    15을 준다고 하는 회사는 단순한 일 반복에
    소프트웨어 설계니, 더 유지보수가 뛰어난 코드니 이런거
    일절 신경 안 쓰고 오늘만 대충돌고 문제 있으면
    다시 급조하고 이런 일만 반복하는곳이고,

    7정도 주는 회사는 내가 자유롭게 원하는것을 좀더
    연구해서 적용할수도 있고, 기본적으로 제대로 된
    설계를 통해 나중에 더 많이 들어갈 추가 비용이나
    시간낭비를 줄이고, 직원들의 적극적인 연구활동과 공부를
    보장하는 곳이 있다면, 어느곳을 택하겠습니까?

    저라면 5만 줘도 아니 4만줘도 후자를 택할것 같습니다.
    물론 다른 변수들이 있으니 그냥 단순 비교는 힘들겠죠.
    예를 들면 부양가족이 있다거나, 빚이 있다거나 기타등등의
    이유로 전자를 택하는 경우도 있을테고
    자기계발에는 관심없고 돈만 더주면 좋아서 전자를 택할수도 있고...

    제가 하고 싶은 얘기는 회사들도 이런점을
    신경써서 그런 근무 환경을 만드는것이 중요하지 않을까
    하는것입니다.

    Favicon of http://whiteship.me BlogIcon 기선 2010.06.06 21:59 PERM MOD/DEL

    그러게요.ㅎㅎ

    제 자신이 소모품 보다는 좀 더 의미있는 존재가 될 수 있는 곳이면 좋겠는데.. 그런곳을 찾기는 쉽지 않네요. 또 저를 소모품으로 쓰고 싶은 곳에서 저에게 주려는 페이도 역시.. 머 그닥;;

    결국.. 그렇게 중요한 인재가 될 수 있게 열심히 노력하는 수밖에 없을 것 같아요. 아직 제가 그렇게 필요없는 존재라는 반증이기도 하니까요..

Write a comment.




: 1 : 2 : 3 : 4 : 5 : 6 : 7 : 8 : ··· : 32 :