2008년 11월 30일 일요일

[SA강좌] Part 4-12 Active Record 패턴

활성화 레코드(Active Record) 패턴

활성화 레코드 패턴의 정의

 

데이터베이스 테이블 또는 뷰에 있는 행을 포함하는 객체, 데이터베이스 접근을 포함하고, 데이터에 있는 도메인 로직을 추가한다.

 

그림 -15. 활성화 레코드 패턴의 구조

활성화 레코드 패턴의 설명

 

개체는 데이터와 행동 두 가지를 전달한다. 대부분의 이 데이터는 유지되고, 데이터베이스에 저장 되어 진다. 활동 레코드는 도메인 개체에 데이터 접근 로직을 추가하는 가장 분명한 접근으로 사용 된다. 이 방법은 모든 작업자들이 데이터베이스에서 데이터를 어떻게 읽고 쓰는지를 인식하고 있다.

활성화 레코드 패턴 패턴은 언제 사용하는가?

활동 레코드는 생성, 읽기, 수정, 삭제와 같이 너무 복잡하지 않은 도메인 로직에서 좋은 선택이다. 단일 레코드 기반의 차이와 검증은 이 구조에서 잘 작업이 된다.

활성화 레코드 패턴의 예제 : 간단한 사원

활동 레코드 작업의 중심이 어떻게 처리되는지를 보여주는 간단한 예는 다음과 같다. 아래는 사원 클래스로부터 시작 한다.

 

class Person ...

 

private String name;

private int numberOfDependents;

수퍼 클래스에 ID 필드가 있다. 데이터베이스는 같은 구조로 설정되어 있다.

 

create table people(

ID int primary key,

name varchar,

number_of_dependnets int

)

개체를 로드하기 위해서 사원 클래스는 검색자와 같이 행동하고, 로드를 수행한다. 이를 위해 사원 클래스에서 정적 메서드를 사용한다.

 

class Person ...

 

private final static String findStatmentString =

"SELECT id, name, number_of_depents " +

"FROM people " +

"WHERE id = ? ";

 

public static Person find(Long id) {

Person result = (Person) Registry.getPerson(id);

if (result != null) return result;

PreparedStatment findStatement = null;

ResultSet rs = null;

try {

findStatement = DB.prepare(findStatementString);

findStatement.setLong(1, id.longValue());

rs = findStatement.executeQuery();

rs.next();

result = load(rs);

return result;

} catch(SQLException e) {

throw new ApplicationException(e);

} finally { DB.cleanUp(findStatement, rs);

}

}

 

public static Person find(long id) {

return find(new Long(id));

}

 

public static Person load(ResultSet rs) throws SQLException {

Long id = new Long(rs.getLong(1);

Person result = (Person) Registry.getPerson(id);

if ( result != null) return result;

String nameArg = rs.getString(2);

int numDependentsArg = rs.getInt(4);

rsult = new Person(id, nameArg, numDependentsArg);

Resigery.addPerson(result);

return result;

}

개체 수정은 간단히 인스턴스 메소드를 얻게 된다.

 

class Person ...

 

private final static String updateStatementString =

" UPDATE people " +

" set name = ?, number_of_depents = ? " +

" where id = ? ";

 

public void update() {

PreparedStatement updateStatement = null;

 

try {

updateStatement = DB.prepare(updateStatementString);

updateStatement.setString(1, name);

updateStatement.setInt(2, numberOfDepentents);

updateStatement.setInt(3, getID().intValue());

updateStatement.execute();

catch(Execption e) {

throw new ApplicationException(e);

} finally { DB.cleanUp(UpdateStatement);

}

}

 

삽입은 가장 간단하다.

 

class Person ...

 

private static final String insertStatementString =

"INSERT INTO people VALUES(?, ?, ?, ?)";

 

public Long insert() {

PreparedStatment insertStatment = null;

try {

insertStatement = DB.prepare(insertStatementString);

setID(findNextDatabseId());

insertStatement.setString(1, getID().intValue());

insertStatement.setInt(2, name);

insertStatement.setInt(3, numberOfDepentents);

insertStatement.execute();

Registry.addPerson(this);

return getID();

catch(Execption e) {

throw new ApplicationException(e);

} finally { DB.cleanUp(UpdateStatement);

}

}

 

세금 공제 계산과 같은 비즈니스 로직 사번 클래스 안에서 위치한다.

 

class Person ...

 

public Money getExemption() {

Money baseExeption = Money.dallars(1500);

Money dependentExemption = Money.dallars(750);

return baseExemption.add(dependentExemption.multiply(this.getOfdents());

}

[SA강좌] Part 4-11 Row Data Gateway패턴

행 데이터 게이트웨이(Row Data Gateway) 패턴

행 데이터 게이트웨이 패턴의 정의

데이터 소스에 있는 단일 레코드를 접근하기 위한 게이트웨이 같이 행동하는 객체 행별 하나의 인스턴스가 있다.

그림 -14. 데이터 게이트웨이 패턴의 구조

행 데이터 게이트웨이 패턴의 설명

메모리 객체에 있는 내제된 데이터베이스 접근 코드는 몇몇 단점을 피할 수 있다. 작업 시작시 메모리 객체가 자신의 비즈니스 로직을 포함하고 있다면, 데이터베이스 조작 추가는 복잡성을 높이게 된다.

행 데이터 게이트웨이는 레코드 구조에 있는 레코드와 같는 객체를 제공한다. 그러나, 이러한 개체는 프로그래밍 언어의 일반적 메커니즘에 접근을 할 수 있다. 모든 데이터 자원 접근의 세부사항은 이 인터페이스 뒤에 숨게된다.

행 데이터 게이트웨이 패턴은 언제 사용하는가?

행 데이터 게이트웨이의 선택은 자주 두 단계를 가진다. 첫 번째는 전부 게이트웨이를 사용할지를 결정하는 것이다. 두 번째는 행 데이터 게이트웨이 또는 테이블 게이트웨이를 사용 할지를 결정하는 것이다.

트랜잭션 스크립트 패턴을 사용 시 가장 자주 행 데이터 게이트웨이를 사용한다. 도메인 모델 패턴을 사용하는 경우는 행 데이터 게이트웨이를 사용하지 않는다.

행 데이터 게이트웨이 패턴의 예제: 사원 레코드

아래에 행 데이터 게이트웨이을 위한 예가 있다. 이것은 간단한 사원 테이블이다.

 

create table people(

ID int primary key,

name varchar,

number_of_dependnets int

)

 

PersonGaetway은 테이블을 위한 게이트웨이이다. 이는 데이터 필드와 접근자로부터 시작한다.

 

class PersonGetway ...

 

private String name;

private int numberOfDepents;

 

public String getName() {

return name;

}

 

public void setName(String name) {

this.name = name;

}

 

public String getNumberOfDepents() {

return numberOfDepents;

}

 

public void setNumberOfDepents(String name) {

this.numberOfDepents = numberOfDepents;

}

게이트웨이 클래스 자신은 입력과 수정을 다룬다.

 

class PersonGatway ..

 

private static final String updateStatementString =

"UPDATE people " +

" set name = ?, number_of_depents = ? " +

" where id = ? ";

public void update() {

PreparedStatement updateStatement = null;

 

try {

updateStatement = DB.prepare(updateStatementString);

updateStatement.setString(1, name);

updateStatement.setInt(2, numberOfDepentents);

updateStatement.setInt(3, getID().intValue());

updateStatement.execute();

catch(Execption e) {

throw new ApplicationException(e);

} finally { DB.cleanUp(UpdateStatement);

}

}

 

private static final String insertStatementString =

"INSERT INTO people VALUES(?, ?, ?, ?)";

 

public Long insert() {

PreparedStatment insertStatment = null;

try {

updateStatement = DB.prepare(updateStatementString);

setID(findNextDatabseId());

updateStatement.setString(1, getID().intValue());

updateStatement.setInt(2, name);

updateStatement.setInt(3, numberOfDepentents);

updateStatement.execute();

Registry.addPerson(this);

return getID();

catch(Execption e) {

throw new ApplicationException(e);

} finally { DB.cleanUp(UpdateStatement);

}

}

데이터베이스의 밖으로 사원 정보를 얻기위해 PersonFinder 를 분리하였다. 새로운 게이트웨이 개체를 생성하기 위해 게이트웨이와 같이 작업한다.

 

class PersonFinder ...

private final static String findStatmentString =

"SELECT id, name, number_of_depents " +

"FROM people " +

"WHERE id = ? ";

 

public PersonGatway find(Long id) {

PersonGateway result = (PersonGateway) Registry.getPerson(id);

if (result != null) return result;

PreparedStatment findStatement = null;

ResultSet rs = null;

try {

findStatement = DB.prepare(findStatementString);

findStatement.setLong(1, id.longValue());

rs = findStatement.executeQuery();

rs.next();    

result = PersonGateway.load(rs);

return result;

} catch(SQLException e) {

throw new ApplicationException(e);

} finally { DB.cleanUp(findStatement, rs);

}

}

 

public PersonGateway find(long id) {

return find(new Long(id);

}

 

class PersonGateway ...

 

public static PersonGateway load(ResultSet rs) throws SQLException {

Long id = new Long(rs.getLong(1));

PersonGateway result = (PersonGateway) Registry.getPerson(id);

if ( result != null ) return result;

String nameArg = rs.getString(2);

int numDependensArg = rs.getInt(3);

result = new PersonGetway(id, nameArg, numDependensArg);

Registry.addPerson(result);

return result;

}

몇가지 중요점에 따라 한 사원 이상 검색을 위해 적절한 검색자 메소드를 제공한다.

 

class PersonFinder ...

 

private final static String findResponsibleStatment =

"SELECT id, name, number_of_depents " +

"FROM people " +

"WHERE number_of_dependents > 0 ";

 

public list findResponsibles() {

list result = new ArrayList();

PreparedStatement stmt = null;

ResultSet rs = null;

try {

stmt = DB.prepare(findResponsibleStatement);

rs = stmt.executeQuery();

while (rs.next()) {

result.add(PersonGateway.load(rs));

return result;

} catch(SQLException e) {

throw new ApplicationException(e);

} finally { DB.cleanUp(findStatement, rs);

}

}

검색자는 구분 맵(195)을 포함하는 레지스트리(480)을 사용한다. 트랜잭션 스트립트(110)에서 게이트웨이를 사용한다.

 

PersonFinder finder = new PersonFinder();

Iterator people = finder.findResponsibles().iterator();

StringBuffer result = new StringBuffer();

while(people.hasNext()) {

PersonGeteway each = (PersonGateWay) people.next();

result.append(each.getName());

result.append("");

result.append(String.valueOf(each.getNumberOfDependents());

}

return result.toString

 

예제: 도메인 객체를 위한 데이터 홀더

 

class Person ...

 

private PersonGateway data;

public Person(PersonGateway data) {

this.data = data;

}

 

class Person ...

 

public int getNumberOfDependents() {

return data.getNumberOfDependents();

}

 

class Person ...

 

public Money getExemption() {

Money baseExeption = Money.dallars(1500);

Money dependentExemption = Money.dallars(750);

return baseExemption.add(dependentExemption.multiply(this.getOfdents());

}

2008년 11월 28일 금요일

묘한... 기분... 방문자 카운트 수의 변화에 기분도 같이?



참... 묘하다, 블로그라는 것이.
오늘이 금요일...

방문자수가 200명을 넘지 않으면...
묘하게 기분이...

ㅡㅡ;

이것도 중독이겠지?

나름 글하나 끄적여서...
블로그뉴스에 나오거나...
맥시에 글이 나타나고.

검색엔진에 노출되면...
그 나름대로 기분이 좋아지니...

ㅡㅡ;

이거 중독의 초기증상이 맞기는 맞는것 같다.

다시 찾은 10년 전... 경축이다!


http://www.ytn.co.kr/_ln/0102_200811281403012789
'한국 8년 3개월 만에 순채무국 전환'

~.~

정말 경축이다...
만수아저씨의 뛰어난 환율 정책과...
기타 등등....
기타 등등...

머...
기술적인 수준에서 벌어진 일이라기보다는....

~.~

하여간...

공약하신...
10년을 되찾아주시는 군요~

이제 코스피지수 747 포인트만 달성하심 될려나?
~.~

불온도서 23종을 능가하는 불온만화 69선...


[출처 : http://mahn.co.kr/84284 ]

국방부의 불온도서 23종과 관련하여...
'불온'이라는 기준으로 들이된...

그런 기준으로 뽑아본 작품(?)들이네요.

~.~

내용을 보면서 쓴 웃음을 가지게 합니다.

[ 아래내용은 일부 발취해 왔습니다. ]


1. 「남벌」
핑클도 아는 국군의 주적과 손을 맞잡았다. (서찬휘)

43410809_disquietManhwa_01.jpg

2. 「굿모닝! 티처」
사제 간의 잘못된 애정행각과 동성애를 부추긴다. 취했다지만 남자애가 남자애를 보고 반하는 장면이 나옴. (존다리안)

43410809_disquietManhwa_02.jpg

3. 「그 남자! 그 여자!」
불순이성교제. 마지막엔 임신까지 하니 퇴학처분감. (T-Bell)

43410809_disquietManhwa_03.jpg

4. 「신세기 에반게리온」
아이들에게 지구를 구한다는 과중한 짐을 짊어지게 하고선 사지로 몰아넣는 무시무시한 만화 (루크)

43410809_disquietManhwa_04.jpg


5. 「오! 한강」
국가모독, 원수모독, 적에게 투항, 불법시위, 미풍양속위반 기타등등… (소혼)

43410809_disquietManhwa_05.jpg

6. 「오란고교 호스트부」
입시를 코앞에 둔 학생들이 다니는 신성한 고등학교에 호스트부라니, 국가의 장래를 이끌어갈 청소년들의 정서에 심각한 폐해를 줄 수 있다. (마법고냥이)

43410809_disquietManhwa_06.jpg

7. 「한마 바키」
감히 부시를 비하했다. (Merkyzedek)

43410809_disquietManhwa_07.jpg

8. 「견랑전설」
시위를 무력으로 진압하기 위해 창설한 경찰 군대 '수도경'이 정부 치안조직과의 내부 암투에 얽히며 무너져가는 모습이 나온다. ‘불법 시위’ 진압을 위해 창설한 경찰 군대를 무너뜨리고자 하는 세력에게 읽힐 수 있지 않은가? (서찬휘)

43410809_disquietManhwa_08.jpg

9. 「권투암흑전 세스타스」
폭력, 살인, 동성애, 부녀자 성폭행, 아동 성추행, 근친상간, 존속살해, 방화, 납치 등등의 묘사를 아무렇지도 않게 하고 있음 (서린언니)

43410809_disquietManhwa_09.jpg

10. 「식객」
20권이나 되는 먹을거리를 맛있게 늘어놓아서 군 짬밥을 모독하고 있음. 식욕과 더불어 군  사기 저하에 크게 기여함. 남주인공이 반찬 트럭을 몰고 자유로이 돌아다님으로써 탈영 욕구를 북돋우고 있음. (초록불)

43410809_disquietManhwa_10.jpg

11. 「아기공룡 둘리」
- 공룡/타조가 말을 해 과학적 사실을 호도하고 정상적인 직장인을 바보로 대하는 사회적 문제야기 작품. (닥슈나이더)
- 어른을 어른으로도 안 보는데다 애완동물 취급까지 하는 못된 만화. (……) 고길동 씨 시신 화장하면 사리가 쏟아질 거야……. (서찬휘)

43410809_disquietManhwa_11.jpg

.
.
.

나머지 내용은...

http://mahn.co.kr/84284

이곳에서...

세상을 살아가는 방법...

Me2Day에 끄적거리기는 했지만.
가장 어울리는 말인듯 하다.


'비열한 세상에 승자로 남기를 원한다면.
 든든한 비위를 갖추고 있거나..
 진정한 용기를 가져야 한다는.'


그렇다면...

나는 어떤 것을 목표로 가지고 살아야 할까?

그것이 살아가는
가장 중요한 것이 아닌가 한다.

2008년 11월 27일 목요일

민철이의 녹색어머니 동영상...



민철이 학교에서 상영(?)할 내용~

일부 내용 편집본...


[SA강좌] Part 4-10 Table Data Gateway 패턴

테이블 데이터 게이트웨이(Table Data Gateway) 패턴

테이블 데이터 게이트웨이 패턴의 정의

데이터베이스에 대한 게이트웨이와 같은 행동을 하는 개체 이다. 하나의 인스턴스가 테이블에 있는 모든 행을 조작한다.

그림 -13. 테이블 데이터 게이트웨이 패턴의 구조

 

테이블 데이터 게이트웨이 패턴의 설명

테이블 데이터 케이트웨이는 단일 테이블이나 뷰(select,insert,update,delete)를 접근하기 위한 모든 SQL을 포함한다. 또한, 다른 코드 데이터베이스와 상호작용을 하기 위한 모든 메서드를 호출한다.

테이블 데이터 게이트웨이 패턴은 언제 사용하는가?

테이블 데이터 게이트는 아주 간단한 데이터베이스 인터페이스 패턴으로 사용 할 수 있다. 이 패턴은 테이터베이스 테이블 또는 레코드형으로 매핑이 가능하다.

테이블 데이터 게이트웨이는 특히 테이블 모듈과 잘 작업이 된다.

행 데이터 게이트웨이 패턴과 같이 테이블 데이터 게이트웨이는 트랜잭션 스크립트 패턴에 매우 적절하게 사용 할 수 있다.

데이터베이스 접근을 캡슐화한 테이블 데이터 게이트웨이 사용의 이점 중 하나는 같은 인터페이스를 이용하여 데이터베이스 조작을 위하여 SQL 또는 저장 프로시저를 사용하여 작업을 할 수 있다. 더구나, 저장 프로시저 자신은 자주 테이블 데이터 게이트웨이를 구조화 한다. 이러한 방법으로 입력과 저장 프로시저는 실제 테이블 구조를 캡슐화 한다.

[SA강좌] Part 4-9 Service Layer 패턴

서비스 레이어(Service Layer) 패턴

서비스 레이어 패턴의 정의

가능한 오퍼레이션의 집합을 만들고, 각 오퍼레이션에 있는 어플리케이션의 응답에 대응하는 서비스 레이어를 사용하여 어플리케이션의 경계를 정의하는 패턴이다.

그림 -12. 서비스 레이어 패턴의 구조

서비스 레이어 패턴의 설명

엔터프라이즈 어플리케이션은 전형적으로 데이터 저장과 로직 구현을 위한 다른 종류의 인터페이스를 요구한다. 인터페이스의 예는 데이터 로더, 사용자 인터페이스, 게이트웨이 통합 등등이다. 이들 인터페이스는 다른 목적을 가지고 있음에도 불구하고, 이들 인터페이스들은 자주 어플리케이션과의 상호작용을 필요하다.

서비스 레이어는 어플리케이션의 경계를 정의하고, 클라이언트 레이어와 인터페이스를 인식하는 이용 가능한 오퍼레인션들의 집합이다. 서비스 레이어는 어플리케이션의 비즈니스 로직, 프리젠테이션의 처리, 레이어의 오퍼레이션에 있는 응답 조정을 캡슐화한다.

  • 도메인 모델의 상위에 있는 추상화된 레이어
  • 어플리케이션은 도메인 모델에 직접 접근 대신에 단지 서비스 레이어를 사용
  • 예제 : 세션빈즈

장점

  • 도메인 모델 위에서 트랜잭션 스크립트와 같은 함수
  • 다양한 도메인 개체들을 연결함( : 아답트 클래스)
  • 다양한 도메인 개체들에서 공용 CRUD 코드를 공유
  • 원격 호출을 위해 설계됨

단점

  • 도메인 모델위에 레이어 추가가 복잡함
  • 서비스 구현 확장 – CRUD 부분에서 서비스 레이어 있는 함수 호출을 필요로

서비스 레이어 패턴은 언제 사용하는가?

서비스 레이어의 이점은 많은 종류의 클라이언트에서 이용이 가능한 어플리케이션의 오퍼레이션 공통 집합을 정의하고, 각 오퍼레이션을 어플리케이션 응답에 대응한다. 이러한 응답은 다중 트랜잭션의 자원들에 거처서 자동적으로 처리하는데 필요한 어플리케이션의 로직을 포함한다.

서비스 레이어 패턴의 예제:세금 인식

인식서비스 클래스의 메소드들은 오퍼레이션들의 어플리케이션 로직을 기술하고, 도메인 개체 클래스들을 대표한다. 아래는 도메인 로직을 위한 도메인 모델 패턴에서의 예제이다.

 

publuc class ApplicationService {

protected EmailGateway getEmailGateway() {

// return an intance of EmailGateway

}

proteceted IntegrationGateway getIntegrationGateway() {

// return an instance of IntegrationGateway

}

}

public interface EmailGateway {

void sendEmailMessage(String toAddress, String subject, String body);

}

public interface IntegrationGateway {

void publishRevenueRecogitionCalculation(Contract contract);

}

public class RecognitionService extends ApplicationService {

public void caculateRevenueRecognitions(long contractName) {

Contract contract = Contract.readForUpdate(contractNumber);

contract.caluateRecognitions();

getEmailGateway().sendEmailMessage(

contract.getAministrationEmailAddress(),

"RE:Contract #" + contractNumber,

contract + "has had revenue recognitions calculated.");

getIntegrationGateway().publishReveneueRecognition(contract);

}

public Money recognizedRevenue(long contractNumber, Date asOf) {

return Contract.read(contractNumber).recognizedRevenue(asOf);

}

}

낙엽에 뒤덮힌... 내 자동차.. ㅡㅡ; 겨울비에 추웠니?



어젯밤에 한잔 마시고...
차를 대리운전해서 와서...
가로수 쪽에 세워두었는데.

아침에 나가보니..

ㅡㅡ;

낙엽을 이불삼아...
완전하게 뒤덥혀있더라구요.

ㅡㅡ;

밤에 비오느라 추웠나?

ㅋㅋ

비올때에는...
나무 밑에 세워두지 마시기를...

옥소리가 간통죄로 징역을 살아야 하는가?


간통혐의로 기소된 탤런트 옥소리씨에게 징역이 1년 6개월이 구형되었다고 하네요.
그동안 헌법소원까지 해서...
간통죄가 합헌인지에 대한 결정을 기다렸었고.

얼마전...
아직까지는 위헌이 아니라는 결론이 내려졌기에.

그녀에게 '유죄'를 선언했네요.

옥소리가 최후진술에서 눈물을 흘리며...

'박철은 지금까지 룸살롱과 안마시술소를 다니며 수백명의 여자들과 문란항 성생활을 했다'는 이야기를 하면서...
3개월의 짧은 만남이 더욱더 잘못되었느냐고 항변한다.

옥소리의 주장에 따르면...
수백명과 문란한 성생활을 영위한 박철보다...
한사람과 사랑을 나눈 박철...
누가더 잘못했는가에 대해서
사회적인 판단을 어떻게 해야하는가에 대해서 나름 화두를 던져준다.

'법'이라는 테두리에서 벌어진 아이러니가 아닐까?

결론만 놓고 이야기한다면...

증거위주의 '법'해석에 따른 문제라고 치부하기에는 개인의 인생에 큰 오점을 남기는 것이 아닐까?

하지만...
'간통죄'에 대해서는 분명 비난할 가치가 있고..
판결에 대해서도 문제가 있다고 지적할 수 있지만.

나는 옥소리씨를 옹호하지 않는다.

11년간 부부관계를 10차례밖에 안하면서...
생활비를 벌어다 주지도 못하는 남편 박철과 무엇때문에...
결혼생활을 유지했는지 참으로 궁금하다.

아니...

그 이전에...
깔끔하게 이혼을 하고...
자신의 사랑을 찾아 떠나는 것이 순서가 아니었을까?

두사람 모두 진흙탕 싸움을 하는 것이 그렇게 좋게 보이지도 않지만.
법의 잣대도 이상하지만...
자신이 바보가 아닌 상황에서...

본인에게 불리한 상황을 만들어두고...
'법'을 탓하는 옥소리씨에 발언도 한편으로는 공허하게 들린다.

.
.
.

법은 법대로 수정을 가해야하겠고...
간통죄는 분명...
얼마 지나지 않아서 사라질 법으로 보인다.

요즘처럼 부부라는 관계의 해석이 모호해지고 있고...
결혼이란 계약(?)관계에 대해서 많은 해석이 추가되고 있는 상황에서...
하나의 이슈로써 나름 중요하겠지만...

자신의 입장에서...
무슨 잔다르크인 것처럼...
다른 여성들을 대변하고 있다고는 생각하지 않는다.

머...

내가 남자라서일까?
아마도...
그럴 수 도 있겠다.

하지만...

이런 상황이 발생하기 전에...
깔끔하게...

수많은 룸살롱을 다닌 것에 대한 증거만 가지고...
차라리...
이혼신청을 하는 것이 좀더 효과적인 수단이 아니었을까 한다.

2008년 11월 26일 수요일

수상택시가 실패한 이유...


http://news.naver.com/main/read.nhn?mode=LS2D&mid=sec&sid1=103&sid2=240&oid=021&aid=0001973027
'수상택시 운행 1년만에 ‘개점휴업’ '

이 수상택시는 왜? 실패했을까?

http://www.pleasantseoul.com/
'즐거운서울'이라는 수상택시 사이트이다.

실제 들어가서 보면...
이 '수상택시'가 왜 실패했는지 간단하게 설명할 수 있다.

머.. 언론에서 이야기하는 기존 대중교통과의 연계등등을 따지는데...
그러한 복합적(?)인 이유가 아니라...
무지 무지 단순한 이유때문이다.

그것은...

'예약'을 해야하는 이유때문이다.

ㅡㅡ;

무슨 택시.. 아니 콜택시라고 해도 그렇다.
가끔 여의도나 뚝섬근처에 갈일이 있고...
차가 막힐 것 같아서...
이 수상택시를 사용하려고 해도...

'예약'을 해야한다.

ㅡㅡ;

먼넘의...
이 교통편이...
'항공편'도 아니구...

아!

항공편도...
가서 대기라도 하거나...
계속 다닐 수 있지...

ㅇㅇ;

탈려는 마음이 생겼다가도...
그 부분때문에...

그리고 요금도 그렇다...
1척당 7명.... 이면 싸겠지요...

.
.
.

요금제며...
예약제며....

처음부터...

활성화를 목적으로 하지 않았다는 것이 확연하게 들어난다..

머.. 수지타산은 당연하게 따져야겠지만...
사용하는 승객들도 고려하지 않는 모델자체를 승인한것 또한...
문제가 아닐까?

좌우당간...

'예약제'나 좀~~
어떻게 바꾸면...

사용할 마음이 날텐데...

ㅡㅡ;

왜?

아예...
좌석별로도
S석... A석 만드시죠...

ㅡㅡ;

집에 있는 PC에서 알약을 제거하고 V3Lite로...


머.. 하는 일이 삽질( 개발일 )이다보니...
집에 PC가 많네요.

~.~

작업실에 1대,
거실에 1대,
안방에 1대,
개인 노트북 1대... ㅡㅡ;

머... 작업용 PC만 나름 조립해 놓은 제품이고...
거실, 안방용 PC는 삼성 제품...
( 이제는 조립도 귀찮아서 걍 완제품 삽니다. ~.~ 왜냐면, 낮에 문제 생기면...
  와이프가 AS불러야 하니... 대기업 제품이 차라리 좋더군요. ㅇㅇ )
노트북은 후지쯔...

삼성 PC의 백식은 노턴 2003...
머.. 노턴이 정품이긴 하지만... 1년 단위의 계약으로 좀 짜증도 나구.

그동안 무료백신들을 여럿 갈아타다가...

알약을 주로 쓰고 있었는데.
어제 V3Lite를 살펴보고는 집안의 시스템은 모두 V3Lite로 교체했습니다.

사무실이야... V3를 쓰고 있으니까.. ~.~

자.. 그럼.. 왜 알약에서 V3Lite로 교체했을까..
꿈꾸는자 체크해봅니다.

1. 알약제거후 V3Lite 돌리니... 나오는 몇개의 바이러스...

머 이거야... 백신마다 조금씩 틀리니.. 이것은 대충넘어가구...

2. 알약설치시의 미묘한 시스템 트러블...

아는 사람회사의 솔루션이 얼마전 동작이 안되어서 문제의 원인을 찾아보니..
알약이, 해당 회사의 솔루션을 바이러스 감염으로 의심해서 제거한 사건이 나름 크게 보도되었더군요.
( 기사는.. ㅡㅡ; )
그것도 그렇지만...

좌우당간... 그 카스퍼스키 비트디펜더 백신을 메인엔진으로 했다는데...
( 앗! 이거 알았었는데... ㅡㅡ; 실수... ㅋㅋ  고마워 레몬~~ )

머.. 친구( 위에 아는 사람 회사 사장 )의 말로는...
알약측과 이야기를 했는데...
내부에 바이러스 패턴을 만드는 사람이 없다네여..

그 경우에도... 본사에서 내용이 반영되어야 한다나?

~.~

머.. 무료라서 걍 참고 쓰는 건데...
더 좋은 대응책이 나오면 바꾸는 것이 맞으니..
~.~

3. 이스트소프트에 대한 미묘한 개인적인 생각...
( 사실 이 3번째 이유가 가장 큰 이유죠.. )

머, 알집도 그렇고.. 예전에 블로그에 포스팅한것도 있구...
개발자 커뮤니티에 쓴것도 있구...

머... 이스트소프트가... 알집이나 알약으로 기업을 크게 일으키는 것에 대해서는
비난하지 않습니다. ~.~

다만... 개발자의 입장에서...

알집의 미묘한 포맷...을 자기 포맷이라고 주장했었던 점.. ( 요즘은 그런이야기는 안하죠? )
그러면서도...
그것을 기반으로...

뭐... 발전적인 기술이나 아이디어는 하나도 나오지 않았다는 점...

7Zip까지는 아니더라도...
조금은 연구하는 자세를 보여줬다면...

알약의 미래에 대해서도 믿어보겠죠.

머.. 외산제품 라이센싱 받아서...
UI만 올려서 돈버는 행위가 비난받을 것은 아니지만...
같은 개발자의 입장에서는...
그렇게 좋게만 보이지는 않네요.

4. V3Lite와 빛자루...

사실.. 빛자루때에는 좀 복잡할뿐더러...
귀찮은 것이 몇개 있었는데...
이번에는 깔끔해진듯 하네요.

실시간 검색기능들도 글쿠..
~.~

비스타나 XP나 잘 도니...
좌우당간...

최소한 시장점유율이라도 올려주는 도움이라도 주고픈 마음에...
집의 PC의 백신을 싹 교체했네요.

~.~

참.. http://www.v3lite.co.kr 여기랍니다.

일단 알약보다는 속도도 빠르고 가벼운것은 사실이네요...

LG CNS가 불법 SW를 사용했다?


http://itnews.inews24.com/php/news_view.php?g_serial=332548&g_menu=020200

불법복제 분쟁...
머, 사실 터질것이 터진거다.

 스페인 소프트웨어 업체 스티마소프트웨어사와 쉬프트정보통신간의 논쟁이...
삼성SDS나 LG CNS까지... 거기다가, 국내 557개 고객까지...

쉬프트정보통신의 X인터넷솔루션인 '가우스'의 차트생성에...
티차트를 개발형태로 포함한것이 문제의 핵심...

머.. 그렇지만.. 이 부분에서 가장 문제가 된것은...
'불법복제'라는 개념상의 문제가 아니라...
국내의 편법적인 소프트웨어 공급과 관행이 문제인것이다.

지적재산권을 침해한 것에 대해서 어느 선까지 책임을 지어야 하느냐는 것은...
왈가왈부하면서 결과가 나오겠지만.

개인적인 생각은 그렇다... 

최소한 만들어진 소프트웨어에 내가 구매한 컴포넌트나 기술을 명시하는 것이 맞다고 생각한다.

아무리 정품을 구매했다고 하더라도...
그 제품의 사용권을 획득한것이지...
그 제품이 내것은 아니기 때문이다.

최소한...

About에는 그러한 리스트들을 표시하는 것이 맞지 않을까?

머...

예전뉴스( 위에 있는 )를 보면..
스티마소프트웨어와 쉬프트정보통신, 그리고 삼성SDS와 LG CNS등에 대한 강경한 방침에서...

http://news.naver.com/hotissue/ranking_read.php?section_id=102&ranking_type=popular_day&office_id=052&article_id=0000226996&date=20081126&seq=1
이번에 난 뉴스를 보니...

삼성SDS가 빠진 것을 보면 돈으로 해결을 한것인가?
좌우당간..
LG CNS의 대표만 체포되었다네요.

예전에 커뮤니티에서 저도 글을 몇번 쓴적이 있지만...
정말 개념없는 곳 많습니다.
~.~

실제로...
이 문제의 핵심은...

개발툴내에 들어있는 컴포넌트의 사용권리에 대한 문제입니다.

일반적으로 A라는 회사에서 개발툴을 구매해서 개발한 경우...
해당 제품을 A라는 회사 내부에서 사용하는 것은 문제가 없지만...
이 제품을 재판매했을 경우에는 문제가 발생합니다.

보통 이런 경우 컴포넌트에게도...
다양한 라이센스가 존재하기 때문이죠.

일반적으로 개발툴( 거의 외산이지만 )에 들어 있는 컴포넌트들에게는
이러한 재판매 라이센스가 포함된 경우도 있지만...
포함되지 않은 제품들도 많습니다.
또한, 특정형태를 금지하는 조항들이 들어있는 경우도 많구요.

스페인의 스티마소프트웨어의 티차트의 경우에는...
각종 개발툴에 개발자 라이센스는 제공하지만...
재판매 라이센스는 들어있지 않기 때문이죠.

티차트가 적용된 프로그램을 배포하거나 사용하는 경우에는 문제가 없지만.

쉬프트에서 개발된 웹개발툴을 대형 SI회사에서 사용할 경우에는 이를 개발툴의 형태로 사용하는 것이기 때문에... 이에 대한 라이센스가 필요하다라는 이야기죠.

결론적으로... 쉬프트의 제품을 구매해서 개발툴로 사용하고 있는 대형SI회사에서도 티차트의 개발라이센스를 구매해야 하는 것이죠.

`개발툴`의 형태로 재판매하는 것을 금지한다는 것이 이 문제의 포인트라고 보입니다.

무지한 개발자들이나...
관리자들이 정말 많다는 것이 더욱더 문제라는 것이구요.

이러한 비리아닌 관행적인 것들이 정말 퍼져있으니...
문제인거죠.

대한민국 IT의 발전을 위해서라도...
이번 기회에 확실하게 정리가 되기를...
그리고...

더욱더 이러한 사실들이 알려지기를 바랄뿐입니다.

ps~~

오호~~ 이 포스트로 많은 분들이 들어오시네요...
여기 링크 하나 더 걸어둡니다.

http://www.itdaily.kr/news/articleView.html?idxno=13869

실제... 제소의 당사자(?)인...
프로넷 소프트의 입장이 적혀있는 글이네요...
~.~

타짜... 원작의 부스러기... 원작을 그냥 살리면 안되겠니?


어제 TV채널을 돌리다가... 우연찮게... 타짜의 마지막편을 보게되었네요.
드라마 자체를 그다지 좋아하지 않기 때문에 잘보지는 않지만, 어제는 오래간만에 와이프랑 같이 마지막까지 봤습니다.

원작 타짜의 3부작이 잘만들어진 작품이기에...
나름 드라마도 좋았으면 얼마나 좋았을까요?

아!

한가지 의아스러운 것이 있는 것은...

왜? 우리나라에는 원작의 느낌을 살린 작품이 그렇게 없을까요?

타짜자체의 작품의 캐릭터성은 원작자체가 풍부하고 괜찮은 스토리인데...
그들을 생명감 넘치는 작품으로 볼 수 있으면 얼마나 좋았을까요?

어설픈 대본이 추가되거나 연출로 원래 가졌던 이미지가 조금 무너진 느낌...

머랄까....

타짜에 나오는 '고니'의 모습...
그리고, 그가 중년이 되어가고...
그 다음작품에도 이어지는...

그리고, 결코...
도박을 하는 주인공이나 그 주변인물들에게서...
어두운 선을 느끼게 하는...
그런 감정표현은 왜 안나올까요?

머..
한예슬은 이쁘게 나오더만요...

~.~

이번에...
강풀의 순정만화는...
가능한 원작을 살릴려나요?

개인적으로...
타짜는...

1부도 좋았지만..
2부, 3부도 좋았는데...

가능하면...
원작의 느낌을 살리는...
그런 작품들이 좀 나왔으면 하네요...

~.~

2008년 11월 25일 화요일

국내에 시장이라는 것이 있기는 한가?


http://news.naver.com/main/read.nhn?mode=LS2D&mid=sec&sid1=105&sid2=283&oid=030&aid=0001985135
'외국 명작 게임의 무덤된 일본시장'

머.. 기사의 내용은 고립된 일본에 대한 이야기지만...
따지고 보면... 일본 자체의 시장이 어마어마 하기때문에...
굳이.. 세계 시장을 노릴 필요도 없다는...

ㅡㅡ;

그것 보다는...

이미 세계 최고의 휴대폰관련 인프라를 가지고 있었음에도...
'문화적'인 코드가 부족해서...

통신회사들이 자사의 플랫폼을 오픈하면서...
전세계적인 이슈화가 가능했을텐데...

아이폰이나
안드로이드의 혁명적인 발상에...

이것은 정말 콜롬부스적인 생각이지..
결코 기술적인 것이라고는 생각하지 않음.

~.~

세계를 주도할 수 있는 문화적인 코드를 가질 기회를 잃어버린...
통신회사들과...
세계적인 개발자로써 이름을 날릴 수 있었던...
수많은 국내 개발자들이...
안타까울뿐...

누구를 탓하며...
누가 잘못되었냐고 이야기할것인가...

온라인 게임도...
조만간...
오픈 프레임웍이 나올것이라고 보이네요...

월드나...
캐릭터나...
아이템이나...

폐쇄된 온라인 게임이 아니라...
열린 온라인 게임...

~.~

누가 그 환경을 기획하고...
실현할까요?

양재 근처의 '레드 제플린'이라는 까페? 바?

조금은 독특한 분위기의 '바'를 하나 소개해볼까요?
바로 전 포스팅한 '금수복국'에서...

따끈한 정종 + 맥주와 복으로 1차를 한뒤...

오래간만에...

남자들끼리 뭉쳐서...
조금은 예전 느낌을 가질 수 있는 곳을 가보자하면서...

머...

그렇다고...
남자들끼리 룸싸롱 가서 노는 것 자체도 그렇고.. ~.~
( 대한민국은 30~40대 남성들이 가서 놀만한 곳이 많지 않죠.. ~.~ )

좌우당간...
매봉역 근처입니다. ~.~

대략 지도가..

매봉역 근처로 여기쯤 될듯.. ~.~

음...

요즘은 DJ하시는 분도 계시더군요...
8년만에 간 곳인데...

인테리어는 그대로!!!
소파의 천만 교체한듯하네요...


DJ박스안의 DJ아저씨(?)...

중후한 목소리의 예전 올드팝에 대해서 구구절절 늘어놓는... ~.~
즐거운 느낌이라고나 할까요? ㅋㅋ

노래 신청하면서...
위스키도 두잔 드렸네요.

~.~

음주 DJ하신다고.. ㅎㅎ

저희가 5번 테이블이었는데...
저희 테이블 이야기를 자주 해주셔서 감사...


머.. 천정 인테리어..
( 이건 왜 찍었는지.. ㅡㅡ; 분명 취한겨.. )


아.. 흔들리기는 했지만...
바의 전경도 찍었네요.

~.~

아... 이 '레드제플린'의 분위기에 대해서 끄적 거려 봅니다.

인테리어~~

딱, 80년대 후반의 느낌이라고 할까요? 조금은 올드하고 클래식한 분위기를 좋아하는 30~40대 남성들을 위해서 아주 그만입니다.

더군다나... DJ아저씨와 교감도 된다고나 할까나요?

시스템~

~.~ 각 테이블에 이쁜 여성분들이 오셔서... 농담 주고 받는 분위기 입니다.
머, 야하거나... 룸싸롱같은 분위기는 아니구요.. ~.~
여성분들이 약간의 서빙을 좋아하는 분위기랄까?
특별하게 다른 서비스료는 없고.. ~.~
아가씨들이 좋아하는 맥주나 음료수 하나 사주면 OK~~

전반적인 술값도 그렇게 비싼편은 아니랍니다...
~.~

맥주만 먹어도 되는 시스템이니... ~.~

나름 분위기있고...
느낌도 올드한 느낌이 드니...
한번쯤 찾아가 보세요..

ㅎㅎ

대치동.. 금수복국... 괜찮은 대중 복집~~


저번주 금요일... 오래간만에...
정말 오래간만에...

한 8년은 된듯... ~.~

사회에 나와서 사귄 친구들중에 가장 뜻있고...
능력도 좋고...
사람도 좋은...

그런 3사람이 뭉쳐서 술한잔 하려고...

1차로 뭉친곳입니다.

머~

가격은 그렇게 비싸지 않으면서...
복의 전반적인 맛을 즐길 수 있는 곳이더군요.

위치는...


아... '지도'에 잘 나오네요.. ㅋㅋ

음...
전반적인 실내 인테리어는..



대충 이렇구요...

~.~



머.. 나름 운치있는 분위기이고...
대중적인 복집이라서 그런지..

1층에는 일단 방은 없더군요.

아마도... 2층에 방이 있고...
거기는 좀 비쌀듯.. ( 이건 예측.. ~.~ )

요즘 서울 시내에 그렇게 운영하는 식당들이 많더군요.
( 보통 호텔에서도 그렇게 운영하는데.. ~.~ )


나름.. 오래(?)되어 보이는 메뉴판...
메뉴판에 보이는...

'금수식당'이 원조인듯 하더군요.

~.~

부산에서 시작된 식당이라고 들었는데...


어라.. 사진을 찍다보니..
~.~
인테리어 사진만.. ㅋㅋ


바로 앞의 테이블들...
이런 테이블이 8개인가 늘어서 있더군요.


머... 친한 친구들이 오기전에...
맥주한잔 가볍게.. ~.~

정작...

~.~

8년만에 3명이 뭉쳐서...
술을 먹으니...

음식에 대한 사진들은 없네요...
ㅋㅋ...

아! 블로그 하나 링크합니다.

http://blog.naver.com/ozzy555?Redirect=Log&logNo=60057187581

여기에는...
아마도.. 같은 것을 먹은듯 한데...

음식들이 많이 찍혀있네요..

~.~

문화에 대한 이해가 없는 정부의 또 다른 삽질... ㅡㅡ;


http://news.naver.com/main/read.nhn?mode=LS2D&mid=sec&sid1=103&sid2=245&oid=025&aid=0001983264
"KBS가 만든 '겨울연가'팔아 일본이 40배 더 벌었다'

한국에서도 미키마우스와 같은 컨텐츠를 만들어 대박을 만들자라는...
머... '희망'적인 글(?)을 올렸는데.

실제 KBS가 일본 NHK에 판권을 팔면서 '잘못 판것'에 대해서는 그다지 지적하지 않는다.
( 머, 예전에도 이런류의 기사들 많았다... )

그런데...
웃긴것은 이런 '대박'컨텐츠를 위해서 '많은 돈'을 투입하겠단다..

ㅡㅡ;

도대체...
컨텐츠가 어디서 돈주고 사온다고 착각하고 계신것인지...

에휴~~ 한숨만 나올 뿐이다.

미키마우스이건...
만화캐릭터이건...

제발좀...

엉터리 삽질좀 하지 않았으면 좋겠다.

그돈으로...
현재 국내의 '만화책 대여점'이나 모조리 인수해라!
정말... 국내에서 '창작'된 작품에 대해서 온전한 가치를 부여할 제도적인 장치나 확립할 것이지...

아!

돈투입하는 내용을 보니... '드라마'찍겠다구? 글쿤...
그런데...
왜? 그 예는 만화나 캐릭터의 예를 드는 것일까?

한명의 천재만화가가 만들어지면서
그들이 캐릭터에 생명력을 부여하는 것이지...

'겨울연가'와 같은 '수출형 컨텐츠'만 드립다 찍어내겠다는 것인지...

모든 컨텐츠의 핵심인...

창작형 만화가들도 태어나기 힘든 마당에..
무슨 삽질입니까?

그냥 동네에 많이 존재하는...
책 대여점들이나 그 돈으로 모두 인수해서...
문좀 닫게 해주시죠?
( 하긴.. 다운로드 사이트도 모두 문을 닫아야 하는데... ㅡㅡ; )

더 정신없는 동네는...

새로운 세상에 맞는 저작권개념을 도입하는 시도 조차 안하는..
기득권층이 문제이지 않나?

음악이나 영화나 좀.. 저렴한 가격으로 다운로드 하게 하면 안되나?
정품으로!

창조없는 기존 계층과...
아무 개념없이..
문화에 대한 이해도 없이...

'돈'만 투입하면 생산된다는 '발상'은...
이제는...

제발좀!!!!

이제는 기억이 가물가물... ㅡㅡ;


어제 분명하게...

아! 저거 포스팅해야하는데...
라고 생각했던 내용들이...

왜?

아침이면 기억이 안날까?

ㅡㅡ;

이거..
이거...

큰일이당...

2008년 11월 24일 월요일

외국어에 점령당한 우리...


 

한글, 일어, 영어...
문화도 문화지만...

글자들간의...

오래간만에 보는...

아마추어적이지만...
아이디어가 돋보이는 작품이네요...

3명의 졸업작품이라네요...

용팔이와 테팔이가 존재하는 한 전자상가의 미래는 없다.


근 20년전에... ( 벌써 그렇게 되었다.. ㅡㅡ; )
청계천에서 알바를 하고...
용산에서 알바로 일하던 친구들이 있었던 기억이 난다.

흔하게 이야기하는 용팔이와 테팔이는...
주로 컴퓨터를 팔기보다는, 단품 전자제품인 CD나 카세트테이프, 디지털 카메라, 휴대폰등을...
일반인에게 파는 사람들을 의미하는 경우가 많다.

보통 컴퓨터 가격을 알아보러 용산이나 테크노마트를 뒤지고 다니는 사람들은...
나름 지식들을 무장하고 다니기 때문이다.

좌우당간...

'고객'이나 '손님'에게 왕대접까지는 아니더라도...
'협박'이나 '강압'...
자기들끼리 짜고 고스톱을 치는 형태와 같은 행위만 좀 없어졌으면 좋겠다.

.
.
.

이미 소비자에게 널리 퍼전 인식으로도 버틴 이유는 뭘까?

그것은...

용산이나 테크노마트에 들러간 손님들 중에...
좋은 기억을 가지고...
컴퓨터를 구매한 사람들과...

처음 전자제품을 구매하던 사람들의
신규유입이 지속적으로 유지되던...

용팔이와 테팔이에게 질린 소비자들이...
그냥 정품구매하러 가는 포기 수치보다...
높았던...

그런 시대였기 때문이다.

업주들이 모른척하는 것도 있고...
오히려 그들에게 그 방법을 가르치던 사람들도 있다.

정말 그들에게 비난을 해야할 것은...
그들이 그런 수단으로 '돈'을 벌때에...
그들의 주변에 있던...

가족이나 친지들이 더욱더 욕을 먹어야 하는 것 아닐까?

그들의 그런 방법을 뻔하게 알면서도...
나는 아니니까...
나만 아니면 되...

어떻게든 돈만 벌면 되지 라고 생각하던...

그런 가족들에게서 더욱 문제가 있는것 아닐까?

머..
그렇게 따진다면...

알바하러
용산이나 테크노마트에서...
용팔이와 테팔이로 변신한...

'알바생'들도 문제이긴하다.

뭐...

그들만 비난하려...

'군대'를 가서.. '전경'이 된이후에...
'잘못된 명령'에 의해서...
진압에 참여하는것...

머...

다 똑같다.

.
.
.

어디서 잘못되었는지 따지고 들어가면...
한도 끝도 없는...
이넘의 사회...

그동안 대한민국을 지탱해오던...
유교적인 자존심이나...
권위가 모두 부서진 상태에서는...
이제 더이상의 성장동력은 없는 것일까?

우리를 지탱하던...
중요한 ...

최소한 양심을 팔지않고...
양심껏 타인을 속이지 않던...
그런 사람들은...

이제 모두 허탈해 한다.

ㅡㅡ;

왜?

펀드와 부동산 투기에 의해서..
그들은 몰락했고...
실망하고 있기 때문이다.

'자신의 자리를 지키면 손해보는'
그런 어의없는 상황들을 만드는...

정부를 비난하고...
정치인을 비난한다.
그리고...

그들을 포장하는 언론도 싫고...

쩝..

뭐 하나 좋은 것은 없지만...
이 나라에 태어난 것에 대해서...
후회할 겨를도 없는 이세상...

한탄만 할 수는 없는 것이고...

그냥 그렇다...

'양심'까지는 바라지도 않는다.
다만...

당신의 '자존심'까지 그렇게 팔아서...
세상을 살아야 하는가?

그냥...
그것만 한번 생각해보자.

2008년 11월 23일 일요일

아름다운 나라, 독도... 그리고, 정말 아름다운 사람들...

 

무니의 2집앨범에 수록된 '아름다운 나라'...

독도의 '1박2일'편에서도 사용되었고...
많은 버라이어티에서 이곡이 사용됩니다.

'무니(신문희)는 "저작권료와 상관없이 '아름다운 나라'만큼은 국민 모두의 곡이라 생각하기에 많은 분들이 자유롭게 듣고 활용해 주었으면 좋겠다'는 이야기를 한 만큼 많은 사랑 받았으면 좋겠습니다.'

위의 영상은...
무니의 두번째 앨범에 수록된 '아름다운 나라'를 독도 지킴이 영상으로 제작된 것이라네요...

그리고...

관심 있으신... 분들인 '무니의 2집 앨범'도 관심을 두신다면...
더욱더 좋지 않을까 합니다.

~.~

천재들과 같이 사는법을 알았으면 좋겠다...


극심한 대인기피증이었던 밴덤과 같은 사람들이...
그 사회에 존재하면서...
자신의 사상을 퍼트리고...
그의 이야기에 귀기울였던...

근대의 서구사회는 분명...

생각이 열린 사회였다.

하지만...
우리를 보라...

인터넷의 미네르바와 같은 사람의 글을...
혹세무민한다며,..
몰아세우는...
닫힌 사회를 살고 있다.

우리는 천재들과 공존하면서 사는 방법을 아는 것이 필요하다.
그들에게는...
분명 세상을 바라보는 새로운 시각들이 존재하고...
우리는 그들의 영감에서 새로운 문명이나 문화를 얻어왔다.

그들의 생각이 옳지 않다고 하더라도..
그들을 억누르려 하지 않았으면 좋겠다.

미친 천재의 이야기를 웃으면서 넘길 수 있는
그런 여유를 가지는 사회 지도층이 존재해야만...
혹은...

그런 여유를 가질줄 아는 사회 지도층에게 표를 던질 줄 아는...
그런 사회가 되었으면 한다.

작은 속임수와...
나만 이익을 보겠다는 극심한 이기주의가 사회를 지배하고 있고...

부동산이야말로 그것의 대표적인 것이 아닐까?

투기 투기...

우리가 먼저 변해야만...
세상도 변한다.

세상이 변하지 않는 것은...
내가 변하지 않았기 때문이다.

그것이 진실이다.

2008년 11월 21일 금요일

시대정신...


시대정신... 후속편...


사는 것은 싼것... 내가 산 것은 비싸게... 그것이 우리의 현실...


조금이라도 싸게 사자...
그리고,
내가 가지고 있는 것은 비싸게 오르기를 바라자...

.
.
.

눈에만 깨끗해 보이면...
대충 싼거를 고르는 소비 행태...

결국...

가장 저급한 '소비행태'가 아닌가 한다...

물류나... 무역...
특히나 먹을 것을 수입하는 사람들 마저도...

'내가 먹을 것도 아닌데'
'보이기만 깨끗해 보이면 그만'

결국...
자승자박이 아니겠는가?

믿을 만한 제품을 찾기보다는...
무턱대고 싼것만 찾는 것이 더욱더 문제이긴 하지만...
그 심리상태를 노리고...
그 상태로만 물건을 공급하는 사람들도 문제이다.

머...

정치도 그렇다.

'부동산 가격'만을 지켜준다면...
까짓... 뭐...
~.~

'눈에만'안보이는 비리는 비리도 아니다...

우리에게 언제부터인가...
우리의 생각을 지배하고 있는...

내가 투기한 '아파트'가격이 오르기 위해서..
어떤 것들이 발생하고 일어나는지에 대해서는...
관심도 없다.

ㅡㅡ;

심지어...

세상돌아가는 꼴도 관심없이...

재개발을 부르짓는 국회의원에게 표를 던지는...
무지몽매한 사람들...

그렇다..
우리는 우리의 미래를 싸게 팔아서...
비싼인생을 사는 것인지도 모르고...

21세기를 시작한 것이라고...

미래에 평가받을 것이다.

자신이 변하지 않으면...
세상이 변하지 않는 것을...
깨닫는 시간이 언제쯤 올것인가?

그것이...

언제쯤일까?

금연... 담배... 술집... 이런 것 이었을까?


어제는 좀 안좋은 사건이 발생하는 바람에...
기분도 우울하고...
술생각도 나고...
겸사 겸사 울 마나님하고 데이트도 할겸...

가끔 일산에서 꼬치생각나면 가는 투다리집에
예전 데이트하던 생각으로 찾아갔다.

생각해보니...

금연한 이후로는 이 투다리집에 자주 오지 못한듯 한데.

.
.
.

다른 것은 잘 모르겠지만.

아! 이것이 간접흡연의 피해이구나.

나도 담배를 줄기차게 피우던
해비스모커였는데...

어제 투다리집의 모든 테이블들은...
우리 테이블 빼고서는..
모든 사람들이 담배를 피우고 있었다.

ㅡㅡ;

결국...
맥주 2000cc는 먹었지만...

그 흡연때문에...
나도 목이 칼칼해서...

1시간정도만
투다리집에 있다가
자리에서 일어나
집으로 걸어갔다.

아!

금연을 하니 좋기는한데...
담배연기가 이렇게 역하고 괴로웠는지
몰랐다.

ㅡㅡ;

그동안
나랑 다니면서...

군소리(?)없이
따라다녀준 우리 이쁜 마눌님에게
고마움을 표시해야할려나?

좌우당간...

담배연기...
정말 ...

ㅡㅡ;

이제 금연합시다.

우리의 사랑스러운 가족들을 위해서...

2008년 11월 20일 목요일

아침에 찍은 둘째 아들 민철이의 귀여운 모습...



아마도 위에 쓴 모자(?)가...
프로방스 마을에서 구입한 '백호'입니다.

~.~

따뜻해보이죠?

저도 하나쓰고 다니고 싶더군요.. ㅋㅋ


저 뒤에서...
잠깐 짬을 이용해서 '만화책'을 보는...
큰 아들 수철이..

~.~

좌우당간...

이쁜 막내아들..

귀여워!

자가발전 손전등... 반영구적 손전등...


얼마전 용산에 들렀다가...
시간이 남아서 편의점 앞에서 음료수를 마시다가 문득 좌판위에서 발견한 제품입니다.


기본적인 모습은 위의 사진과 같습니다.


약간 옆에서 보면... 앞에 라이트가 있고, 위에 스위치, 뒤에 점멸등이 보이고...
좌측에 손잡이가 보입니다.


전원을 켜면... '라이트'가 들어옵니다. LED조명인데... 3개의 LED전구가 있어서...
그럭저럭...
쓸만한 불빛이 나타납니다.


스위치를 뒤로 키면...
붌은색 빛으로 점멸이 되죠.

~.~



실제 점멸되는 동영상은 위와 같이 보입니다.

뭐... 자전거를 타거나 할때에 이용할 수 있거나..
혹은...
밤에 자신의 위치를 표시하는 수단으로 활용될 수 있겠죠.

~.~

그리고...

이 자가발전기 손전등의 발전은...

~.~

한손으로 휴대폰촬영을 해서 좀 어색하긴 하지만..



좌우당간...

좌측의 손잡이를 아주 세지는 않지만...
몇분 돌려주면...
충분한 전력을 생산할 수 있네요.

밤에는 움직이면서...
계속 돌리니...

쭈욱 사용할 수 있고...

집에 한개쯤 두면...
가끔 손전등 필요시에 사용하기도 좋더군요.

아!

야영가서도 유용하게 사용되지 않을까합니다.

~.~

마지막으로 총평...

1. 머.. 반영구적일 것 같지는 않다. LED 수명이 길기는 하나.. ~.~
2. 오히려, 회전하는 손잡이가 먼저 부러질듯... ㅇㅇ; <- 이거 부러지면 끝이다.
3. 구입한 가격은 3천원... 머, 옥션뒤져보니 2500~5000원까지 다양한 제품들이 존재한다.
    재미삼아 구입해본다면 찬성... ㅋㅋ

2008년 11월 19일 수요일

손예진... 송혜교... 글쎄? 잘하는 것만 잘하면 안될까?


뭐... 두분의 팬들이 보게되면 '분노'할 이야기일 수도 있지만... ~.~
'도전'은 아름답지만...

'성공과 실패'는 결과일 뿐이고...

대중이 원하는 모습에 적당하게 어울려주는 것이...
그것이 '연예인'이지 않을까요?

배용준의 신비주의 전략또한...
일본 팬들이나 뭐.. 좌우당간, 그런 '이미지'를 소비하는 '고객'들이 존재하기 때문에..
아!

머 그역시.. '팬'들이 원하는 것 아닌가요?

멋진 장동건이 '태풍'에서 나온 거친 캐릭터보다는...

'귀여운 여인'의 '리차드 기어'와 같은 '캐릭터'의 모습을 기대하는 것은...
저뿐만이 아닐 것 같은데...

ㅇㅇ;

정말 잘생긴 그 외모로...
좀 멋진 연기를 해서...
수많은 사람들에게 '환상'을 좀 심어주면 안될까요?

뭐...

마찬가지로...

손예진씨나 송혜교씨나 나름 스타파워가 막강한 분들...

그냥...

대중이 좀더 원하는 이미지의 소비에 대해서도 조금은 신경써주시기를...
'연기'공부를 굳이...
'실제 드라마나 영화'에서 할 필요는 없지 않을까요?
( 머.. 이 대목에서 '돌'맞을 수도 있지만.. ㅋㅋ )

머...

그 포부는 포부이고...
'결과'는 결과일뿐...

너무 심각하게 받아들일 필요도 없으니까요.

ㅋㅋ

걍...

연예인이란 직업자체에서 오는 '포스'나... '환상'...
그런것도 어느정도 지켜주는 것이...

'스타'연예인들이 해야할 일들이 아닌지..
그냥 생각해봅니다.

[SA강좌] Part 4-8 Table Module 패턴

테이블 모듈(Table Module) 패턴

테이블 모듈 패턴의 정의

데이터베이스 테이블 또는 뷰에 있는 모든 행에 대한 비즈니스 로직을 다루기 위한 단일 인스턴스 패턴이다.

그림 -11. 테이블 모듈 패턴의 구조

테이블 모듈 패턴의 설명

테이블 모듈 패턴은 데이터베이스에 있는 테이블 마다 하나의 클래스에 대응하는 도메인 로직을 구성한다. 또한, 클래스의 단일 인스턴스는 데이터에 행동 할 수 있는 다양한 프로시저를 포한한다. 도메인 모듈 패턴과 비교되는 주요한 구분은 만일 많은 주문에 대한 처리를 원하는 경우 도메인 모듈 패턴은 주문 마다 하나의 주문 개체를 가지게 된다. 반면, 테이블 모듈 패턴은 모든 주문을 처리하기 위해 하나의 개체만을 가진다.

언제 이 패턴을 사용하는가?

테이블 모듈 패턴은 매우 테이블 지향 데이터에 기반한다. 그러므로, 레코드 집합 패턴을 사용하는 데이터 집합의 접근을 할 때 유용하다.

그러나, 테이블 모듈 패턴은 복잡한 로직을 구조화하는 개체들의 모든 능력을 제공하지는 않는다. 인스턴스 대 인스턴스 관계를 직접적으로 가지 않고, 다향성은 잘 작업되지 않는다. 이러한 이유로 복잡한 도메인 로직을 처리하기 위해서는 도메인 모델 패턴이 더 좋은 선택이 된다.

만일 도메인 모델 패턴에 있는 개체와 데이터베이스 테이블이 관계적으로 유사하면, 활동 레코드 패턴을 사용하는 도메인 모델 패턴을 사용하는 것이 좋다. 테이블 모듈 패턴은 도메인 모델 패턴과 활동 레코드 패턴을 사용하는 도메인 모델 패턴 보다 더 잘 작업한다.

[SA강좌] Part 4-7 Domain Model 패턴

도메인 모델(Domain Model) 패턴

도메인 모델 패턴의 정의

도메인 모델 패턴은 행동과 데이터가 협력하는 도메인의 개체 모델 패턴이다.

그림 -10. 도메인 모델 패턴의 구조

도메인 모델 패턴의 설명

나쁜 비즈니스 로직은 매우 복잡하다. 비즈니스 규칙과 로직은 많은 다른 사례와 행동에 편향적인 설명을 한다. 도메인 모델 패턴은 내부적으로 연결된 개체들의 망을 생성한다. 주문 양식에 있는 협력체 만큼이나 크거나 단일 라인 만큼 작은 각 개체는 몇몇 의미있는 개체를 표현한다.

도메인 모델 패턴은 언제 사용하는가?

만일 도메인 모델 패턴 사용을 생각한다면, 데이터베이스와 상호작용을 위한 첫 번째 선택은 데이터 매핑 패턴이다. 이 패턴은 데이터베이스에서 도메인 모델 패턴이 독립되도록 유지하고, 도메인 모델과 데이터베이스 스키마 차이가 발생하는 사례를 조작하기 위한 접근을 제공한다.

도메인 모델을 사용할 때, 서비스 레이어 패턴을 고려해야 한다. 이 패턴은 도메인 모델 패턴이 API에서 멀어지도록 한다.

도메인 모델 패턴의 적용 예제 : 세금 계산

직접적인 인식은 예제가 가지고 있는 행동과 데이터의 모든 클래스를 인식하는 것이다. 만일 개체의 값이 임의 데이트를 인식하면, 세금 인식 클래스는 검색을 위한 간단한 메서드를 아래와 같이 포함하게 된다.

class RevenueRecognition ...

private Money amount;

private MfDate date;

public RevenueRecognition(Money amount, MfDate date) {

this.amount = amount;

this.date = date;

}

public Money getAmount() {

return amount;

}

boolean isRecognizable(MfDate asOf) {

return asOf.after(date) || asOf.equals(date);

}

얼마나 많은 세금이 특정 일자에 인식 되었는지를 계산하는 것은 계약과 세금 인식 클래스를 포함한다.

class Contract ...

 

private List revenueRecognitions = new ArrayList();

public Money recognizedRevenue(MfDate asOf) {

Money result = Money.dollars(0);

Iterator it = revenueRecognitions.iterator();

while (it.hasNext()) {

RevenueRecognition r = (RevenueRecognition) it.next();

if (r.isRecognizableby(asOf))

result = result.getAmount();

}

return result;

}

도메인 모델에서 공통점을 찾기는 것은 얼마나 간단한 작업들이 다중 클래스들과 상호작용을 하는지를 인식하는 것이다.

class Contract ...

 

private Product product;

private Money revenue;

private MfDate whenSigned;

private Long id;

public Contract(Product product, Money revenue, MfDate whenSigned) {

this.product = product;

this.revenue = revenue;

this.whenSigned = whensinged;

}

 

class Product ...

 

private String name;

private RecognitionStrategy recognitionStrategy;

public Product(String name, RecognitionStrategy recognitionStrategy) {

this.name = name;

this.recognitionStrategy = recognitionStrategy;

}

public static Product newWordProcessor(String name) [

return new Product(name, new CompleteRecognitionStrategy());

}

public static Product newSpreadsheet(String name) {

return new Product(name, new TreeWayRecognitionStrategy(60,90));

}

public static Product newDatabase(String name) {

return new Product(name, new TreeWayRecognitionStrategy(30,60));

}

 

class RecognitionStrategy ...

 

abstract void calculateRevenueRecognitions(Contract contract);

 

class CompleteRecognitionStrategy ...

 

void calculateRevenueRecognitions(Contract contract) {

contract.addRevenueRecognitions(new RevenueRecognition(contract.getRevenue(),

contract.getWhenSigned());

}

 

class TreeWayRecognitionStrategy ...

 

 

private int firstRecognitionOffset;

private int secondRecognitionOffset;

public ThreeWayRecognitionStrategy(int firstRecognitionOffset,

int secondRecognitionOffset)

{

this.firstRecognitionOffset = firstRecognitionOffset;

this.secondRecognitionOffset = seondRecognitionOffset;

}

void calculateRevenueRecognitions(Contract contract) {

Money[] allocation = contract.getRevnue().allocate(3);

contract.addRevenueRecognition(new RevenueRecognition

(allocation[0], contract.getWhenSigned());

contract.addRevenueRecognition(new RevenueRecognition

(allocation[1], contract.getWhenSigned().addDays(firstRecognitionOffset)));

contract.addRevenueRecognition(new RevenueRecognition

(allocation[2], contract.getWhenSigned().addDays(firstRecognitionOffset)));

}

 

class Tester ...

 

private Product word = Product.newWordProcessor("Thinking Word");

private Product calc = Product.newSpreadsheet("Thinking Calc");

private Product db = Product.newDatabase("Thinking DB");

일단 모든 것이 설정되면, 세금 인식 계산은 전략 서브클래스의 임의 지식을 요청한다.

 

class Contract ...

 

public void calculateRecognitions() {

product.calculateRevenueRecognition(this);

}

 

class Product ...

 

void calculateRevenueRecognition(Contract contract) {

recognitionStrategy.calculateRevenueRecognition(contract);

}

[SA강좌] Part 4-6 Transaction Script 패턴

트랜잭션 스크립트(Transaction Script) 패턴

트랜잭션 스크립트 패턴의 정의

개별 프로시저가 프리젠테이션 레이어에서 단일 요청을 관리할 때 비즈니스 로직을 프로시저로 사용하여 조직화하는 패턴이다.

그림 -9. 트랜잭션 스크립트 패턴의 구조

트랜잭션 스크립트 패턴의 설명

대부분의 어플리케이션은 트랜잭션의 연속으로 생각된다. 트랜잭션은 특별한 방법에 의해 조직된 정보를 보여주고, 다른 것으로 변화시킨다. 클라이언트와 서버 시스템 사이에 상호 작용은 비즈니스 로직의 많은 부분을 포함하고 있다. 몇몇 경우는 데이터베이스에 있는 정보를 화면에 보여주는 것 같이 단순 할 수 있다. 다른 경우는 다수의 검증과 계산의 단계들을 포함할 수 있다.

트랜잭션 스크립트는 단일 프로시저, 데이터베이스 직접 호출 또는 씬 데이터베이스 레퍼와 비슷하게 모든 비즈니스 로직을 조직화한다. 각 트랜잭션은 자신의 트랜잭션 스크립트를 갖는다. 뿐만 아니라 공통 서브 작업들은 서브프로시저로 나누어 진다.

트랜잭션 스크립트 패턴은 언제 사용하는가?

트랜잭션 스크립트의 장점은 단순성에 있다. 이러한 방법으로 로직을 구조화하는 것은 단지 로직의 작은 단위를 가지는 어플리케이션을 위해 자연스러운 것 이다. 그리고, 이 것은 수행과 이해에서 매우 적은 과부하를 포함한다.

비즈니스 로직은 점점 더 복잡해지고 있다. 그러나, 비즈니스 로직을 잘 설계된 상태로 유지하는 것은 어렵다. 하나 특별한 문제점은 트랜잭션들 사이의 중첩성 이다.

주의 깊은 분해는 많은 이러한 문제점들을 완화해준다. 그러나, 더욱 복잡한 비즈니스 도메인은 도메인 모델 패턴의 작성을 필요로 한다. 도메인 모델 패턴은 코드를 구조화하데 더 많은 선택을 주고, 가독성을 증가하고, 중복성을 감속한다.

트랜잭션 스크립트 패턴의 적용 예제 : 세금 계산

이 예제는 두 가지 트랜잭션 스크립트를 사용한다. 하나는 계약을 위해 세금을 계산하는 것이고, 다른 하나는 계약에서 특정 일자에 의해 계산된 세금 금액을 알려주는 것이다. 데이터베이스는 세 가지의 테이블을 가지고 있다. 제품을 위한 테이블, 계약을 위한 테이블, 그리고 세금 인식을 위한 테이블이다.

 

CREATE TABLE products(ID int primary key, name varchar, type varchar)

CREATE TABLE contracts(ID int primary key, product int, revenue decimal, dateString date)

CREATE TABLE revenueRecognitions(contract int, amount decimal, recognizedOn Date,

PRIMARY KEY (contract, recognizedOn))

 

첫 번째 트랜잭션 스크립트는 특정 일자의 세금의 합계를 계산하는 것이다. 계산을 위해 두 단계를 거치게 된다. 세금 인식 테이블에서 적절한 행을 선택한다. 그리고, 합계를 구한다.

많은 트랜잭션 스크립트 설계들은 데이터베이스에 직접적으로 조작을 위한 스크립트를 가지고 있다. 예를 들어서 프로시저에 SQL 코드를 넣는 것이다. 테이블 데이터 게이트웨이 패턴은 SQL 질의어를 포함하고 있는 간단한 예이다. 이 예제는 매우 간단하다. 각 테이블을 위해 하나 이상의 단일 게이트웨이를 사용한다. 아래의 예제는 게이트웨이에서 검색 메서드를 정의하고 있다.

 

class GateWay ...

 

private static final String findRecognitionsStatement =

"SELECT amount " +

" FROM revenueRecognitions " +

" WHERE contract = ? AND recognizedOn <= ? ";

private Connection db;

 

public ResultSet findRecognitionsFor(long contractID, MfDate asof) throws SQLException {

PreparedStatement stmt = db.preparedStatement(findRecognitionsStatement);

stmt = db.preparedStatment(findRecognitionsStatement);

stmt.setLong(1, contractID);

stmt.setDate(2, asof.toSqlDate());

ResultSet result = stmt.executeQuery();

return result;

}

 

게이트웨이에서 결과 집합으로 전달된 것을 근간으로 합계를 구하는 스크립트는 다음과 같다.

 

class RegonitionService ...

 

public Money recognizedRevenue(long contractNumber, mfDate asOf) {

Money result = Money.dollars(0);

try {

Result rs = db.findRecognitionsFor(contractNumber, asOf);

while(rs.next()) {

result = result.add(Money.dollars(rs.getBigDecimal("amount")));

}

return result;

} catch(SQLException e) {throw new ApplicationException(e);

}

}

 

이와 같이 간단히 계산을 하는 경우 메모리 상의 스크립트는 금액을 합하는 집합 함수를 사용하는 SQL문 호출로 대치될 수 있다. 존재하는 계약 테이블에서 세금 인식을 계산하기 위해서, 아래와 같이 코드를 나누었다. 서비스의 스크립트는 비즈니스 로직을 수행한다.

 

class RegonitionService ...

 

public void calculateRevenueRecognitions(long contractNumber) {

try {

ResultSet contracts = db.findContract(contractName);

contracts.next();

Money totalRevenue = Money.dollars(contracts.getBigDecimal("revenue");

MfDate recognitionDate = new MfDate(contracts.getDate("dateSigned"));

String type = contracts.getString("type");

if(type.equls("S")) {

Money[] allocation = totalRevenue.allocate(3);

db.insertRecognition(contractNumber, allocation[0], recognitionDate);

    db.insertRecognition(contractNumber, allocation[1], recognitionDate.addDate(60));

    db.insertRecognition(contractNumber, allocation[2], recognitionDate.addDate(90));

} else if (type.equals("W")) {

db.insertRecognition(contractNumber, totalRevenue, recognitionDate);

} else if (type.equals("D")) {

Money[] allocation = totalRevenue.allocate(3);

db.insertRecognition(contractNumber, allocation[0], recognitionDate);

    db.insertRecognition(contractNumber, allocation[1], recognitionDate.addDate(30));

    db.insertRecognition(contractNumber, allocation[2], recognitionDate.addDate(60));

}

} catch(SQLException e) { throw new ApplicationException(e));

}

}

 

Money 패턴을 사용하여 세금 수집을 수행헀다는 것에 주목하자. 테이블 데이터 게이트웨이 패턴은 SQL 지원을 제공한다. 계약 테이블 검색을 위한 코드는 아래와 같다.

 

class GateWay ...

 

private static final String findContractStatement =

" SELECT " +

" FROM contract c, product p " +

0]

]

ttutri " WHERE ID = ? AND c.product = p.ID ";

 

public ResultSet findContract(long contractID) throws SQLException {

PreparedStatement stmt = db.preparedStatement(findContractStatement);

stmt.setLong(1, contractID);

ResultSet result = stmt.executeQuery();

return result;

}

 

두 번째로 입력을 위해서 코드를 추가하는 것은 아래와 같다.

 

class GateWay ...

 

public void insertRecognition(long contractID, Money amount, MfDate asof) throws SQLException {

PreparedStatement stmt = db.preparedStatement(insertRecognitionStatment);

stmt.setLong(1, contractID);

stmt.setBigDate(2, amount);

stmt.setDate(3, asof.toSqlDate());

stmt.executeUpdate();

}

private static final String insertRecognitionStatement =

"- INSERT INTO revenueRecognitions VALUE(?, ?, ?)";

 

자바 시스템에서 인식 서비스는 일반 클래스 또는 세션 빈이 될 수 있다. 도메인 모델 패턴의 예제와 비교를 하면, 위의 예제가 매우 간단하다는 것을 할 수 있다.