[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...

레이블이 Ruby on Rails인 게시물을 표시합니다. 모든 게시물 표시
레이블이 Ruby on Rails인 게시물을 표시합니다. 모든 게시물 표시

2016년 5월 4일 수요일

[EP] Deveiw 2012 후기 #1..

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

지난 17일(월)에 코엑스 그랜드볼룸에서 NHN이 주최하는 개발자 컨퍼런스 Deview 2012가 개최되었다. 매년 가을은 각 회사들이 컨퍼런스를 열어서 어느 컨퍼런스를 가야할지 고민되는 때이긴 한데(봄이나 여름에 좀 나눠서 하지 ㅠㅠ) 작년에도 참석을 못했고 이번엔 아는 사람들도 많이 발표를 하고 해서 휴가를 내서 참석을 했다. 참고로 작년에는 Deview와 SDEC이 따로 열렸었는데 올해는 SDEC이 Deview로 합춰져서 하나의 트랙을 담당하는 형태처럼 되었다.

Deview 프로그램 시간표

키노트
국내에서 컨퍼런스를 갈 때마다 느끼는 거지만 국내 키노트는 참 들을 게 없다. 해외 컨퍼런스같은 경우는 (키노트에서 제품을 발표하기도 해서이기도 하지만) 각 세션은 챙겨보지 못하더라도 키노트만은 잠을 안자고 챙겨보게 되는데 국내 컨퍼런스는 이렇기는 커녕 이제는 꾀가 생겨서 키노트는 아예 안듣고 세션시간에 맞춰가기도 한다. 그래도 이번에는 혹시나 해서 키노트에 딱 맞춰서 갔다.

키노트는 누가 어떤 내용으로 하는지 사전에 전혀 공지되지 않았는데 키노트는 2개로 나눠서 진행되었다 첫 키노트는 NHN의 센터장님이 "모바일 시대에 필요한 개발자 정신"라는 제목으로 진행을 하셨는데 각 내용을 나눠서 보면 틀린말이 없기는 약간 내용이 이쪽 저쪽으로 왔다갔다 하면서 진행된 내용이라서 다 듣고 나니까 말하고자 하는 핵심을 잘 이해못하겠다. 결론적으로 다 듣고나서도 모바일 시대에 필요한 개발자 정신이 뭔지는 잘 모르겠다. 두번째 키노트는 가천대 IT 부총장이라는 분이 대학교와 기업의 협업에 대해서 발표하셨는데 발표자의 직책과 제목을 보고 고민도 하지 않고 밖으로 나와서 쉬었다. 경험상 협업에 있지 않은 고위직의 발표는 너무 추상화된 뻔한 말밖에는 안하기 때문에 거의 안듣는 편인데 들은 사람들 얘기를 들어보니 안듣기를 잘한듯하다.

사실 키노트는 그냥 전체 참여자를 모아놓은 하나의 세션이 아닌 컨퍼런스의 방향과 내용을 압축해 놓은 핵심세션이어야 하는데 아직도 국내에서 이런 키노트는 단한번도 보지 못했기에 차라리 키노트없이 세션만 하는게 더 낫지 않나 싶기도 하다.

루비는 패셔니스타 - 문추근(KTH)
언젠가부터는 컨퍼런스에 가면 참석자나 발표자나 아는 사람들이 종종 있는 편인데 이 세션의 문추근님도 개인적으로 친분이 있다. 아는 분의 세션을 듣게 되는건 응원(?)의 성격도 약간은 있겠지만 보통은 친분이 있어서 관심사가 비슷하기 때문인다. 루비는 아주 오래전에 약간 공부한 적이 있긴 했지만 거의다 까먹었고 최근에 문추근님이 사내에서 루비에 대한 발표를 해서 듣고 싶었는데 이번에 들을 수 있게 되었다.

문추근님이 세션 시작시 얘기한대로 루비가 만능이고 최고니까 루비 꼭 배워라라고 얘기하기 보다는 루비를 소개하는 세션이었다. 루비는 마츠모토 유키히로(일명 마쯔)가 1995년에 펄보다 강력하고 파이썬 보다 객체지향적인 것을 만들고 싶어서 만들었고 프로그래밍이 재밌게, 개발자들을 행복하게, 머신중심에서 사람중심적으로라는 디자인 의도를 가지고 만들어졌다. 루비의 특징으로는 객체 지향 프로그래밍으로 모든 것이 다 객체로 이루어져 있고 객체가 주인공이 되어 객체.행동의 문법을 가지게 된다. 그리고 유연한 문법을 가지고 있어서 몽키 패치로 중간에 기능을 바꿀 수 있고 메타 프로그래밍으로 코드의 양으로 줄일 수 있으며 Enumerable 모듈을 통한 객체 중심의 반복이 강력하다. 루비의 영향을 받은 것들로는 prototype.js, Underscore.js, Sugar, CoffeeScript 등이 있다.


Rails는 David Heinemeier Hansson(일명 DHH)가 2004년에 만들었으면 특징으로는 Scaffold가 있다. Scaffold로 레일즈 초기에 15분만의 블로그 만들기 영상으로 큰 인기를 끌었으며 데이터베이스 마이그레이션, 모델, 뷰, 컨트롤러, 테스트등을 스캐폴드 명령어만으로 간단하게 만들 수 있다. 일부에서 스캐폴드는 실서비스에서는 사용할 수 없는 사기라고 말하기도 하지만 스캐폴드라는 말 자체가 건물을 지을때 인부들이 일을 편히 할 수 있도록 건물 외부에 세워두운 철골을 의미하고 건물이 완성되면 걷어지는 것이다. 그리고 레일즈는 RESTful 서비스를 만들기 쉽게 되어 있다. 레일즈의 영향을 받은 것들로는 CakePHP, Grails, Play!등이 있다. 레일즈를 활용하는 서비스들은 Twitter, Groupon, Github등이 있다.

하지만 한국에서는 왕따신세이다. 왜 그런가 생각하면 보통 느리다라는 인상이 있고 트위터도 RoR을 걷고 스칼라로 갈아탔다는 얘기들이 있어서인데 이건 하이브리드 앱과 비슷하다고 생각한다. 등가교환의 법칙처럼 얻는게 있으면 잃는게 있는 법인데 모바일의 시대가 되서 수없이 많은 앱이 쏟아지고 있기 때문에 개발속도가 더 중요한 서비스들이 있다고 생각한다. 그리고 배워야 하는 이유는 개발자라면 터미널에서 맘껏 사용할 수 있는 언어가 있어야 된다고 생각한다. 그리고 실용주의 프로그래머 Tip #8에 나왔듯이 "매년 새로운 언어를 배워라."를 생각해 볼 수 있는데 다른 언어는 같은 문제를 다르게 해결하기 때문에 여러모로 도움이 된다. 하지만 새로운 언어를 배울때 기존 언어의 사용법대로 작성하는 것은 의미가 없으므로 각 언어의 스타일대로 하도록 노력해야 한다. 그리고 제가 좋아하는 말이기도 한 루트비히 비트겐슈타인의 "언어의 한계가 곧 자기 세계의 한계다."라는 말로 세션을 끝내셨습니다.

정말 오랜만에 루비 세션이었다. 사실 RoR을 신기술이라고 할 수는 없기 때문에 여기서 문법을 설명할 것인지 어떤 수준으로 설명할 것인지 고민이 많으셨을꺼라는 생각이 드는데 그런 면에서 발표는 괜찮았다고 생각한다. 너무 오랜만에 듣는 루비 세션이라 왠지 반갑;;; 문추근님이 사내에서 루비발표를 여러번 해서 한 3시간정도로 준비된 발표를 축약해서 발표하신 걸로 알고 있는데 시간계산을 다 하셨다고 했는데 안타깝게 한 15분 정도나 일찍 끝났다. 그 시간에 좀더 많은 내용이 다뤄졌어도 좋았겠지만 개인적으로 발표한 주요개념들은 나도 좋아하는 얘기들이라 재미나게 들었다.

Apache Kafka: Inside LinkedIn's distributed publish/subscribe messaging system - Richard Park (LinkedIn)
Apache Kafka는 분산 Pub/Sub 메시징 시스템으로 Scala로 만들어졌다. Kafka이전에는 메시징에 ActiveMQ를 쓰고 로깅에는 Splunk등을 사용했었는데 서비스의 성장에 맞춰서 확장하기가 어려웠다. 그래서 링크드인은 Robust하고 확장할 수 있고 지연시간이 적으면서 신뢰할 수 있는 시스템이 필요해졌다. 기존에 Flume이나 Scribe등이 있었지만 효율적으로 데이터를 보관할 수 있고 온라인/오프라인 모두에서 데이터를 소비하고 pull/push가 되는 Kafka를 새로 만들기로 결졍했다.


Producer가 앞에서 로드밸런싱의 역할을 해서 이벤트 메시지나 로그를 전송하고 Blocker가 메인 스토리지 서버의 역할을 하게 된다. Consumer가 데이터를 땡겨오게 되고 ZooKeeper가 노드를 모니터링하고 있다. 프로토콜은 Avro를 사용하고 있는데 Avro는 다이나믹 타입이고 별도의 코드를 생성하지 않으면서 간단하고 JSON이기 때문이다. 그리고 데이터를 실뢰할 수 있도록 넣은 데이터가 반드시 나왔는지를 감시해서 놓치거나 지연되는 데이터를 감시하기 위헤서 프로듀서, 블록커, 하둡의 이벤트 카운트를 세서 문제를 찾는다. 카프카를 모니터링하는데 카프카를 사용하고 있으면 현재 아파치 인큐베이팅상태이고 0.7.1버전이다.

이 날 들은 유일한 영어 세션인데 동시통역이 제공되었지만 듣지 않았다. 동시통역을 듣다 보면 영어도 잘 안들리면서 동시통역도 헷갈리고 해서 영어공부도 할겸 그냥 직접 들었기 때문에 내용을 다 파악하진 못했다. 얼기설기 대충 듣기는 하는데 아직 들으면서 정리해 적기까지는 힘들다. ㅋ 그냥 자세한건 다 파악하기 어렵구 Kafka가 이런거구나... 정도만 이해한 것 같다. 당분간 내가 쓸일은 없겠다 싶은..

Scala, 미지와의 조우 - 이동욱(SK Planet)
스칼라를 40분동안 어떻게 설명할 지를 고민했는데 결국 주입식밖에는 없겠다는 생각이 들었다. Scala는 Scalable Language의 머릿글자를 따서 이름이 지어졌고 마틴 오더스키가 만들었는데 이 사람은 자바의 제너릭을 만든 사람이기도 하다. 구글 트랜드에 검색해봤을 때 Groovy나 Clojure보다 인기가 좋고 트위터가 현재 많이 사용하고 있다. 스칼라는 하이브리드 언어로 Eiffel, Haskell, Erlang, Smalltalk, ML, Java등의 영향을 받았고 함수형 프로그래밍이면서 강한 타입시스템을 가지고 있고 JVM상에서 동작한다.



개인적으로 친분이 있는 이동욱님의 세션이었다. 2년전 KSUG 세미나에서 발표한 Scala 세션을 듣고 계속해서 스터디를 같이 해놨기 때문에 내용을 배우려고 한다기 보다는 응원차 참석했다. 그래서 딱히 정리하진 않았다. Scala에 기본적인 사용법에 대한 안내라서... 내가 현실을 망각했는지 이런 큰 세미나에서 다른 선택권 대신 Scala를 선택했으면 기본적인 지식은 있을 때니 기초문법 하지말라고 꼬셨었는데 그 말을 듣지 않으시고 기초부터 진행하셨는데 나이스한 선택이셨다 ㅡㅡ;; 나도 못 알아들으면 어쩌나 했는데 그래도 알아들어서 안심은 했지만 쉽게 잘 설명했다고 생각했는데 어렵다는 반응이 온걸로 봐서는 내말대로 하셨으면 아주 큰일날 뻔 했다. 요즘 Scala의 분위기가 조금씩 올라오는데 국내에서도 이런 큰 컨퍼런스에서 Scala를 볼 수 있게 되서 아주 기쁘다.


2016년 2월 25일 목요일

[Tool]Ubuntu 8.10에 Ruby 설치하기..

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

요즘 노트북의 활용성을 높이려고 Ubuntu를 설치해서 이것저것 하고 있는데 그중 하나가 RoR개발을 우분투에서 하는겁니다. 전에 책 예제를 따라할때는 InstantRails를 이용해서 그냥 했었는데 리눅스의 특성도 그렇고 RoR개발은 콘솔을 잘 활용하는게 더 좋은 것 같아서 처음부터 하고 있습니다.

그래서 일단 Ruby를 설치해야 되는데 윈도우즈랑 많이 달라서 많이 해매고 있습니다. "프로그래밍 루비"를 보면서 따라하고 있는데 이 책에선 많은 리눅스가 루비를 포함하고 있다는데 Ubuntu 8.10에는 포함되어 있지 않았습니다. 그래서 설치를 시도했는데 제가 리눅스에 많이 익숙하지 않은 관계로 결과적으론 설치했지만 중간에 필요없는 과정이 있을 수도 있습니다.

일단 좀 익숙한 우분투의 시냅틱 꾸러미 관리자를 이용해서 루비를 설치했습니다.

사용자 삽입 이미지

이것저것 시도하다가 결국은 다 설치했습니다. ruby는 1.8버전을 사용했는데 결국 해결은 이 설치로 해결하지 않았기 때문에 상관없을것 같다고는 생각하지만 확인하지 못했기 때문에 제가 설치한 루비관련을 함께 올립니다. 나중에 Ubuntu를 재설치하게 될때 다시 테스트해서 정리하게 되면 다시 포스팅을 수정하도록 하겠습니다.

사용자 삽입 이미지

이렇게 다 설치했는데도 불구하고 터미널에서는 루비가 제대로 설치되었는지 확인하기 위해서 ruby -v 를 입력해서 설치되어 있지 않았다고 자꾸 나옵니다. 그래서 책도 찾아보고 인터넷도 찾아봤는데 딱히 해결법을 찾지 못했습니다. 근데 역시 컴퓨터를 믿었어야 했든데..... 해결은 아주 가까운 곳에 있었습니다. 터미널에서 ruby가 설치되어 있지 않다고 나오면서 알려준 명령어가 바로 해답이었습니다.(우분투는 똑똑하군요 ㅡ..ㅡ)

사용자 삽입 이미지

sudo apt-get install ruby 명령어를 사용해서 ruby를 인스톨하니까 정상적으로 잘 설치가 되었습니다. 위 스크린샷처럼 ruby -v명령어로 1.8.7버전이 잘 설치되었습니다.


이번엔 대화형 루비 셀인 irb를 설치해보겠습니다. irb도 루비와 설치가 동일합니다.

사용자 삽입 이미지

똑같이 irb가 설치되어 있지 않다고 나오는데 sudo apt-get install irb 명령어를 통해서 설치를 하면 irb가 정상적으로 실행되는 것을 볼 수 있습니다. 정리하고 보니까 아주 쉬운과정인데 처음 해보느라고 고생을 꽤 했네요. 역시 모르면 몸이 고생할 수밖에 없군요.(터미널을 반투명하게 해놔서 캡쳐화면이 깨끗하진 않군요. ㅡ..ㅡ)

이 설치명령어는 반드시 su권한을 가지고 해야되기 때문에 sudo를 반드시 입력해야 합니다. 해보진 않았지만 그렇지 않으면 ruby를 사용할 때마다 su권한이 필요하다고 하더군요.

2016년 2월 19일 금요일

[Book] Ruby on Rails 초고속 웹 개발의 시작..

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

Ruby on Rails - 8점
브루스 테이트 외 지음, 김경준 옮김, 박상길 감수/한빛미디어



실제로 얼마냐 쓰이냐라는 논란도 있기는 하지만 그래도 작년에 웹개발에서 가장 큰 이슈중의 하나는 루비온레일즈가 아니었나 싶다. 개발이라는 것이 맘에든다고 개발자 맘대로 언어바꾸고 그러는게 쉽지 않으니까.... 형이랑 루비온레일즈로 프로젝트 하나 해보자 하는 얘기가 나와서 이책을 집어들었다. 처음 루비온 레일즈의 개념을 잡기에는 제일 낫다고 해서.... 아무래도 두께도 얇고 하니... (이책을 붙잡고 몇달씩 있었을 정도로 중간중간 프로젝트 때문에 연속적으로 보지 못했고 현실은 쉽지 않았지만...)



입문서로는 상당히 괜찮은 것 같다. 너무 자세하게 API설명하느라고 지루하게 하지도 않고 말그대로써 입문서로의 역할을 충실히 하면서 루비온레일즈의 특징을 간단히 설명하고 갤러릴 형식의 웹 어플리케이션을 예제로 만들면서 한회전을 돌며 루비온레일즈의 특징이라고 할 수 있는 액티브 레코드, 스캐폴딩, 뷰 다루기, 테스트까지 다 설명하고 있다.

이 책을 다 보고 이제 루비온레일즈로 개발해 보자 하기는 좀 어렵다는 생각은 들지만 아~ 루비온레일즈가 이런거구나. 이렇게 돌아가구나 할 정도로 맛을 볼 정도의 역할을 충분히 한다고 생각한다.


현실적인 것은 실제 먼가를 만들어보고 다양한 현실적 요구사항에 부딪혀 봐야 하겠지만 지루하고 피곤한 데이터베이스 연결작업을 액티브레코드를 통해서 코딩하듯이 다 해결하고 루비온레일즈의 가장 큰 특징중의 하나라고 생각하는 스캐폴딩을 통해 게시판의 기본인 리스트, 등록, 수정, 삭제를 명령어 하나로 다 만들어 낼 수 있다는 것은 분명히 획기적인 부분이라고 생각한다.

다만 책이 그렇게 오래되지는 않았지만 레일즈의 버전이 올라간 것인지 인스턴트루비로 예제소스를 따라할 때 제대로 안되는 부분이 약간 있다. 이런 부분은 책이라는 매체로서는 어쩔수 없으니 여기저기 찾아가면서 하는 수밖에...



덧) 현재 공부하는 것 중에는 우선순위가 최하위이다 보니 일정이 계속 늦쳐지고 있다. 올해내에는 머 하나라도 만들어봐야할텐데.... ㅎ

2016년 2월 12일 금요일

[DEV]InstantRails와 RadRails로 환경설정하고 Hello World 찍기..

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

일단 미리 말하자면 루비 온 레일즈의 쥐뿔도 모르고 이제 책 보기 시작했다. 루비온레일즈는 다른 언어에 비해서 그 이름이 특이한데 말그대로 레일즈라는 프레임워크 위에 루비라는 언어를 얹은 것이다. 항상 최고인 것은 없겠지만 루비온레이즐의 생산성 만큼은 관심이 가고 진행해 보려는게 있어서 시작했다.

일단 루비온레일즈는 Instant Rails를 이용해서 했다. 여러가지가 있겠지만 일단 윈도우에서 루비온레일즈를 공부하면서 개발해 보기에는 인스턴트 레일즈만한게 없는것 같다. 너무 편해서 머 할말이 없을 정도다....

Instant Rails 폴더구조
압축 풀린 Instant Rails

설치고 머고 없다. 인스턴트 레일즈 사이트에서 다운받은 zip파일을 원하는 곳에 풀어주면 끝이다. 다만 주의할 점은 인스턴트레일즈 경로에 공백이 들어가는 폴더가 있으면 안된다. 이렇게만 하면 인스턴트 레일즈에 대한 준비가 끝났다.

사용자 삽입 이미지
인스턴트 레일즈가 실행된 모습이다.

인스턴트 레일즈에서 자동으로 Apache와 MySQL을 가동시켜준다. 아파치는 apache\conf\httpd.conf 에서 port번호를 원하는대로 바꿔줘도 되고 i 버튼을 눌러서 phpmyadmin으로 제공되는 MySQL 관리로도 들어갈 수 있다. 루비온레일즈라는 특성에 어울리게 인스턴트 레일즈 자체도 심플 그 자체이다.


이제 루비온레일즈에 대한 환경설정은 끝이 났으니까 IDE환경을 보자. 물론 이렇게만 해놓고 console로 개발을 할 수도 있지만 내가 IDE환경을 선호하는 관계로 아무것도 모르면서 RadRails를 올렸다.(뭔 깡으로.. ㅡ..ㅡ)

RadRails는 Ruby on Rails를 위한 Eclipse 기반 IDE환경이다. 기존에는 별도로 돌릴수 있었던 것 같은데 (내가 못찾는건지) 지금은 Aptana[HTML, JS 개발을 위한 Ecipse 기반의 IDE 환경 (Homepage)]
]에 플러그인 형태로 추가할 수 있다. Aptana사이트에서 받아도 되고 Aptana를 실행해서 첫화면에서 클릭해서 받아도 된다.

사용자 삽입 이미지

나도 루비온레일즈는 만지기 시작한지 얼마 안되서 아무것도 모르기 때문에(Hello World만 찍어봤다.) 문법에 대한건 넘어가고 셋팅만 보자.