반응형
처음 회사에 들어와서  Java 프로그래밍을 배우겠지..
개발환경은 Eclipse.. 이 툴은 좀 어렵군.. 그래도 한 번 세팅하면 편해.
그러다 어느 정도 API 에 익숙해 지면 Thread 라는 것을 배울거야.
하지만 속으로 이렇게 생각하겠지. '이걸 어디다 써먹어? 먹지도 못하는 것.'
남들이 만들어 놓은 프로그램 유지보수를 하면서 JSP 라는 것을 배우지.
서버단은 Spring 으로 되어 있네? 그러면서 도메인은 EJB3를 쓰고.
원리도 모르고 왜 쓰는지도 모르겠지만 Spring 문법을 배우고 EJB3 문법도 배우자.
여기서 너희들은 제일 중요한 J2EE SPEC 중에서 Servlet SPEC을 놓치고 넘어가지.
이걸 운좋게 공부할려고 맘먹었으면 6개월은 더 고생해야 돼.
공부하면서 Tomcat과 같은 Servlet Engine의 ClassLoader와 쓰레드의 원리를 알게되지.

1~2년 지나면 Spring 을 쓰다가 알게되는 Design Pattern을 보겠지.
아.. 이런게 있구나.. 하지만 백날 배워봤자 어디다가 응용해야 할지 모르지. 
사실 Design Pattern은 일부를 제외하고 클라이언트 프로그램에 더 잘 맞거든.

어느날 프로그램을 개선하다고 이전의 프로그램이 개판이라는 것을 알게 되지.
그 때 선배가 이야기하는거야. 프로그램을 고칠려면 Refactoring을 해야한다.
Refactoring을 할 때 제일 중요한 것은 안전성.. 그러면서 자연스럽게 Unit Test 를 배우지.
축하해.. 여기까지 공부했으면 이제 한 5년은 지났을 거야.

이제 2갈래로 나눠져야 돼.. 내가 웹 프로그래머로 살지.. 아니면 서버 프로그래머로 살지.
서버 프로그래머로 살려면 네트웍 프로그램을 알아야지..
오픈 소스를 검색하면 MINA가 나올거야. 하지만 Netty가 그 이후 버전이라는거.
기존에 공부한 Design Pattern 덕에 그나마 소스 분석은 가능하지.
Netty 는 JBOSS 커뮤니티에 속해서 Memcached 나 Infinispan 같은 서버 캐시도 관심을 갖게 되겠지.
그러다 어느날 다시 NoSQL 이라는 것을 만날거야.
축하해.. 그럼 요즘 화두가 되고 있는 Clound Computing을 만난거야.
Hadoop 도 있고 HBase도 있고. Thrift, Hive zooKeeper 등등을 만나지..
2억 5천명이 사용하고 있는 FaceBook의 서버 구조도 같다는 것을 만나게 되고. 

또 5년이 흘렀군.. 다행스러운 것은 Clound Computing은 현재라는 거야.
불행한 것은 지금 이글을 보고 있는 초보 개발자는 10년이 지나야 현재의 내 말을 이해한다는 거지.

웹 프로그래머로 살고 싶다고?
그럼 이제는 도메인 모델링이 궁금해 질거야.. 앞에서 공부한 EJB3지.
원리는 뭘까? 궁금하지? 그렇담 마틴파울러가 쓴 Enterprise Application Architecture Pattern이란 책을봐.
6개월을 꾸준히 공부해도 완벽하게 이해 못할테지만.

웹 프로젝트를 하다보면 고객이 이러지.. "내가 말한 시스템이랑 틀린데? 왜 이렇게 만들었어요?"
아.. 절망.. 도대체 고객이 요구하는 게 뭐야?
그걸 뭘 고민해? 먼저 조금씩 만들고 시스템을 자주 보여주면서 그 때 그 때 원하는 것을
수정해서 만들어 가면 되지. Extreme Programming 이라는 것이 그런거야.. 
근데.. 프로젝트를 자주 통합하라네? 어떻게 하지?
우선 소스를 관리해야지..뭐가 좋을까?
Subversion 으로 소스를 관리해. 컴파일은? Ant 나 Maven으로 해야지..
 옛날에 배운 Unit Test 를 써서 프로젝트를 해야지..

어느날 오픈한 시스템이 다운되지. 사용자가 많아서.. 이걸 어째?
Infra 영역인 L4, HA, Clustering 을 공부해야 할거야. 이건 기본이거든.
Queue도 배워야 하고.
아.. 쓰기도 힘들다..

불쌍하다. 후배들아.. 그렇게 공부하고도 아직도 월급과 대우는 그정도라니..
반응형
Posted by seungkyua@gmail.com
,
반응형
조선일보 위클리 비즈에 나온 파라슈라만(A. Parasuraman) 미국 마이애미대 석좌교수가 말하는 기업은 서비스에 투자하는데도 고객 만족도가 높지 않은 4가지 이유..

1. 시장 정보의 격차 (market information gap)
    - 고객과 경영진의 생각이 다른 경우
    - 고객이 정확히 무엇을 요구하는지 모르는 경우
    - 조그마한 간편한 서비스를 제공하는 것보다 근본적인것을 제공해야 하는 원리

2. 서비스 표준 격차 (service standard gap)
    - 경영진 생각과 업무지침이 다른 경우
    - 고객의 정확한 요구를 알고 있으나 요청이 다양하든지 해결할 수 없다고 생각하여 다른 서비스를 하는 경우

3. 서비스 실행 격차 (sercie performance gap)
    - 직원이 지침대로 하지 않는 경우
    - 좋은 매뉴얼과 프로세스 방법론이 있다 하더라고 그에 대한 인센티브가 없어 직원들은 굳이 지키지 않는다.

4. 내부 커뮤니케이션 격차 (internal communication gap)
    - 각 부서의 말이 서로 다를 때
    - 우리 시스템은 any os, any browser 에서도 제공된다고 하나 사실은 모든 os 는 아닌 경우
       영업은 그렇게 다 된다고 홍보하고 실제 개발팀은 제약사항이 있다는 것을 영업이 홍보하는 줄 안다.

정말 대단한 분석가.. ^^ 
반응형
Posted by seungkyua@gmail.com
,
반응형
3D 애니메이션 제작 과정

1. 트리트먼트 (treatment) : 기획안 제작, 아이디어 회의를 거쳐 캐릭터, 배경, 줄거리를 만든다.
2. 스토리보드 (story board) : 각본을 만들고 스토리 아티스트 (story artist)들이 이를 그림으로 표현한다.
3. 캐릭터 완성 : 캐릭터 디자이너가 캐릭터를 만든다.
4. 3D 모델 완성 : 모델러 (modeler)가 캐릭터를 3차원으로 만든다.
5. 움직임 프로그램 제작 : 리거 (rigger) 기술자가 뼈와 관절을 만들어 자연스럽게 움직을 수 있는
                                    컴퓨터 프로그램을 만든다.
6. 화면의 구도와 배경 완성 : 레이아웃 아티스트 (layout artist) 들이 화면의 구도와 배경을 만든다.
7. 캐릭터의 움직임을 표현 : 애니메이터 (animator)가 컴퓨터 프로그램을 이용하여 캐릭터의 움직임을 표현한다.
8. 목소리 및 빛, 그림자 입히기 : 성우는 목소리를, 라이터 (lighter)는 화면 속 사물에 빛과 그림자를 입힌다.

유니티로 개발하려면 캐릭터 디자이너와 3D 모델러가 필요하군요..
반응형
Posted by seungkyua@gmail.com
,
반응형
Java NIO의 ByteBuffer 는 mark, postion, limit, capacity로 구성이 됩니다.

buffer.clear() : position = 0, limit = capacity, mark = -1 로 세팅
inputChannel.read(buffer) : channel로 부터 읽어들어 buffer 에 넣는다. position 위치는 read 한 만큼 옮겨진다.
buffer.flip() : limit = position, position = 0, mark = -1 로 한다. 
outputChannel.write(buffer); buffer의 position 부터 limit 까지 읽어서 channel에 쓴다. 

반면에 Netty의 ChannelBuffer 는  readerIndex, writerIndex, capacity로 구성

channelBuffer.clear() : readerIndex = 0, writerIndex = 0 으로 세팅
channelBuffer.write(...) : buffer에 내용을 쓴다. writerIndex 의 값이 쓴 크기만큼 증가
channel.write(channelBuffer) : buffer의 readerIndex 부터 writerIndex 까지 읽어서 channel에 쓴다.

channelBuffer.readable() 이 true 라는 의미는 writerIndex - readerIndex > 0 으로 버퍼에 더 읽을 내용이 있다는  의미

반응형
Posted by seungkyua@gmail.com
,
반응형
macport 로 설치된 소프트웨어는 주로 /usr/share 에 설치됩니다.

maven 은 /usr/share/maven 이 설치 디렉토리입니다. 
반응형
Posted by seungkyua@gmail.com
,

Mac 에 Tomcat 설치 하기

Mac 2011. 4. 3. 02:11
반응형
1. /usr/local/apache-tomcat-7.0.11 에 설치

2. CATALINA_HOME 환경변수 세팅

3. conf/tomcat-users.xml 수정

    <role rolename="admin-gui"/>

    <role rolename="manager-gui"/>

    <user username="admin" password="password" roles="admin-gui,manager-gui"/> 

4. instance 폴더 생성
    mkdir $CATALINA_HOME/instances
    mkdir $CATALINA_HOME/instances/instance1
    mkdir $CATALINA_HOME/instances/instance1/conf
    mkdir $CATALINA_HOME/instances/instance1/logs
    mkdir $CATALINA_HOME/instances/instance1/temp
    mkdir $CATALINA_HOME/instances/instance1/webapps
    mkdir $CATALINA_HOME/instances/instance1/work

5. 파일 복사
    cp /usr/local/apache-tomcat-7.0.11/conf/server.xml $CATALINA_HOME/instances/instance1/conf
    cp /usr/local/apache-tomcat-7.0.11/conf/web.xml $CATALINA_HOME/instances/instance1/conf
    cp /usr/local/apache-tomcat-7.0.11/conf/context.xml $CATALINA_HOME/instances/instance1/conf
    cp /usr/local/apache-tomcat-7.0.11/conf/tomcat-users.xml $CATALINA_HOME/instances/instance1/conf
    cp -R /usr/local/apache-tomcat-7.0.11/webapps/* CATALINA_HOME/instances/instance1/webapps
 
6. server.xml 설정파일 수정
      <Server port="8006" shutdown="SHUTDOWN">

        
             <Connector port="8180" protocol="HTTP/1.1"   connectionTimeout="20000" 

                    redirectPort="8453" URIEncoding="UTF-8" />

 

           <!-- Define an AJP 1.3 Connector on port 8009 -->

           <Connector port="8109" protocol="AJP/1.3" redirectPort="8453" URIEncoding="UTF-8" />

7. webapps/ROOT 를 기본 디렉토리로 하고 싶지 않으면 <Context> 를 server.xml에 추가한다 
       <Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="true"
   
             xmlValidation="false" xmlNamespaceAware="false">

             <Context docBase="" path=""/>

   이렇게 하지 않는 경우 CATALINA_HOME/webapps/와 소스를 공유함
 
8. classpath 를 추가하고 싶으면 instances/instance1/bin 밑에 setenv.sh 를 추가한다. 
반응형
Posted by seungkyua@gmail.com
,
반응형
.profile 에서 아래와 같이 설정

export JAVA_HOM=/System/Library/Frameworks/JavaVM.framework/Home

혹은 심볼릭 링크가 걸려있는 아래로 설정

export JAVA_HOM=/Library/Java/Home

두 디렉토리는 모두 같은 디렉토리임.. ^^

아.. 그리고 Maven 에서 컴파일 할 때 tools.jar 를 사용하는 경우가 있습니다.
예를 들어 native2ascii 같은 명령어를 쓸려면 필요하죠..

Mac 에서는 tools.jar 가 런타임에 포한되어 있습니다.
그러니 따로 패스로 잡을려고 하면 에러가 납니다.


JDK1.7 설치를 위해서는 다운받아 추가 설치한다.


cd /System/Library/Frameworks/JavaVM.framework/Versions/
sudo rm CurrentJDK
sudo ln -s /Library/Java/JavaVirtualMachines/jdk1.7.0_60.jdk/Contents CurrentJDK





반응형
Posted by seungkyua@gmail.com
,
반응형
1. mysql-5.5.10-osx10.6-x86_64.dmg 를 다운받는다. (OS 버전에 맞춰)
2. 마운트하여  mysql-5.5.10-osx10.6-x86_64.pkg 를 설치한다.
3. mysql 설치 디렉토리는 /usr/local/mysql 이다.
4. 부팅시 자동으로 시작되게 하려면 MySQLStartupItem.pkg를 추가로 설치한다.
     /Library/StartupItems/MySQLCOM 디렉토리에 설치됨 
     
/etc/hostconfig 에 MYSQLCOM=-YES- 로 되어 있으며 자동으로 시작
  MYSQLCOM=-NO- 로 되어 있으면 자동으로 시작되지 않음

5.  MySQLStartupItem 이 설치되어 잇을 때 서버 start 및 stop
    shell> sudo /Library/StartupItems/MySQLCOM/MySQLCOM start 
    shell> sudo /Library/StartupItems/MySQLCOM/MySQLCOM stop 

6.  MySQL.prefPane 을 더블클릭하면 시스템환경설정에 추가할 수 있음
     Pane 에서도 자동 시작을 설정할 수 있음 

[encoding, characterset 적용]

1. mysql 서버설정을 위한 configuration file 생성
    shell> cd /usr/local/mysql/support-files/ 
    shell> sudo cp my-small.cnf /etc/my.cnf

2. innodb 로 설정

    [mysqld]
     default-storage-engine = INNODB
     # Uncomment the following if you are using InnoDB tables
     innodb_data_home_dir = /usr/local/mysql/data
     innodb_data_file_path = ibdata1:10M:autoextend
     innodb_log_group_home_dir = /usr/local/mysql/data
     # You can set .._buffer_pool_size up to 50 - 80 %
     # of RAM but beware of setting memory usage too high
     innodb_buffer_pool_size = 16M
     innodb_additional_mem_pool_size = 2M
     # Set .._log_file_size to 25 % of buffer pool size
     innodb_log_file_size = 5M
     innodb_log_buffer_size = 8M
     innodb_flush_log_at_trx_commit = 1
     innodb_lock_wait_timeout = 50

3. encoding, characterset 서버 환경 설정에 적용 
    
  [mysqld]
character-set-server=utf8 collation-server=utf8_general_ci

4. 트랜잭션 레벨 변경
    오라클의 기본 설정과 같이 READ-COMMITTED 로 적용한다.

[mysqld]
transaction_isolation = READ-COMMITTED

5. 테이블 대소문자 구분 없이 세팅
    
[mysqld]
lower_case_table_names=1

6. Auto Commit 설정
    클라이언트 접속시 디폴트는 autocommit=1 이다. 이것을 바꾸기 위해서는 설정파일에 다음과 같이 쓴다.
    0 은 autocommit 을 false 로 세팅한다.

[mysqld]
autocommit=0

7. client connection characterset 설정
    클라이언트 컨넥션의 디폴트 characterset을 설정한다.

[client]
default-character-set=utf8


[encoding 에 character set 적용]
- 데이터 베이스 생성시에 적용 - 해당 데이터베이스에 테이블을 생성할 때 모두 적용됨

     CREATE DATABASE mydb
  DEFAULT CHARACTER SET utf8 
DEFAULT COLLATE utf8_general_ci; 

[encoding characterset 확인]
mysql> use information_schema;
mysql> select * from GLOBAL_VARIABLES where VARIABLE_NAME like '%CHARACTER%';
mysql> select * from GLOBAL_VARIABLES where VARIABLE_NAME like '%COLLATION%';
mysql> select * from GLOBAL_VARIABLES where VARIABLE_NAME like '%AUTOCOMMIT%';

※ "Can't get hostname for your address" 에러가 나오면 서버 설정을 해주던지 hosts 파일에 등록한다.
1. [mysqld]
    skip-name-resolve

2. mysql 서버 hosts 파일에 mysql 을 호출하는 클라이언트 ip 를 등록

서버옵션확인
shell>mysqladmin -uroot -ppassword variables
반응형
Posted by seungkyua@gmail.com
,

macports 업데이트

Mac 2011. 4. 2. 21:05
반응형
[port tree 업데이트]
sudo port -d selfupdate

[port 명령어]
udo port activate 'package'     버전이 겹칠경우 deactive 해줌 
sudo port deactivate 'package'
sudo port clean 'package'         패키지 설치 도중 에러발생시 config 삭제
sudo port clean all                   모든 패키지 초기화
port deps 'package'                  패키지 의존성 검사 
sudo port fetch 'package'
port info 'package'                    패키지 정보 검색  
sudo port install 'package'
port list installed|grep 'arg'        설치된 패키지에서 검색 
port variants 'package'               패키지 variants 보기

[POSIX 계열의 OS에서 프로그램을 소스]
1. configure        make전에 컴파일 옵션과 다른 설정을 한다.
2. make              링크,컴파일
3. make install   바이너리,설정파일 정해진 경로에 설치
 
반응형
Posted by seungkyua@gmail.com
,
반응형
create database emprelation default character set utf8 collate utf8_general_ci;

//  사용자 접속가능 현황 보기
select user, host from user where user not like '';

// 모든 권한으로 생성
grant all privileges on *.* to 'emprelation'@'localhost' identified by 'password';

// 원격접속 가능
grant SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER on emprelation.* to emprelation@'%' identified by 'password';

// 로컬에서 접속 가능 
grant SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER on emprelation.* to emprelation@'localhost' identified by 'password';

// grant 작업 후 바로 적용
flush privileges;

create table EM_TRELATION (
  sourceEpId       varchar(100) NOT NULL,
  targetEpId       varchar(100) NOT NULL,
  point            BIGINT UNSIGNED default 0,
  CONSTRAINT EM_TRELATION_PK PRIMARY KEY (targetEpId, sourceEpId)
);

create table EM_TRELATION_DATA {
  sourceEpId       varchar(100) NOT NULL,
  targetEpId       varchar(100) NOT NULL,
  type             char(2) NOT NULL DEFAULT '00',
  count            BIGINT UNSIGNED default 0,
  latestDate       varchar(14),
  CONSTRAINT EM_TRELATION_DATA_PK PRIMARY KEY (sourceEpId, targetEpId, type)
);
CREATE INDEX EM_TRELATION_DATA_IDX01 ON EM_TRELATION_DATA(targetEpId, sourceEpId, type);
CREATE INDEX EM_TRELATION_DATA_IDX02 ON EM_TRELATION_DATA(latestDate);

create table EM_TEMPLOYEE_DATA {
  epId             varchar(100) NOT NULL,
  name             varchar(100),
  orgCode          varchar(100),
  orgName          varchar(100),
  subOrgCode       varchar(100),
  subOrgName       varchar(100),
  deptCode         varchar(100),
  deptName         varchar(100),
  titleCode        varchar(100),
  titleName        varchar(100),
  mail             varchar(100),
  nickName         varchar(100),
  mobile           varchar(100),
  picture          varchar(500),
  CONSTRAINT EM_TEMPLOYEE_DATA_PK PRIMARY KEY (epId)
);

// 데이터 베이스 및 사용자 삭제하기
1. 데이터 베이스 삭제
mysql>drop database emprelation;

2. 사용자 권한 삭제
mysql>revoke all privileges, grant option from emprelation;

3. 사용자 삭제
mysql>drop user 'emprelation'@'localhost';
mysql>drop user 'emprelation'@'%';


// maven 로컬 리파지토리에 저장하기
 mvn install:install-file -DgroupId=mysql \
                         -DartifactId=mysql-connector-java \
                         -Dversion=5.1.15 \
                         -Dpackaging=jar \
                         -Dfile=mysql-connector-java-5.1.15-bin.jar

반응형
Posted by seungkyua@gmail.com
,