« Previous : 1 : 2 : 3 : 4 : 5 : ... 11 : Next »
그동안 귀찮아서 넘겨두고 있었는데...
오늘 간단히 아파치 최적화를 시작했다.

검색해서 링크 하나를 찾았고,.
http://myblog.oranc.co.kr/203


그대로 적용해봤다.

우왕~ +_+_+_+
그랬더니,.. 15초가 넘어가던 로딩속도가.. 1초도 안된다..
대략 체감속도고 15배이상 빨라졌다.

아파치 설정을 바꾸면서 원인을 파악해보니..
아~~ 내가 그동안 서버 호스팅을 하고 나서,..
아파치 설정을 디폴트로 쓰고 있었나보다..
아파치 기본 설정값이 꾀나 보수적이었다.
KeepAlive도 OFF로 되어 있고..

여튼 그동안 내가 신경을 안썼다는 생각이 들더군..
이젠 다시 신경을 좀 써줘야겠다. ㅋ

그리고 아파치 최적화! 이거 필수다!
2012/02/11 11:30 2012/02/11 11:30

Trackback URL : http://miconblog.com/tc/sohn/trackback/692

라파엘이 좀 손에 익으니, 금방 맹글게 되네..
오랜만에 삼각함수 검색했다. ㅇㅎㅎ

코드 좀 정리해서 모듈로 배포해야지.
샘플 페이지는 >>> 여기에

몇가지 코드 정리할 필요가 있다.
1) 옵션을 뺄수있는 설정들 정리
2) 주석 정리
3) 모듈 테스트

주석빼면 100줄도 안되네.. ㅇㅎㅎ
2011/12/07 20:59 2011/12/07 20:59

Trackback URL : http://miconblog.com/tc/sohn/trackback/685

그동안 삽질의 삽질을 거듭한 끝에 가상호스트 설정에 성공했다. 유후~ :D
일단 기본으로 설치된 아파치를 활용하는 팁은 아래 링크를 참고한다.
http://miconblog.com/tc/sohn/613


이제부터 본격 vhost 설정을 시작해보자.
맥에는 기본으로 설정된 사이트 경로가 두개 있다.

먼저 'localhost' 로 설정되어 있는 루트 경로는 아래와 같고,
/Library/WebServer/Documents

'localhost/~사용자이름' 으로 설정된 경로는 아래와 같다.
/Users/사용자이름/Sites

그런데, 문제는 저 두 기본 경로말고 내가 원하는 경로에 가상 호스트를 설정하고 싶은 경우다.
가령, 이클립스 작업 경로 전체를 웹서버로 돌리고 싶은경우..
경로는 아래와 같다고 가정해보자.
/Users/사용자이름/Documents/workspace

그래서 가장 쉬운 방법은 아래 가상 호스트 설정 파일을 열어서,
/etc/apache2/extra/httpd-vhosts.conf

다음과 같이 작성하고 서버를 재시작한다.
# 서로 다른 이름으로 호스트를 설정하고 싶은 경우 설정한다.
NameVirtualHost *:80

# 기본 아파치 호스트 경로
<VirtualHost *:80>
   DocumentRoot "/Library/WebServer/Documents"
   ServerName localhost
</VirtualHost>

# 가상 호스트 경로
<VirtualHost *:80>
     DocumentRoot "/Users/사용자이름/Documents/workspace"
     ServerName workspace

<Directory "/Users/사용자이름/Documents/workspace">
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</VirtualHost>

위 설정을 가만히 보면, 2개의 가상호스트를 설정하고 각각 이름은, localhost와 workspace다.
물론 localhost는 /etc/hosts 파일에 기본으로 설정되어 있지만, workspace는 설정되어 있지 않기 때문에 호스트(/etc/hosts)파일을 열어서 "127.0.0.1  workspace"를 추가해준다.

자, 그럼 http://workspace 를 브라우저 주소에 넣고 실행해보자!!
뚜둥~!! 이런 포비든이다.. ㅇㅎㅎ

Forbidden

You don't have permission to access / on this server.

아마도 대부분이 여기서 막혔을 것이다. ㅇㅎ
이 문제의 원인은 파일 보안 시스템에 의해 접근이 제한된 것이다.  
따라서 해당 경로의 접근 권한을 풀어줘야한다.
터미널을 열고, 다음과 같이 권한을 수정한다.
#/Users/사용자이름$> chmod 755 ./Documents
#/Users/사용자이름$> cd Documents
#/Users/사용자이름/Documents $> chmod 755 ./workspace
ls -al 을 이용해 설정된 권한을 살펴보자. 아래와 같이 설정이 됐다면,
이제 더이상 포비든이 뜨지 않을것이다!!
drwxr-xr-x+ 18 사용자이름  staff   612  8 18 16:14 Documents
drwxr-xr-x@ 18 사용자이름  staff   612  7 19 16:37 workspace
이상 끝~!!
2011/08/20 13:03 2011/08/20 13:03

Trackback URL : http://miconblog.com/tc/sohn/trackback/670

일단...
1. 아파치를 설정하자!
2. httpd.conf 파일을 열고,
3. http-vhost 설정에 주석을 풀자!
4. conf/extra/httpd-vhost.conf 파일 사본을 만들어놓고,
5. conf/extra/httpd-vhost.conf 파일을 열자!
6. 다음에 필요한 프록시를 걸자!

필요한 아파치 모듈
mod_proxy,
mod_proxy_balancer,
mod_proxy_http
mod_proxy_html, mod_rewrite

[참고링크]
http://use.dicnote.com/bbs/board.php?b ··· id%3D729


----
아파치-톰캣 연동 설정..
[참고링크]
http://blog.openframework.or.kr/74

http://tomcat.apache.org/connectors-do ··· map.html

http://www.javaservice.net/~java/bbs/r ··· %3Bs%3Dt

2011/02/23 17:03 2011/02/23 17:03

Trackback URL : http://miconblog.com/tc/sohn/trackback/648

간혹 이클립스로 개발하다보면, 어쩔수없이 강제 종료를 하게되는데..
이때, 이클립스 플러그인으로 톰캣을 연동해 사용하다 강제 종료 했다면,
톰캣 포트가 죽지않아, 강제로 죽여야 하는 상황에 놓이게 된다.

유닉스나 리눅스면, nestate 또는 ps 와 같은 명령어로 PID를 찾고,
kill 명령어로 해당 PID 를 찾아 죽일수 있으나, Windows는 당췌 알수없어, 매번 구글링을 하게 된다.
이젠 이 구글링 하는것도 귀찮아 정리해야겠다. ㅇㅎㅎ

열린 포트의 PID 확인하기

netstate -ao위의 명령어를 사용하면, 아래와 같은 형식으로 출력된다.
Proto    Local Address       Foreign Addresss         State           PID
TCP   나의-컴퓨터:10000    somewhere.com     LISTENING   666
죽이고 싶은 포트가 10000번 이었는데,.. 10000번 포트를 차지하고 있는 프로세스는 666 이구나!!

프로세스 강제 종료하기

netstate 는 리눅스나 윈도우즈나 동일한데, 아마 맥도 동일할듯..
kill 명령어는 윈도우즈용 명령어에는 없다. 윈도우즈 전용은 taskkill 을 사용한다.
taskkill /F /PID 666
위와 같이 강제종료 옵션 /F 와 같이 사용하면, 죽이지 못할 프로세스가 없다!! 유후!!


2010/07/07 11:46 2010/07/07 11:46

Trackback URL : http://miconblog.com/tc/sohn/trackback/621

  1. Kill Process: Windows 에서 살아있는 포트 찾아서 강제로 죽이기

    Tracked from 不알프레도의 블로그!! 2010/12/06 16:53 Delete

    [출처 : http://miconblog.com/tc/sohn/621] Kill Process: Windows 에서 살아있는 포트 찾아서 강제로 죽이기 간혹 이클립스로 개발하다보면, 어쩔수없이 강제 종료를 하게되는데..이때, 이클립스 플러그인으로 톰캣을 연동해 사용하다 강제 종료 했다면,톰캣 포트가 죽지않아, 강제로 죽여야 하는 상황에 놓이게

오늘 미투머니 테스트 코드를 작성하다가,
그동안 안개속에 쌓였던, 정규식의 맘을 헤아리게 되어 몇가지 공유합니다.
제가 말하고자 하는 내용은 사실 이 포스트에 다 있어요.

정규식 RegExp Vs String


정규식은 기본적으로 문자열 패턴을 응용한 놈입니다.
그러니, 당연히 String 객체와는 뗄레야 뗄수가 없는 놈입죠~

그 동안 크게 신경안쓰고 있다가, 아~ 그렇치 하는걸 오늘 알았어요. 저도..ㅋㅋㅋ
너무나 당연한 사실을 저만 늦게 깨달은 기분.. 아하하하

정리하면,

정규식은 2가지 형태로 사용할수있습니다.
1. 정규표현식 객체(RegExp)를 사용하는 방법과,
2. 문자열 객체(String)의 정규식 메소드를 이용하는 방법

메소드만 정리하면, 이렇쵸!!
RegExp.test() - Boolean 값을 리턴
RegExp.exec() - 매칭된 값을 Array로 리턴
String.split() -
String.match() -
String.replace() -
String.search() -

RegExp.test() Vs RegExp.exec() 의 성능 차이


일 반적으로 두 메소드 중에서, test() 메소드의 성능이 더 좋다고 얘기합니다.
왜 그럴까요?.. 그냥 성능이 좋다고 하니까 그려려니 하나요? 이젠 제대로 이해해봅시다.
여기엔 이유가 있습니다.

바로 캡쳐링이라는 기능 때문입니다.
캡쳐링이 뭐냐하면, 간단히 말하면, 패턴으로 찾은 놈을 따로 저장하는걸 얘기합니다.

앞의 두 메소드의 리턴값이 하나는 Boolean 이고 하나는 Array인 점이 바로 여기에 있습니다.
당연히, test 메소드가 리턴값이 Boolean 이므로, 성능이 더 좋겠죠?
네,.. 맞습니다. 하지만 단순히 리턴값의 사이즈가 작다고 성능이 더 좋다고 얘기할수는 없습니다.

왜냐면, 결국 RegExp 객체가 찾은 패턴을 모두 가지고 있기 때문이죠.
따라서, test() 메소드만을 사용한다고 성능이 좋아지는 것은 아니랍니다.
정확히 얘기하면, 어떻게 패턴을 정의하냐에 따라 달라지겠죠!!

예를 들어보겠습니다.
var str = "테스트 테스트1 테스트2 테스트3 테스트4";
var regx = /테스트\d/;

regx.test(str);   // true
regx.exec(str);  // ["테스트1"]
위와 같이 실행하면, test()는 true, exec()는 ["테스트1"] 배열을 반환합니다.
그리고 여기서 하나더!! 위에서도 잠깐 언급했지만, 두 메소드 모두 결국 RegExp 전역 객체를 사용하게 됩니다.

그러니까, 각 메소드를 실행하고, 아래와 같이 RegExp 객체의 $_ 와 $1 값을 확인해보면,
모두 같음을 확인할수있습니다.
RegExp.$_  // 테스트 테스트1 테스트2 테스트3 테스트4"  - 테스트할 문자열
RegExp.$1  // ""  - 캡쳐링된 문자열

이 얘기는 결국, test() 메소드와 exec() 메소드의 내부 구현은 같되, 리턴값만 다름을 의미합니다.
즉, 현재 까진 리턴 사이즈 말고는 성능이 같다는 얘기죠~!!

이제 좀 변형해봅시다. RegExp 객체에 패턴을 저장하기 위한 캡쳐링 옵션을 줘보도록 하지요.
regx = /(테스트)/ 로 바꿔서 해봅시다.
var str = "테스트 테스트1 테스트2 테스트3";
var regx = /(테스트\d)/;

regx.test(str);   // true
regx.exec(str);  // ["테스트1", "테스트1"]
RegExp.$1;       //  "테스트1"    - test(), exex() 모두 같음.
뭐가 다른지 감이 오나요?.. exec()가 뱉어내는 리턴값을 유심히 보세요. 아직 모르시겠나요?
캡쳐링은 매핑된 결과를 RegExp 객체가 내부에 저장한다고 앞서 말씀 드렸습니다.
바로 그 캡쳐링된 결과를 RegExp.$1, RegExp.$2 등으로 읽어올수있습니다.
물론 캡쳐링은 하나의 패턴안에서 괄호를 여러번 사용함으로써 저장할수 있습니다.

가령, 이렇게 쓸수도 있다는거죠!!
var str = "테스트 테스트1 테스트2 테스트3";
var regx = /(테스트)\s(테스트\d)/; 

regx.exec(str);   // ["테스트 테스트1", "테스트", "테스트1"]

자 이제 exec()의 리턴값의 구성을 이해하시겠죠?

[매칭된 문자열, 캡쳐링된 첫번째값, 캡쳐링된 2번째값, 캡쳐링된 3번째 값, ... , 캡쳐링된 N번째 값]

이젠 RegExp에 저장하지 않도록 비캡쳐링(?:xxx) 옵션을 주고 하나 더 해보죠.
var str = "테스트 테스트1 테스트2 테스트3";
var regx = /(?:테스트\d)/;

regx.test(str);   // true
regx.exec(str);  // ["테스트1"]
RegExp.$1;       //  ""    - test(), exex() 모두 같음.
자~~ 이젠 어떤 차이가 있지는 아시나요? 여전히 모르시겠다구요?
비캡쳐링(?:) 옵션을 사용해서 RegExp 에 찾은 패턴값을 저장하지 않았습니다.
그러니까, exec() 리턴값에도 찾은 패턴값이 넘어오지 않게 되죠?

자 그럼, exec() 리턴값의 구성을  한번더 정리해보죠~

[매칭된 문자열, RegExp.$1, RegExp.$2, RegExp.$3, ... , RegExp.$N]

마지막으로 그럼,

도대체 성능과는 무슨 관계가 있는거냐?

이 질문에 답할 시간입니다.
이미 눈치채고 계신분이라면, 조용히 닫기버튼을 누르셔도 됩니다. ㅋ

test()와 exec() 메소드의 성능차이는 간단합니다. 이렇게 정리하도록 하죠!

"간단한 패턴 문자가 있는지 없는지를 확인할땐, 비캡쳐링과 test() 메소드 조합을 사용해라!
"

되셨 나요?

이렇게 얘기 할수도 있습니다.

"test() 메소드를 사용할때는 반드시 비캡쳐링 패턴으로 정의해라!"

그 이유는 앞서 주구장창 설명한 캡쳐링되어 저장된 값 때문입니다.


패턴 플래그 g 에 대한 고찰


이제 오늘 깨달은 것의 하일라이트!! 바로 g 플래그 옵션입니다.
패턴 플래그는 총 3가지가 있죠. i, g, m 뭐 다 아실꺼라 생각하고 각각의 설명은 생략합니다.
모르면 검색해보아요~

이제 g에 일반적으로 알려진 사실을 흔히 쓰는 예제로 보면, 아래와 같습니다.
var str1 = "No pain, No gain!";
var str2 = str1.replace(/ain/g, "XXX");
// str2 = "No pXXX, No gXXX!"
즉, "g 옵션을 쓰면, 모든 패턴을 찾게 된다." Global 의 G 가 바로 그 g 옵션인거죠..

그러면, 얼핏 이런 사실을 알고 있을때, 지금껏 제가 착각해왔던 것은 아래와 같은 겁니다.
앞에서 해왔던 예제를 이어봅니다.
var str = "테스트 테스트1 테스트2 테스트3";
var regx = /(테스트\d)/g;

regx.exec(str);  // ["테스트1", "테스트2", "테스트3"] 일까요???????
g 는 글로벌 옵션이니까,.. 저렇게 나와야 하는게 아닐까?.. 하는거죠!!
결론부터 얘기하면 아닙니다...
왜인지는 아시겠죠? 아직도 그 이율 모르신다면, 앞에서 설명한 exec() 메소드의 리턴값 구성을 다시한번 보세요.

그러면 이렇게 해보죠..
var str = "테스트 테스트1 테스트2 테스트3";
var regx = /(테스트\d)/g;

regx.exec(str);  // 1번 실행, ["테스트1", "테스트1"]
regx.exec(str);  // 연속해서 두번 실행, ["테스트2", "테스트2"]
regx.exec(str);  // 연속해서 세번 실행, ["테스트3", "테스트3"]
RegExp.$1;  // "테스트3"
어랏?.. 저렇게 나올껄 예상하셨나요? 올~~ 예상했다면, 당신은 규식이를 잘 하는 분입니다.
아직도 모르시겠다구요? 글로벌 옵션이긴 하지만, 적어도 제가 기대했던 것과는 사뭇 다릅니다.

자 그럼 g 옵션의 비밀을 정리해보죠..
정리하면,

패턴 플래그 g 옵션은 연속해서 패턴을 찾을때,

다음 패턴 검색을 위해 RegExp객체에 패턴 검색의 시작 위치를 저장해 둔다.


이해되셨나요? 앞에 예제를 곱씹어보세요~ ^^

test() 메소드와 exec() 메소드는 리턴값이 다른 만큼 분명 그 쓰임도 다릅니다.
따라서, 패턴을 어떻게 정의하느냐에 따라서,
RegExp 객체에 얼마나 많은 정보가 캡춰링 되어 저장되는지, 그 비효율성도 고민하셔야합니다.

여기까집니다.
도움이 되셨나요? 도움이 되셨다면,.. 리플이라도..ㅋㅋ
아놔.. 이거 다 아는거잖아.. 썅~ 뭐냐? 이러면,.. 걍 쌩까세요~ ㅋㅋㅋ

2010/06/15 10:46 2010/06/15 10:46

Trackback URL : http://miconblog.com/tc/sohn/trackback/617

  1. 불꽃남자의 생각

    Tracked from miconblog's me2DAY 2010/06/14 01:04 Delete

    잠깐 외출했다 와서, 아까 쓰던걸 이제야 정리끝~~

Mac OS X 에는 tiger 버전 부터 기본으로 설치된 Apache2가 있다.
현재 내가 쓰고 있는 Mac 버전은 스노우래퍼드고,  apache2 의 위치는 아래와 같다.
/etc/apache2/

아파치 서버 실행 방법
그리고 맥에 기본 설치된 아파치를 실행하기 위해선 아래와 같이
시스템환경설정 > 공유 > 웹공유 를 체크하면 된다.
사용자 삽입 이미지

가상 호스트 설정

일반적인 가상 호스트 설정하는 방법과 마찬가지로, vhost-httpd.conf 라는 파일을 생성해,
httpd.conf 에서 Include 하는 방법을 알아보자.
먼저 기본으로 설치된 아파치 폴더에서 /etc/apache2/httpd.conf 파일을 열고, 맨아랫줄을 보면, 아래와 같이 주석처리가 되어있는 부분에서 주석(#)을 제거하자.
#Include /private/etc/apache2/other/*.conf
그리고 other 폴더에 가보면, 맥은 참으로 친절하게 이미 vhost-httpd.conf 파일을 만들어놨다것을 알수있다. 이제 vhost-httpd.conf 파일을 열어서, 원하는대로 호스트 설정을 하면 되시겠다!

대충 샘플은 아래와 같으니, 적당히 수정해서 쓰면 끝~!!
<VirtualHost *:80>
    DocumentRoot "/Library/WebServer/Documents/Me2Money"
    ServerName local.me2day.net
    ErrorLog "/private/var/log/apache2/local.me2day.net-error_log"
CustomLog "/private/var/log/apache2/local.me2day.net-access_log" common
<Directory "/">
Allow from all
Options +Indexes
</Directory>

ProxyRequests Off
<Proxy /*>
Order deny,allow
Allow from all
</Proxy>
ProxyPass /seleniumReport/ http://local.me2day.net:8088/seleniumReport/ retry=1

ProxyPreserveHost Off
</VirtualHost>
이제 테스트를 위한 /etc/hosts 파일을 열어서, 원하는 호스트를 설정을 한다.
#Me2Money
10.0.1.4 local.me2day.net
그리고, 브라우저에서 설정한 호스트(local.me2day.net)로 접속하면, 로컬 아파치로 접속하게 된다!

Apache + PHP 연동

맥에는 역시, php 모듈도 기본 설치 되어 있다. 연동은 너무나 간단하다.
사실상, 이미 연동되어 있다고 생각해보 무방하다.
기본으로 설치된 PHP 연동을 위해서는 httpd.conf 파일을 열면,
아래와 같이 주석으로 처리된, php 모듈만 로드해주면된다.
#LoadModule php5_module        libexec/apache2/libphp5.so
간단히 주석을 제거한후, 아파치를 다시 실행하자.
그리고 간단한 phpinfo(); 파일을 출력해보자.

사용자 삽입 이미지

올레~~ 성공~!!
차암~ 쉽죠~!!
2010/05/21 14:41 2010/05/21 14:41

Trackback URL : http://miconblog.com/tc/sohn/trackback/613

오늘은 만우절이네요.. 만우절 답게 오늘은 이스터에그 얘기!!


이스터에그라고 아시나요?.. 보통 프로그래머들이 일부러 숨겨놓은 기능을 얘기하는데요.

이런 이스터에그들을 보면, 개발자들의 애환이 위트로 승화된 재미난 것들이 많습니다.

우리나라에서 가장 대표적인 이스터에그는 알집의 폴더이름인데요.

너무나 유명하죠? 알집으로 폴더를 100여개 생성하다보면,

[쫌~~] [제발 그만좀 만들어] [부탁이야] [새이름도 바닥났어]

라는 좀 황당한 폴더들이 생성이됩니다.

한때 알집이 유행하면서, 기여이 이런 상황까지도 벌어졌죠..


최근에는 Plants and Zombie 라는 iPhone App에서도 발견이 되었는데요.

Achievements 메뉴에서 땅속으로 계속해서 스크롤을 하다보면,

뚜둥~! 지구 반대편이 나옵니다!


그밖에 좀더 다양한 내용은 요 링크에서 확인해보세요.


자.. 서두가 좀 길었습니다. 따끈따끈한 소식입니다.

저도 우연히 발견했는데요. 점점 딱딱해지고, 재미없어지는

네이버 메인에 재미난 이스터에그가 있었네요.. ㅋㅋㅋ


여튼 방법은 이렀습니다.

네이버 메인 페이지가서 상단 검색창에 커서를 두고,

caps lock 키를 활성화 한후 shift 키를 누른 상태에서 aksdnwjf(영문으로 만우절) 이라고

빠르게 입력후 Enter키를 칩니다.

그럼 어떻게 나올까요? 뚜뚱~!! 궁금하시죠? 직접해보세요!

아참 그런데 정말 빠르게 입력하셔야 합니다. 1초 안으로

참고로 전 테스트용도로 시뮬레이터를 짜서 돌렸습니다.


해보시고 계신가요?.. 잘 안되시죠? AutoIt 등으로 스크립트를 짜서 돌려보세요.

귀찮으신 분들을 위해 제가 타이머를 늦춰놓은 페이지를 구현해놨습니다.

궁금하신 분들만, 여기서 시도해보세요~~!!

2010/04/01 01:47 2010/04/01 01:47

Trackback URL : http://miconblog.com/tc/sohn/trackback/605

관찰력 키우기

2010/03/28 01:58

이달초부터 계획했던 프로젝트가 하나 있었다.

이름하여, UUI 프로젝트인데..

이 생각의 발단은, 무심코 넘겼던것들에 대한 관찰이라고 할까?


뭐 이런거다.

창의력과 혁신의 시작은 관찰이 아닐까? 하는 생각..


요새 읽는 책속의 말들을 빌리면,

지금은 그 어느때보다 창의력을 요구하는 시대에 살고 있다고 한다.

창의력이 바로 성장의 동력이요, 혁신의 핵심이라는 얘기다.


하지만 그 창의력이란 것이 책상머리에 앉아 있다고 나오는건 절대 아니라는걸 누구나 알고 있을것이다.

그렇다고 여러사람이 머리를 맞대고 앉아 아이디어를 쥐어 짜봐야 다 거기서 거기일테지..

그래서 혹자는 세상에 더이상 새로운 것은 없다 라고 단언 하지 않았던가?


난 말이야…(추노 장혁 말투) 그래서 생각을 좀 바꿨다.

이전에는 창의력을 키우기 위해, 많이 보고, 많이 듣고, 많이 익혀야하는줄 알았다.

그런데 말이야..(역시 장혁말투) 그런다고 내 스스로 창의력이 높은 인간이가? 하는 거다.


정말 그런가? 난 모르겠다. 누군가는 넌 참 창의적인 놈이야 할수도 있겠지만,..

난 내 스스로 그렇다 라고 단언을 할수가 없다.


그래서 창의력은 다 때려치고, 이젠 그냥 내가 스스로 못견뎌하는 것들을 파헤쳐서

각개격파하자는 생각이다.


그래서 난 관찰을 하고 있다. 자기성찰을 얘기하는 것이 아니다. 그냥 관찰이다.

내 주변에 있는 것들에 대해서 조금더 신경쓰고, 조금더 애정을 갖고 깊이 관찰해보기로 했다.

사실 평소에 안하던 짓을 하면 오래 살지 못한다고 하는데.. ㅎㅎ

나도 아마 오래 살진 못하겠지..


긴장을 하지 않고, 넋놓고 있으면, 예전 습관이 묻어나와 관찰을 하겠다는 의지가 그대로 꺽여버린다.

주의깊은 관찰을 습관화 하기란 참으로 어렵다.

하지만 올 한해동안은 관찰력이 날 변화 시킬것이다.


그러니까.. 내가 간혹 미친짓꺼리를 하더라도..

그려려니 해주기 바란다. ㅋㅋㅋ

2010/03/28 01:58 2010/03/28 01:58

Trackback URL : http://miconblog.com/tc/sohn/trackback/604

오랜만에 사용성에 관한 이야기를 해봐야겠다.


사실, 사용성은 옵션일수밖에 없다.


얘기에 욱하는 사람들도 있겠지.. 하지만 이게 현실이다!

사용성이 아무리 뛰어난들 핵심기능이 구현되어 있지 않으면 나가리다.

사용성이 아무리 뛰어난들 내가 원하는 기능이 없으면 나가리다.

사용성이 아무리 뛰어난들 내가 불편하면 그것 또한 나가리다.

그런데 언젠가 부터 사용성은 반드시 필요한 필수! 라고 얘기 하는 사람들이 있다.


물론, 사용성을 개뿔 신경쓰지 않고 개발하는 것보다 사용성을 생각하면서

만드는 것이 당연히 좋겠지만,


그런데,... ...

뭐랄까?.. 요새 포탈사이트나  기타 어플들에서 내세우는 사용성들이

그게 과연 정말 편해? 라는 생각이 들때가 많다.

쓰다보면 편해야 하는데.. 쓰다보면 불편한 기능들이 있기 때문이다.


이런 생각들의 근간은 사용성이라는 단어에서 풍겨오는 어떤 선입관이라고 해야하나?

그런 편견들이 많이 묻어난다.


사용성이란 도대체 뭘까?


사용자의 행동 패턴에서 반복되는 작업들을 없애면서 뭔가 알아서 자동으로 샤샤샥 해주는 그런 편리함?

그런것을 의미하는 걸까?.. 요새 말하는 사용성이 그런것을 의미하는 것같다. 라는 느낌을 자주 받는다.

내가 잘못 이해하는 것일수도 있지만..


하지만 말이다... 위와 같은 의미의 사용성이라면,

때론 불편해도, 불편함이 어떤 가치를 지탱해준다면, 기꺼이 사용성은 희생되어도 된다 라고 생각된다.


사용성 보다 중요한 내적(서비스적)가치


More 조엘온 블로그 책을 읽다보면, 거기서도 비슷한 맥락의 내용이 나온다.

여기에 내가 하고 싶은 얘기가 너무나 정리되어 있다. (궁금한 사람은 보시길..)


조엘온 블로그 사이트 안에는 소프트웨어만을 다루는 토론방이 있다.

여기서는 토론의 가치를 지키기 위해, 일반적으로 우리 생각하는 사용성을 많이 버렸다. (심지어는 검열도 한다.)

대표적인 것이 댓글 알리미 기능, 누군가 쓴글에 피드백을 주면, 메일이나 기타 방법으로 알려주는 기능인데..

이런 알리미가 있을때와 없을때를 비교하면, 당연히 있을때 토론방 방문횟수가 적어진다.

이것은 결국 토론방 활성화에 악영향을 주게 될것이다.


비슷한 예가 하나 더있다.

네이버의 오픈캐스트 발행하기 기능이다.

이미 수많은 블로거들이 발행하는데 무슨 몇시간 걸리냐고 불만을 쏟아냈다.

하지만 여기에 불편한 진실이 숨겨져 있다면???


누구는 캐스트 발행이 너무 불편해서 도저히 못하겠다고, 도대체 누가 할수있겠냐고,.. 얘기하겠지만..

캐스트 노출로 인해 많은 방문자를 유입하는 것에 가치를 두고, 혹은 그것으로 먹고 생각이 있다면

발행하기가 지랄맞게 불편하더라도 계속해서 발행을 할것이다.


하지만 일반 사용자들은 그렇치 못할것이다. 왜냐? 그들은 그만큼 할얘기도 없을 뿐더러..

소위.. 개나 소일 확률이 높기 때문이다. ( 과격했나? ㅋㅋ 그냥 강조의 의미로 받아들이삼.)


서비스적으로 생각하면, 저질 컨텐츠 보다 당연히 양질의 컨텐츠를 생산하는 시스템으로 가는것이 맞다.

물론 여기에 롱테일의 법칙에 따라서, 그런 시시콜콜 컨텐츠들이 가치가 있다고 생각할수도 있겠지만..

오픈캐스트는 그런 롱테일의 가치를 표방하는 서비스는 분명 아니다.

오히려 반대인 파레토 법칙의 가치를 표방한다고 볼수있다.

그렇다면, 가치에 맞는 방향으로 디자인(또는 설계) 되어야 한다.

, 사용성이 떨어지더라도 응당 그만한 가치가 있다면 그렇게 해야하는 것이다.


사용성! 다시 생각한번 생각해 봐주세요.


이제는 진정 사용성이 무엇인가 다시 한번 곱씹어 볼때도 됐다.

작은 버튼이 단순히 좀더 크게, 좀더 눈에 잘띄게, 좀더 클릭하기 쉽게 만드는 그런 사용성 말고,

진정 컨텍스트 안에서 혹은 서비스 안에서 요구하는 가치를 진정으로 돋보이게 하는

그런 UI 혹은 UX 만들때도 됐다..(그렇치 않나요?)


마지막으로 TV에서 누군가 했던 말로 정리하려한다.


요즘 옛날에 비해 어떤가? 라는 질문에 이렇게 대답했다.

편해지긴 했지만, 좋아지진 않았다.


오늘은 여기까지 이만 ~!

2010/02/21 02:55 2010/02/21 02:55

Trackback URL : http://miconblog.com/tc/sohn/trackback/599

« Previous : 1 : 2 : 3 : 4 : 5 : ... 11 : Next »