2014.11.07 11:04

사물 인터넷

사물 인터넷이란. 아직은 너무 생소한 주제이지만 벌써 우리 주변에서 많은 것들이 사물인터넷이란 이름으로 많은 정보를 주고 받고 있다.  





 우리 주변에 이미 많은 것들이 인터넷으로 연동되어 정보를 주고 받고 있다는 사실 알고 계시나요?

랜선이 연결된 컴퓨터 와이파이 연결된 노트북, 요즘 한창인 스마트폰 이런 첨단 기기 외에 내 자동차, 주차장의 보안등, 심지어는 비닐 하우스의 물주는 스프링쿨러등이 인터넷으로 연결되고 그 연결을 통해 쌓인 정보를 바탕으로 위험 상황에 대한 얼럿을 주고  도시 곳곳에 CCTV는 통신 모듈을 통해서 지속적인 정보 제공을 해주고 그 정보에서 사람 얼굴을 인식하고 주변 차량을 인식해서 자동으로 주차해주고 자동차 번호를 인식하고 주차요금을 계산하고 차량 위치를 알려주고 지나가는 버스를 인식하고 언제 내가 서있는 정류장에 도착할지를 계산하고 주문한 물건이 어느 지점을 지나는지 알려주고 도착한 물건이 진품임을 제조사에서 원격으로 확인을 받고 제조사는 어떤 종류의 상품의 얼마나 생산되고 재고가 얼마나 남았는지 또 어디 어느 사람들에게 팔려 나간 것인지를 알게 해주는 그 외 쏟아지는 이루 말 헤아릴 수 없는 많은 정보들을 집적해서 움직이게 해주는 것이 사물 인터넷이라고 하는데... 위에  열거하는 것은 내가 이번 박람회를 통해서 기억남을 만한요소들을 집약해서 적어 본 것이고 사물인터넷이란 것에 대한 실체를 파악하기는 어려웠다. 우리 나라 무선 통신 회사 2개소에서 큰 부스를 만들고 뭔가 많이 올려 놓긴 했지만, 통신모듈을 활용한 정보 전달 정도의 수준으로 좀더 쉽게 이야기하면 원격 카메라 기능을 가진 리모컨 정도로 보였다.


그 외 관심가지고 본 것은 시스코의 관제 시스템으로 차량 통행 상태를 인식해서 사고 얼럿을 알려주거나 주변 사람을 인식하여 지하 주차장의 보안등 점멸등을 지원하고 모든 정보가 관제 시스템 내에서 지도와 부분 팝업등을 통해 유용한 정보 전달이 가능해 보였다. NFC를 응용한 보안 연동, RFID를 통한 물류 추적, 통신모듈을 통한 외부 연동 카메라... 아직은 응용 수준이 그 정도 인듯. 즉 감시와 징수 외엔 크게 발전되는 분야가 없는 것 같다. 그래서 약간은 우울 하다. 결국 어떤 사업적 진화나 새로운 시도를 엿보기보다는 통신회사들의 통신 인프라 확장에 대한 솔루션만 반복해서 본 느낌이다. 아무래도 사물 인터넷의 주체는 통신업체가 되어서는 안될 듯 싶은데 투자할 만한 돈 있는 회사가 통신업체 외엔 없어 보이는 게 문제인 듯.


IoT Week Korea 2014 를 마치며 내년을 기대해 본다. 


저작자 표시
신고
Trackback 1 Comment 0
2014.10.29 12:18

MacBookPro OS upgrade to Yosemite

유용하게 잘 쓰고 있었지만, 이제 더 이상 지원 안되는 App 과 기타 자질구레한 문제들로 인해서 맥북 업데이트를 감행하게되었다.


맥북을 사용하면서 부터는 OS 설치가 남의 일처럼 여겨지기도 하고 마치 제조사에서 나와서 고쳐주기 전까지는 손대지 말아야 할 듯 느껴져서 어지간하면 그냥 쓰는데 어떤면으로 보면 뭔가 손데고 나면 고칠 부분이 많기 때문이기도 하다. 전에 사용하던 흰둥이도 타이거를 끝까지 고집하다 스노우 레오퍼드로 갈아탔고 지금 MBP 도 마운틴라이언에서 버티다 이번에 요세미티로 갈아 타게 되었다. 전에 스노우 레오퍼드는 4만원 정도 였던것 같은데 이번 요세미티는 무료 공짜로 배포되니... 이런 저런 이유로 업그레이드 결심하고 열심히 백업에 들어갔다. OS 가 바뀌니 타임머신은 의미 없을 듯 싶었고 클린 OS 개념으로 몽땅 갈아 업자가 목표였는데...^^ 백업만 열심히 하고 그냥 업그레이드 시켰다. 클린 USB 만들기(Clean USB Link) 까지는 했는데 막상 다 지워버리려니 부트 캠프에 설치된 윈도우 다시 깔기도 뭐하고 이런 저런 핑계꺼리를 만들다 보니 그냥 업그레이드로...^^




아무래도 애플이 디자인 만큼은 압도적인 듯. 전체적인 구성이나 내용이 조금씩 바뀌고 더 깔끔해졌다고 해야 하나. 산사자도 별 불만 없이 잘 쓰고 있었지만, 더 산뜻한 기분이 느껴진다. 입력 창의 테두리 또는 폰트, 아이콘 변경, 그림자 등 없지 않았지만, 변경되어 새로운 느낌이 나는게 정말 신기했다...^^ 뭐 이정도 감성을 가지고 사파리로 서핑질 하면서 즐거워 하고 있었는데... 막상 사용하다 보니 문제점이 드러나기 시작한다.


내가 겪은 문제(업그레이드로 인한 문제들)

  • brew
    • 문제점 : 동작 안함. Yosemite 로 넘어가면서 ruby 버젼이 바뀌어 버렸음. 
    • 해결책 : 
      • /usr/local/Library/brew.rb  파일을 열어서 2.0 으로 바꾸는 방법 - 별로 좋지 않음
      • cd $(brew --repository) && git pull origin/master  를 이용하여 해당 파일을 업데이트 시키기 - 추천
  • Apache
    • 문제점 : 사이트가 동작하지 않는다. 
    • 해결책 : apachectl start  로 일단 동작을 시키자.
    • 문제점 : httpd.conf 가 초기화 된다. 
    • 해결책 : 백업을 이용하여 다시 살린다...^^
      • /etc/apache2/httpd.conf 파일을 열고 편집하기. 아래 추가하는 파일들은 이미 가지고 있던 것으로 사용자에 따라 없을 수도 있다. 내 개인 설정 상으로 other 폴더 밑에는 php와 기타 설정이 users 폴더 밑에는 VirtualHost 관련 설정이 있다.
        • 최하단에 "Include /private/etc/apache2/other/*.conf" 추가
        • 최하단에 "Include /private/etc/apache2/users/*.conf" 추가
        • mod_rewrite.so 주석 해제 - 
        • Directory 노드에 "Options FollowSymLinks" 추가, "AllowOverride All " 설정
  • Mysql
    • 문제점 : localhost 가 먹질 않는다. 테스트용으로 만든 사이트 들이 디비 연결 오류를 낸다. 
    • 해결책 : 각 사이트 별로 디비 설정의 호스트 부분을 127.0.0.1 로 변경해 주었다. - 다른 해결책이 있을 듯.
  • Paralles
    • 문제점 : 8.0 사용자...아예 동작을 안함. 난 윈도우 살리려구 업그레이드 한건데...ㅠㅠ
    • 해결책 : Paralles 업그레이드...일단 평가판 14일짜리로 연명 중. 조만간 구매해야 할 듯.

기타 변경을 실감하는 요소들은 많지만, 감성적인 부분들이 많아서...^^

막상 써놓고 보니 뭐 사이트 테스트 제작 외에는 크게 잘 활용하는건 아니구나 싶기도 하고...







저작자 표시
신고
Trackback 2 Comment 0
2014.10.27 17:11

Microsoft Azure 환경에서 wordpress 사용하기

Microsoft Azure 환경에서 wordpress 사용하기.


왠지 어색한 느낌이 사실이다. Microsoft 와 wordpress 라니... wordpress 는 php 로 구동되는데 말이다. ^^

여기서 중요하게 생각해야 할 점은 Azure 인 것이다. Microsoft 라는 닫힌 공간이 아니고 저 하늘의 구름 처럼 떠 있는 열린 공간이란 점이다. ^^ Azure 의 서비스 관점에서 본다면 wordpress 는 서비스 항목일 뿐 다른 의미가 없기 때문이다. 오늘 내가 사용하려는 방식은 Paas(Platform as a Service) 형태로 웹사이트 생성 시 갤러리(이미 세팅된 서비스 항목)에서 워드프레스를 선택하는 것만으로 모든게 끝나는 간단한 일이다


가장 먼저 할일은 Azure 서비스에 로그인 하는 일이다. 계정은 이미 등록되어 잇다는 가정하에..


로그인하게 되면 좌측의 이미지 처럼 다양한 서비스가 이뤄지고 있을을 보게된다. 좌측에 메뉴바 형식으로 다양한 서비스 종류를 확인 할 수 있다. 여러가지 중에서 오늘 이용할 서비스는 WEBSITES 를 이용할 예정이다. 로컬 환경에서 IIS 에 PHP 가 되도록 하려면 얼마나 귀찮은 일이 많은가...ㅠㅠ 

(APM 만 설치하면 끝... 뭐 그런 방법도 있지만...그 후 벌어지는 잡다한 일들은 역시나 불편한건 사실이니까...)



모든 항목에서 내가 사용하는 모든 서비스를 목록 형태로 볼 수 있다. 위 이미지에서 난 이미 웹사이트 2개를 사용하고 있고 그 외 엮인 서비스로 mysql 과 기본 디렉터리 서비스 등을 추가로 사용하고 있다.


자 이제 뭐든 Azure 의 첫 시작은 "새로만들기" 부터이다. 접속 화면의 좌측 하단을 보면 "새로만들기" 버튼이 아래 이미지 처럼 보이게 된다. 이 UI 는 조만간 사라질 것이다. 즉 두어달 후면 캡쳐만 새로 받은 비슷한 웹페이들이 넘쳐날 예정이란 ...ㅠㅠ




새로만들기 버튼을 클릭하면 아래 이미지 처럼 선택할 기능들이 나열된 레이어팝업이 나타난다. 왜 첫번째 "계산" 이란 번역을 붙여 놓은 걸까?... 저 "계산" 이란 단어가 얼마나 많은 사람들에게 고민을 안겨 줄런지..



어쨌거나 순서대로 "계산" > "WEBSITE" > "갤러리에서" 를 선택하고 나면 아래 이미지 처럼 내가 쓰고자 하는 서비스 목록이 나타난다. 인기순도 아니고 단순히 이름 순이기 때문에 좀 어지럽긴 하지만, "WordPress" 찾는 일이 그렇게 어렵진 않다. 일단 원하는 서비스 항목을 선택하고 우측하단의 체크 버튼(아래 이미지에는 짤려서 보이지 않지만.) 을 클릭하면 2단계로 진행이 넘어간다.





2단계 진행 화면은 아래 이미지와 같다. 위 이미지 오른편의 색 막대 하나가 왼편으로 넘어간 세심함...

DNS 고민이 필요없다. 이미지와 같이 URL 입력란에 뭔가 써 넣으면 *** ".azurewebsites.net" 이란 도메인으로 자동 생성되어 버리는 편리함(?) 을 제공한다. 다른 부분은 크게 신경 쓸 내용이 없고 배포 설정 부분에서 필요한 값들을 넣어 준다. 

해당 내용은 워드프레스의 고유 기능이다 보니 (https://api.wordpress.org/secret-key/1.1/salt/) 에서 랜덤으로 새로 생성된 것을 이용하거나 생성된 값을 적당히 바꿔 입력하도록 하자.




완료 버튼을 클릭하고 10초 정도 기다리면 아래 이미지와 같은 완료 화면을 볼 수가 있다. PHP 인데 WebMetrix 를 이용하라는 패기는 좀...




위 이미지에서 가장 눈에 띄는 부분은 "소스제어 통합" 이다. 난 이미 Bitbucket 에서 git 을 사용하도록 설정한 뒤라 "연결 끊기" 라고 나오지만, 첫 시작하는 사람에게는 아래 이미지의 링크를 이용하여 배포 설정을 추가 할 수 있다. 


난 Bitbucket 을 사용했다. Azure 에 로그인하는 것과 동일한 이메일 주소로 Bitbucket 에 계정을 미리 만들어 두었고 필요한 저장소도 만들어 두었다. ^^ 아래 이미지에서 Bitbucket 을 선택하고 다음을 클릭하면 BitBucket 쪽의 권한 위임 받는 절차를 거치고 저장소의 master 에 커밋되는 내용이 후킹되어 바로 사이트에 반영된다. 뭔가 세세하게 관리하고 싶다면 별도의 브랜치를 후킹하도록 할 수도 있다.




자 이제는 Git 으로 관리되는 저장소에 테마나 플러그인 추가하고 뭔가 잘못되었을 때 되돌릴 방법도 간단히 구현되어 버렸다. 왠지 허무할 정도로 간단한 일이다. 


배포는 앞서 언급한 것 처럼 origin/master 에 변경이 일어날 때마다 후킹되어 자동 배포 처리된다는 점...  

ftp 를 이용해서 현재 배포된 소스를 먼저 다운 받고, 그 내용을 git 에 올리고 add, commit, push 를 반복해가며^^ 고치는 일만 남았다. ftp를 이용해서 내려받은 소스의 디비 원본을 보고 있기 때문에 로컬에서 스테이징 테스트가 가능하다. 즉 저장하면 저장된 내용이 실 운영에 반영된다.^^ 


PaaS 의 한방법으로 wordpress 를 사용해보았다. 뭐든게 너무 간단하게 만들어 지기 때문에 지우는 일도 많은 듯 싶다. 지우는 일도 만드는 일도 쉽다 보니 조금 더 고민 없이 그냥 만들고 지우기를 반복하는 듯 싶다.


자 이제 자동 생성된 사이트의 소스를 FTP 로 받아서 소스제어에 올리기만 하면 되는데...^^ 

FTP 자격증명 만드는 문제로 허부적 거려서 어찌 해결은 했지만, 그 방법이 맞는것 같지도 않고 해서 다음 포스트로 미뤄 놓는다.




저작자 표시
신고

'뭐하는데 > 클라우드' 카테고리의 다른 글

Microsoft Azure 환경에서 wordpress 사용하기  (0) 2014.10.27
Microsoft Azure 첫 시작  (0) 2014.10.23
Trackback 0 Comment 0
2014.10.23 14:49

Microsoft Azure 첫 시작

필요를 느끼지 않는데 공부할 마음이 날까?

어제 Microsoft Azure Camp 에 다녀 왔습니다. 그 동안 클라우드는 가상 저장장치 외의 다른 용도로 이용해본적이 없어서 그다지 썩 내켜하진 않았습니다. 클라우드라는 이름 자체가 뜬 구름 잡는 소리 처럼 느껴져 더 관심을 않가졌는지도...^^

솔직히 어떤 구성을 하던지 눈에 보이는 물리장비에 내가 용량 계산해서 물리적 경로 설정해 놓고 잡다한 구성 세팅으로 이 컴퓨터에서 또는 이 가상머신에서 돌아가는 뭐든 것을 이해해야 한다고 생각했었는데, 요즘 드는 생각은 꼭 그럴 필요가 있는 일인가 싶습니다. 

뭔가 설치하고 운영해야 할 장비도 사무실에 자리 만들어 가며 관리한다해도 스위치 켰다 껐다하는 것 외엔 특별한 잇점이 없기도 하고, IDC 에 넣어 놓았다면 원격 접속으로 처리하니 가상머신을 쓰는 거나 별반 다름 없고 단순한 테스트 구성을 위해서라도 물리 장비를 이렇게 구성했다 풀었다 반복하기도 어렵고 Hyper-V 같은 가상화 환경을 구축해 놓는다 해도 업데이트는 뭐든 신경 쓰이는 일이 한두가지도 아니고 이제 뭐든 다해내기엔 열정이 너무 부족한가봅니다. (주 업무로 하는 프로그래밍 만으로도 변하는 세상을 따라 가기 힘든 것이 이유겠죠...)


사용하는 거의 모든 환경이 웹기반으로 옮겨지다 보니 오픈소스와 각종 편의를 위한 라이브러리, 관리도구 등 제공된 웹 화면에서 경로나 이름 정도 세팅하는 정도로 크게 신경써야 할 일이 줄어버렸습니다. 결국 가상 경로 잡는 것 말고는 인프라쪽에서 신경쓸 일이 없는거죠...^^ 즉 사이트 를 위한 공간 외엔 필요한 일이 없죠. 그래서 그 편리하다는 클라우드를 이용해 보기로 했습니다. 적당한 필요가 생기니 다양한 경로가 생기네요. 마침 클라우드 관련 캠프가 진행되어 등록하고 참가하게되었습니다. 오늘은 어제(10.22) 들었던 내용 중에서 가장 간단한 시작 부분만...^^


일단은 Azure 서비스를 이용할 수 있어야겠죠. 저는 Bizspark 에 가입되어 있어서 쉽게 사용이 가능했습니다. Bizspark 에 대한 내용은 다음 포스트에서 다시 다루는 것으로..^^  일단 아래 URL 을 통해 azure 무료 서비스를 신청하면 누구나 첫 시작은 할 수 있습니다. 

http://azure.microsoft.com/ko-kr/


Azure 서비스 방식은 크게 IaaS(Infrastructure-as-a-Service) 와  PaaS(Platform-as-a-Service) 두가지로 나눌 수 있습니다. 관리 주체가 누가 되냐에 따라 아래 그림과 같은 4가지 경우가 나오는데 Azure 서비스는 가운데 두개를 이용한다고 보시면 됩니다. 


  • On Premises : 하드웨어고 뭐고 다 내가 알아서 관리하는 방식
  • Infrastructure as a Service : 물리적인 장비 위의 가상머신 기반은 Azure 에서 책임지고 O/S 선택(windows, lunux 등) 이후 부분은 내가 알아서 하는 방식
  • Platform as a Service : O/S 도 관심없고 난 준비된 Applications( 웹사이트 같은)과 필요한 Data 만 관리하는 방식
  • Software as a Service : 지금 사용하는 tistory 처럼 그냥 사용만 하는 방식

IssS 의 경우 내가 가상머신을 만들고 그 가상머신에 필요한 프로그램 설치 및 업데이트 기타 관리를 다 하겠다는 뜻으로  widnows 외의 다양한 O/S 를 선택할 수 있습니다.

PaaS 방식의 경우 웹사이트 만들기 또는 모바일 서비스 클라우드 서비스(Soap) 등의 도메인을 통한 서비스 제공자 역할을 할 경우 유용하게 사용이 가능합니다.


즉 우리 회사 홈피하나 만들어 올린다 하면 PaaS 방식으로 웹사이트 만들고 Visual Studio 에서 Azure 로 배포하면 끝인 거죠...^^ DB 연결, CDN 이용등 부차 적인 문제들이 남아 있기는 하지만, 너무 너무 손쉬운 방법인 것이죠... Azure 에서 Website 를 만들면 생성시 ****.azurewebsites.net 과 같은 형식으로 도메인도 생성되니 간단한 테스트 환경 구축으로는 이것보다 좋은 방법이 없어 보입니다.^^


내가 원하는 도메인 설정은 일단 내가 맘대로 조정할 DNS Server 가 필요하겠죠...아래 URL을 참조하시어 Azure 에서 만드시면 될 듯 합니다. ^^ 저 역시 참고로 진행해 보고 정리해 올리도록 하겠습니다.

http://blogs.msdn.com/b/mcsuksoldev/archive/2014/03/04/creating-a-dns-server-in-azure-iaas.aspx

  















저작자 표시
신고

'뭐하는데 > 클라우드' 카테고리의 다른 글

Microsoft Azure 환경에서 wordpress 사용하기  (0) 2014.10.27
Microsoft Azure 첫 시작  (0) 2014.10.23
Trackback 1 Comment 0
2014.10.17 11:04

CSS before, after 선택자 활용하기

jQuery 를 사용하면서 "#", "." 을 활용한 셀렉터라는 기능에 대해 참 고마움을 느끼고 있었는데... CSS 역시 동일한 기능이 가능하다니... 뭐 이래 저래 귀찮은 일로 CSS 를 손보기는 하지만, 역시나 내 전공은 아니야 하고 살짝 외면하고 있었던 CSS...


사이트 최 상단에 간단한 기능을 제공하는 링크를 이용할 때 줄바꿈 없는 간단한 리스트를 이용하는데

<ul style="list-style: none;">

  <li style="display:inline;"><a href="#">메뉴1</a></li>

  <li style="display:inline;"><a href="#">메뉴2</a></li>

  <li style="display:inline;"><a href="#">메뉴3</a></li>

</ul>

문제는 이렇게 하면 "메뉴1메뉴2메뉴3" 으로 붙어 나온다는 점이다.

li 에 display:inline-block; 을 주고 width 를 주는 방법도 있겠지만, 글자 내용에 따라 얼마나 길어질지 모른다는 점에서는 결코 좋은 방법은 아닌 것 같다. 좌우 padding 을 주는 방법도 있지만,  "|" 와 같은 구분선을 넣고 싶을 때 어떻게 li 에 border 라도 줄까... 이런 방법은 아닌것 같다. 


이때 필요한게 before , after 선택자 이다. 즉 li 뒤에 뭔가를 넣고 싶을 땐

ul li:after{

content:" | "

}

와 같이 스타일 정의를 해주면 된다. ^^


이 선택자를 잘 몰랐을 땐 display:inline-block을 사용하고 padding 과 border 를 이용했었는데...마지막이 항상 문제였다. 마지막 li 의 오른쪽에 border 를 지울 방법이 없어서...ㅠㅠ 하지만 선택자가 있으니...기존 방식을 버리고 선택자를 활용하는 방식으로 고쳐 본다.

.topMiniMenu{

}


.topMiniMenu ul{

list-style: none;

}


.topMiniMenu ul li{

display:inline;

}


.topMiniMenu ul li:after{

content:" | "

}


.topMiniMenu ul li:last-child:after{

content:"";

}


----------------


<div class="topMiniMenu">

<ul>

<li><a href="#">메뉴1</a></li>

<li><a href="#">메뉴2</a></li>

<li><a href="#">메뉴3</a></li>

</ul>

</div>

li:last-child:after 선택자를 이용하면 간단히 해결된다.


padding, border 를 이용하는 방법에서도 


.topMiniMenu ul li{

display:inline;

padding-left: 10px;

padding-right: 10px;

border-right: solid 2px #333;

}


.topMiniMenu ul li:last-child{

border-right: solid 0px #333;

}


 last-child 라는 선택자는 역시나 필요한 걸로...^^ border 를 이용하는 경우는 padding 과 글자 크기를 잘 감안하여 구분선이 너무 도드라져 보이지 않도록하는 센스도 필요할 듯...


이상 이제사 알게된 CSS 선택자의 활용을 마무리 합니다. 세상엔 나만 모르고 사는 지식이 너무 많은 듯...ㅠㅠ







저작자 표시
신고

'뭐하는데 > 웨 ~ㅂ' 카테고리의 다른 글

CSS before, after 선택자 활용하기  (0) 2014.10.17
Framework 4 Training Kit  (0) 2010.02.12
구글 Wave 초대장  (4) 2009.12.04
새로운 OS X Snow Leopard  (1) 2009.08.26
구글의 OS, 인텔의 OS 그리고 windows 7  (0) 2009.07.31
Windows 7 RC 발표  (0) 2009.05.06
Trackback 0 Comment 0
2014.10.06 16:12

만능 개발자, 슈퍼 개발자를 못구하는 이유

"얼마를 줘도 좋으니 일 잘하는(능력있는) 개발자가 있었으면 좋겠다"는 이야기를 자주 듣는다. 내가 보기엔 불가능한 일이다. 왜? 그 사람이 원하는 능력있는 사람은 없기때문이다. 어쩌다 정말 출중한 능력을 가진 사람이 있어도 그 스스로 이미 돈만 버는 일에는 그렇게 관심이 없기 때문이다. 더구나 그런 사람은 다듬어지지 않은 아이디어만으로도 그 상품성을 판단하고 필요하다면 아이디어를 가진 사람 도움 없이도 충분히 그 구현이 가능하기 때문이다. 결국 아이디어만 가진 사람은 자신의 기준에 맞는 개발자를 구할 방법이 없다.


그러면...같이 일할 사람을 구하는 것이 맞다. 최소한의 능력 검증만 된다면 같이 일하는 동료를 구하는 것이 답이라 생각한다. 비젼에 대해 같이 고민하고 부족한 아이디어와 구현 방법에 대해 사업화할 아이디어에 대해 보충해주는 동료 말이다. 그런 동료 의식 없이 구현해 줄 사람을 찾는 것은 얼마를 주더라도 밑에서 일할 영혼 없는 월급쟁이 직원일 뿐이다.

저작자 표시
신고
Trackback 1 Comment 0
2014.10.01 17:39

Unity Porting Lab . Microsoft Event

Microsoft 에서 주관하는 이벤트 중에 유니티 관련 캠프가 있어서 궁금한 마음에 신청해서 가봤습니다.^^

유니티는 템플런 이란 게임을 통해 널리 알려진 게임 엔진으로 그 사용성과 스크립트 연동이 편리하고 에셋 스토어를 통해 다양한 캐릭터와 배경 그 외 컨텐츠를 손쉽게 구할 수 있는 장점이 있습니다. 뭐 내가 열심히 캐릭터를 만들어서 팔아도 좋겠지만, 내가 잘 쓰던 캐드, 맥스는 버젼이 얼마진도 모를정도로 이미 예전 이야기라...ㅠㅠ 어쨌거나 여러 게임 엔진 중에서도 저렴한 가격을 자랑하는 유용한 툴이란 점에서는 이견이 없을 듯 싶습니다. 무료 버젼 조차 사이트에 계정 등록한 것만으로도 뭔가를 만들 수 있으니...^^ 그저 뭔가 연습삼아 해보고 싶은 사람에겐 정말 유용한 툴인 듯 싶습니다. 스크립트 언어로 C#을 사용하고 편집 툴로 visual studio 를 이용한다니 이처럼 매력적인 일이 또 있을까요...^^


일단 캠프 참가 전에 유니티 프로그램을 받았습니다. (http://unity3d.com/unity/download)


http://unity3d.com/unity/downloadhttp://unity3d.com/unity/download


위 이미지를 클릭해서 유니티 홈페이지에서 제공하는 최신버젼을 받으시면 됩니다.


https://accounts.unity3d.com/sign-up  에서 간단한 가입절차를 통해 계정 생성하면 됩니다. 다운받은 프로그램을 실행 시킬 때 계정 접속 여부를 확인하는 군요... 계정은 미리 만들어 두시는게 좋을 듯 합니다. 

다운받은 유니티 설치프로그램을 실행합니다. 다운로드된 바이너리가...1.3G 가량 되네요...설치는 비교적 간단하고 설치 후 실행 화면에서 이미 만들어둔 계정 정보를 입력하면 바로 사용 가능합니다. ^^ 


오늘 하고 싶은 이야기 스크립트 편집 툴


Unity 스크립트 편집을 Visual studio 로 전환시켜주는 도구. Visual studio 만한 편집도구가 없죠... (http://unityvs.com/) 에서 다운 받으시고 설치하시면 됩니다. 


http://unityvs.com/http://unityvs.com/


설치과정은 윈도우에서 설치되는 일반적인 프로그램처럼 next 버튼만 잘 눌러주시면...^^


이제 유니티에서 새로운 프로젝트를 생성합니다.



하단에 보시면 "Visual Studio 2013 Tools.unitypackage" 부분이 보이실 껍니다. 뭐 시작할 때 궂이 체크하지 않더라도 나중에 추가 할 수 있습니다. 이후 유니티에서 스크립트 파일 만들고 수정 할 실때 자동으로 Visual Studio 가 실행되어 막강한 편집 기능을 고루 사용하실 수 있습니다. "Ctl+J"... 



솔루션 탐색기를 통해 Assets 폴더의 모든 내용을 검토할 수 있고 리팩토링, 모노 편집기에서 아쉬운 모든 기능들이 깔끔하게 제공됩니다. ^^ 


캠프 시간 동안은 간신히 우주선 좌우 방향 전환, 미사일 발사, 행성(방해물) 생성 정도까지 진행 후 window store 에 배포하는 방식에 대한 연습으로 마무리 지어졌지만, 나름 유니티란 프로그램에 대해 즐거움을 느껴볼 좋은 기회였습니다.


아직은 유니티의 여러 용어들 Assets, Rigibody, Collider... 그 외 이해 못하는 많은 것들이 있지만, 일단 시작하는 것은 크게 어려워 보이지 않습니다. 기회가 된다면 이와 유사한 캠프를 두어번 더 참가해 보고 싶습니다. 이제 유니티가 처음이다 보니 뭔가 어설프게 이해는 되지만, 실제 적용에 좀더 구체적으로 배워보고 싶은 것들이 많습니다...^^ 미사일로 행성 터지게 해보고 싶었는데...(동영상 강좌라도 찾아가며... 얼추 맞춰 봐야 겠습니다.)


저작자 표시
신고
Trackback 1 Comment 0
2014.09.29 15:17

옥션 같은거 만들려면 얼마면 되요?

허접한 개발자지만, 개발자란 이유로 개발 관련해서 이런 저런 요청을 받게 되는데, 그 중 대표적인게 "옥션 같은 사이트 만드는데 얼마나 들까요?" 와 같은 질문이다. 뭐 좀더 정확히 말하자면 쇼핑몰 만드는데 얼마나 드냐는 질문이다. 그런 류의 질문에 대처하는 법은 간단하다. 무료로 제공되는 쇼핑몰 솔루션을 알려준다.

왜? 그런 질문하신 분들 대부분이 실제 상품 등록이나 쇼핑몰 비즈니스에 대한 이해도가 낮으니 무료로 제공되는 쇼핑몰을 이용해서 뭔가 해보시고 쇼핑몰에 대한 필요를 느끼게되면 다시 오란 뜻인데 대부분 무료 쇼핑몰에 가입 조차 않하시는 것 같다. 결국 사업 의지 자체가 없다는 뜻이다. 뭐 나름데로 그렇게만 생각하며 지내고 있는데 그래도 뭔가 고민해 볼꺼리는 있는 것 같아 쇼핑몰 구축에 얼마나 비용이 드는지 나름 계산해 보려 한다. 내 허접한 경험을 바탕으로 하는 것이니 실제 시장 상황과는 거리가 먼게 분명하다. 더구나 사업의지에 따라, 사업 아이템에 따라 관리해야 할 정보의 양도 틀려질테니 뭔가 정확한 답안은 아니다. 그래도 계산을 뽑아 보려는 건 최소한 이런 내용 정도는 고민하고 예산을 잡으시란 뜻에서 몇 자 적어 본다. 


옥션과 같은 쇼핑몰을 만들려면 얼마나 들까?

옥션의 기업 가치가 얼마나 되냐는 이야기와 상통한다고 보면된다. 현재 옥션의 개발팀 소속으로 일하는 직원 수가 몇 명인지 고민해보고 물어보는 것이라면 답은 간단하다. 

((개발 팀 소속 직원 수 X 1.8) X 16 X (평균 급여 X 1.2)) X 2.5

이정도 비용이면 옥션 만큼 트레픽이 많은 사이트가 되리란 보장 없는게 문제긴 하지만, 얼추 옥션 비슷한 사이트를 만들 수 있을 것이다. 허접한 곱하기지만, 어느 정도 고민의 흔적을 남기기 위해서 옥션 사이트 모방을 기본으로 해서 팀을 꾸리는 경우로 개발팀은 DBA, 코딩, 디자인, html, css, script 등을 다루는 개발 조직을 의미 한다. 직원수와 평균 급여는 본인이 상상해서 넣으면 될 문제이지만, 대충 예상하기로는 (이미 만들어진 사이트에서 유지 보수를 위한 인력만 고려해도)100 명을 넘을 것으로 예상한다. 공식에 대해 부수적인 설명을 보자면...

첫번째 1.8 개발자에게 부수적으로 따라 붙어야 하는 추가 인력이 필요하다. 기획 검토 내용에 대해 일관성을 유지해주고 해야 할일을 구분해주고 그 우선 순위를 결정해 주고 각 개발 내용에 따른 추가 작업을 검토해주고 개발 팀간의 의견을 조율해주고 타회사와의 계약 관계를 정리해 주고 소프트웨어 사용등 법적 요건을 확인해 줄 사람들이 필요하다. 흔히 이야기하는 영업 마케팅을 빼고도 말이다. 단순히 옥션에 있는 기능을 똑같이 구현하는 것인데도 왜 이런 부수 인력이 필요할까? 상품 상세 페이지를 맡은 개발자에게 배송비 할인 또는 쿠폰에 대해 이야기 하면 적용할 방법이 있을까? 즉 상위 기획자가 분명 필요하다. 또 그렇게 적용되는 정책 내용들이 상품 리스트, 상품 상세, 주문서, 정산 까지 정확히 절차를 밟는지 확인해줄 사람이 필요하다. 

두번째 16 은 개월 수다. 예상 개발 시간 인데 계획되로 일이 진행된다면 세상에 근심 걱정 가진 사람이 얼마나 되겠나? 그래도 이정도 시간을 잡은 것은 분석, 기능 검토를 통해 기본 안 확정하는  2개월. 개발 방향 및 데이타 설계, 사이트 디자인, 코드성 데이타 생성 4개월. 기능 구현 6개월 검수 테스트 4개월을 예상한 것이다. 개발팀 구성에 따라 초기 기획안 구성에 따라 유연한 조정이 필요한 부분이긴 하지만, 결코 긴 시간은 아니라고 본다. 개발인원이 많다고 해서 기간이 단축되는 것도 아니고 기능을 줄일 수 있는 문제도 아니라고 본다. 아마 개발 진행됨에 따라 추가되는 기능에 기간은 늘어 진다고 본다. 즉 4개월의 테스트는 커녕 1달도 못할 수도 있다는 뜻이다. 준비와 실제는 틀린 문제니까...^^ 약간은 우스운 이야기로 내가 잡은 기간도 옥션의 모든 기능에 대해 고려하고 잡은 것은 아니다. 현재 내가 이해하고 있는 기능의 아웃라인 형태로 산정한 것이니 결코 넉넉한 기간이 아닐 것이다. 옥션에서 제공하는 페이지 아무리 많이 잡아도 80개도 안되 보이는데 라고 하면...나중에 비교 했을 때 왜 이런건 안되요? 이건 기본 아니에요? 란 말만 반복할 사람이 분명하다. ㅋㅋ 그냥 웃을 수 밖에 없다.

세번째 1.2 급여 보다 20% 의 부수 비용은 매우 소극적으로 잡은 비용이다. 평균급여 수준으로 원하는 인력을 구하기 쉽지 않다. 대부분 필요로 하는 사람들은 당신이 잡은 급여 테이블의 최상위 또는 그 이상을 원할테니 말이다. 평균 급여를 정확히 산정했다 해도 또는 그 미만으로 구했다고 해도 예상하지 못한 예비비가 추가로 필요할 것이다.  

마지막 2.5 사무실 운영비와 이 많은 인원을 꾸려나가기 위한 부수적인 인원들 개발을 위한 서버와 장비비용 기타 개발에 필요한 소프트웨어 구입비 등이 포함된다. 물론 운영을 위한 IDC 비용과 서버 비용 등은 고려하지 않는다. 2.5의 부수 비용에도 불구하고 카페테리아 같은 사무실 또는 아침을 제공하는 환상적인 사무실 따위는 어려울 것이다.  

이건 어디까지나 개발을 위한 비용일 뿐 마케팅, 영업을 제외하고 운영에 필요한 기본 비용도 제외했다는  점. 수치를 결정한 내가 허접하다는 점을 고려해서 판단하길 바란다. ^^ 

옥션 지마켓을 후발 주자로써 오픈 마켓을 지향하며 뛰어들었다 망한 업체들이 쓴 돈을 고려해 본다면 그렇게 불합리한 금액도 아닌 듯 싶다.


이상은 개발에 대한 비용이고, 실제 오픈 마켓을 운영하려면 막대한 마케팅 비용과, 판매자를 끌고 다니는 MD, 고객 이탈을 방지와 불만 처리를 위한 고객지원센터, 365일 24시간 풀 가동을 위한 시스템과 엔지니어 그를 위한 유지보수 인력(개발 인원으로 충당한다해도) 새로운 쇼핑몰 아이디어를 추가할 기회자, 세무 회계 전담, 법무 전담 등 필요한 인력과 비용은 계속 늘게될 것이다. 


그럼 그냥 쇼핑몰 만드는 건 얼마나 들까?

옥션 처럼 거창하지 않고 그냥 쇼핑몰 만드는 건 알마나 들까? 공짜로 제공해주는 뭐 하나 바꾸기 어려운 사이트 말고 최소한의 개발이 가능한 쇼핑몰은??

내 첫 의견은 무조건 공짜 쇼핑몰에서 제공하는 기능을 이용해서 상품 등록도 해보고 수수료 요율에 따른 상품 판매가 책정도 해보고 상품 설명을 위한 사진도 찍어보고 결정하라고 이야기하고싶다.  그런거 모두 다 적용해 보고 마진율과 상품 정보에 대한 데이타가 충분하다면 그때 도전해도 늦지 않다. 어쨌거나 그런 과정을 모두 거쳐 이제 정말 내가 원하는 쇼핑몰을 만들고 싶다면...

도메인 구매 및 IDC 비용. 다양한 상품이 있지만, 일 평균 방문자가 1000 명 전후라면 저렴한 방법을 찾도록 하자. 매출도 없는 쇼핑몰 운영하면서 월 10만원 ~ 20만원 가량의 월세를 지속적으로 낼 필요가 있을까? 웹호스팅 사이트들을 보면 소정 비용으로 이용 가능한 쇼핑몰들이 존재한다.  구축 비용 + 1년간 운영비 100 만원 미만의 솔루션을 선택하도록 하자. 적절히 잘 찾아 보면 원하는 느낌의 테마(스킨)이 있고 그 비용과 호스팅 요금 정도면 충분히 운영이 가능하다.  

회사의 마케팅 차원에서 운영하는 쇼핑몰이라면 쇼핑몰의 기능보다는 상품 자체에 대한 설명이 중심이 되야 할테니 쇼핑몰 솔류션을 구매해서 커스터마이징 하는 방법이 있다. 기획 의도가 분명하다면 기획이 끝난 상태로 디자인을 맡기고 그 다지인에 따라 솔류션을 커스터마이징 하는 방법이 좋다. 대부분 솔루션 판매사 별로 커스터마이징 비용이 틀리나 솔루션 비용은 200 ~ 500 만원 범위로 예상하고 디자인이 끝난 상태라면 커스터 마이징 비용은 그 5배 이내로 예상하면 크게 벗어나지 않을 것이다.  기획과 디자인 자체를 에이젼시에서 맡아 진행하는 경우라고 하면 기획 비용은 별도로 솔루션 비용의 10배에서 15배 정도를 예상하는게 맞을 것 같다. 에이젼시 기획에서는 뭔가 독창적인 것을 기대하는 경향이 심하므로 결과물에 대해 서로 골치 아파하는 경우가 발생하지 않도록 중간 산출물 확인 및 검수 단계를 철저히 가져가는 것이 좋다. 기획안, 디자인 시안, 변경사항 관리, 초기 프로토타입 실적용 구현물 등 단계별로 발주사와 에이젼시 솔루션 커스터마이징 업체 모두 유기적인 협력관계 유지가 필요하다. 기획을 주도 했던 에이젼시 측에서 개발 종료 전에 손을 털려는 경향이 심한데 사이트 런칭까지 끝까지 관계 유지가 필요하다. 어쨌거나 이런 경우 기획, 디자인으로 3 ~ 7천만원 개발 비용 1 ~ 5천만원 등으로 비교적 높은 비용이 발생한다. 더블어 유지 보수에 대한 비용 역시 부담해야 한다.

특화된 상품 또는 서비스(새로운 비즈니스) 등으로 쇼핑몰 자체 기능이 필요하여 개발하는 경우 없는 것을 새로 만드는 일이니 기존 솔루션으로 해결하기 어려운 부분이 분명히 발생한다. 즉 솔루션을 커스터마이징 하는 것으로는 한계가 명확하다. 완전히 새로운 비즈니스를 하려는 경우라면 스타트업에 해당하당하는 것이고 그 결과물에 대한 보장은 참여한 사람 조차 담보하기 어려운 문제인데, 기획자 1명, 디자이너 1명, 개발자 2명 정도 구성으로 6개월 이내 운영 가능한 베타 버젼을 목표로 하되 3개월 시점에 중간 평가를 해보고 계속 할지를 결정하면 될 듯 하다. 4명의 3개월 인건비 정도로 예상을 하고 그 후 진행 상태에 따라 추가 투자 또는 비용 산정을 하면될 듯하다.

기존 솔루션과 차별화된 디자인과 자체 업무 로직 적용이 필요한 경우. 월 매출이 일정액 이상 나오는 쇼핑몰이 솔루션을 사용하다 솔루션의 한계를 느껴 지속적인 발전 가능한 시스템으로 탈바꿈 하려는 경우 라면 누구에게 맡겨 개발할 생각 말고 자체 개발팀을 가져가도록 노력하자. 서버 운영부터 UI 까지 완벽한 사람은 있긴 하겠지만 내 앞에 나타나진 않는다. 서버 운영 엔지니어, DBA, 개발, 디자인 네개 분야 관점에서 필요인력을 뽑아 운영하되 최초 개편 시는 전문 업체 또는 일정 수준의 결과물을 기대할 수 있는 업체와 계약하여 구축 후 자사 인력으로 유지 보수가 가능하도록 하는게 좋다. 즉, 초기 개발에 자사 인력이 적극 동참 할 수 있는 개발 업체를 선택하여 솔루션이 넘어 오는 것이 아니라 자사 솔루션이 되도록 개발에 직접 참여 할 수 있도록 해주는 것이 좋다. 자사 인력 외의 개발에 대해서는 6개월 이내 3억 미만으로 운용 가능한 개발 팀을 선택하는 것이 좋다. 외부 개발이 의존도가 너무 높거나 기간이 늘어지면 의뢰사나 개발업체 모두에게 어려운 일이된다. 자사 개발팀이 핵심 코어 부분을 개발하지 않더라도 그 결과물을 이어받을 수 있어야 하고 산출물과 결과 코드는 자사인력과 자원을 통해 관리하도록 한다.


제발이지 1년 간 운영에 대한 비용을 모두 고려해서 원하는 시스템을 구축하길 바란다. 초기 투자 비용을 줄이고 매출을 높이는 것이 성공 비결이긴 하지만, 늘어나는매출에 대응하지 못하는 것은 실패의 지름길이다. 앞서 언급했듯 월 1000만원 매출도 안나는 쇼핑몰에 월세 100만원을 줄 수는 없는 일 아닌가? 지금 현재의 매출 규모 앞으로의 투자 가치 등을 잘 고려해서 필요한 솔루션을 찾는게 방법이라 생각한다. 


결론

구축 3개월 3천만원짜리 솔루션으로 매달 10억의 매출을 기대하진 말자...^^ 

인터넷 쇼핑몰 역시 오프라인 가게와 마찬가지로 월세가 많이 든다. 더블어 주인의 노력도 많이 필요하다. 




저작자 표시
신고
Trackback 1 Comment 0
2012.06.08 11:16

SQL 에서 비트연산을 사용하자.

프로그램을 하면서 자주 접하게 되는 용어가 연산자란 것이다. 산술연산자, 논리연산자, 기타 등등의 많은 연산자에 대해 공부하게되고 그것들을 이용하여 단순한 덧셈 뺄셈의 사칙연산 부터 각각의 연산 기능을 응용한 복잡한 transaction 처리까지 많은 일을 하게된다. 뭐 오늘 하고 싶은 이야기는 이러 저러한 복잡한 이야기 보다는 디비에서 데이타 처리 할 때 이러 저러한 요인으로 인해 상태값 혹은 코드 값 같은 것을 가지게 되는데 그런 처리를 보다 간소하게 명료하게(? 컴퓨터 연산으로는 명료하지만 사람 눈에는 복잡할 수 있는) 세련되게 처리해 보자는 뜻에서 몇 자 적어보는 것이다. 


DB 테이블을 설계할 때 혹은 운영 중인 DB 에서 뭔가를 고치려고 할 때 특정 테이블에 컬럼이 매우 많아서 예를 들어 컬럼이 40개 내지 250개 정도 되는 테이블이라고 하면, 지금 프로그래밍을 배우는 사람이 아니라면 뭔 설계를 그 때위로 해 또는 그런 바보 같은 뭐 이런 소리가 나올 법한 일이나 실제 컬럼 40개 정도는 어디서나 쉽게 볼 수 있지 않나 그런 생각을 합니다. 실제로 이 곳 저곳 기웃 거리며 봤을 때도 컬럼 40개 정도는 흔한 일이었죠. 다만, 문제 삼고 싶은 부분은 그 컬럼 40개가 정말로 필요한 것들이냐는 점입니다. 정말 그 엔터티를 만족시키기 위한 것이냐는 점입니다. 정말 그 개별 속성을 일일이 가지고 필요한 정보들을 넣은 것이냐는 점입니다. 기웃거리며 본 짧은 지식으로는 비슷한 속성이지만 구분을 위해서 조회의 편의를 위해 기타 기존 컬럼의 성격을 잘 몰라서 컬럼을 늘인 경우가 대부분으로 판단되기 때문입니다. 더구나 허용 여부를 나타내는 char(1) 컬럼이 넘쳐나고 있다면 뭔가 새로운 고민을 해봐야 하고 선호도를 묻기 위해 늘여 놓은 체크박스 UI 를 보며 저 내용을 어떻게 DB data 화 할지에 대해 고민해봐야 한다고 생각합니다. 제 맘속에 답은 이미 정해져 있으니...^^


DB 를 이용하면서 알지 못하는 내용이 너무 많은 것 같습니다. 


	select 7 & 2, 7 & 3, 7 & 4, 7 & 5  -- from dual;
	select 8 & 2, 8 & 3, 8 & 4, 8 & 5  -- from dual;

위에 적힌 쿼리문이 쿼리문으로 보이시나요? "-- from dual;"  은 mysql 을 이용하시는 경우 주석 풀고...

어쨌거나 쿼리문으로 보이기는 하나요? "select 1 + 1" 과 같이 쿼리문에도 연산이 적용 가능합니다. 물론 그 연산을 조건문으로 포함하여 사용할 수도 있습니다. 


다시 이야기의 처음으로 돌아가서 체크박스 UI 를 고민해 봅시다. 여러가지 예시중에 원하는 것 또는 해당 사항을 n 개 이상 고르는 UI 에 대해 고민해 봅니다. 좀더 구체적인 예시로 좋아하는 빵의 종류를 선택하고 나중에 특정 빵을 선호하는 사람들을 조회한다고 가정해 보겠습니다. 빵의 종류는 단팥빵, 소보르빵, 바게뜨, 크로와상 네개로 시작해 보죠.

단팥빵
소보르빵
바게뜨
크로와상

특정 회원에 대한 선택값을 저장하는 경우이므로 데이타 저장 시 회원에 따른 1:n 형태의 서브 테이블을 구성할 수 있을 것입니다. 빵에 대한 코드 값과 이름을 회원 키별로 저장하는 서브테이블 말입니다. 

그런데, 빵 외의 속성을 가진 서브 테이블을 만드는 것이 의미가 있을까요? 여러 예외 사항이 있을 수 있지만, 지금은 단순히 회원의 선호도만 평가한다는 점에서는 서브테이블 생성은 크게 의미 없는 데이타 구성이라고 생각합니다. 그렇다면 서브테이블 말고 회원의 한 컬럼으로 담을 방법은 없을까? 위에서 설명한 연산을 이용하면 하나의 컬럼으로 담을 수 있습니다. 

    2 -->       10

    4 -->     100

    8 -->   1000

  16 --> 10000

단팥빵 : 2, 소보르빵 : 4, 바게뜨 : 8, 크로와상 : 16 으로 매칭된 코드표만 잘 관리한다면 여러개가 선택되어도 하나의 컬럼으로 관리할 수 있습니다. 좀더 구체화 해서 단팥빵과 소보르빵을 선택한 사람은 2, 4 의 합 6을 저장하면됩니다. 어떤 조합을 선택해도 더한 합은 31 이하의 숫자가 저장됩니다. 이진수를 이용한 연산을 하면 char(1) 컬럼을 늘인 것과 같은 효과를 볼 수 있습니다. 예시한 네개 외에 새로운 빵이 생성된다면 코드표에 32 를 적용하면됩니다. 그리고 최대 63까지 저장되는 커럼이 되면 됩니다. 보통 숫자 타입의 경우 int 를 사용하므로 최대 26개의 컬럼을 대체 할 수 있게 되는 것입니다. ^^ 

-- 소보르빵만 선택한 사람

select ... from [회원] where [빵선호도] = 4;

-- 소보르빵도 선택한 사람

select ... from [회원] where ([빵선호도] & 4) = 4;

-- 단팥빵과 소보르빵만 선택한 사람

select ... from [회원] where [빵선호도] = 6;

-- 단팥빵과 소보르빵도 선택한 사람

select ... from [회원] where ([빵선호도] & 6) = 6;

선호도와 같이 다중 선택에 대한 조사는 여러가지 경우가 있을 수 있다. 조건절에서의 활용 뿐 아니라 case 문을 활용한 처리도 가능하다.


설명을 위한 예시는 빵선호지만 제가 주로 사용하는 실예는 유저 그룹단위의 권한 처리 부분에서 많이 활용합니다. 쓰기 권한 컬럼, 읽기 권한 컬럼을 두고 그룹별(sysadmin, admin, manage, user) 코드표를 이용하여 권한 체크에 이용하는 것이 유용합니다. 나중에 유저 그룹에 뭐가 추가 될지 모르니 말입니다. ^^

저작자 표시
신고

'뭐하는데 > 디비 디비 딥' 카테고리의 다른 글

SQL 에서 비트연산을 사용하자.  (0) 2012.06.08
SQL Unplugged : 300  (0) 2011.06.03
SQL 에서 영업일 계산하기  (0) 2011.04.01
stored Procedure 검색  (0) 2010.04.09
SQL 서버명 변경  (0) 2009.07.31
OPEN XML 문서  (0) 2009.05.07
Trackback 1 Comment 0
2012.03.17 15:07

Cakephp 시작하기. 회원 로그인 처리하기 Auth components 이용하기. Cakephp 2.0 기준

Cakephp 를 이용하는 두번째 시간. 두번째 부터는 2.0 기준으로 버젼을 올려 보자. 어쩌다 보니 얄궂은 사이트를 하나 맞게 되었고 이런것 저런 것 고민하기 싫어서 2.0 으로 공부도 할 겸 하나 버젼을 올려봤다. 디렉토리, 파일 작명 규칙이 바뀌었다는 점만 빼면 그렇게 실감하는 바는 별로 없다. 그전에도 Cakephp 를 잘 몰랐다는 이야기만 나처럼 고생하지 않기를 바라는 마음에 나의 삽질기를 적어 놓는다. 또 언제 php 를 사용하게 될런지 몰라도 가끔은 필요한 일일테니 짧은 기억 보존을 위해서라도 흔적을 남겨놔야지 않겠나.

일단 사이트를 띄우고  Member 란 모델까지 만들었다면 Member 를 이용한 로그인 기능과 어느 페이지에서든 로그인한 사용자의 정보를 읽고 사용할 수 있는 Sesseion 에 대한 처리를 해야겠지. Cakephp  에서는 인증에 대해 세가지를 지원한다. "Form", "Basic", "Digest"... Form 이야 누구나 알든 웹페이지의 입력칸에 아이디와 패쓰워드를 넣어서 사용하는 것이고, Basic 은 윈도우 기본 인증창을 띄우는 경우이고, Digest 는 Digest Http 를 이용하는 것이란다. 여기서 살펴 볼 방법은 어느 사이트에서나 쉽게 볼 수 있는 Form 인증 방법을 살펴 보자.

Cakephp 에서는 Form 인증을 사용할 경우 Users 란 모델을 사용한다. 하지만 우리가 DB 를 만들 때 Cakephp 전용으로 만들 것도 아니고 지난 post 에서 처럼 Member 란 테이블을 이용하는 경우 인증에서 사용하려는 model 과 어떻게 매칭을 시킬 것인가하는 문제와 컬럼 명을 어떻게 맞춰 줄 것인가 하는 문제가 생긴다. Cakephp 의 Auth 를 이용하면 기타 세션에 대한 관리 및 사용자 인증 정보등을 $this->Auth 란 넘과 $this->Session 이용해서 쉽게 처리할 수 있는 건 알겠는데 지들끼리 User 란 모델과 username, password 를 써서 돌리니 이것 참 답답한 노릇이다. 난 Member 란 모델과 loginid, pwd 를 사용하고 싶은데 말이지.

Member 에 대한 처리는 지난 Post에서 다뤘으니 이제 Auth 를 다뤄보자.
제일 먼저 해야 할 일은 "app/Controller/AppController.php" 를 수정하는 일이다. 사용자가 추가하는 모든 컨트롤들이 AppController 를 상속(?) 받는 다는 점에서 매우 중요하다는 점은 알겠고 이용은 어찌하면 좋을지는 천천히 알아보자.

	public $components = array(
		'Session',
		'Auth' => array(
			'loginRedirect' => array('controller' => 'main', 'action' => 'index'),
			'logoutRedirect' => array('controller' => 'main', 'action' => 'index')
		)
	);

	public function beforeFilter() {
		// Pass settings in
		$this->Auth->authenticate = array('Form');
		$this->Auth->authenticate = array(
			'Form' => array('userModel' => 'Member', 'fields' => array('username' => 'login_id'))
		);
		$this->Auth->allow('index', 'view', 'join');
	}


주의 깊게 살펴봐야 하는 곳은 $components 의 'Auth' 부분과 beforeFilter 함수이다.
 $components 의 'Auth' 에서 배열로 추가한 값은 로그인, 로그아웃 후에 어떻게 처리 할 것인가 어디로 보낼까의 문제이다. 알아서들 처리하면 될 문제고 난 메인 페이지로 보내 버리기로 했다. 다른 요구가 있다면 또 처리하면 될 문제이고
 beforeFilter 에서 $this->Auth->authenticate 가 나오는데 이부분이 내가 처리하고자 하는 인증 방법과 그 인증 방법을 사용할 때 매칭할 모델, 컬럼 명에 대한 정보를 세팅하는 것이다. 맨 아래 $this->Auth->allow 는 인증 없이 보이게 할 페이지를 지정하는 것이다. 즐 어떤 컨트롤을 타더라도 'index', 'view', 'join' 이 세가지 액션에 대해서는 인증 없이 페이지를 보여주란 뜻이다. 특정 컨트롤에서 다른 액션을 추가하고 싶다면 beforeFilter 함수를 만들고 parent::beforeFilter(); 뒤에 $this->Auth->allow('list'); 를 추가해 주면 위의 세개에 list 가 허용 가능한 페이지로 세팅된다.
로그인 처리를 할 MemberController 에서는 아래와 같이
	public function login() {
	
		if(!empty($this->data))
		{
			if ($this->Auth->login()) {
				//$this->redirect($this->Auth->redirect());
				$this->redirect('/Users/mypage');
				// 정상적으로 로그인 되었다면 원하는 페이지로 보내자 자칫 로그인 페이지에서 무한 반복 로그인메소드 실행 후 Sessein 생긴걸 form 페이지 띄우며 다시 지우고 그냥 보기엔 뭔가 잘못되어 로그인이 않된 것 같은 그런 상태를 반복 할 수 있다. 로그인 페이지에서 로그인 한 경우는 그런 반복의 늪에 빠질 공산이 있다.
			} else {
				$this->Session->setFlash(__('아이디와 패스워드를 확인해 주세요'));
			}
		}
	}
public function logout() { $this->Auth->logout(); $this->redirect("/"); }
login.ctp 에서는 아래와 같이
				<?php echo $this->Session->flash('auth'); ?>
				<?php echo $this->Form->create('Member');?>
				<div style="padding:20px;">
					<fieldset>
						<span class="joing_in">
							<span class="item title"><span class="txt_point">*</span> <label for="login_id" class="txt_bold"> 아이디</label></span>
									<span class="item"><?php echo $this->Form->text('Member.login_id' , array('class'=>'textStyle1','MAXLENGTH'=>'16'));?></span>
									<span class="item"><span class="txt_point txt_small"></span>
							</span>
						</span>
						<span class="joing_in">
							<span class="item title"><span class="txt_point">*</span> <label for="Memail" class="txt_bold"> 비밀번호</label></span>
									<span class="item"><?php echo $this->Form->password('Member.password' , array('class'=>'textStyle1','MAXLENGTH'=>'16'));?></span>
									<span class="item"><span class="txt_point txt_small"></span>
							</span>
						</span>
						<input type="image" src="/img/button/btn_login.gif" value="로그인"/>
					</fieldset>
				</div>
				<?php echo $this->Form->end();?>
참 간단하다.  이제 Member 모델을 이용한 로그인이 가능하게되었다. 다만 아직 Member 테이블에 정보가 하나도 없으니 그냥 로그인 폼만 반복하는 좀 바보 같은 페이지가 완성되었다. 
<?php echo $this->element('sql_dump'); ?> 를 이용해서 사용되는 쿼리를 살펴보면 그 내용을 알 수 있다. 
저작자 표시
신고
Trackback 2 Comment 0