[Info]Tags categorized posts and contents patterns..

[AJAX] Ajax Code E xamples.. [Book] About the book.. [CSS] CSS Code E xamples.. [DB] Sql Code E xamples.. [DEV] All development stor...

2016년 4월 1일 금요일

[Hobby]FIFA 선수구성이 꽤 좋아졌다..

내 취미 카테고리의 첫글을 올린적이 있다.. 어찌보면 그 글에 대한 2탄격이 되겠다.. 시간상으로 보면 한 2~3 주 쯤이 지났다.. 우선 이미지부터 보면, 내 선수 구성이 아래처럼 바뀌었다..


과거 글과 비교를 해보면, 우선 선수가 좀 바뀌었다.. 이운재, 다니 아우베스, W.스네이더, L.모드리치 등등 이적해온 선수도 있고, 뽑기권에서 잘 뽑혀준 선수도 있고, 보상 아이템으로 받은 선수들도 있다..

웹에서 내 선수 목록을 보면 항상 아쉬운 대목인데 선발선수와 교체선수 말고, 후보선수도 좀 같이 보여줬음 좋겠다.. 그래야 내 선수 목록을 보기가 조금 더 편할 듯 한데 말이지..

무튼 상당히 좋은 선수들을 꽤나 모았다.. 그런데 이제 선수들 자체는 좋은 선수가 나름 보유가 되어서 선수에 대한 욕심 자체는 좀 없애려고 한다..

선수보단 기존 선수 중에 강화표식이 +1 로 되어 이있는 선수들을 +2 이상으로 바꾸려고 노력중이다.. 돈을 언제 모으냐도 문제지만, 한 선수당 예산은 특별한 경우가 아니라면, 2천만 전후로 검색해서 이적하려고 생각중이다..

웹에는 실제 게임상의 데이터가 늦게 업데이트 되는것인지 전설의 레전드 선수도 보유하고 있는데 해당 선수가 없다.. 된장.. 우선은 1차로 공격수쪽만 +2로 만들도록 해보자..

[UFC]맥그리거와 네이트 디아즈 UFC200 에서 재대결..

출처 : CBS 노컷뉴스

페더급 챔피언 코너 맥그리거(28, 아일랜드)와 네이트 디아즈(31, 미국)가 4개월 만에 리매치를 갖는다. UFC는 31일 "맥그리거와 디아즈가 오는 7월 10일(한국시간) 미국 라스베이거스 T-모바일 아레나에서 열리는 'UFC 200' 메인이벤트 웰터급 경기에서 맞붙는다"고 밝혔다.

맥그리거는 지난 6일 첫 번째 대결(UFC 196)에서 디아즈에 2라운드에서 서브미션 기술인 리어네이키드 초크로 패했다. 펀치 정확도와 횟수에서 앞섰지만 파워에서 밀렸다.



데이나 화이트 대표는 "페더급 타이틀을 방어하거나 디아즈와 라이트급에서 싸울 것을 제안하려 했지만 맥그리거가 웰터급에서 경기하고 싶어 했다"고 전했다.

My Comment..
UFC 팬이라면, 상당히 흥미로울 시합이 잡혔다.. 바로 맥그리거 VS 네이트 디아즈 전이다.. 벌써부터 흥분이 되는 것 같다.. 이미 과거 UFC 196 에서 시합을 했지만, 안타깝게도 맥그리거가 지고 말았다.. 그것도 서브미션으로 말이지.. 난 그 경기를 보면서 1라운드에서 맥그리거가 확실히 타격에서 앞섰기 때문에 당연히 이기겠다고 판단을 했다..

근데 이게 머야 ㅡ;;ㅡ.. 2라운드에서 갑자기 체력저하와 허공에다가 날리는 펀치들 그러다가 디아즈한테 몇 대 맞더니 정신을 못차리더란.. 이게 역시 체급차이구나 싶었다.. 물론 체급과 대진 상대를 가리지 않고, 도전한 맥그리거의 정신은 좋지만 아쉬운 결과임에는 틀림 없었다..

무튼 그 경기를 뒤로하고 UFC 200 에서 재대결 성사라니.. ㅋㅋㅋ.. 역시 맥그리거 답다.. 이번에는 제대로 준비를 해서 이겨주면 좋겠다.. 맥그리거가 악동 이미지가 있긴 하지만 보는 사람으로 하여금 흥분하면서 빠져들게끔 하는 매력이 있어서 그런지 상당히 좋다..

다만 한편으로는 불쌍한 사람이 있으니 바로 조세알도프랭키 애드가이다.. 이 둘은 맥그리거와 그렇게 싸우려고 노력을 했으나 맥그리거가 다른 체급가서 놀고 있는 바람에 닭쫒던 개가 되버린 셈이다.. 그래도 머 좋지 않은가.. 이 둘도 UFC 200 에서 잠정 챔피언 결정전으로 싸우게 되었으니..

누가 이기건 올해 말경에는 맥그리거와 통합 챔피언전을 한다고 데이나 화이트가 그랬으니 믿어봐야지.. 근데 워낙 말 바꾸기를 하는 CEO 라 어떻게 될지는 모르겠다..

맥그리거!! 화이팅이다.. 아뵤..!!!


[UFC]크리스 사이보그 UFC 198 로 데뷔..

우선 내 글로 시작을 해야 될 듯 하다.. 카테고리를 또 추가했다.. 이게 좋은 짓은지는 모르겠지만서도 그렇게 됬다.. 카테고리는 [UFC] 인데 미국의 이종격투기 단체이자 현 세계 1위 단체다.. 얼마전 [Hobby] 라는 카테고리도 추가하고 글도 올렸었다.. 

처음 생각은 같은 카테고리로 해서 작성을 할까 했지만, UFC 가 존재하는 한 지속적으로 볼거란 생각에서 추가하기로 마음을 먹었다.. UFC 의 모든 소식을 올릴 생각은 없다.. 

내가 관심있는 선수 그리고 관심있는 경기에 대해서만 올리고, 내 생각을 적을 계획이다.. 무엇보다 기사를 전체적으로 갖고 오기보단 일부분만을 발췌하려고 한다.. 내 기준에서 구태여 필요없는 내용도 있기 때문에..

그리고 일전에도 언급을 했지만 내 블로그는 IT 관련 개발이 주를 이루긴 하지만, 내 취미 내지는 관심사도 같이 올릴 것이기에 실천을 해본다.. ㅎㅎ

출처 : ㈜몬스터그룹 몬스터짐


크리스 ‘사이보그’ 저스티노(30, 브라질)의 꿈이 마침내 현실로 이뤄졌다. 그녀는 자신의 고향인 브라질 쿠리치바에서 개최되는 UFC 198을 통해 UFC 공식 데뷔전을 치른다. 하지만 동시에 사이보그는 아직도 론다 로우지(29, 미국)와의 대결을 꿈꾸고 있다.

최근 ‘TMZ스포츠’와의 인터뷰에서 사이보그는 “나는 여전히 로우지와 싸우고 싶다”고 밝혔다. 현재 사이보그는 UFC 198에서 레슬리 스미스(33, 미국)를 상대로 140파운드 계약체중 경기를 치를 예정이다. 현 UFC의 여성부는 사이보그의 체급인 페더급이 없기 때문. 따라서 많은 언론과 관계자들은 대부분 브라질 대회의 흥행을 위한 일회성 계약체중 경기가 될 것으로 예상하고 있다.



브라질 쿠리치바에서 개최되는 UFC 198을 통해 데뷔하는 크리스 '사이보그' 저스티노(사진=Zuffa, LLC)
브라질 쿠리치바에서 개최되는 UFC 198을 통해 데뷔하는 크리스 '사이보그' 저스티노(사진=Zuffa, LLC)


하지만 그녀는 “나는 이제 공식적인 UFC 파이터고, 로우지는 더 이상 챔피언이 아니다. 이제 로우지와 내가 싸우지 못할 이유는 없다”고 말했다. 이어 “홀리 홈이 로우지를 은퇴의 길로 내몰았다. 하지만 UFC 198 이후 로우지와 내가 뉴욕 매디슨 스퀘어 가든에서 다시 만난다면 모든 갈등을 종결지을 수 있을 것”이고 밝히며 자신의 UFC 경기가 일회성으로 그치지 않을 것임을 암시했다.

My Comment..
사이보그가 UFC 에 이적을 했다.. 선수 소개 홈페이지를 확인했으나 기사만 검색될 뿐 아직 홈페이지 내에 등록은 안된듯하다.. 무튼 사이보그가 UFC 198 에서 데뷔를 한다고 한다.. 개인적으로는 로우지와 시합을 했으면 했는데 그리 되지는 못했다.. 로우지가 홀리 홈 에게 지면서 상대적으로 좀 가치가 떨어진것은 아쉽긴하다.. 그리고 사이보그는 워낙 중소단체에서 강자로 보여지고 있지만, 솔직히 진짜 실력이 그정도일지는 의심스럽다.. 남성부에서도 그렇지만 타 단체의 챔피언이라고 해서 UFC 에 와도 허무하게 지기 때문에 그만큼 UFC 선수들은 레벨이 틀리다.. UFC 198 을 통해서 본인의 실력이 드러나겠지.. 남성부 경기만큼은 아니지만 살짝 기대가 된다..

[EP]Seoul GTUG 7th Event 세미나 후기..

출처 : Outsider's Dev Story https://blog.outsider.ne.kr/

지난 주 토요일인 3일 Seoul GTUG 7th Event에 갔다가 왔습니다. 세미나는 좀 오랜만에 갔다온 것 같습니다. GTUG는 Google Technology User Groups의 약자로 전세계적으로 각 나라별로 있는 유저그룹이라고 합니다.

Seoul GTUG 7th Event 공지

GTUG를 알게 된지는 몇달 되었는데 세미나에 참가해 보기는 처음인데 위 시간표에서 보는것 처럼 딱히 구글기술에만 집중하고 있는 것은 아닌듯 합니다. 딱히 유저그룹에 대해서 자세히 아는 내용은 없어서... 어쨌든 구글 사무실은 처음 가봤는데 깔끔히 잘해놨더군요. 음료수나 간식을 맘대로 꺼내먹을수 있게 해논 것은 참 맘에 들더군요. (세미나중에도 계속 먹게 되서 여기서 일하면 살찌겠다는 생각이...)

크롬 브라우져 기반의 웹 개발 : 허광남(OKJSP)
시간표에는 앱개발이라고 나와 있는데 사실 전화상으로 얘기하다보니 웹개발이 잘못 전달되어서 앱개발로 공지되었다고 합니다. 앞에 크롬브라우저 얘기가 있었기 때문에 물론 이 세션을 네이티브 앱개발로 생각한 분은 없을 꺼라고 생각합니다.

세션별로 시간할당은 없었던 듯 시간을 재보진 않았지만 생각보다 짧게 진행되었던 세션이었습니다. 크롬브라우저에 대한 소개와 크롬의 개발자 도구에 대한 간단한 사용법을 소개해주는 내용으로 구성되어 있었습니다. Kenu님은 항상 초심자레벨에 맞춰서 기술이나 문화를 보급하시는 걸 잘 하신다고 생각하는데 이번에도 개발자도구의 고급테크닉이라기 보다는 사용법 소개에 초점이 맞추어져 있습니다. 참가자중에 웹개발을 안하시는 분들이 꽤 계셨던 것인지 개발자도구에서 웹페이지를 동적으로 다루는 것에 사람들이 놀라는걸 보고는 약간 당황하기도 했습니다.(왠지 제가 아는건 다들 알고 있는것 같아서...)

About go : 김종민(Go 한국 커뮤니티 운영자)
구글이 2009년 발표했던 Go 프로그래밍 언어에 대한 소개였습니다.

Go는 2007년 9월에 구글의 20% 프로젝트로 시작되어 2008년 5월 풀타임 프로젝트로 승격되고  2009년 정식으로 발표를 하게 됩니다. 현재는 r59 안정버전입니다. 구글이 왜 새로운 언어를 만들었는가 하면 하드웨어의 발전에 비해서 소프트웨어의 발전이 현저히 느리고 의존성관리가 상당히 중요하며 기존의 가비지 컬렉터가 그다지 좋지 않는 등의 이유가 있다고 합니다. 그래서 Go에는 긍정적인 요소들을 집어넣었는데 프로그래밍하는 재미를 느낄 수 있게 하였고 정적타입이지만 동적타입처럼 느껴지며 가비지 컬렉터를 지원하고 기계어로 컴파일되기 때문에 빠르다는 요소들입니다.


C-like
1
2
3
4
5
6
7
package main

import "fmt"

func main() {
  fmt.Println("Hello World")
}

위 코드는 헬로월드 코드입니다. 변수는 var i int 처럼 정의하는데 특이하게 타입을 변수명 뒤쪽에 작성해 줍니다. 함수는 func f() {}와 같이 선언하며 함수에서는 여러타입을 한꺼번에 리턴할 수 있다고 합니다. Go의 팩키지들은 여기서 볼 수 있습니다.

goroutine등 여러가지 설명해 주시기는 했는데 문법위주의 설명이다 보니 정리하기가 쉽지는 않았습니다. Go에 대해서는 이름정도만 알고 세부적인 것은 전혀 모르고 있었기 때문에 가볍게 언어를 엿본것 만으로도 흥미로왔고 얼핏 본것만으로는 Scala와 접근하는게 약간 유사한 느낌이 들었습니다.(정적과 동적을 섞었다던지 세미콜론을 생략한다던지 하는 등) Go 한국 커뮤니티에서 더 자세한 정보를 얻을 수 있습니다.

푸딩얼굴인식으로 살펴보는 하이브리드앱 제작 사례 : 김민태(KTH)
ibare님의 세션으로 스터디말고 ibare님의 발표를 듣는건 처음인것 같은데 역시 깔끔한 PT는 인상적이었습니다.

하이브리드앱은 디바이스리소스에 HTML, CSS, JavaScript같은 표준 웹기술로 접근해서 앱을 제작하는 것을 이야기하는데 디바이스 리소스에는 Standard Device APIs, Device APIs, Device Elements등으로 접근을 합니다. Device APIs는 비표준이 많아서 현재는 W3C에서 표준화를 진행하고 있는데 이 표준화가 아직은 상당히 느리기 때문에 표준제정이전의 틈새를 메꾸는 역할을 하고 있습니다.

하이브리드앱의 사용을 고려할때 처음에는 표준 웹기술을 사용하기 때문에 네이티브앱보다 쉽게 만들 수 있다고 생각하기 쉬운데 생각보다는 진입장벽이 높습니다. 처음 하이브리드 개발을 하다보면 이 진입장벽때문에 차라리 네이티브앱으로 개발하는게 낫겠다는 생각이 들 정도라고 합니다. 이런 진입장벽은 접근방법 자체가 웹이랑 아주 다르기 때문이고 물론 이런 것을 도와주는 프레임워크나 라이브러리등이 존재 합니다.

하이브리드 프레임워크로는 가장 유명한 PhoneGap이 있고 Appcelerator Titanium도 있는데 Titanium은 폰갭과는 아주 다른 접근방법이 다릅니다. 이 밖에 worklight이나 폰갭을 커스터마이징해서 만든 app mobi가 있습니다. 과거 디바이스 API가 없었기 때문에 폰갭이 이를 지원해 주고 있는데 현재는 표준화가 진행되고 있기 때문에 표준화가 이루어질때까지만 유요한 과도기적인 역할을 하는 것이 아니냐는 이야기가 있는데 app mobi는 그 다음을 타게팅하고 있습니다. 그래서 app mobi는 모바일 클라우드를 지향하며 모바일에서 필요한 빌링, 회원등등의 것을 쉽게 구축할 수 있도록 해주고 있습니다. 그리고 KTH에서 개발한 APPSPRESSO가 있고 APPSPRESSO는 푸딩얼굴인식 하이브리드앱을 개발하는데 사용되었습니다.

하이브리드 앱 개발을 할 때 고려해야할 다음과 같은 체크리스트가 있습니다.

  • 자바스크립트 프레임워크의 사용여부 : 푸딩얼굴인식을 개발하면서 jQuery mobile, jQtouch, Sencha Touch를 다 고려해보았지만 결국 포기했습니다. 만들고자 하는 UI가 확정된 상태에서 UI를 제공하는 이런 류의 프레임워크를 사용할 경우 프레임워크의 UI를 완전히 커스터마이징해야 했기 때문에 그냥 jQuery를 사용하기로 결정하고 필요한 부분에 마이크로 프레임워크를 사용하기로 결정하였고 스크롤을 위해서 iScroll을 사용하였습니다.
  • 카메라와 갤러리 : 디바이스의 카메라와 갤러리를 사용하기 위해서 표준을 선택할 것이냐 비표준을 선택할 것이냐의 문제입니다. waikiki 디바이스 API가 선택했으며 사용방법이 W3C와 상당히 유사합니다. 표준 API가 폰갭보다는 사용하기가 약간 더 어렵습니다.
  • 이미지를 사용할 것이냐 CSS를 사용할 것이냐 : 디자인 작업에서는 디자이너와 부딪히는 일이 아주 많습니다. 디자이너와 개발자의 관점이 아주 다르기 때문에 이미지를 사용할 것이냐 CSS를 사용할 것이냐 하는데 많은 어려움이 있습니다. 디자이너는 이미지를 선호하는데 이미지로 갈 경우 다양한 해상도에 따라 모든 이미지를 만들어 주어야 하는 어려움이 있어서 개발자는 이미지를 그대로 CSS로 만들어서 적용하지만 개발자가 보기에는 똑같이 만들었지만 디자이너의 눈에는 똑같지 않기 때문에 여기서 많은 논쟁이 발생합니다.(개인적으로 웹디자이너가 보통 웹을 웹으로 보지 않고 출판물정도로 본다고 생각하기 때문에 크게 공감한 부분입니다.)푸딩얼굴인식의 경우에는 개발자가 이겨서(?) CSS를 선택했습니다.
  • Animation과 Transition : 애니메이션이나 트랜지션을 자바스크립트로 할지 캔버스를 사용할지 CSS로 사용할지 선택해야 합니다. 대단한 효과가 아님에도 불구하고 대부분의 안드로이드 폰에서는 성능이 제대로 나오지 않기 때문에 현재 시점에서는 CSS가 답이라고 생각합니다.
  • 스크롤링 : 아이폰만 지원하는 것이 아니라면 iScroll등을 사용하는 것이 좋습니다.
  • 국제화(i18n) : 네이티브앱에 비해서 하이브리드는 웹쪽부분만 국제화를 하면 모든 플랫폼에서 국제화를 적용할 수 있기 때문에 훨씬 편하고 실제로 다국어 적용에 2주정도밖에 걸리지 않았습니다. 특히 푸딩얼굴인식에서는 모두 CSS를 사용했기 때문에 더 빠르게 작업할 수 있었으며 이미지로 했다면 모든 다국어용 이미지를 새로 만들어야 했을 것입니다.

하이브리드앱은 최초 접근에는 상당한 시간이(오히려 네이티브보다 더) 걸리지만 그 이후부터는 다국화 적용이나 다양한 플랫폼의 수정사항을 적용하면서 그 장점이 드러나기 시작합니다. 그리고 게임같이 특수한 경우가 아니라면 네이티브앱 수준으로 성능을 올릴 수 있습니다.

이번 세미나에서 가장 만족스러운 세션이었습니다. 푸딩얼굴인식을 하이브리드로 개발하면서(푸딩얼굴인식은 최초 아이폰 버전만 네이티브로 개발되었으며 이걸 똑같이 구현하는 것을 목적으로 하이브리드앱으로 구현하였으며 안드로이드 버전과 iOS의 다국어 버전은 하이브리드앱으로 만들어져 있습니다.) 실제적으로 느낀 구체적인 경험을 나누어주었기 때문에 다른데서는 얻기 힘든 실용적인 정보들로 가득한 세션입니다. 단순히 하이브리드앱으로 해보자 하는 수준정도가 아닌 하이브리드앱의 한계와 어떻게 하면 더 좋은가를 위해서 엄청난 실험과 테스트를 진행했었는지를 느낄 수 있는 세션이었습니다. 하나의 서비스를 위해서 이렇게 많은 실험과 시도를 할 수 있는 문화가 부럽더군요.

모바일 클라우드 애플리케이션 개발 : Brian Lee(Seoul GTUG 운영자)
자바로 작성하면 자바스크립트까지 만들어주고 자바객체를 클라이언트와 서버가 쉽게 주고 받을수 있는 GWT를 소개하고 앱엔진에 대한 소개로 이어졌습니다. 앱엔진은 얼마전 가격정책이 바뀌어서 사용자들이 좀 동요하고 있는 상황이고 데이터스토어도 내부에서 제공하고 있으며 쉽게 배포할 수 있다는 장점이 있습니다. C2DM은 구글에서 제공하는 푸쉬서버로 실제로 테스트를 하려면 물리적인 서버와 단말기가 필요하며 registration id로 어떤 단말의 어떤 앱인지를 인식할 수 있는 인증 과정이 필요합니다. 이 기술들을 이용해서 만든 예제인 Cloud Task를 보여주셨습니다.

사실 이때부터는 체력이 떨어져서 세션에 많이 집중을 하지 못한 관계로 정리를 제대로 못하겠군요 ㅡㅡ;;

Epilogue
전체적인 느낌은 하이브리드앱세션 말고는 지루한 느낌이 들었습니다.(좀 더웠던 것도 한몫한듯 합니다.) 당초 5시까지 예정되어 있던 세미나도 6시가 넘어서 끝난 것 같고 별도의 공지도 없이 시간표에 있던 LETS는 진행하지 않았고 예정에 없던 아이스브레이킹을 위한 3 keywords가 2세션이후에 갑자기 진행되었기 때문에 진행에 대해서는 별로 만족스럽지 못했습니다. 개인적으로 아이스브레이킹을 별로 안좋아하는 편이기도 하지만 옆사람과 대화할 일이 별로 없는 세미나에서 중간에 갑자기 아이스브레이킹을 하는 것은 좀 당황스러웠고 3 키워즈는 자신을 나타내는 3가지 단어를 적고 돌아가면서 2분씩 계속 얘기하는 것인데 이게 집중된 시간에 빠르게 대화를 하는 것이다 보니 생각보다 피로도가 많이 느껴지고(저같은 타입은 더욱이) 그 이후 세션에도 이 피로도가 좀 영향을 끼친듯 합니다. 물론 세미나에서는 한세션만 건져도 충분히 갈 가치는 있었다고 생각합니다. 


[JS]JSON 생성시 Key값을 동적으로 할당하기..

출처 : Outsider's Dev Story https://blog.outsider.ne.kr/

JSON은 아주 유용하고 간편한 데이터 스트럭처이고 다들 아시다 시피 아래와 같이 사용합니다.


JavaScript
1
2
3
4
var something = { 
   name: 'Outsider',
   blog: 'http://blog.outsider.ne.kr'
}

키와 값의 쌍으로 이루어져 있으며 키는 위와 같이 임의로 작성할 수 있고 또는 쌍따옴표나 따옴표를 이용해서 "name": "Ousider" 와 같이 작성할 수 있습니다. 하지만 키값에는 문자열을 그대로 사용하기 때문에 키값을 동적으로 해주어야 할 필요가 있을때는 위와 같이 사용할 수 없습니다.


JavaScript
1
2
3
4
var keyname = '';
var something = {
   keyname + 'postfix' : 'value'
}
예를 들어 위와 같이는 작성할 수 없다는 의미입니다. 값부분에는 함수나 스트링을 이어붙혀도 자동으로 처리해주고 변수도 사용할 수 있지만 키부분에는 그런 처리가 되지 않기 때문에 동적으로 키값을 할당해야 할 필요가 있을 때는 위와같이 해 줄 수 없습니다.


JavaScript
1
2
3
4
var keyname = '';

var something = { };
something[keyname + 'postfix'] = 'value';
위와 같이 [] 방식으로 프로퍼티를 설정하는 방법을 이용하면 키값을 동적으로 설정할 수 있습니다.

My Comment..

흠.. 햄처럼은 안해봤다.. 대부분 기본 제공되는 가공된 JSON 형태로만 사용했기 때문에.. 위와 같은 방식으로 사용할 기회가 생기면 한번 해봐야겠다..

[DEV]MVVM 패턴에 대해서..

출처 : Outsider's Dev Story https://blog.outsider.ne.kr/

MVVM 패턴은 Model-View-ViewModel패턴의 약자입니다. Knockout.js이 MVVM패턴에 기반을 두고 있기 때문에 본격적으로 만져보기 전에 MVVM을 어느정도 이해할 필요가 있을 것 같아서 이리저리 좀 살펴보았습니다. MVVM은 Microsoft의 John Gossman이 WPF와 Siverlight의 아키텍쳐중 하나로 2005년 자신의 블로그에 공개를 했으며 현재도 WPF와 Siverligh쪽에서 많이 쓰이고 있는 패턴입니다. (Knockout.js도 조만간 살펴보것이긴 하지만 FRENDS 블로그에 공식문서가 번역되어 있습니다.)

MVVM 이란...
앞에서도 얘기했듯이 MVVM은 Model-View-ViewModel을 이야기하고 MVC가 모델, 뷰, 컨트롤러로 이루어져있다면 MVVM은 모델, 뷰, 뷰모델로 이루어진 패턴입니다. 일반적으로 MVC가 가장 많이 쓰이고 잘 알려져 있기 때문에 MVC랑 비교해 볼 필요가 있을듯 합니다. MVVM도 MVC의 변종으로 볼 수 있고 다른 변종으로는 MVP(Model-View-Presenter)도 있습니다.(사실 대부분의 MVVM문서가 WPF와 Silverlight를 기반으로 설명하고 있었기 때문에 패턴만 따로 개념을 잡기가 만만치 않았습니다.)

MVC - 아키텍처의 최상위에 뷰가 있고 그아래 컨트롤러가 있고 그 아래 모델이 있습니다. 때문에 뷰는 컨트롤러만 알고 있고 컨트롤러는 모델을 알고 있습니다. 모델이 변경되었을 때 뷰는 컨트롤러를 통해서 통보를 받습니다.

MVP - MVC에서 컨트롤러가 Presenter로 교체된 형태이고 프리젠터는 뷰와 같은 레벨에 있습니다. 프리젠터는 뷰와 보델의 이벤트를 모두 받으면서 둘 사이의 상호작용을 조정합니다.

MVVM - MVC에서 컨트롤러가 뷰모델로 교체된 형테이고 뷰모델은 UI레이어 아래에 위치합니다. 뷰모델은 뷰가 필요로 하든 데이터와 커맨드 객체를 노출해 주기 때문에 뷰가 필요로하는 데이터와 액션은 담고 있는 컨테이너 객체로 볼 수도 있습니다.



MVVM은 왜 다른가?
MVVM이 MVC와 다른 점은 뷰모델은 뷰를 지원하고 뷰가 필요한 데이터와 커맨드를 제공하기 위해서 만들어졌다는 것입니다. 이름그대로 뷰모델은 뷰를 위한 모델이며 뷰모델을 뷰에 바인딩할 때 가장 강력합니다. 여러가지 뷰를 제공하는 일반적인 객체가 아닌 각 뷰에 맞춰서 만들어진 것입니다. 때문에 뷰는 뷰모델에 대해서만 알고 있으면 되고 그외의 아키텍처에 대해서는 신경쓰지 않아도 됩니다.

그래서 MVC와 가장 다른 점은 커맨드와 데이터바인딩이라고 할 수 있습니다. 이 2가지 요소로 인하여 뷰와 컨트롤러(MVVM에서는 뷰모델)의 관계를 끊을 수 있습니다. 커맨드를 사용함으로써 비헤이비어를 뷰모델에서 정의한 특정한 뷰액션과 연결할 수 있습니다. 데이터바인딩 특정한 뷰 속성과 뷰모델의 속성을 연결할 수 있도록 하고 뷰모델에서 속성이 변경되었을 때 뷰에 반영이 됩니다.

사실 패턴이기 때문에 설명만으로는 감을 잡기가 어려운 부분이 있었습니다.(다른 패턴들도 비슷하다 생각합니다.) knockout.js를 쓰다보면 좀더 감이 올듯 합니다.

참고문서:
5 Minute Overview of MVVM in Silverlight
What is the difference between MVC and MVVM?
Overview of the ModelView ? ViewModel (MVVM) pattern and data-binding
MVVM and jQuery: Designing Maintainable, Fast and Versatile Sites


My Comment..
딱히 내가 쓰는 언어이거나 패턴은 아니지만 가져왔다.. 이유는 MVVM 이라는 패턴 자체도 처음 들어봤지만 비단 이것만 새로 듣는건 아니긴 하지만 그래도!!! 이런 새로운게 있구나 싶어서 약간의 스터디성?? 이라고 해야될까.. 그런 개념에서 가져왔다.. 근데 읽어보니 햄 말처럼 설명만 있고, 내가 직접 사용하는게 아니어서 그런지 감을 잡기가 좀 애매하다.. 

[Book] 클라우드컴퓨팅 애플리케이션 아키텍처..

출처 : Outsider's Dev Story https://blog.outsider.ne.kr/

클라우드컴퓨팅 애플리케이션 아키텍처 - 6점
조지 리스 지음, 신현석 옮김/지&선(지앤선)

사실 저는 클라우드는 상당부분이 마케팅용어라고 생각합니다. 물론 명확한 영역이 있습니다. Google App Engine이나 AWS같은 경우는 누구나 클라우드라고 부르는데 동의할 것이고 웹호스팅 같은 경우를 클라우드라고 부르지 않는데도 동의할 테지만 그 외에 클라우드라고 정의하기가 애매한 영역들이 확실히 존재합니다. 그런 부분들은 대개 마케팅을 위해서 클라우드로 스스로 분류하고 있고 그렇기 때문에 클라우드가 상당부분 마케팅용어라고 생각하고 혹자는 그래서 뜬구름 잡는 듯한 개념이라서 클라우드라고도 합니다.

제목 그대로 클라우드 컴퓨팅에 대한 이야기로 좀 더 정확히 말하면 Google App Engine이나 아마존의 AWS, S3, EC2같은 IaaS나 PaaS같은 클라우드 서비스에 대한 책이라고 할 수 있습니다. 이 책에서는 상당부분을 클라우드의 범주에 넣고 있습니다. 일반적으로는 웹앱정도로 분류할 수 있는 것도 SaaS의 범주에 넣어서 클라우드에 포함시키고 있지만 저는 이부분에는 크게 동의하지 않습니다. 하지만 책의 내용 대부분은 보통 IaaS라고 부를수 있는 Infrastrucure as a Service들을 중심으로 다루고 있기 때문에 이런 부분에 대해서 개인적인 생각들은 책을 읽는 중 전반적으로 불편함을 느끼거나 하지는 않습니다.

책의 번역품질은 아주 최상은 아니지만 일부 거슬리는 점이 몇몇 존재하는 것 외에는 무리없이 이해하면서 읽을 수 있는 수준이 됩니다. 일단 리던던시나 컴프라이언스 같은 단어는 제 입장에서는 그리 일반적인 단어는 아니라고 생각하는데 별도의 설명없이 위의 단어들을 그대로 사용하고 있습니다. 아주 일반적이지 않은 단어들이 의미에 대한 설명이 있었으면 더 좋았을 것 같습니다.

여기서는 아마존의 클라우드 서비스들을 중심으로 상당히 다루고 있고 대표적으로 EC2(Elastic Cloud Compute)나 S3(Simple Storage Service)를 중심으로 설명하고 있는데 이런 서비스의 사용방법들도 설명하고 있기는 하지만 전체적인 초점은 클라우드 서비스의 How-to라기 보다는 기존의 호스팅이나 매니지드 서비스에서 클라우드로 넘어갈 때 어떤 고민들이나 준비를 해야 하는지에 대해서 설명하고 있습니다. 그렇기 때문에 클라우드를 이해하는데도 어느정도 도움이 되지만 실제 클라우드 서비스로 이전하기 위해서 고민을 하고 있다면 이 책은 크게 도움이 되리라고 생각합니다.(Google App Engine이나 마이크로소프트의 Azure는 간단한 정도로만 다루고 있습니다.)

초반에는 S3가 어떤 특징들이 있고 어떻게 사용해야 하는지와 EC2의 개념들.. EC2에서 AMI가 무엇이며 어떤 특징들이 있고 명령어들을 통해서 어떻게 셋팅하고 사용할 수 있는지를 설명해 주고 있습니다. 기존에 이 서비스들을 사용해 보지 않았다고 하더라도 전반적인 개념을 이해할 수 있도록 적당히 잘 다뤄주었다고 생각합니다.

그 뒤부터는 클라우드서비스로 이전하기 위해서 어떤 고민들이 필요한지에 대해서 본격적으로 얘기하고 있습니다. 소프트웨어에 대한 라이센스에 대해서 어떤 고려가 필요한지나 비용산정은 어떻게 해서 기본의 매니지드 서비스와 비교할 수 있는지.. 직접 서버운영을 했을때와 클라우드를 이용할 때를 비교했을때 어떤 장점과 단점이 있고 서비스 하려는 형태에 따라 무슨 기준을 가지로 비교해 보아야 하는지를 설명해 줍니다. 본격적으로 클라우드의 이전에 대한 얘기로 넘어가서 클라우드에서 서비스를 운영할 때 프로그램적으로 고려해야 할 부분이라던지 디비관리나 보안을 위해서 아키텍쳐를 어떻게 유지해야 하는지를 알려줍니다.그 뒤에는 보안관리나 법적 이슈들 그리고 재해 복구에 대한 대책에 대해서 자세히 설명해 주고 있습니다.

기본적으로 이 책을 통해서 아마존 EC2와 S3에 대한 사용범을 꽤 자세히 알 수 있고 클라우드에 대해서 잘 모른다면 클라우드의 특징들에 대해서도 이해할 수 있지만 앞에서 말했듯이 이 책의 저자는 실제로 클라우드로 자사의 서비스를 이전하고 솔루션화하면서 얻은 지식을 토대로 하고 있기 때문에 실무 경험을 통해서만 얻을 수 있는 클라우드 서비스에서의 준비사항에 대해서 상당히 디테일하게 알려주고 있습니다. 실제 클라우드 이전을 하면서 참고하면 큰 도움이 될 내용들이 가득 들어있습니다.(사실 저는 이전에 클라우드 하면 인프라적인 장점만 생각하고 있었지 보안이나 법적 이슈에 대해서는 단 한번도 생각지 못했는데 그런 부분에 대해서도 알게 되었던 점이 좋았던 것 같습니다.) 



[Book] Building Web Reputation Systems..

출처 : Outsider's Dev Story https://blog.outsider.ne.kr/

Building Web Reputation Systems - 6점
Farmer, F. Randall
Oreilly & Associates Inc

처음으로 읽어 본 원서입니다. 확실히 원서는 오래걸리는군요. 중간에 딴짓도 하고 일반적인 개발서적과도 좀 다르고 하다보니 2달정도나 걸린것 같습니다. ㅡㅡ;; 웹 명성(Reputation) 시스템을 구축하는 것에 대해서 설명하는 책이고 기술에 대한 것이라고 보다는 명성시스템을 어떤 정책으로 만들어야 하는지에 대해서 설명하고 어떤 아키텍쳐를 가져야 하는지에 대해서 설명해 주고 있는 책입니다.

여기서 명성 시스템이라는 것은 대부분의 웹서비스들이 가지고 있는 내공, 포인트등을 의미하는 것으로 이베이의 판매자의 상품지수라던지 스텍오버플로우의 컨텐츠에 대해서 매겨지는 점수등을 포함하여 웹서비스에서 유저나 컨텐츠등에 대해서 매겨지는 포인트와 어뷰징지수를 모두 포함하고 있습니다. 개인적으로 명성시스템에 대해서 고민해 볼 일이 있어서 집어들게 되었습니다. 참고로 전체 아키텍쳐에 대한 설명을 제외하고는 개발 소스라던지 기술에 대한 내용은 전혀 나오지 않습니다.

이 책은 표지에도 Yahoo! Press라고 써있듯이 대부분의 예시가 야후의 서비스를 가지고 설명하고 있습니다.(지금은 거의 무너졌지만 그래도 야후가 참 많은 시스템을 시험했구나 하는 생각이 듭니다.) 이 책은 2010년 3월경에 나왔는데 야후가 국내에선 메이저에서 사라진지 좀 된 관계로 여기서 소개되는 많은 서비스는 잘 모르는 서비스들입니다. 디테일한 내부 구조를 설명할때는 대부분 야후의 서비스를 가지고 설명하지만 그외 아마존이나 이베이, Stackoverflow, Digg등의 대표적인 서비스들에 대해서도 언급이 나오고 심지어 Naver의 지식인도 좋은 사례로 소개되고 있습니다.

약간 흔치않은 주제의 책이기는 한데 저자가 명성시스템에 대해서 경험도 많고 연구도 많이 했다는 느낌을 받을 수 있도록 상당히 체계적으로 설명하고 있습니다. 처음에는 명성이라는 것이 어떤 것이고 구체적으로 어떤걸 명성이라고 해야하고 어떻게 평가하는지 웹에서는 명성이라는 기준이 어떻게 되는지 설명하고는 각 명성시스템이 어떤 구조로 적용되고 명성시스템의 종류들과 특징들에 대해서 설명하면서 각 시스템의 장단점과 명성타입(별랭킹, 커멧트랭킹)들의 특징들과 어떤 효과가 있는지 세세하게 설명해 주고 있습니다. 그렇게 평가한 명성값들을 어떻게 정량화하고 사용자들에게 어떻게 보여주고 그랬을때 어떤 영향이 있는지를 사례를 들어서 설명해 주기 때문에 명성시스템을 고려한다면 꽤 도움이 될 만합니다.

중반이후부터는 어뷰징에 대해서 상단부분을 할애하고 있으며 명성시스템에서 어뷰징 이슈는 항상 발생할 수 있고 이건 명성시스템을 망가뜨릴 수 있기 때문에 무엇으로 평가하고 어떻게 대처하는지를 야후서비스들을 사례로 설명하고 있습니다.(어뷰저와 트롤(Troll)을 구분해서 얘기하는 것도 인상적이었습니다.) 후반부에는 이러한 명성 시스템은 어떤 아키텍처로 구성해야하는지를 설명하고 있습니다. 설계적인 부분이기 때문에 디테일한 기술까지는 들어가지 않지만 참고할 만 합니다.

물론 원서를 가지고 읽은 것이기 때문에 상당부분은 깊게 이해못하기도 했고 기술서적이 아니고 개념에 대한 설명을 계속 하기 때문에 약간 지루한 감도 있었습니다만 웹서비스에서 명성시스템은 아주 중요한 부분이기 때문에 명성시스템을 고려중이라면 참고할 만 하다고 생각합니다.



[Talk]SPRING CAMP 2016 참가신청..

SPRING CAMP 2016..!!

일전에 스프링 캠프 세미나 소개를 한적이 있다.. 첫 세미나여서 신이나게 소개를 했는데 오늘부터 참가신청이라 달력에 표시를 해두고서 출근하자마자 신청 완료..!!

스프링 캠프 사이트를 들어가면, 과거와는 틀리게 아래처럼 등록 버튼이 생성되어 있다..



해당 버튼을 클릭하면, 난 사이트 내에서 세미나 등록이 이루어지는줄 알았는데 왠열 ㅡ;;ㅡ 다른 사이트로 이동하더라.. 처음 보는 사이트였는데 ONOFFMIX 라는 사이트였다.. 아마도 어지간한 행사나 연예인들의 콘서트 등등 참가신청 처리를 위한 사이트인 모양이다.. 링크를 타고 들어가면, 참여하기 버튼이 보인다..



버튼을 누르고 들어가면, 요렇게 정보를 적으면 된다.. 개인정보라고 해봐야 이메일과 연락처인데 나는 머 딱히 전화번호 공개하는 걸 꺼려하지는 않는편이어서 과감하게 내가 적은 정보를 공개한다.. ㅋㅋㅋ..



신청을 하고나면 대기자가 된다.. 근데 거기서 이제 계좌이체를 해야되는데 보통 이체할 때 보내는 사람 표식이 대부분 본인 이름으로 되어있다.. 그 부분을 본인이름 + 전화번호 뒷 4자리로 해야된다.. 요렇게 말이지.. "심철용7920" 아래 이미지에도 보면 참가신청 아랫부분에 공지가 있다..



근데 난 ㅠㅜ.. 저걸 뒤늦게 봐서 운영팀에 문자를 했다.. 참가신청 후 계좌이체를 했는데 규칙을 안지켰다고 처리점 부탁드린다고.. 다른 사람들은 혹시라도 실수하지 않기를..

이제 참가신청을 받고 그래서 그런지 커리큘럼도 나와 있었다.. 아래가 커리큘럼이다.. 커리큘럼은 본사이트에도 올라와 있으니 그쪽에서 참고를 해도 될 듯..



내가 선택하려는 부분을 빨간색으로 표시했는데 표 밑에 주석처럼 초급, 중급, 고급 으로 나뉜다.. 난 개발은 9년차이긴 하지만, 실질적으로 아는건 별로 없기에 알더라도 정리가 안되었고, 무엇보다 이런 세미나가 첨이니까 초급인 Track A 를 선택했다..

첫 세미나여서 그런지 상당히 기대가 되기도 하고 빨리 4월 30일이 와서 세미나 참가해서 사진도 좀 찍고 후기도 남기고 싶고 하다.. 무엇보다 가서 내 마음과 머리가 좀 열리고 자극도 되는 시간이 되었으면 한다..

음.. 이 곳에 누가 그리 와서 이 글을 읽을지는 모르지만, 당신이 개발자라면, 어서 신청하러 고고싱..!!! 나처럼 뒤늦게 후회 하지말고 말이지.. ㅎㅎㅎ..