김세훈

Clunix Wiki
Clarysage (토론 | 기여) 사용자의 2009년 4월 8일 (수) 10:46 버전

목차

http://coffeenix.net/data_repository/html/gcc-err.html

  • GDB 디버깅 프로그램
b file.c:func이런 식으로 하면 외부파일의 특정함수에 브레이크 포인트를 걸어줄 수 있다.
b 10 if var = 0 10행에 브레이크 포인트를 설정하는데 var 변수 값이 0일 때 작동
외부파일일지라도 브레이크 걸어준후 c를 하자!!! (컨티뉴)


  • 리눅스 팁
이 명령을 기억하면 일일히 ps -ef안해줘도 attach할 때 많은 도움이 될것이다.
-watch -d pgrep "프로세스명1|프로세스명2|프로세스명3"
해상도 바꾸고 싶을 때
리눅스 콘솔 화면의 해상도 설정하기 위해서는 grub.conf 안에 다음 라인을 추가한다.
kernel /vmlinuz-2.6.x ro root=LABEL=/1 rhgb quiet vga=792
정확한 vga 설정값은 아래와 같다.

Colors 640x480 800x600 1024x768 1280x1024 1600x1200


256 769 771 773 775 796 32768 784 787 790 793 797 65536 785 788 791 794 798 16.8M 786 789 792 795 799


http://servermaster.pe.kr/tc/52 <- 여기 좋다.

링크 시킬때
- ln -s /원본... /링크시킬 위치...
링크 정보를 알고 싶을 떄
- phpMyadmin과 같은 html상의 링크는
- /var/www/html/ 쪽으로 가자!

남은 하드디스크량 알아 볼 때
- df -h
하드디스크 부족할 때
- fdisk /dev/sd...
- extracted는 피할 것.
- 후에 mount로 정착
- 그리고 마지막으로 링크 (위의 것 참고)

마운트

- mount /dev/sdb1(원래 있던 곳.) /tmp/hadoop-root 하둡의 원위치
- 이건 뭘까? umount /media/disk
- http://mwultong.blogspot.com/2007/07/linux-mount.html <- 여길 참고하라!
- http://user.chollian.net/~deuckgi/LinuxServer/linux.htm <-여기도 참고하라!
프로세스의 비중이 클 때
- top로 검사 (작업 관리자와 같은 화면 실시간 출력)
- pid에 따른 비중에 맞춰 막히는 프로세서 삭제
- 삭제하는 방법 pkill -9 pid
- partprobe(?) 암튼 이건 재부팅 방지용이다.

하둡

- hdfs상에서 송수신할 때, 나눠야할 블록, 버퍼량을 헤아려야 한다.
- 예를 들어, 너무 많은 양을 한꺼번에 보내려 한다면 오류가 발생한다.

- h-base, hdfs, map & reduce 방식은 구글 것을 따라한거다.
- 하둡은 높은 전송률,  낮은 지연률 - 단, 많은 양의 컴퓨터(렉)가 병렬구조의 클러스터를 이뤄야 된다- 을 자랑한다.
- moving computation 움직일 수 있는 계산. 즉,  계산처리 과정의 근접화. 즉, 데이터의 이동, 근접화보다 더 효율적인 방법
이라고 한다.
- hdfs는 상호작용이라기보단, 배치 프로세싱. (이게 도대체 무슨말인지...) 
- 결론은, 병행처리 구조상 획기적인 '속도의 증대'는 DFS의 놀라운 발견!

- 하둡의 초기화는 우선 hadoop namenod -format 디렉토리 초기화(1)
- start-all.sh (2)분산파일 시스템(DFS) 가동!
- 그리고 분산파일 시스템의 중지는 stop-all.sh 스크립트 이용
자세한건 여기에! http://www.joinc.co.kr/modules/moniwiki/wiki.php/JCvs/Search/Document/nutch/Hadoop?action=print
- hadoop-default.xml 이건 뭘까?
- hadoop-site.xml 이건 뭘까?
- $하둡홈/logs...
- hadoop-daemon.sh start namenode
- hadoop-daemon.sh start datanode
- 위의 것도 염두해두자.


EMS

자바스크립트

member_list.js의 속성바꾸기. -$(id).attr=>속성바꾸기 시작하겠다.
("class", "btn_08")- $(id)에 해당하는 class속성을 btn_08로 바꾸겠다.

SQL

- client_data1 as A LEFT JOIN firm_data1 as B on A.f_id = B.f_id
- 생각해보자. 모든 테이블의 값을 불러들어올 수 있는 명령!! - 생각해냈다.
- UNION in SQL-tutorial (http://www.tizag.com/sqlTutorial/sqlunion.php)
- SELECT employees.Lastname, employees.Firstname, invoices.Sale, invoices.Price
  FROM employees
  INNER JOIN invoices
  ON employees.id = invoices.EmployeeID
  UNION
  SELECT employees2.Lastname, employees2.Firstname, invoices.Sale, invoices.Price
  FROM employees2
  INNER JOIN invoices
  ON employees2.id = invoices.EmployeeID;
- 그냥 합치는 것 같다.
- 뭔가를 값을 얻어서 다른 폐이지에 보낼 때(처리할 때) 한 폐이지에 두개이상의 방식이 존재할 때,
  고려해야한다. 그러니까 인풋 타입의 메쏘드를 get으로 할 것인지, post로 할 것인지, 뭐 요런 것들이
  2개 이상이라면 충돌(아마 그런걸거다.)을 우려할 수 있으므로 미리미리 막아두자. 검색엔진이라던지,
  처리 버튼이라던지...
- mysql은 세개의 테이블을 병합, 조회하는 거 빼곤 모든 작업이 가능하다. 동적콘텐츠 상에서 구현 불가능한 것도
  mysql의 쿼리를 잘 굴려본다면 해답이 나온다.
AVG in SQL-tutorial (sql-tutorial.net/SQL-AVG.asp)
- SELECT AVG(column 1) FROM Table1 => SQL 해석 테이블 1의 column1속성에 속한 값의 평균값을 알려주세요.
- 예) SELECT AVG(salesAmount) AS AvgSaleAmount FROM Sales => Sales테이블의 SalesAmount 속성의
  평균값을 알려주세요.
GROUP-BY in SQL-tutorial (sql-tutorial.net/SQL-GROUP-BY.asp)
- 이건 위에 언급한 AVG나 SUM과 같은 것과 같이 쓰이는 경우가 많다.
- SELECT Employee, SUM (Hours) FROM EmployeeHours GROUP By Employee => Employee에 해당하는 값을 
  동등한 것끼리 항목을 묶은 다음 각 그룹별 Hours 합친 값을 구해주세요.
별명을 지어 같은 소스를 각각 달리 구분하여 사용하기
- 간단하다. 필드명을 입력하는 곳에 필드이름을 쓰고 double-quote(쌍따옴표)로 명명을 하면 받아지는 이름이 바뀌게 된다.

해쉬 테이블

- 전화번호부, 그러니까 찾아보기 쉽게 색목별로 나눈 사전이나 전화번호부라면 해쉬테이블!
- 어떤 곳에 넣어야 할 지, 그러니까 구분하는 기준을 정하는게 최우선과제겠지!
- 하지만 이 역시 완벽하진 않아, 쉽게 에러가 날 수 있는데 대표적으로 값을 추가할 수 없는 충돌 현상이 그것이다!
- 해결방법 다중슬롯: 그냥 2차원 배열 만들면 되지뭐!
- 하지만 한쪽 슬롯에만 치중된다면- 낭비, 지연.
- 결국 단순, 신속적인 해시테이블을 만들어야!
- 선형탐색 : 꿩대신 닭. 해당 슬롯이 꽉차면 그 옆자리!
- 동적 슬롯: 슬롯의 갯수를 가변적으로 관리하는 방법. 비교적으로 적극대처 방법.
- 이 동적슬롯의 구현은 동적배열이나 연결리스트로 작성해야. 물론 이 때엔, 양이 방대해짐을 전제로 한다면,
- 이분 검색을 하는게 유리하겠다.

- 검색이라기 보단, 빠른 검색을 위한 자료관리 알고리즘.

uts

1) 용어 정리
  - 스테이지 : U. T. S의 세단계를 세분화 시킨것.(같은 S를 가더라도 S1에 갈 건지, S2에 갈 건지 알아야지.)
  - DH테이블, 크게 svc와 tid로 나뉘는데 업데이터와 뭐가 다를까. 일단 보류
  - UTS_ENV 이건 한 데이터의 세부정보.
2) 함수
  - record_direction
3) 돌아가는 구조
  - 폴더와 같은 이름.C : 거의 메인함수와 같은 격, 익스트렉터와 트렌스포머 그리고 이에따른 분리된 헤시테이블관리
    그리고 헤시엔트리(hentry)를 관리하고 있다.
  - 폴더와 같은 이름.h : 모든 것을 정의하는 헤더파일, 참고로 위에 메크로 부분은 중복선언을 막기위한 것이란다.
    php의 require-once라고 이해하면 될 것이다.
  - transform.c : 후에 uts_transform함수에서 호출하게될 loc_mapping에 관여하는 파일.
4) DHTABLE정의 부분 
  - 2번째 부터 4번째까지의 인자 부분은 중요하다. (알아두어야 할것)
  - 그리고 맨 끝에서 4번째 인자는 2번째 스테이지에서 처리할 데이터(키값)
  - 맨 끝에서 3번째 인자는 키와 벨류를 합친 데이터량
  - 맨 끝에서 2번째 인자는 해시테이블의 수(그러니까 분류처리할 종류의 갯수)
  - 맨 끝의 인자는 최종적으로 처리하여 보내줄 목표 단계(처음에 한건 3스테이지라고 설정했다.) 
5) C 라이브러리를 기초로 만들어진 uts라이브러리
  - opendir, readdir (http://blog.naver.com/PostView.nhn?blogId=beyondlegend&logNo=110029848992&from=search)
  - fopen 등등 여러 기능을 UTS 환경에 맞게 바꿔놨다.
  - 구현된 기능의 이름(함수이름)도 어렵지 않다 기존의 함수 이름 앞에 UTS라고 붙이면 된다.
6) 돌아가는 구조
  - 일단, uts_extractor가 모든 걸 설정한다. 그러니까, 파일을 열고 거기안의 정보를 갖고온다.(갖고오기만 하면된다.)
  - 둘째로 get_direction여기서 스테이지 정하고 거기에 맞는 다음 단계 (transform)으로 간다.
  - 그 다음, uts_transform으로 가서, 갖고온 데이터를 기반으로 정제 또는 매핑을 한다.
  - 셋째로 get_direction여기서 스테이지 또 정하고 거기에 맞는 다음 단계로 간다. 헤시테이블 설정도 있다는데,
    그건 나중에 알아보자.
  - 그 다음, uts_loader-- uts-init, uts-load, uts-fini등으로 분류되는데 여기서 아웃풋을 정리한다. 대부분 fwrite로
     쓴다.
  - 끝
7) 함수는 C와 아주 흡사, 하지만 인자값이 어떤 것이 있으며 하는 일이 무언지 알아두자.
  - ecm_gen_path는 첫번째 두번째 인자값을 합쳐준다. 방을 만들거나 파일을 설정할 때 자주쓰이는 듯 하다.
  - extractor_id는 뭘까?
  - uts_emit_record이건 다음단계로 넘기는 것. 아주 중요한 것 인자값은 굳이 캐스트 연산을 하지 않아도 된다.
8) 설정 파일의 2대산맥. makefile.am이랑 configure.in이다. 여기에 설치를 해야 모듈을 잘 설치할 수 있다. 모듈의 uts.spec!!!
  그리고 한가지더, 이것을 깔고난 후, aclocal, autoconf, automake를 재설치, 재실행해야 한다.
9) /usr/clx/bin/ecmconf -v 해주면 설정된 것이 나온다. 여기서 현재의 econf(/usr/clx/etc/econf)를 지워주고 ecmconf -h를 해주면
  여기서 옵션창이 나오는데 여기의 지시에 맞춰 /usr/clx/bin/ecmconf -n clunix28 -c ~~ -p 908 -e 80 -m 1 -t 1000000 -L /asdfhhl;kasj
 대신 -L은 시작폐이지 설정이니 주의.(loginpage/loginpage.html -T top/top.html)해주고 ecmctl -C start를 해보자 그러면 성공!
9.5) 여기서 노드값(ndname)이름을 설정하지 않으면 실행이 되질 않는다. 
10)4월 2일현재까지의 알아낸 정도는, 
  Makefile.am을 샅샅이 훑어보자. 특히, kimsh_la_LIBADD를 잘 설정해주지 못할 경우, make파일은 잘 될지 몰라도, 후에 런맵(runmap)실행시킬
  때, 모듈이 존재하지 않는다며 cannot create job!!!이란 에러메시지가 뜰것이다. 그러니까 이것도 주위하며 잘 보자.
  그러니까 주의!!!(num2bcd 함수 이용할 때 특히 주의!!!) 
  ecm_memset + ecm_memcpy 이건 항상 같이 따라다니면 좋을 것 같다. 특히 이거 하기전에, ecm_malloc같은건 uts_alloc_record에서 알아서 
  해주기때문에 이런건 참고하자.
  free (해제)를 같은 대상으로 2번해주면 안되겠다.
  디버깅 해줄 때, dis/en은 그간 만들었던 브레이킹 포인트를 각각 일괄 삭제/복구와 같다.
  디버깅 만큼 강력한 터미널의 커맨드!!! 
  10-1) watch -d 'pgrep -l "edbd|ebcd|egid|ext2009년 4월 2일 (목) 08:54 (UTC)Clarysage"; ls -l /usr/clx/bigfiles'
  10-2) tail -f /tmp/kimsh.log 
11) call by reference를 좀더 이해하자. 그러니까 함수의 인자값자체를 함수를 거치면서 변하게끔 해주려면 a(&b)이렇게 보내주고
이걸 받는 쪽, 그러니까 함수가 구현된 부분에서는 void a(*b)이렇게 해주고 그 안에선 b라고 쓰면 되겠지.


12) memcpystrncpy의 다른점
  - memcpy는 0x00에 상관 없이 지정한 갯수만큼 끝까지 복사시켜주고 strncpy는 0x00를 만나면 중도에 끝내버린다.
14) static의 특징!!
  - 유용하다면 엄청 유용한 변수 타입.
  - 외부에서 함수를 호출할 때, refresh(다시 초기화)가 되지 않고 변수가 그대로 설정이 된다.
  - 그냥 변수 선언과 차이점을 명백하게 알아두자.
  - 나중에 인덱스를 활용할 때, 특히, UTS에서 넘어온 값이 몇번째인지 알고 싶을 때 활용하면 좋을 것 같다.
15) 더 알자.

이맥스 팁

1) C-x, r, m 북마크 표시해두기
2) C-x, r, l 표시해둔 북마크로 가기
3) C-x, r, b 표시해 둔 북마크로 가기
4) yum -update 이건 리눅스인데, 중요한 것.
5) C-x, [스페이스바] -> 이거 아무래도 브레이크(gdb)걸어놓는 것 같은데.
6) M-';' 소스코드가 있을때 주석 삽입. 자동으로 주석끼리의 줄도 맞춰줌.
7) M-q 주석이 지정된 폭을 넘어가면 알아서 칸을 맞춰준다.
8) C-space 블록 지정, 2번 하면 마킹까지 된다
9) C-u M-';' 현재줄에서 시작하는 주석 삭제.
             블럭이 지정되어 있으면 블럭 전체 주석 처리함.

이맥스 섭버젼(svn) 팁

1) svn - failed : Valid UTF-8 DATA란 메세지가 나온다면
   export lang의 설정을 해야한다. 현재 .bashrc로 alias 설정을 했기때문에
   이맥스작업이라면 UTF-8이 아닌, euc-KR로 그 외에 작업은 가급적 UTF-8로 작업을 해야한다.

ECM-core 배웠던 명령어 나열

1) ./ecmctl -p 908 -e -n clarysage -c kimsh -C start
1.5) 근데 -p에서 908은 디폴트 값이므로 굳이 설정을 안해줘도 된다. 단 908이 아닌 다른 포트로 지정하고 싶으면 -p 숫자를 써야한다.
2) CFLAGS="-g -Wall" ./configure --enable-debug --prefix=/usr/clx
2.5) 단, UTS-modules 에서는, --disable-hadoop이라고 적어야한다.
3) edbd
4) ps -C ebcd (이건 근데 ps, kill같은건 리눅스 커맨드와 관련 깊다. man 으로 공부하자)
5) kill -usr1 (근데 이건 리눅스 커맨드 창에서 실현)
6) 갑자기 makefile하는 도중, 이상한 현상이 발생하면
 - 사용환경이 다를 경우 aclocal, autoconf, automake를 실행하자.
 - 사용자를 root로 바꾼다.
 - autoreconf를 실행한다. (아마 이런 경고문이 뜰 것이다.)
7) pkill -usr1 그리고 프로세스 이름

IIS

  • 인터넷 인포메이션 서버의 약자, 서버 프로그램
  • ftp, www에 대해선 어느정도 알고 있으니.
  • smtp는 아웃룩
  • nntp역시 아웃룩인데, 토론그룹에 관한 것.
  • MMC는 관리자(파일관리자 같은 것)

IIS 의 요청 처리 rpm

  • Request Processing Models
  • 사용자 요청처리라고 정의할 수 있겠다.
  • 중간에 웹서버에서 로드한 ISAPI 모듈이 더 많을 경우 처리단계가 더 많아지게 된다.
  • 최근 iis 6에선 요청처리를 별도의 응용 프로그램풀(워커프로세스)처리하여 웹서버의 안정성을 높인다고 한다.
  • 암튼, 해당 지원하는 php라던지 asp같은 언어라면 동적컨텐츠라고 판단 캐시(일종의 'api보관소'인듯)를 탐색후 리턴
  • Request 객체는 클라이언트 -> 서버로 작용하는 여러가지 데이터
  • 값을 가져올 때 클라이언트에 있는 걸 서버쪽에 적용할 때의 객체
test = Request.form("test")
test = Request.cookie("test")
  • 그러니까 사용자의 정보를 서버쪽에 인식할 때의 정보를 통틀어 Request객체?

참고사항

  • 6.0강력한 보안 높은 안정성 및 성능향상을 위한 엔지니어링 릴리스
  • 7.0플랫폼릴리스? 이전버전의 고품질 기본 웹 서버코어를 핵심적인 최신 배포 및 관리 시나리오 지원을 갖춘 모듈 방식의

확장성 높은 플랫폼으로 전환하기 위한 릴리스

취소화함으로써 얻어집니다.

- 새로운 아키텍처를 도입하게 된 몇 가지 이유가 있습니다. 
 첫번째는 서버 동작에 대한 권한을 사람들에게 주는 겁니다. 
  모듈 방식의 디자인을 통해서 사람들은 어떤 모듈을 사용할지, 
모듈을 읽어들이는 순서, 누가 어떤 모듈을 읽어들일 수있는지를 제거할 수 있습니다. 
사용자가 만든 모듈들은 IIS7의 요청처리 파이프라인(request-handling pipeline)을 통해서 로드되기 때문에 
인증 같은 내부 이벤트를 가로채는(hook up) 모듈을 네이티브 언어나 관리형 언어로 작성할 수 있습니다. 
이를 통해 개발자들은 보다 쉽게 IIS7의 기능을 수정하거나 확장할 수 있습니다.
 따라서, 사람들은 새로운 기능을 발표하기 위해 IIS 팀에 의존할 필요가 없으며,
 IIS7에 직접 추가할 수 있는 모듈을 작성하기만 하면 됩니다. 확장성은 모듈에만 한정된 것은 아닙니다.
 예를 들어, 스키마, 사용자 인터페이스, 응용프로그램이 보고하는 추적 이벤트(tracing events)를 
 포함한 IIS7의 거의 모든 부분이 모듈로 되어 있으며 확장할 수 있습니다.
-
부서별 위키