플렉스를 작성하다 보면 이게 웹 프로그래밍인지, 어플리케이션 프로그래밍인지 참 애매한 경계를 느끼게 되는 것 같습니다. 그중에 가장 대표적인 녀석은 초기화 시점이 아닐지 생각해봅니다.
원래 웹 프로그래밍이라는게 사실 초기화 시점에 대해서 그리 신경써야할 내용은 서버에서 세팅을 할때의 문제이지 프로그래밍 환경이 구축된 다음에 그런 문제를 신경써야하는 경우는 거의 없었는데... 이 녀석 플렉스는 다르군요.
위의 예는 제가 임의로 만든 커스텀 모듈을 메모리상에 로드를 시킨후의 메모리 상태입니다. 실제로 부모는 생성이 되어있지만, 아마도 만들어진 오브젝트가 실제로 플렉스 플레이어상에서 보여지기 전에는 객체 생성이 안돼는 모양입니다. 명시적으로 선언한 변수의 경우에는 이미 생성이 되지만, 프레임워크에서 제공하는 컨트롤들이요. (뭔가 강제로 생성되게 할 수 있는 방법이 있을 것 같은데...)
플렉스로 만들어진 좀 규모가 큰 프로그램을 어디서 못구할지... 원래 이런 언어는 그래도 10만라인은 넘어가는 프로그램을 좀 봐야지 감이 잡히는데... -_-;;
어쨋든 위의 문제는 결국 아래 처럼 임시로 해결을 했습니다.
이렇게 임시로 해결을 하면 순간적으로 윈도우가 떳다가 사라지기 때문에 화면에 그 못습이 잠깐이지만 보이죠. -_-;; 어떻게 초기화를 할 방법이 없나 했는데, 프레임워크를 따라들어가도 IPopUpManager 의 실제 구현물이 보이지가 않더군요. (FLEX 런타임에 코드가 들어가 있는건지... MFC처럼 -_-)
어쨋든 나름 DBA라고 하면서 학교때 배웠던 DB 과목의 내용중에 기억나는건 SQL 뿐이라는 사실이 너무 안습이라 공부좀 하려는데.... 이놈의 돗단배 책이 너무 어려운거입니다. 간만에 봐서인가?? ㅋㅋㅋㅋ 졸업한지 1년만에 머리는 돌덩이化됐더군요. 그래서 이래저래 알아보면서 이 책을 독파하기전에 초벌구이용 책을 하나 더 보기로 했죠.
큰 사진도 못구하겠는 이 책... :-)
목차
Chapter 01 정보 환경 1
1.1 정보 처리 시스템 1
1.1.1 정보와 데이타 1
1.1.2 정보 시스템 3
1.2 데이타 처리 시스템 5
1.2.1 일괄 처리 시스템 6
1.2.2 온라인 처리 시스템 7
1.2.3 분산 처리 시스템 9
Chapter 02 데이타베이스 개념 15
2.1 데이타베이스의 정의 15
2.2 데이타베이스의 특성 17
2.3 데이타베이스의 구성 요소 18
2.3.1 개체 19ⅴ
2.3.2 관계 20
2.4 데이타베이스의 구조 22
Chapter 03 데이타베이스 관리 시스템 25
3.1 데이타베이스 관리 시스템의 발전 배경 25
3.1.1 데이타 종속성 26
3.1.2 데이타 중복성 26
3.2 데이타베이스 관리 시스템의 정의 29
3.3 데이타베이스 관리 시스템의 필수 기능 30
3.4 데이타베이스 관리 시스템의 장단점 32
3.4.1 데이타베이스 관리 시스템의 장점 32
3.4.2 데이타베이스 관리 시스템의 단점 34
3.5 데이타 독립성 35
3.5.1 논리적 데이타 독립성 35
3.5.2 물리적 데이타 독립성 36
3.6 데이타베이스 관리 시스템의 역사 37
Chapter 04 데이타베이스 시스템의 구성 41
4.1 3단계 데이타베이스 42
4.2 데이타 언어 47
4.2.1 데이타 정의어 47
4.2.2 데이타 조작어 48
4.2.3 데이타 제어어 50
4.3 사용자 50
4.4 DBMS 51
4.5 데이타베이스 관리자 54
4.6 하드웨어 55
Chapter 05 데이타 모델링 61
5.1 데이타의 세계 61ⅵ
5.2 데이타 모델의 개념 63
5.3 개체 타입 65
5.4 관계 타입 68
5.4.1 관계 타입과 인스턴스 68
5.4.2 관계 타입의 유형 69
5.4.3 관계 타입의 특성 71
5.5 개체-관계 모델 72
5.5.1 E-R 다이어그램 72
5.5.2 개체 타입과 키 애트리뷰트 74
5.5.3 약한 개체 타입 74
5.5.4 E-R 다이어그램 표기법 76
5.6 논리적 데이타 모델 77
Chapter 06 데이타베이스의 저장과 접근 83
6.1 데이타베이스의 저장 83
6.2 데이타베이스의 접근 85
6.2.1 디스크 관리자 86
6.2.2 화일 관리자 87
6.3 페이지 세트와 화일 88
6.4 화일의 조직 방법 96
6.4.1 순차 방법 96
6.4.2 인덱스 방법 97
6.4.3 해싱 방법 111
Chapter 07 관계 데이타 구조 119
7.1 애트리뷰트와 도메인 120
7.2 릴레이션의 개념 122
7.3 릴레이션의 특성 126
7.4 관계 데이타베이스 129
Chapter 08 관계 데이타 제약 133
8.1 기본 키 133
8.2 외래 키 136
8.3 무결성 제약 137
Chapter 09 관계 데이타 연산 143
9.1 관계 대수 144
9.1.1 일반 집합 연산자 144
9.1.2 순수 관계 연산자 147
9.1.3 근원 연산과 복합 연산 155
9.1.4 관계 대수의 확장 155
9.1.5 관계 대수의 질의문 표현 159
9.2 관계 해석 ⅶ160
9.2.1 투플 관계 해석 161
9.2.2 투플 관계 해석식의 질의문 표현 164
9.2.3 도메인 관계 해석 166
9.2.4 도메인 관계 해석식을 이용한 질의문 표현 168
9.3 QBE 169
9.3.1 데이타 검색 170
9.3.2 데이타의 삽입 172
9.3.3 데이타의 삭제 173
9.3.4 데이타의 갱신 174
Chapter 10 SQL 177
10.1 SQL 데이타 정의문 178
10.1.1 스키마와 카탈로그 178
10.1.2 도메인 정의문 179
10.1.3 기본 테이블의 생성 181
10.1.4 기본 테이블의 제거와 변경 183
10.2 SQL 데이타 조작문 184
10.2.1 데이타 검색 185
10.2.2 데이타의 갱신 201
10.2.3 데이타의 삽입 202
10.2.4 데이타의 삭제 204
10.3 SQL 뷰 206
10.3.1 뷰의 생성 206
10.3.2 뷰의 제거 209
10.3.3 뷰의 조작 연산 210
10.3.4 뷰의 장단점 212
10.4 삽입 SQL 213
10.4.1 응용 프로그램의 특징 213ⅷ
10.4.2 커서가 필요 없는 데이타 조작 215
10.4.3 커서를 이용하는 데이타 조작 217
10.4.4 다이내믹 SQL 219
Chapter 11 데이타 종속성과 정규화 223
11.1 데이타의 논리적 표현 223
11.2 함수 종속 227
11.3 기본 정규형 230
11.3.1 제1정규형(1NF:First Normal Form) 230
11.3.2 제2정규형(2NF:Second Normal Form) 233
11.3.3 제3정규형(3NF:Third Normal Form) 236
11.3.4 보이스/코드 정규형 237
11.4 고급 정규형 241
11.4.1 제4정규형 241
11.4.2 제5정규형 245
11.5 정규형 간의 관계 250
Chapter 12 데이타베이스 설계 257
12.1 데이타베이스 설계 환경 258
12.1.1 데이타베이스 생명 주기 258
12.1.2 데이타베이스 설계 단계 259
12.1.3 데이타베이스 설계 고려 사항 261
12.2 요구 조건 분석 262
12.2.1 정보의 내용과 처리 요구 조건의 수집 262
12.2.2 범 기관적 경영 목표와 제약 조건의 식별 263
12.2.3 공식적인 요구 조건 명세의 작성 263
12.2.4 요구 조건 명세의 검토 264
12.3 개념적 설계 264
12.3.1 개념적 스키마 모델링 265
12.3.2 트랜잭션 모델링 267
12.4 논리적 설계 268
12.4.1 논리적 설계 단계 268
12.4.2 관계 데이타 모델로의 변환 예 270
12.5 물리적 설계 272
12.5.1 저장 레코드의 양식 설계 273
12.5.2 레코드 집중의 분석 및 설계 273
12.5.3 접근 경로 설계 273
12.6 데이타베이스 구현 275
Chapter 13 객체 데이타베이스 279
13.1 새로운 데이타베이스 응용 279ⅸ
13.2 객체 데이타 모델 281
13.2.1 객체와 객체 식별자 281
13.2.2 애트리뷰트와 메소드 282
13.2.3 클래스 285
13.2.4 클래스 계층과 상속 286
13.2.5 복합 객체 289
13.3 ODMG의 ODBMS 291
13.3.1 ODMG 객체 모델과 ODL 291
13.3.2 OQL 296
Chapter 14 객체-관계 데이타베이스 301
14.1 객체-관계 데이타베이스의 배경 301
14.2 객체-관계 데이타베이스와 SQL 302
14.3 SQL:1999/2003의 관계적 특징 303
14.3.1 새로운 데이타 타입 303
14.3.2 새로운 조건식 308
14.4 SQL:1999/2003의 객체 지향적 특징 309
14.4.1 사용자 정의 타입 309
14.4.2 테이블 정의 314
14.4.3 참조 애트리뷰트 316
14.4.4 참조 타입 317
14.4.5 테이블 상속 320
14.4.6 집단 타입 321
14.5 ODBMS와 ORDBMS 324
14.5.1 ODBMS와 ORDBMS의 유사점 324
14.5.2 ODBMS와 ORDBMS의 차이점 324
Chapter 15 무결성과 보안 327
15.1 무결성 327ⅹ
15.1.1 무결성 규정 327
15.1.2 무결성 규정의 명세 330
15.2 보안 334
15.2.1 데이타베이스 보안 334
15.2.2 데이타베이스 보안의 구현 335
15.2.3 보안 서브시스템 337
15.2.4 권한부여 명세 기법 339
15.2.5 데이타 암호화 342
Chapter 16 회복과 병행 제어 345
16.1 트랜잭션 345
16.1.1 트랜잭션의 특성 345
16.1.2 트랜잭션 상태 347
16.2 회복 349
16.2.1 데이타베이스 저장 연산 349
16.2.2 장애와 회복 시스템 351
16.2.3 데이타베이스 로그를 이용한 회복 353
16.2.4 검사시점 회복 357
16.2.5 미디어 회복 358
16.3 병행 제어 358
16.3.1 병행수행의 문제점 358
16.3.2 트랜잭션 스케줄 361
16.3.3 로킹 기법 365
Chapter 17 XML과 데이타베이스 373
17.1 반구조화 데이타 374
17.2 XML 데이타 모델 378
17.3 DTD와 XML 스키마 380
17.3.1 XML DTD 380
17.3.2 XML 스키마 384
17.4 XML 문서의 저장 390
17.5 XML 데이타 처리 391
17.5.1 XPath 392
17.5.2 XQuery 393
17.5.3 SQL/XML 395
Chapter 18 데이타 웨어하우스와 데이타 마이닝 399
18.1 의사결정 지원 시스템 399xi
18.2 데이타 웨어하우스 402
18.3 OLAP과 다차원 데이타 모델 405
18.3.1 사실 테이블과 차원 테이블 405
18.3.2 스타 스키마 409
18.4 다차원 집계 질의 410
18.4.1 집계(aggregation) 연산 410
18.4.2 ROLLUP과 CUBE 연산자 413
18.5 OLAP의 구현 416
18.5.1 ROLAP과 MOLAP 416
18.5.2 OLAP 시스템의 요건 417
18.5.3 OLAP의 구현 기법 419
18.6 데이타 마이닝 기법 419
18.6.1 데이타 마이닝 419
18.6.2 연관 규칙(association rules) 420
18.6.3 순차 패턴(sequential patterns) 423
18.6.4 분류 규칙(classification rules) 423
18.6.5 기계 학습(machine learning) 424
Chapter 19 최신 데이타베이스 429
19.1 멀티미디어 데이타베이스 429
19.1.1 멀티미디어 데이타베이스 개념 429
19.1.2 멀티미디어 데이타 관리 432
19.1.3 연속매체 데이타의 검색 436
19.1.4 이미지?음성 데이타베이스 438
19.1.5 멀티미디어 데이타베이스 응용 439
19.2 모바일 데이타베이스 439
19.2.1 모바일 컴퓨팅 구조 440
19.2.2 모바일 컴퓨팅의 특성 442
19.2.3 모바일 질의 처리 444
19.2.4 데이타 방송 445
19.2.5 단절성과 일관성 445
19.2.6 모바일 데이타 관리의 문제점 446
19.3 지리정보 시스템 448xii
19.3.1 지리정보 시스템의 응용 448
19.3.2 지리정보 시스템의 데이타 관리 요건 449
19.3.3 지리정보 시스템의 특수 데이타 연산 450
19.3.4 GIS 데이타베이스 기능 451
19.3.5 GIS의 당면 문제 452
컴공과를 들어오면 처음 듣게 되는 과목이 있습니다. 바로 자료구조론... 과마다 차이는 있겠지만, 보통 엘리스 호로비츠가 쓴 자료구조를 많이 본다고 알고 있습니다. (저도 이걸로 공부했고, 실제로 보면 이 책만큼 자료구조를 다루는 책도 없었구요.)
어쨋든 그 자료구조라는 책을 한글로 옮기신 이석호 교수님이 직접 저술한 DB 관련 서적입니다. 이분이 저술한 책중에는 정말로 괜찮은 책들이 많은데... 처음 접한 책은 '화일구조론'이라는 정익사에서 출간한 책이었습니다. 정익사라는 처음에는 듣도 보도 못한 이상한 회사에서 낸다고 생각했지만, File Structure 를 공부할때 그 책을 보고 깜짝!!!! 놀랐던 기억이 나네요. 설명이 정말로 명쾌하다고 해야하나??? 보통 돗단배 책같이 전체를 다루는 책들에서 볼 수 있는 약간의 두리뭉실함이 전혀 없었죠. 말그대로 구현까지 가능한 수준으로 내용이 설명됏던... (물론 소스는 없어요 ㅋㅋ :-) 알죠?? ㅋㅋ)
어쨋든 여기서 중요한건 이 책의 특징이 있는데... 바로 PPT 자료가 없다는 점이죠. -_-;;; 외국의 보통 유명한 책들과 달리 마이너한 책이라 그런지 정말로 PPT 구하기 힘듭니다. 제길!!! 요점만 찍어서 볼려고 했는데.. 하지만 역시 인터넷은 위대했다. ㅋㅋㅋㅋ 정익사에서 제공하는 PT에서 마치 서울대 마크만 빼버린 것 같은 PPT 자료를 구했습니다. ㅋㅋ (저작권에 걸릴지도 모르지만;;)
대학교 3학년때 멤버십 합격하고 "그래 나도 노트북!!!"하면서 샀던 XPS1210 을 팔아버린지 한 1년쯤.... 슬슬 다시 노트북을 사고 싶다는 생각에 이러저리 알아보고 있는데요. 나름 꽤 많은 종류가 있지만 실상 적정한 가격대에 적당한 성능의 제품을 찾기는 쉽지 않았습니다.
일단 제가 생각하는 가격대는 MAX 150 정도. XPS1210 에서의 경험에서 "웹 캠은 불필요, 하드는 적당하면 ㅇㅋ, 배터리만 먹는 외장 VGA는 불필요" 등등을 적용시켜서 알았고, 결론은 아래의 3가지 제품정도가 그나마 가장 괜찮아 보이더군요.
참 재미있게 프로그래밍을 할 수 있다는 사실이 신기했다. 예전에 MS 에서도 UI를 xml 형태로 조립해서 만들 수 있도록 하다고 했던 것 같은데 WPF 였나??? 하여간 플렉스에서 그 개념을 처음 접해본 나로서는 정말 UI에 들어가는 시간이 이렇게 짧아진다는 사실이 정말 반가웟다.
이 버그는 정말 너무 황당해서... -_-;;
물론 모든 면에서 만족스러웠던 것은 아니었다. 어이없는 SDK 자체적인 버그도 격었고, 덕분에 하루를 그냥 날리면서 짯던 경험도 생겼다. (설마 이런데서 버그가 있겠어 싶은... -_-) Visual C++ 에서라면 아예 기대도 안하고 짜니 대비라도 할텐데 프레임워크라는 놈에 녹아 들어간 부분이 이런 문제가 있다는 사실에 정말로 놀랐다.
그래도 확실히 좋았던 것은 SDK 자체적으로 쓸만한 챠트 라이브러리를 제공한다는 점과 돈을 주고 구입하려고 하면 여타의 다른 프레임워크에서는 보기힘든 비쥬얼의 챠트를 사용가능하다는 점이다.
언어이다 보니 IDE의 문제는 말하지 않을 수가 없는데... 솔직히 무료로 제공하는 툴도 있다고 하는데 설치도 해보지 않아서 사실 잘 모르겠고, 개인적으로 사용한 툴은 플렉스 빌더라는 툴이었다. 단지 가격이 좀 돼다보니... 개인적으로 사서 쓰기에는 좀 그럴것 같다. (어지간한 회사에서는 아마도 무료툴로 개발하지 않을까 생각한다.)
대표적 IDE Flex Builder 에 포함된 기능들은 정말로 익숙해 지면 버리기 힘든 것들이 많다.
그리고 처음으로 DataService 라는 녀석을 이용해서 만들어본 프로그램이라서 개념이 참 신선했다. 매일 로컬에서 도는놈만 만들다고 웹이라는 녀석이 이렇게 물려서도 돌아가고 있구나 싶은 느낌???? BlazeDS 로 파라메터를 전달하고 리턴값을 가져가는 구조라든지...
플렉스로 프로그램 짜는 것만으로는 채워지지 않는 내부구조에 대한 호기심이 생겼던 기간이었다.
업무개선안을 하면서 iBatis 라는 SqlMapper 프레임워크를 사용하는데, 이 녀석이 생각보다 다루기가 까다롭더군요. (아마도 제가 다룬지 얼마 안돼서 그렇겠지만...) 어제는 하루 종일 아래와 같은 형태의 쿼리를 어떻게 하면 구성할 수 있을까? 라는 고민을 계속하면서 삽질의 삽질을 계속했습니다.
iterate 를 이용하면 된다는 것은 이미 manual 을 통해서 봤지만, 이게 다중 파라메터 Query 를 구성할 경우에는 자바 소스에서 어떤식으로 파라메터를 넘겨야하는지를 모르겠더군요.
SELECT
*
FROM
ADM.DBCFG
WHERE
DBNAME = ?
AND INPUT_DATE IN ( ? , ?, ?, ? )
아주 단순한 쿼리이지만... -_-; 예제의 어떤 곳에도 파라메터 2개를 넘기는 방식으로 짜놓은게 없었기 때문에 막상 처리하려니 어떻게 넘겨야하나 라는 고민을 했습니다.
결론은 정말 간단하더군요. -_-;;
SQL.xml
<select id="dbm.selectDBCfgByDBNameAndInputDate" parameterClass="java.util.HashMap" resultMap="retmapDBCfgVo">
SELECT
*
FROM
ADM.DBCFG
WHERE
DBNAME = #dbname# <iterate property="input_date" prepend ="AND INPUT_DATE IN " open="(" close=")" conjunction="," >
#input_date[]#
</iterate> </select>
Java.java
public List<DBCfgVo> getDBCfgList(String dbname, List<String> date) {
SqlMapClient sqlMapper = SqlMapperMgr.getSqlMapClient(MAPPERTYPE.DBMDB);
List<DBCfgVo> list = null;
try {
list = (List<DBCfgVo>)sqlMapper.queryForList("dbm.selectDBCfgByDBNameAndInputDate",map);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return list;
}
이야기의 핵심은 결국 Object 타입으로 HashMap 을 구성해서 던지면 iBatis 가 자동으로 이걸 판단해서 넣는다는 것입니다. 단, 여기에는 전제조건이 반드시 List 타입 변수는 property 라는 xml 어트리뷰트로 명시해야하죠. (저걸 안하니까 에러가... -_-;;)