maven 을 쓰고 있다면 간단한 명령으로 바로 tomcat 에 바로 디플로이 해서 테스트 해볼 수 있습니다.

mvn tomcat:run

만 하면 바로 실행할 수가 있습니다. 그런데 맘에 들지 않습니다. application root 때문입니다. http://localhost:8080/{war_name} 으로 실행이 되기 때문입니다. http://localhost:8080 으로 바꾸고 싶다면 간단하게 옵션을 줘서 바꿀 수가 있습니다.

mvn tomcat:run -Dmaven.tomcat.path=/

역시 간단하게 됩니다. 따로 옵션 주고 싶은 것도 추가해 주면 됩니다.

mvn tomcat:run -Dspring.profiles.active=local -Dmaven.tomcat.path=/

그런데 위와 같이 실행하면 tomcat version 6 으로 동작합니다. 최근에는 tomcat version 7 을 많이 쓰지요. tomcat 을 tomcat7 으로 바꿔서 명령을 날리면 동작하지 않습니다. 역시 간단하게 바꾸는 방법이 있습니다. 두가지 방법이 있지만 IDE 를 사용해서 개발하는 팀원하고 맞추기 위해서는 (저는 기본적으로 IDE 는 프로젝트 설정할 때만 사용합니다) pom.xml 을 바꾸는 것을 올바른 방법이 아니라고 생각해서 다른 방법을 택합니다.

OSX 기준으로 maven 을 brew 를 이용해서 깔았다면 /usr/local/Cellar/maven/3.3.1/libexec/conf/settings.xml 를 열어서

<pluginGroups>
  <!-- pluginGroup
   | Specifies a further group identifier to use for plugin lookup.
  <pluginGroup>com.your.plugins</pluginGroup>
  -->
  <pluginGroup>org.apache.tomcat.maven</pluginGroup>
</pluginGroups>

와 같은 식으로 <pluginGroup>org.apache.tomcat.maven</pluginGroup> 를 추가해 줍니다. 그리고 다시

mvn tomcat7:run

와 같이 실행하면 tomcat version 7 으로 실행이 되는 것을 확인할 수가 있습니다.

대충은 어디 있는지 알지만 정확한 위치를 모르고 책을 보다 보면 헷갈릴 수가 있어서 유명한 무림 지도 두개를 퍼왔습니다. 



아래 사진은 주로 김용 소설에 나온 곳이 되겠군요. 



처음 스위프트 (Swift : 혹 수입푸드 라고 부르는 사람들도 있음 ㅋㅋ) 개념을 보았을 때, VM (Virtual Machine) 같은 개념으로 여겼습니다. '뭐 또 빠르게 개발은 될 지 모르겠으나 동작은 느린애가 되겠군' 라고 생각하며 안 보고 있다가. 최근에 보니 이게 컴파일러용 언어였더군요. 플레이그라운드(Playground) 개념은 잽싸게 컴파일 해서 그 결과를 보여줘서 interactive 하게 보일지 모르지만 실은 컴파일 언어였습니다. 


개념이 재미 있는데다가 컴파일된 바이너리가 기존의 Object-C 언어로 만들어진 것보다 속도가 2.8 배가 빠르다는 것을 보고 관심이 가더군요. 그래서 언어 개요를 가볍게 살펴봤습니다. 

iOS 기기를 가지고 있으면 iBooks 에서 공짜로 프로그래밍 언어에 대해서 설명한 책을 받아볼 수가 있습니다. 물론 그런것이 없는 분들을 위해서 사이트에서도 제공됩니다. 그리고 정말 훌륭하신 분들이 해석해서 사이트에 올려둔 곳도 존재하더군요. 


Swift 언어 가이드 


에서 참조하실 수 있습니다. 저는 프로그래밍 언어 자체에 노력을 많이 기울이는 편은 아닙니다. 애초에 Swift 가 필요한 이유는 iOS 나 Cocoa 용 앱을 빠르게 만들기 위함이 아니겠습니까? 그렇다면 실전에서 익히고 어렵거나 이해가 안가는 부분을 찾아서 공부하는 것이 조금 더 '실용적' 이라고 생각하기 때문입니다. (실은 예전에 프로그래밍 언어 그 자체만 공부하다가 지치거나 중간에 흥미가 떨어져서 응용해 보지도 못한 적이 여러번 있기 때문입니다. - 마치 영어를 공부해야 하는데 어떻게 하면 영어 공부를 잘하는 법을 공부하는 경우와 비슷하다고 하겠습니다) 


그래서 실전 튜토리얼을 찾아보다가 찾은 정말 훌륭한 동영상이 있더군요. 비록 한글이나 한국어로 된 것은 아니긴 하지만 기술 영어를 사용하고 있어서 쉽게 알아먹을 수가 있습니다. 영어도 공부하고 Swift 도 공부하고 1석 2조!! 


프로그래밍 경험 없는 사람이 쉽게 iOS 용 앱 (다 만들면 게임이 만들어 집니다) 만들기 


iOS 용 앱을 만들어 볼려고 했는데 엄두가 안 나신분 들에게 강력 추천합니다. 내용중에 보면 MVC 패턴과 XCode 툴에 관한 설명등 들어두면 좋은 내용들 다수가 들어 있습니다. 





저자: 요네자와 호노부

전 이 작품을 애니메이션으로 먼저 접했습니다. '빙과' 라고 알려져 있는 수작입니다. 작화, 스토리 흐름, 캐릭터 등이 맘에 들어서 보기 시작하고 정신없이 빠져들었던 기억이 있습니다.

도서관에 갔다가 갑자기 미스테리물이 땡겨서 미스테리 코너에 갔더니 고전부 시리즈가 다 있더군요. 고전부 시리즈의 첫 권, 요네자와 호노부의 데뷔작이자 애니메이션의 제목이 바로 '빙과' 라는 것을 알았기에 연속해서 5권을 다 빌려서 단숨에 다 읽었습니다.

라이트노벨의 형식을 취한 추리소설이라고 할 수 있습니다. 다만 추리라고 하면 피가 튀어야 한다는 선입감을 깨고 피 튀기는 장면이 없는 소소한 학교에서 벌어질 수 있는 일에 대한 추리물이라고 할 수 있겠습니다. '그런게 뭐가 재밌나?' 라고 할지 모르지만 재밌습니다. 특히나 주인공인 오레키 호타로는 애니메이션에서 매력을 발산해서 남자들이나 여자들이나 좋아하는 캐릭터 1위를 한적도 있다고 하더군요 (인기 만발!!)

책부터 보기를 권하지만 그럴 여력이 없다고 하면 애니메이션을 강력 추천합니다. 다만 애니메이션은 추리하는 부분이 아무래도 책에 비해서는 떨어집니다. 화면 재생으로는 한계가 있기 때문입니다. 일본의 다른 추리작가들에 비해서는 추리의 개연성도 좋고 문장의 흡입력도 좋습니다.

고전부 시리즈라고 책이 꼽혀있지만 읽는 순서를 모르기 때문에 고생했는데 책의 순서는

  1. 빙과 (氷菓)
  2. 바보의 엔드 크레디트 (愚者のエンドロール)
  3. 쿠드라프카의 차례 (クドリャフカの順番)
  4. 멀리 돌아가는 히나 (遠まわりする雛)
  5. 두 사람의 거리 추정 (ふたりの距離の概算)


이 순서입니다. 게다가 표지가 하드커버에 전혀!! 라이트노벨 스러운 표지를 하고 있지 않기 때문에 착각하기 쉽지만 분류상 라이트노벨에 들어간다고 합니다.(심지어 삽화도 한장 없음) 표지가 라이트 노벨 스럽지 않기 때문에 도서관에 비치되어 있는것 같습니다. (아싸 조쿠나!) 애니메이션은 1-4 권까지의 내용이 만들어 졌습니다.

5권의 내용은 고전부에 신입이 들어오면서 발생하는 오해때문에 드디어 누가 시키지도 않았는데 '오레키 호타로'가 자발적으로 추리를 시작하는 내용이 들어있습니다.

6권은 내년에나 나온다고 하더군요.


by Zakary L. Tormala & Derek D.Rucker

간만의 HBR 아티클입니다. 최근 읽은 것중에서 서로 토론하기는 적합하지 않았지만 알아두면 편리한 내용을 적어봅니다.

  1. 도전

    자신의 믿음에 확신을 가진 사람은 더 적극적으로, 조기에, 많이 구매하는 경향이 있다. 또한 적극적으로 타인에게 제품을 추천하고, 자신의 믿음에 대한 도전에 맞서는 성향도 강하다. 그러나 비즈니스 현장에서는 설득의 도구로서의 확신의 힘이 전반적으로 간과되고 있다.

  2. 해결책
    • 컨센서스 다른 사람들도 같은 의견이라는 인식
    • 반복 같은 의견을 여러 번 표현하기
    • 용이성 아이디어가 얼마나 쉽게 떠오르는가
    • 방어 믿음에 대한 옹호
  3. 실행 방안

    기업은 확신 원리를 체계적으로 적용해야 한다. 마케팅 프로그램이나 고객 만족도 조사 같은 전술적 차원에서는 대인관계 또는 팀 관리 도구로, 동업자나 투자자와의 협상 같은 상황에서는 전략적 도구로 활용해야 한다.


누군가를 설득해 보신적이 있으신가요? 남을 설득하는 것은 정말 쉬운 일이 아닙니다. 쉽게 예를 들자면 저는 안드로이드 계열의 추종자입니다. 아이폰 사용자를 안드로이드로 개심시켜볼려고 설득을 해보았다면 설득이 얼마나 힘든 일인지 공감이 가실 것입니다. 이러한 경우에 자기 자신의 (저의 경우에는 안드로이드에 대한) 확신이 강하면 강할 수록 설득이 먹혀들어간다고 필자는 이야기 하고 있습니다. 그래서 이 경우를 바탕으로 아티클에 나온 내용을 적용한다면, 먼저 컨센서스를 활용 '남들도 안드로이드를 사용하고 있다. 전 세계 80%의 사용자들이 안드로이드 운영체제를 활용중이다' 라는 식으로 접근이 가능합니다. 그 다음으로 이러한 내용을 자주 자주 반복합니다. '귀에 못이 박히겠다' 라는 말이 있듯이 반복은 정말 중요합니다. 그리고 다음은 용이성 입니다. 설명할 대상이 복잡하거나 한 두번 더 생각하게 해서는 효과가 떨어집니다. '안드로이드는 더 큰 자유도를 제공한다' 라며 쉽게 설득할 수 있는 표어(?)를 만들고 설득 대상에게 주입합니다. 마지막으로 방업 입니다. 이 방어는 자신의 확신을 더 강하게 만들어 주는 것으로 극복할 수 있는 질문을 받고 그것에 대응하면서 점점 자신의 확신을 굳히는 것입니다.

이런 방법들은 사업상의 거래처나 투자자 설득뿐만 아니라 일상 생활에서도 제가 든 예처럼 사용할 수가 있습니다. 한 번 정도는 읽어볼만한 아티클이 간만에 나온듯 합니다.



'모던 기와' 라고 구리 살때 집에 오가면서 항상 지나치던 까페입니다. 안쪽까지 와본적이 한번도 없었기 때문에 볼 일이 있어서 이 근처에 온 김에 한번 들어와 봤습니다. 길가에 널린 까페와 다르게 언덕위에 이렇게 멋진 기와집이 서 있습니다. 밤이라 고즈넉한 분위기가 아주 좋습니다. (사실 저녁에 가깝지만..) 


강변 북로의 찻길위의 언덕이 있기 때문에 강변을 볼 수가 있습니다. 저녁에는 근사한 야경을 볼 수가 있는 정말 멋진 풍경입니다. 저는 노트북을 가지고 만지작 거려야 하기 때문에 일단 안쪽으로 들어가기로 했습니다. 


까페 안의 모습입니다. 사람이 그리 많지 않기 때문에 쓸쓸하게 보이는 조명과 더불어서 한적한 느낌을 줍니다. (저는 그 분위기를 너무 좋아하기 때문에 맘에 들었습니다) 


커피를 싫어하는 관계로 로열 밀크티를 시켰습니다. 역시 커피를 전문으로 파는 집 답게 '로열 밀크티'가 어떤지 말 모르는거 같더군요. 저기요 이건 티 라떼에 가깝습니다!!! 티백은 트와이닝것을 쓰더군요. 우유 거품도 괜찮았지만, 그래도 로열 밀크티는 조금 달달해야 하지 않을까 생각합니다. ㅎㅎ 


한적한 저녁을 연인과 보내신다면 멋진 풍경과 더불어서 시간 때우기 참 좋습니다. 


어제 제자 한명이 집 근처로 찾아와서 차를 한 잔 했습니다. 최근에 이쪽 방면에서 알려진 크고 건실한 기업에 취직했다고 하더군요. 이번에 취직할 때 평소에 내가 말하던 것들을 잘 실천하고 있었던 터라, 그러한 부분들을 엮어서 스토리를 잘 만들었더니 입사할 수가 있었다고 합니다. 전공과를 졸업한 것도 아니고 흔히 말하던 학원 출신으로서 이 정도 위치까지 온 친구라 더 이상 잔소리는 필요 없을 것 같고, 저 또한 내 덕에 입사를 할 수 있었다는 소리를 들으니 뿌듯해 지더군요. 그래서 그 제자에게 평소 하라고 했던 (입사할 때 도움이 됐던) 잔소리를 조금 정리 해볼까 합니다.

  1. 블로그 쓰기 블로그를 쓰라고 하는 이유는 3가지 였습니다.
    • 첫째, 자신이 몰라서 찾게 된 방법은 나중에 다시 모를 경우가 많기 때문입니다. 그 때마다 계속해서 검색을 통해서 솔루션을 찾다보면 같은 일을 계속해서 반복하게 됩니다. 이건 제 자신이 느꼈던 것이라 확실하게 정리하라고 시켰습니다.

    • 둘째, 블로그에 정리하면서 확실하게 기억을 하라는 의도였습니다. 같은 기억이라도 정리를 하면서 조금 더 쉬운말로 바꾸는 노력을 들이다 보면 시간이 지나도 잊어지지 않으며, 또한 잊어버린다 하더라도 내가 그 내용을 블로그에 정리했었지 라는 기억이 남아 있어서 조금 더 쉽게 검색할 수가 있습니다.

    • 셋째, 대의적인 명분입니다. 내가 고생한 내용은 역시 다른 사람들도 고생하기 마련입니다. 이때 같은 내용을 영문사이트에서 찾는 것보다 한글로 정리된 블로그에서 찾는게 여러모로 도움이 되겠죠. 그래서 내가 고생했던 내용때문에 다른 개발자들이 고생하지 말라는 의도로 정리하라 했습니다.

  2. Node.js 로 프로젝트를 진행했습니다. 그 당시에 뜨고 있던 개발 언어로 Javascript 문법을 차용해서 쓰고 있던 일명 Server-side-Script 언어였습니다. Express 라는 웹프레임워크를 사용해서 엄청나게 빠른 속도로 개발이 가능했습니다. 게다가 이 언어를 KT 프로젝트에서 사용하자고 주장해서 통과시켰습니다. KT 쪽은 왜 Java 가 아닌지 사유를 설명하라고 해서 설명 문서를 세개를 만들고 PT를 두번이나 했던 기억이 나는군요. 어쨌거나 이렇게 한번 새로운 언어로 개발을 해본 효과에다가 Node.js 가 최근 뜨는 트렌드가 되서 중복적인 효과를 발휘해 새로 Node.js 를 기반으로 하는 플랫폼으로 개발을 할려는 업체에게 좋은 가산점을 줬다고 합니다.


  3. 프로젝트 관리를 GitLab 으로 관리하는 법을 배웠습니다. 당시 소스 레파지토리 관리를 SVN 으로 하는 것이 대세였는데 뜨고 있던 git 으로 대체하고 이를 기반으로 해서 프로젝트를 관리할 수 있는 github 를 모방해서 만든 GitLab 을 사용하자고 해서 이 시스템을 설치하고 교육시켰습니다. 처음 써본거라 어안이 벙벙들 했는데 지속적인 잔소리 덕분인지 일주일도 안 되서 능숙하게 되더군요. 게다가 GitLab 안에는 이슈트래킹 기능과 설명을 위한 Wiki 기능이 탑재되어 있어서 전체 프로젝트를 마일스톤별로 관리할 수도 있는 멋진 관리툴입니다. 굳이 GitLab 이 아니더라도 대부분의 프로젝트를 관리하는 시스템은 이러한 기능들이 탑재되어 있기 때문에 하나를 써본 경험으로 다른 것도 쉽게 익숙해질 수 있는 장점이 있습니다.


  4. CI (continuous integration) 솔루션의 사용 (이건 미 적용) 사용하라고 자주 이야기는 했지만 실제로 적용을 못하고 있던 부분이였습니다. CI 는 적용하자고 마음을 먹으면 TDD (test-driven development)를 자연스럽게 적용할 수가 있기 때문에 여러사람이 공동으로 작업할 때의 필수적 요소입니다. 소스의 master branch 를 깨먹지 않고 유지하려면 최선의 방법이기 때문에 추천합니다. 추천하는 시스템은 그 유명한 Jenkins 입니다.


어제 이런 저런 이야기를 나누다 보니 내가 그 제자에게 했었던 이야기가 떠 오릅니다.

'학벌'은 중요하다. 하지만 한 번, 이 업게예 발을 들여 놓으면 얼마만큼 새로운 기술에 잘 적응하느냐와 습관처럼 몸에 익힌 기술들이 학벌 보다 더 도움이 될 수밖에 없다. 'php 로 다 되는데 어째서 이러한 것들을 공부해야 하나요?' 같은 시대에 뒤 떨어진 소리를 하지말고 잘 이해가 안되더라도, 잔소리가 고깝게 들리더라도 계속해서 모르는 것을 물어보면서 자신의 것으로 만들어라.

이 말은 또 다른 후학들에게도 해당되는 말이라 할 수 있습니다. CS 에 종사하시는 모든 분들 화이팅!!



디즈니 월드와 가까운 곳에 있는 Reglan Road Orlando 라는 이름의 Irish Pub 이다. 맛집으로 유명하다고 하는데 유원지 근처의 식당이라 그런지 비쌌다. 하지만 사진에 보이는 미녀들이 공연하는 메인 공연 말고도 계속해서 밴드가 음악을 연주해 준다. 생긴것은 인여캐(인간 여자 캐릭터)인데 춤추는 스타일은 여자 드워프가 추는 춤을 춘다. 미녀 4명의 공연은 사람들이 몰려서 잘 볼수가 없었다. 어딜가나 미녀가 좋은줄은 알아서 .. 


가격이 비싼 관계로 기분 좋게 먹지는 않았으나 미국에서 느껴는 아일랜드 스타일이라고나 할까 (왜 미국에서 영국식을 느껴야 하는지는 별도로 ㅎㅎ) 특색있는 체험이였다. 그런데 게임을 많이 해본 나로서는 아일랜드 스타일이라기 보다 브리타니아 처럼 느껴지는 것은 왜일까? 




보라 이 엄청난 칼로리의 덩어리를!! 바로 기라델리 월드 페이머스 이다. 지금도 이 맛이 생각이 나서 찾아보지만 국내에서는 먹어볼 수가 없는 맛이라 한다. (일단 기라델리 매장 자체가 없다) 그리고 생긴것에서 느껴지는 것만큼 무지하게 달다. 온갖 달짝지근한 과자류로 애들을 유혹하는 디즈니 타운에서도 수위를 다툴정도로 달다. (그래서 좋다!!) 먹을 때는 너무 달다!! 했지만 지나고 보니 가끔 생각이 나는 맛이다. 한국에 기라델리 매장이 들어오기만을 기다리기로 하자. 





저자: 마이클 크라이튼 

역자: 이원경

마이클 크라이튼이 암으로 사망하고 그의 컴퓨터 하드에서 발견된 완성된 원고였다고 합니다. '해적의 시대를 배경으로 한 과학물이겠지?' 라는 반응으로 책을 피고 읽다보면 언제 나올까? 하다 결국 안나와서 허망해집니다.

그냥 순수하게 '대항해 시대'를 다룬 작품입니다. 자메이카와 그 근방, 일명 캐리비안 베이에서 벌어지는 그 시대에 있을법한 이야기를 다루고 있습니다. 깨알같이 '크라켄'도 나와줍니다.

영화를 의식하고 만들었다는 생각이 강하게 들고, 오버해서 말하자면 '캐리비안의 해적'에 모티브를 받은건 아닐까 라고 생각될 정도였습니다. 재미는 있습니다. 그 시대를 잘 묘사해내는 능력 또한 발군입니다. '역시 마이클 크라이튼 이구나' 라는 감탄사가 절로 나옵니다.

그런데 그게 전부라는 것입니다. 뭔가 빠져들게 하고 감탄하게 하는 그런 맛은 떨어집니다. 이래서 출간을 안했나? 라는 생각이 들 정도로..

하지만 이제 그의 작품을 볼 수 없기에 마지막이라 생각하고 보면 볼만합니다. (고른 이유도 그 이유였습니다)


안드로이드 개발하다 보면 별 문제는 없어보일지 모르지만 안드로이드가 네트워크 인터페이스를 여러개 가지기 때문에 발생하는 문제가 있습니다. 갤럭시 s3 의 경우에는 LTE, 3GS, WI-FI 등 세개의 인터페이스가 있습니다. 그런데 이런 인터페이스들이 사용을 안하면 비활성화 되어 있으면 사용하기 편할텐데 사용 안하더라도 활성화가 되어 있는 데다가 잘못된 (구동하지 않는) IP 주소를 가지고 있어서 문제가 됩니다.

무슨 문제가 있겠어? 라고 하지만 순수 자바 (Pure Java) 로 네트워크 레이어를 구현할 때, 만들어진 라이브러리를 안드로이드로 포팅시 발생하는 문제입니다. 이를 해결하기 위한 방법입니다.

인터넷에 연결이 되어 있고 (LTE,3GS,WI-FI 상관하지 않고) 접속되어 있는 상태에서의 가지고 있는 IP 주소를 가져오는 방법입니다.

Socket socket = new Socket("www.google.com", 80);
String localAddr = socket.getLocalAddress().getHostAddress();
Log.d(TAG, "local address is : " + localAddr);

생각보다 자주 부딛히는 문제라서 정리합니다.





+ Recent posts