vmstat에서 swap 측정
작성자: 이수인
일자: 2005년 5월 10일(금)
================================================================================
vmstat의 결과 중에는 swap space에 대한 항목이 있습니다. =============================================== 100,000 <= swap :: swap waste 10,000k <= swap < 100,000k :: No problem 4,000k <= swap < 10,000k :: swap low 1,000k <= swap <4,000k :: swap verl low swap < 1.000 k :: No swap ================================================ 위 내용은 절대적인 값이 아닙니다. 현재의 AP에 따라 가장 많은 영향을 받을 수 있습니다. Swap Low 이면 실행이 되는 프로그램의 수를 줄이고 swap space를 늘리면 됩니다. No swap은 아주 큰 치명타 입니다. 시스템이 전혀 서비스를 못하는 경우가 됩니다. 더 이상 새로운 프로세스를 fork()를 못하기 때문 입니다. 이럴 경우에는 이러한 요인이 되는 프로그램을 찾아 즉시 수정 하여 반영 하여야 되며, 임시 방편으로는 swap space를 늘려야 만 합니다.


출처: http://solaris.superuser.co.kr
======================================
%user : 사용자 모드(응용프로그램)
%nice : nice 우선권을 가진 사용자 모드
%sys : 시스템모드(커널)
%idle : cpu idle 시간
======================================================================
tps : 해당 디바이스에 대한 초당 전송 숫자.(디바이스에 대한 I/O 요청)
Blk_read/s : 해당 디바이스에서 초당 읽은 블록 수
Blk_wrtn/s : 해당 디바이스에서 초당 기록한 블록 수
Blk_read : 전체 읽은 총 블록 수
Blk_wrtn : 전체 기록한 총 블록 수


[EX]
================================================================================
# iostat
Linux 2.4.18-14smp (local)       2004년 05월 11일

avg-cpu:  %user   %nice    %sys   %idle
          1.29    0.02    4.39   94.30

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
dev8-0           12.61         9.30       124.43   37558672  502668966
dev8-1          137.17        29.65       441.10  119779540 1781890120


# iostat -td 1 -x /dev/hda
Linux 2.4.20-20.7BOOT (db.ldskorea.co.kr)       11/30/2003

Time: 10:26:07 PM  
Device:    rrqm/s wrqm/s   r/s   w/s  rsec/s  wsec/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
/dev/hda     0.51   7.27  0.45  6.06    7.64  110.98     3.82    55.49    18.22     1.54  248.57 222.09  14.46

Time: 10:26:08 PM  
Device:    rrqm/s wrqm/s   r/s   w/s  rsec/s  wsec/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
/dev/hda     0.00   0.00  0.00  0.00    0.00    0.00     0.00     0.00     0.00 42949642.96    0.00   0.00 100.00

Time: 10:26:09 PM  
Device:    rrqm/s wrqm/s   r/s   w/s  rsec/s  wsec/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
/dev/hda     0.00   0.00  0.00  0.00    0.00    0.00     0.00     0.00     0.00 42949642.96    0.00   0.00 100.00

참고로  제일 처음 나오는 값은 부팅이후의 값이므로 무시하고 그 다음줄부터 보아야 합니다.

여기서 read request, write request 를 합하여 초당 나눈것이 tps 입니다. 초당 io 요청을 얼마나 많이 했나를 볼 수 있습니다.

중요한것은 다음과 같겠지요.
초당 얼마나 많은 i/o 요청을 하는가 :  tps, r/s, w/s - 전체,  read, write io request
초당 전송량 :  r/w 전송양입니다. -x 옵션이 없을때는 블락기준이며(Blk_read/s   Blk_wrtn/s) 이를 byte 로 바꾸러면 512 byte 를 곱하면 됩니다. -x 옵션이 있으면 바이트로 나옵니다. (rkB/s,    wkB/s )
r/w 비율 : i/o request, 전송량에서 read 와 write 비율을 보면 주로 읽기중심인지 쓰기중심인지 알 수 있을 것입니다.

초보자들을 위한 공부 가이드  C 언어


0. 소개


C 언어의 중요성에 대해서는 별로 언급할 것이 없겠습니다. 이 글을 읽으시는 분은 이미 그 중요성을 인식한 분일테니까요. 인터넷 검색 엔진에 "the c programming language"라고 쳐 넣을 후 결과를 보면 C 언어가 왜 중요한가에 대한 글이 끝없이 나옵니다. 덤으로 C 언어 강좌도 꽤 많은 것들이 있으니 한번 대충 훑어 보시는 것도 도움이 될 것 같네요.

어쨌거나 요즘같이 C++, C#, JAVA, Delphi(Pascal), Visual Basic... 등등의 언어가 난무하는 시대에도 여전히 C 언어는 반드시 알아두어야 할 기본 언어입니다. 게다가 기초 문법만 따질 경우 일단 옛날의 베이직을 제외하면 가장 배우기 쉬운(제 생각에) 언어죠. 처음 프로그래머가 되기 위해 결심을 하신 분이라면 다른 언어를 배운다 하더라도 시간을 내어서 꼭 익혀두셔야만 하는 언어입니다.


1. 좋은 책들

1) The C Programming Language, Second Edition
Brian W.Kernighan ,Dennis M.Ritchie
Prentice Hall, 1988
2) C Primer Plus (The Waite Group's), Third Edition
Stephen Prata
Sams Publishing, 1998
3) Teach Yourself C in 21 Days, Fourth Edition
Peter Aitken and Bradley L. Jones
Sams Publishing, 1998
4) Turbo C 정복
가남사

C를 처음 하시는 분이라면 2), 3)를 권합니다. 번역본도 있으니 그것으로 공부하셔도 전혀 문제 없습니다. 그 외에 다른 분들, 그러니까 한 번이라도 C를 접해본 적이 있는 분들(이미 아무 교재나 한 권 정도는 가지고 있으신 분들)께는 1)을 권하겠습니다. 모든 프로그래머들이 권하는 가장 좋은 책입니다. 1)의 경우에는 번역본을 추천하고 싶지 않습니다. 원래 원서 자체가 영어권 사람들 특유의 문체이면서도 어렵게 작성되어있고 번역본은 그것을 한국적 문체로 살리지 못했기에 읽는 것이 그야말로 고역입니다.

4)의 경우에는 조금 첨언을 해야겠습니다. 이 책은 그야말로 방대한 내용을 담고 있습니다. Visual Studio의 MSDN에 해당한다고나 할까요. 하지만 Turbo C의 깊은 내용을 알아야 하는 경우가 아니라면 굳이 이 책을 사용하실 필요는 없을 것 같습니다. 이 책을 필요로 하시는 분들은 하드웨어를 직접 설계하시는 분들일 것입니다. 예를 들어서 공장 자동화 로봇의 로봇팔을 제어하는 프로그램을 코딩하여 그 하드웨어에 이식시키기를 원하는 분들, 혹은 Turbo C에서 제공하는 여러 CPU를 위한 크로스 컴파일러들에 대한 정보를 얻기를 원하는 분들에게는 Turbo C에 대한 정보가 필요하실 경우가 있을 겁니다. 그런 분들이 아니라면 이 책을 권하지 않겠습니다. 90년대 초라면 강력 추천 서적이었겠지만요... 어쨌거나 이것과 관련된 정보는 다른 전문가들을 통해서 얻으시는 것이 더 나을 것 같기에 이만 줄이겠습니다.


2. 공부하는 방법에 대한 첫 조언

자유게시판을 검색해 보시면 많은 고수분들의 공부법이 나와있습니다. 자신의 과거 경험이라든지 하는 것들도 함께요. 그것들을 살펴보면 한 가지 공통점이 있습니다. 바로,

"실습"

입니다. 모든 학문이 그렇지만 자신이 직접 문제를 해결해보지 않는다면 아무런 발전이 없습니다. 프로그래밍 분야도 그것이 매우 심한데 범람하는 문법들과 주변지식들을 모두 외우는 것이 불가능한 이상 한 번이라도 실습을 해 보아야 시간이 지난 후에 다시 보았을 때 기억이 납니다. 혹은 다른 글을 읽을 때 연관을 지을 수도 있구요. 물론 책을 통독한 후에 실습을 하겠다 하시는 것도 좋습니다. 그런 것은 개인 취향이니까요. 단지 제가 드리고 싶은 말씀은 "실습을 통해 사용해 보기 전까지는 그 부분을 안다고 생각하지 말라"라는 것입니다. 여러 챕터의 내용을 뭉뚱그려서 하나의 프로그램을 작성하는 방식을 취하든, 각각의 작은 절에 나오는 사소한 예제들을 작성해 보든 그런 것은 알아서 취향에 맞게 하시기 바랍니다.

3. C 언어의 전체적인 구성

Data Types and Dealing with Data
Operators, Expressions, and Statements
Control Flow : Looping, Branching and Jumps
Fuctions
Arrays and Pointers
Structures
Input and Output
File Input/Output

인터넷 강좌를 참조하여 나누어 본 분야들입니다. 당연한 얘기지만 C 책들의 차례를 보면 위의 내용들은 꼭 들어가 있습니다. 사실 위의 내용이 C를 구성하는 가장 중요한 문법들입니다. 책을 공부하시면서 자신이 어떤 부분을 공부하고 있는지 꼭 체크하면서 공부하십시오. 전체적인 흐름 속에서 공부하셔야 합니다. 물론 C가 완전히 처음이시라면 아무 생각없이 일단 책을 한 번 통독하는 것도 좋은 방법입니다. ^^


4. 각각의 요소를 공부하며 주의해야 하는 사항들

Data types
데이터 타입을 공부하시면서 꼭 생각해야 하는 것은 하드웨어의 메모리 혹은 레지스터 상에 저장되는 실제 모습입니다. 많은 데이터 타입들이 있지만 어쨌거나 그것들은 모두 0 아니면 1 로 된 것일 뿐입니다. 컴파일러가 컴파일 할 때 체크를 해 줄 따름이죠. 그러니 데이터의 실제 모습이 무엇인지 손으로(즉 2진 숫자로) 쓰실 수 있다면 데이터 간의 변환을 이해하는 데에 도움이 됩니다.
아주 개인적인 의견이지만 데이터의 타입이나 size 그 자체에는 큰 신경을 쓰지 않으셔도 될 것 같습니다. 대부분의 경우 자신이 자주 쓰는 타입이 있게 마련이고 컴파일러마다, CPU의 종류마다 모두 변하는 속성이기 때문이죠.

Operators, Expressions and Statements
Control Flow
Functions
그다지 어렵지 않습니다. 어떤 책을 보시든 그 책에서 언급하는 것을 잘 이해하시기 바랍니다. 사실 이 부분들은 긴 설명이 필요하지 않은데 일부 책들은 쓸데없이 내용을 불려서 설명하고 있습니다. 핵심적인 것들만 파악하고 넘어가셔도 크게 문제될 것은 없습니다. 단, 이 내용들이 비록 쉽기는 하여도 익숙해지는 데에는 연습과 시간이 필요하다는 것을 유의해 주시기 바랍니다.
한 가지 사족인데 C 언어의 문법에는 goto 라는 것이 있습니다. 옛날 C 이전의 언어들에서 필수적으로 사용하던 것인데 그 흔적이 남아있는 것이죠.(사실은 어셈블리의 jmp 명령을 매칭시킨 겁니다만...) 이 문법은 무시하시기 바랍니다. 공부하시는 것은 말리지 않겠습니다만 바로 잊어버리세요. goto를 사용해야 하는 상황이 있다면 그것은 프로그램의 구조가 나쁘다는 증거이니까요.

Arrays and Pointers
모든 사람들이 누구나 동의하는 가장 중요한 부분입니다. 무슨 일이 있어도 완전 정복을 하셔야만 하는 부분입니다. 앞서 Data types에서 데이터의 실제 모습을 항상 떠올리려고 노력하라는 말씀을 드린 바 있습니다. Arrays and Pointers는 그 데이터들이 배열된 모습과 위치를 조작하는 도구들입니다. 이것들을 완전히 이해하여야 비로소 프로그래머가 될 수 있는 가장 기초적인 지식을 얻었다고 하실 수 있습니다. 그러니 철저하게 이해하시기 바랍니다.
Array와 Pointer는 기본적으로 컴퓨터의 CPU와 Memory 사이의 데이터 표현형식 및 전달에 직접적으로 관련되어 있는 부분입니다. 따라서 컴퓨터 분야 자체가 생소하신 분들은 대부분 이 부분을 공부하시면서 어려움을 겪게 됩니다. 하지만 끈기를 가지시기 바랍니다.
특별히 공부하시는 방법을 알려드리긴 어렵겠습니다. 책의 챕터 뒤에 나와있는 배열 및 포인터 관련 문제들을 남김없이 풀어보시고 틀린 부분이 있으면 꼭 다시 내용을 확인하여 습득하시라는 말 밖에는... 통신상의 여러 질답란의 포인터 관련 내용들을 이해해 보려고 노력하시는 것도 도움이 될 듯... 이 부분과 관련된 좋은 책으로 '성안당'에서 나온 'C 포인터 정복'이라는 책이 있습니다. 사실 배열과 포인터는 일단 이해하고 나면 전혀 어렵지 않은 것이지만 설명하기는 쉽지 않기 때문에 이런 책도 나온 것 갈습니다. 단시간에 배열과 포인터를 정복하고 싶으시다면 위의 책을 구하셔서 하루나 이틀 정도 이 책에만 매달리시면 충분히 이해하고도 남을 겁니다. 단,,, 위 책은 상당히 옛날 책이기 때문에 절판되었을 가능성이 좀 있네요... ㅡ.ㅡa
이 부분을 완전히 이해하고 나면 함수(Function)의 인자로 포인터가 넘어갈 때와 변수값이 넘어갈 때를 구분하실 수 있으셔야 합니다. 그리고 '&'와 '*'의 사용법에도 주의하셔야 하구요. 굳이 첨언하자면 '&'와 '*'는 선언(Declare)할 때와 사용(Expression)할 때의 의미가 각각 서로 반대입니다.(C++에서도 마찬가지...) 무슨 말인지는 직접 공부하시면서 익히시길...

Structures
역시 아주 중요합니다. 기본적인 Data type들을 하나의 주머니에 넣어 한꺼번에 사용하게 만드는 것이 '구조체(Structure)'인데 나중에 C++과 같은 객체지향 언어의 클래스 개념의 기초가 되는 개념입니다. 이 것을 공부하실 때에도 Data type을 공부할 때처럼 실제로 데이터들이 어떤 식으로 배열되어 있는지, 크기는 어떻게 될 것인지를 생각하시면서 공부하시면 도움이 됩니다. 하지만 그런 것들을 생각하면서 공부하는 것이 Data types에서만큼 중요한 것은 아니므로 단순히 사용법만 아셔도 되겠습니다.(물론 하드웨어 제어를 위해 C 언어를 공부하시는 분이라면 무조건 아셔야만 합니다. 덤으로 bit-field 같은 것도 아셔야겠죠.)

I/O, File I/O
이 부분은 처음부터 너무 깊게 공부하실 필요 없습니다. 초보자에게는 어려운 내용이 별로 필요가 없거든요. 사용법들 중 간단한 것들만 실습해 보는 정도로도 충분할 겁니다. 고수준의 I/O는 필요할 때 공부하십시오.

5. 어떤 컴파일러를 사용하여 공부해야 하나?

Turbo C 1.0, 2.0, 2.1 etc...
Borland C++ 3.0, 3.1, etc...
둘 다 볼랜드 사에서 나온 도스(DOS)용 컴파일러 입니다. 인터넷에 불법으로 돌아다니는 것들이 있다고 하더군요. 구해서 공부해 보시길... 한글 번역본 중에 부록으로 들어있다고도 하구요. 설치 후 bin 폴더 안의 TC.exe를 실행시키면 됩니다. Borland C++에서는 파일 확장자를 .c 로 해 주어야 C 언어를 사용했다고 생각하고 컴파일합니다.(C++의 경우에는 확장자가 .cpp여야 합니다.)

Visual C++
아주 좋습니다만 처음 사용하는 분들이 프로그램을 시작해 보면 도대체 어디부터 손을 대야 하는지 모를 수 있습니다. 하지만 이것 밖에는 방법이 없다!라고 하신다면 능력껏 컴파일 방법을 알아내시기 바랍니다. 별로 안 어려워요. ^^

GCC, G++
리눅스를 사용하시는 분이라면 당연히 이 컴파일러를 사용하셔야죠? Development tools 패키지에서 관련 파일들을 설치하셔야 사용하실 수 있습니다. Turbo C 나 Visual C++ 같은 통합환경이 아니고 명령줄에서 실행하는 것이라는 점에 유의하세요. 이를테면, Xterm을 띄워두고
$ gcc test.c
처럼 하시면 됩니다. 확장자가 .c 이면 C 언어이고 .cpp 혹은 .cc 이면 C++입니다.
리눅스를 사용하여 C를 공부하려면 에디터 사용법을 알아야 합니다. 옛날이라면 VI나 Emacs를 적극 추천했을텐데 요즘 래드헷 패키지를 보면 단순하고 윈도 기반 에디터들도 있더군요. 취향에 맞는 것을 사용하시기 바랍니다.

Borland C++ 5.5
볼랜드 사에서 다운로드 받을 수 있는 C/C++ 컴파일러입니다. 볼랜드 사의 코어 컴파일러로서 가장 최근의 ANSI C/C++(표준)을 완벽하게 지원합니다. 단, DOS용이면서도 Turbo C 같은 통합환경을 제공하지 않으며 gcc/g++과 같이 명령행에서 실행해야 합니다. 사용방법은 gcc/g++과 거의 동일합니다. 개인적인 의견입니다만 이 컴파일러가 상당히 맘에 들더군요. 실제 상용 프로그램을 작성하는 것은 불가능하지만 숙제를 한다던가 공부를 할 때에는 아주 그만입니다. 그리고 여기에 더해서 Turbo Debugger라는 놈이 따라옵니다. 이것은 Turbo C++과 같은 통합환경을 제공하는 디버거인데 Turbo C++에 익숙하신 분들은 전혀 사용에 지장이 없을 겁니다.


6. 공부방법에 대한 두 번째 조언: 전체적인 공부의 흐름

대부분의 C 책을 펼쳐보면 "Hello, World!" 를 출력하는 셈플 코드를 가지고서 설명을 시작합니다. C를 처음 접하시는 분이라면, 그리고 아직 한번도 컴파일을 해 본 적이 없는 분이시라면 반드시 이것을 컴파일하여 화면에 출력시켜 보시기 바랍니다. 그것이 제대로 된 시작입니다. 프로그램의 작성, 컴파일러를 사용한 컴파일, 프로그램의 실행이라는 3단계를 무사히 마칠 때까지 실패의 원인을 분석하셔야 합니다. 그래야 나중에 실습을 제대로 할 수 있게 될 테니까요. 만약 지금 컴퓨터가 없다면 별 수 없지만 단지 컴파일러가 없어서 못하겠다...라고 하시는 것은 변명이 되지 않습니다. 즉시 인터넷에서 적절한 컴파일러를 구하여 설치하고 사용하십시오. 그런 후에 공부를 진행하세요. 컴파일러의 사용법을 모두 아실 필요도 아직은 전혀 없습니다. 단지 위의 것을 컴파일하고 실행하는 것만 성공시키세요.

그런 후에 주요 내용에 대한 공부와 실습을 병행하십시오. 이것은 취향에 따라서 하실 수 있을 테지만요. 공부하실 내용은 위에 언급한 주제들입니다. 그리고 실습을 하다보면 컴파일러 사용법에 점차 익숙해질 것입니다.

공부가 한 번 끝나셨다면 마지막 점검을 하셔야겠네요. 혹시 위에 추천된 책들 중에서 1)을 가지고 계시지 않다면 그 책을 사셔야 할 때가 된 것 같습니다. 그리고 그 책의 첫 장(Introduction)을 읽어보십시오. 꼼꼼하게. 이 책의 Introduction에는 C 언어에 대한 전반적인 소개와 중요 개념들이 대부분 언급되어 있습니다. 만약 모두 이해가 가신다면 C 언어의 세계에 성공적으로 들어오신 겁니다.

그런 후에는 간단한 프로젝트를 하나 설계해 보십시오. 윈도 프로그래밍이 아니라 텍스트 모드에 기반한 아주 간단한 것으로요. 그렇지만 많은 분들이 이런 것 생각하시는 것을 귀찮아 하신다거나 혹은 전혀 그 방향을 잡지 못하는 분들도 계시기에 한 가지 예를 들어보자면 이런 것이 있을 수 있겠습니다.

문) 최대 5명의 이름과 전화번호, 메일주소를 입력받아 저장하고 선택적으로 지울 수 있으며 자료의 정렬이 가능해야 한다. 데이터의 저장 공간은 구조체의 배열을 사용하든, 저장 영역을 생성/소멸 시키든 관계없다.

간단하죠? 텍스트 기반으로 만드는 것이므로 코드는 길지 않습니다. 300-500라인 사이면 되지 않을까 합니다. 텍스트 기반이라고 하여도 만약 사용자 인터페이스를 멋지게 만들고 싶다면 조금 더 길어질 수도 있겠죠. 위의 문제를 나름대로 발전시켜서 30명 정도의 정보를 저장할 수 있는 괜찮은 전화번호부를 만들 수도 있을 겁니다. 의욕이 닿으신다면 File I/O의 기본적인 내용을 적용하여 전화번호부를 저장하는 것도 생각할 수 있겠네요. 여기에다 적당한 인터페이스를 더하면 헨드폰의 전화번호부를 설계하신 것이 됩니다.

어쨌거나 중요한 것은 모든 것이 프로그램 작성자의 상상력과 노력에 달려있다는 겁니다. 반드시 간단한 프로젝트를 하나 해 보시기 바랍니다. ^^

7. 그 외의 것들

어느 사이엔가 여러분은 C에 익숙해져 있을 겁니다. 이제는 좀 더 심화된 내용들을 살펴봐야 할 것 같습니다. 이와 관련된 내용들은 많은 분들의 의견이 일치하지 않을 것으로 보입니다만 당장 생각나는 것들만 몇 개 나열해 보겠습니다.

헤더파일의 고급 사용법
리눅스나 Borland C++ 5.5를 사용할 경우 makefile을 작성하는 방법
C를 사용하여 OOP적인(혹은 모듈화된) 프로그램을 작성하는 방법
C에서 사용되는 각종 표준 메크로들
Port I/O (Hardware interface)

앞의 네가지는 아주 밀접한 관계를 가지고 있습니다. 헤더파일의 고급 사용법은 대규모 프로그래밍에서 필수적으로 사용하게 되는 모듈화된 프로그래밍에서 중요한 역할을 합니다. 그다지 많지 않은 내용이지만 잘 익혀두시면 나중에 편합니다.
그리고 헤더파일의 고급 사용법을 익히면서 꼭 만나게 되는 것들이 바로 메크로입니다. 역시 중요한 것들을 꼭 익혀두시길 바랍니다. 쓸데없는 메크로도 많고 중요하지만 초보에게는 그다지 쓸모없는 것들도 많습니다. 그런 것들을 굳이 구분하실 필요는 없으며 일단 한 번 읽어보고 '이런 것이 있구나'하는 정도로 이해하고 넘어가시면 됩니다. 나중에 필요할 때 들춰보면 되니까요.
makefile 이 뭔가 궁금하신 분들이 있을 겁니다. 이것은 프로그램 파일들이 많아질 경우 파일들 사이의 의존 관계 등을 작성해 두는 파일입니다. 그러면 make라는 유틸리티를 사용하여 자동적으로 컴파일을 할 수 있게 됩니다. 각종 의존관계를 생각하며 컴파일 할 필요가 없다는 거죠. Visual C++이나 Borland C++ Builder, Delphi 등등은 모두 기본적으로 make라는 유틸리티와 비슷한 것을 사용하고 있습니다. 단지 그것을 자동적으로 생성하여 사용자들이 생각할 필요가 없게 해 줄 뿐이죠. 리눅스나 볼랜드 코어 컴파일러를 사용할 때 makefile을 사용하는 방법을 익혀 두신다면 도움이 될 때가 있을 겁니다.
끝으로 Port I/O에 관련된 것인데 이것은 컴파일러마다 다릅니다. 필요한 자료는 하드웨어 동호회 같은 곳에서 구하실 수 있을 겁니다. 여기에 관련된 내용은 C의 하드웨어 제어와 직접적으로 연관된 부분들이기 때문에 C 문법과는 전혀 다른 새로운 부분이라고 할 수 있으며, 공부하길 원하시는 분들은 아마도 이미 어셈블리 언어에 대한 이해 혹은 컴퓨터 구조에 대한 이해를 하고 계신 분들이라 생각됩니다. 그러니 더 이상의 설명은 필요없겠죠? ^^;

그 외에도 많겠지만 필요할 때마다 알아서 적당히 공부하시기 바랍니다. ㅡ.ㅡ;

8. 마지막 첨언

여러분께서 영어로 에세이를 하나 작성한다고 생각해 보시기 바랍니다. 기본적인 영문법은 익힌 상태라고 가정하죠. 그러면 이제 단어가 문제가 될 것입니다. 표현하고 싶은 것이 있어도 영어 단어를 모른다면 아무런 소용이 없겠지요.
이번에는 영어로 된 글을 읽는다고 생각해 보시기 바랍니다. 이제는 단어도 문제이지만 뉴앙스도 문제가 될 겁니다. 글을 쓰는 사람의 의도가 담긴 뉴앙스를 모르면 이해가 어렵게 될 겁니다. 그리고 문법도 또 다시 문제가 됩니다. 직접 글을 쓸 때에는 아는 문법을 짬뽕해서 사용해도 어떻게 적당히 표현이 가능하지만 글을 읽을 때에는 작성자가 사용한 문법 중 모르는 것이 있으면 이해가 처음부터 불가능하게 됩니다. 단어야 사전을 뒤져서 이해한다고 쳐도요...
마지막으로 글을 쓰는 방법을 살펴보죠. 워드를 열고 글을 쓰시려면 계획도 세우고 뼈대를 잡은 후에 글을 쓰고 다 쓴 후에는 퇴고의 과정을 거칩니다. 프로그램의 사용법을 잘 아셔야겠죠?

1에서 소개된 책을 공부하셨다면 여러분은 "문법"만을 공부하신 셈이 됩니다.

여러분께서 C언어로 프로그램을 작성하다고 생각해 보시기 바랍니다. 기본적인 문법은 익힌 상태겠지요. 그러면 이제 라이브러리 함수가 문제가 될 것입니다. 구현하고 싶은 기능이 있어도 필요한 함수를 작성 못하거나 어떤 함수가 있는지 모른다면 아무런 소용이 없을 것입니다.
이번에는 C로 작성된 프로그램을 읽는다고 생각해 보시기 바랍니다. 라이브러리 함수도 문제지만 프로그램의 흐름과 스타일도 문제가 될 겁니다. 작성자의 흐름이나 스타일을 모르면 이해하기 어려울 것입니다. 그리고 문법도 또 다시 문제가 됩니다. 직접 프로그램을 작성할 때에는 아는 문법을 짬뽕해서 사용해도 어떻게 적당히 작성이 가능하지만 남의 것을 읽을 때에는 작성자가 사용한 문법 중 모르는 것이 있으면 이해가 처음부터 불가능하게 됩니다. 라이브러리 함수야 메뉴얼을 뒤져서 이해한다고 쳐도요...
역시 마지막으로 프로그램 작성 방법을 살펴보죠. 프로그램을 작성하시려면 디자인을 하여야 하고 프로그래밍을 모두 쓴 후에는 디버깅과 평가의 과정을 거칩니다. 당연히 프로그래밍 툴에 대한 이해를 잘 하셔야하겠지요.

이렇게 보면 중요한 요소들이 나타나게 됩니다. 문법, 라이브러리 함수, 프로그램의 흐름과 스타일, 작성 툴의 사용법 익히기. 여러분은 각 요소들의 가장 기초적인 부분을 끝낸 상태입니다. 이제 실제 프로그래밍을 하면서 살을 붙이고 경험을 쌓아나가며 노하우를 축적하여야 합니다. 이것들은 영어공부를 하는 것과 마찬가지로 노력이 없으면 불가능한 것이겠죠. 여러분의 앞길이 순탄하길 바랍니다. 이 정도에서 첫 가이드를 마치도록 하겠습니다.


참고) 각각의 중요한 요소들에 대한 첨언입니다.

(1) 문법: "The C programming Language"를 구하셔서 Introduction이 잘 이해가 가는지 확인하신 후에 짬이 나실 때마다 부족하다 생각되는 부분을 찾아서 읽으십시오. 책이 어렵기는 하지만 굉장히 압축적으로 써있기 때문에 몇 줄 읽지 않고서도 생각할 것이 많습니다. 곰곰이 생각해보는 과정에서 얻는 것이 많을 것입니다. 이 책의 주옥같은 문제들도 풀어보시면 금상첨화.

(2) 프로그램의 흐름과 스타일: 스타일이란 프로그래밍 컨벤션에 대한 공부를 조금 하면 금방 이해가 가실 겁니다.(공부할 것도 별로 없지만...) 프로그램의 흐름은 프로그램의 종류나 목적마다 많이 다르므로 많이 작성해보고 많이 읽어보면서 이해하셔야만 합니다. 물론 좋은 흐름을 창조하는 방법을 많이 연구해야 함은 물론입니다. 이와 관련된 내용이 바로 "소프트웨어 공학"이라는 분야입니다. 관련 내용을 검색해 보시기 바랍니다.

(3) 라이브러리 함수: 윈도 API나 리눅스의 glibc, winsock 혹은 여러분이 직접 만든 함수들의 집합을 말합니다. 실제 상용 프로그램 수준의 프로그래밍을 하게 되면 이런 라이브러리들을 공부하고 사용할 수밖에 없으며 자신만의 라이브러리를 축적하는 것도 매우 중요합니다. 하지만 윈도 API나 glibc같은 것을 사용하는 것은 따로 시간을 내셔서 차근차근 공부하셔야 합니다. 이것은 문법과는 다른 "단어"의 문제이기 때문입니다. C 언어를 공부하였다고 해서 네트워크 프로그래밍을 할 수 있는 것은 아니지 않겠습니까? 꾸준히 필요한 부분을 공부하시는 것이 가장 좋은 방법일 것입니다.

(4) 툴: Rational Rose(설계 툴), Visual Studio, Turbo C++, Borland C++, GCC, Make utility, 등등... 필요한 것들을 선택하여 일단 하나를 어느 정도 숙지하세요. 특히 컴파일러의 경우에는 디버깅 툴 사용법을 잘 익혀 두시기 바랍니다. (개인적인 생각이지만(그리고 많은 분들이 동의하시지만) 전 디버깅의 실력이 진짜 실력이라고 봐도 무방하다고 생각하거든요.)
Solaris의 가장 특징 중의 하나가 클라이 언트-서버의 환경을
구축하는데 가장 적합하다는 것이다. 이는 분산 시스템과 여러
사용자가 동시에 여러 개의 업무를 수행 할 수 있게 해줌을
의미하며,다르게 보면 네트워크를 통해 구축이 되는 전산
시스템에 아주 적합함을 의미하기도 한다. 클라이언트/서버
환경을 쉽게 표현하면 서비스의 요청과 이에 응대하는 역할
분담이 정의가 되어지는 것이다. 이러한 환경이 구현이 되어
멀티 태스킹(Multitasking), 멀티유저(Multiuser),
분산처리(Distributed processing)가 가능하게 해준다
.

멀티 태스킹(Multitasking)이란 호스트에서 하나 이상의 프로세스 또는 애플리 케이션이 동시에 사용되어지는 것을 의미한다. 예를 들면, 프린팅 하는 프로세스가 현재 수행 중이더라도, 사용자는 자신의 프로그램을 실행을 시킬 수 가 있다.

멀티 유저(Multiuser)란 호스트의 같은 재원을 하나 이상의 유저가 동시에 사용이 가능함을 의미한다. 예를 들면, 하나의 시스템에 여러 명의 사용자가 동시에 telnet으로 연결하여 시스템의 재원을 사용 할 수 있다.

이와 같이 UNIX 시스템은 멀티 태스킹과 멀티 유저를 통해 하나의 사용자가 여러 개의 프로세스를 수행시킬 수 있고, 이러한 사용자가 시스템의 용량에 따라 수많은 프로세스를 수행시킨다. 이러한 특징이 UNIX 시스템을 많이 사용하고 있는 이유이기도 하다.

Solaris는 이러한 멀티 태스킹(Multitasking)과 멀티유저(Multiuser) 환경을 네트워크를 통해 아주 쉽게 구현이 되도록 해준다. 네트워크의 설정 뿐만 아니라, 리모트(remote) 서버에 접근하는 방법까지 아주 다양한 솔루션(Solution)을 제공한다. 예를 들면, NFS 서버, 인터넷을 연결해 주는 프락시(proxy) 서버, TCP/IP를 기반으로 하는 다양한 프로그램에 대해 지원을 해준다. 경우에 따라서는 OS서버를 구축하여 네트워크를 통해 OS를 제공하기도 하고, 심지어는 local 서버에 있는 데이터를 제공하는 서버도 쉽게 구축할 수 있다.

Distributed process(분산처리)란 네트워크를 통해 서로의 재원을 사용이 가능하다. 즉, 각각의 호스트에서 전체 업무를 수행하는 것이 아니라, 각각 분담하여 처리가 가능하게 해준다. 서로 협조하여 동작하는 복수의 컴퓨터로 이루어 지는 시스템이며, 복수의 프로세서(processor)에 의해 1대의 컴퓨터를 구성하는 다중 프로세서와는 구별된다. 이렇게 쉽게 구현이 되는 네트워크를 통해 솔라리스는 클라이언트 - 서버 컴퓨팅 환경을 아주 쉽고, 편하게 접근이 이루어 지게 해준다.

[그림 1-3]을 보면 하나의 네트워크를 통해서 서비스를 요청하는 클라이언트와 여기에 응답하는 서버를 보여 주고 있다. 그림을 보면 하나의 클라이언트가 서버에 연결되어 있는 프린터를 사용하고 싶을 경우, 클라이언트는 프린터를 가지고 있는 서버에게 해당 재원을 사용할 것을 요청한다. 서버는 재원에 대한 모든 책임과 권한을 가지고 있으므로, 해당 재원이 사용하는데 아무런 이상이 없다면 클라이언트가 재원을 사용할 수 있는 환경을 제공해 준다. 그러면 클라이언트는 프린트 하고자 하는 내용을 프린터를 가지고 있는 서버를 경유하여 해당 내용을 출력할 수 있다. 이러한 구성도가 클라이 언트 - 서버의 가장 일반적인 형태이다.


[그림 1-3] Clianr-Server 구성 예

[그림 1-3] Clinet-server 구성 예


앞으로는 UNIX의 구성도를 보면 이러한 클라이 언트 - 서버 구성도를 생각하면 시스템을 이해하는데 많은 도움이 될 것으로 본다. 아래의 그림은 두 대의 서버가 어떤 업무에 대해서 분산 처리함을 설명하기위해 보여준다.



[그림 1-4] 분산처리

[그림 1-4] 븐산 처리


server 1은 데이터 베이스(Database) 관리 서버이고, server 2는 클라이언트 요청에 응답을 해주는 서버이다. 어떤 A라는 유저가 서울에 있는 송파구의 우편 번호를 요청했다고 하자. 이때 server 2는 A라는 유저로부터 우편번호에 대한 요청을 받아서 이를 server 1에 넘겨준다. server 1은 요청된 내용에 대해 우편번호를 찾아서 그 결과를 server 2에 전달을 해주면 server 2는 A라는 사용자에게 대답을 해주게 된다. 물론 한 서버에서도 구현이 되지만 위와 같이 하게 되면 각각의 서버에 주어지는 부하가 많이 감소되고, 안정적이고 효율적인 서버 운영이 가능해 진다.


다음은 솔라리스를 통해 구현이 가능한 서버의 종류를 나열한 것이다.

파일 서버(file server)
디스크에 저장되어 있는 파일들을 네트워크상의 다른 호스트가 사용이 가능하도록 분배(share).


NIS+(or NIS) 서버
NIS+(Network Information Service Plus)(or NIS) 데이터베이스를 클라이언트에게 제공한다.


프린터 서버(printer 서버)
네트워크상의 다른 호스트들에게 자신이 가지고 있는 프린터(=로컬 프린터(local printer))를 사용 가능하게 해준다.


메일 서버(mail server)
전자 메일이 가능하게끔 자원을 해주는 서버이다.


도메인 네임 서버(DNS:Domain Name Server)
인터넷이 가능하도록 도메인(domain)을 지원해 주는 서버이다.


데이터베이스(DB:DataBase) 서버
모든 데이터를 관리해주는 서버이다.


이와 같이 어떤 서비스를 제공하는 모든 호스트나 프로세스를 서버(server)라고 표현한다. 이 외에도 운영하고자 하는 용도나 시스템의 구성에 따라 서버의 형태가 달라질 수 있다.



다음의 그림은 TCP/IP 네트워크에서 ftp를 서비스하는 것을 보여 주고 이다. 시스템 B는 ftp를 서비스 하는 서버이고, 시스템 A는 ftp를 요청하는 서버 또는 클라이언트이다.


[그림 1-5] ftp 서버 구성의 예

[그림 1-5] ftp 서버 구성의 예



먼저 시스템 A가 시스템 B에게 ftp접속을 요청했다. 이때 시스템 B는 ftp 서비스를 하기 위해 21번 포트만을 열어 놓고, 연결 요청을 기다리고 있다가, 시스템 A에서(클라이언트) 연결 요청이 들어오면 20번과 21번 포트번호를 가지고 2개의 연결을 맺는고 서비스 할 준비를 한다. 21번과 관련된 연결은 모든 명령(comm. -and)과 관련된 데이타가 전송되고, 20번으로는 실제 파일내용이 전송된다. 시스템 B에서는 네트워크 관련 서비스를 위한 데몬들을 관장하는 것이 있는데 이를 inted 데몬이라 한다. 그림 처럼 ftp나 telnet등의 서비스 요청이 들어 오면 관련 데몬을 fork하여 요청하는 클라이언트에 대해 응답을 하도록 해준다. ftp의 경우에는 ftpd 라는 데몬이 inetd에 의해 fork되어 서비스 한다.

네트워크를 통해 분산처리가 이루어 지는 것은 대표적으로 NFS(Network File System)기능이 있다. 네트워크에 있는 다른 서버나 클라이언트가 사용이 가능하도록 자신이 가지고 있는 재원을 네트워크에 띄운다. 이를 서버측에서는 'share'한다고 표현한다. 클라이언트에서는 share된 재원을 마치 자신의 것처럼 사용한다. 예를 들면, 사용 가능한 경우는 local적으로 CD-ROM 드라이브가 없다고 하자. 이럴 경우 네트워크를 통하여 CD-ROM 드라이브를 가지고 있는 시스템에서 share를 해 놓으면, 필요한 클라이언트는 이 CD-ROM을 마치 자신의 시스템에 장착이 되어 있는 것처럼 사용할 수 있다. 그리고, 서버에 집중되어 있는 유저들을 관리하는 NIS/NIS+(Network Information Service Plus)기능을 가지고 있다.

서버의 네트워크를 구성하는 하드웨어적 요소인 이더넷(Ethernet)을 통해 TCP/IP라는 프로토콜을 이용하여 UNIX시스템들은 원격지 서버로의 로그인(remote login), 원격지 서버에서 명령어의 실행(Remote command execution), 원격지 서버로 또는 서버에서 파일의 카피(Remote file coopying), 원격지 서버에 연결되어 있는 프린터로 출력(Remote printing), 원격지 서버에 연결되어 있는 백업 디바이스로 백업 받기(Remote backup),

서버 사이에서 전자 우편 보내기(Electronic Mail)등의 원격지로의 다양한 방법의 접근(Remote access)이 가능하게 해준다. 특히, 원격지 서버에 있는 파일을 공유하는 방식은 솔라리스의 가장 큰 특징 중에 하나이다. 이를 통해 NFS 밑 NIS/NIS+ 등의 환경 구축이 가능하게 되었다.

'solaris' 카테고리의 다른 글

solaris9 + tomcat6 + apache2.2  (0) 2008.01.08
솔라리스9 + sendmail + 버클리db + qpopper 설치  (0) 2008.01.02
솔라리스 SWAP / swap  (0) 2007.09.03
솔라리스 10의 주요 기능  (1) 2007.08.27
솔라리스 SSHD  (0) 2007.08.22

http://www.ubuntu.com/ 우분투.

http://www.ubuntu.or.kr/wiki.php/MainPage 설치 참고 문서

http://ftp.kaist.ac.kr/pub/ubuntu-cd/6.06/ 라이브CD 다운로드


우분투'의 장점

* 빠르고 간편한 설치.

* VNC, SMB등 기본 지원

* 라이브 CD

* UTF-8 기본지원

* 잘 정리되고 체계화된 시스템

* FireFox, Opera 지원

* 실용적인 패키지 검색과 설치


우분투'의 단점

* sudo


1.

http://ftp.kaist.ac.kr/pub/ubuntu-cd/6.06/ubuntu-6.06-desktop-i386.iso 데스크탑용 라이브CD'를 다운 받습니다.


2.

다운받은 iso파일을 네로'버닝등의 툴로 이미지' 굽기를 사용 CD로 굽습니다.


3.

라이브 시디'를 구웠다면, 재부팅후 시디를 넣어 부팅'을 합니다.

첫 화면에서 1~4까지의 선택화면이 나오는데, 2번을 선택합니다.

1번을 누르면 Kernel Uncompressed화면이 뜨면서 멈출수가 있습니다.


4.

라이브 CD는 하드에 OS'가 없어도 CD와 메모리'만으로 OS가 구동되는 것을 말합니다.

라이브 CD는 OS를 메모리에 올리기 때문에 시작하기까지 조금 오래 걸립니다.

화면이 뜨면 왼쪽 위에 아이콘 2개가 있습니다.

아래쪽 install 버튼을 누르시고 설치에 들어갑니다.

한글설정과 파티션 설정을 하게되면 설치가 완료 됩니다.

설치 완료후 시디가 자동으로 빠지면, 리부팅이 됩니다.


5. 이제 데비안 우분투'의 설치는 완료 되었습니다.

APM을 설치해야겠는데.... 이분이 잘 정리 해놓으셨습니다.


* http://www.gosinga.net/archives/243 데비안 리눅스 설치 - 한글이 설정방법도 있으니 참고하시기 바랍니다.

또는

* http://inertia.hanyang.ac.kr/~gaegol78/moniwiki/wiki.php/APM 데비안 패키지로 APM 설치하기 - 여기서 mysql쪽에서 좀 막히더라도 있는거 다 쳐보시기 바랍니다.


둘 중 하나를 보시고 ㅇ_ㅇ'''' 설치하시기 바랍니다.


우분투'는 APM을 설치하면 프로그램이 자동으로 실행된다는 사실 ㅇ_ㅇ''''

Apache의 리스타트 방법은 apache2ctl restart 입니다.

루트 권한'이 필요하므로 sudo apache2ctl restart 해야합니다.

설치되는 버젼은 Apache/2.0.55 (Ubuntu) PHP/5.1.2 Mysql 5.0.22 으로 알고 있습니다.

따로 원하는 버젼을 설치하셔도 되는데 방법은.

http://blog.naver.com/kkyboy/140023867885 데비안 패키지 관리 apt 명령어

를 참고하시기 바랍니다.
예를 들어본다면.

sudo apt-cache search php5 를 하면 php5를 source list가 있는 서버에 접속해서 다운후 설치합니다.

sudo apt-get install php5 를 하면 php5를 source list서버에 접속해서 다운후 설치합니다.

sudo apt-get install apache2 를 하면 apache2를 source list서버에 접속해서 다운후 설치합니다.

sudo apt-get install ssh 를 하면 ssh를 source list서버에 접속해서 다운후 설치합니다.


6.

모든 설치가 완료되었습니다.

php로 인자값이 제대로 넘어가기 위해서는

* post, get 방식의 인자값이 넘어갈때 $_POST[xx], $_GET[xx], $_FILES[xx]등을 사용하세요

파일의 값이 제대로 넘어가기 위해서는

session_save_path('폴더');

session_start(); 를 하시기 바랍니다.


세션'설정에서 폴더'권한때문에 문제가 생기는 경우도 많습니다.

유저권한

sudo chown 사용자ID:사용자ID 파일 또는 폴더명 -R

-R은 하위 디렉토리 포함입니다. 예를 들면.

sudo chown shint:shint * -R 는 현재 디렉토리를 포함한 모든 파일과 폴더는 shint 유저것입니다.

sudo chown shint:shint public_html 은 public_html폴더(파일)을 shint유저로 바꿉니다.

쓰기읽기등의 권한

sudo chmod 777 * -R 현재 파일과 디렉토리이하 모두를 쓰기 읽기등이 가능하도록합니다.

sudo chmod 777 public_html 은 public_html폴더(파일)의 쓰기 읽기등이 모두 가능하도록합니다.


7.

* VNC를 사용하실분은 System - Preferences - Remote Desktop 을 실행하시기 바랍니다.

* 네트워크 셋팅은 System - Administration - Networking 을 실행해서 사용하시기 바랍니다.

* http://blog.naver.com/stekilove/50003160144 Linux Ubuntu FTP서버 설치 및 환경 설정

  여기서 sudo /etc/init.d/proftpd restart 중 proftpd를 vsftpd로 수정'해야합니다. 오타'죠.



[ 질문 ]

ㅇ_ㅇ''' 아 제가 모르는게 있는데요.

UTF-8로 OS셋팅도 되있고, MySQL도 UTF이고 아파치도 UTF인데 한글파일을 다운받으면....

한글이 깨져서요.

해결 방법중에

* mod_url.c를 컴파일 하는법' 컴파일 소스'나 패키지를 못구했어요.

http://webdav.todo.gr.jp/ 일본사이트'중에 이곳이 mod_url을 하는거 같은데 방법은 모릅니다.

* urlencode, urldecode같은 방법이나 iconv("EUC-KR","UTF-8")를 사용해도 않되더군요.


아시는분 댓글'점 달아주시기 바랍니다.


http://blog.naver.com/post/postView.jsp?blogId=rekcuf&logNo=140014767695&categoryNo=13&viewdate=&cpage2=1&cpage=1 PuTTY 에서의 한글 출력, 입력
http://www.gosinga.net/archives/243 데비안 리눅스 설치(한글설치포함)

데비안관련 참고 사이트 모음
http://blog.naver.com/canshu/150006674757 XBOX(R)에 데비안 설치 (XBOX관련 볼것 많음)
http://www.superuser.co.kr/linux/doly/apm_install/apm_install.htm 리눅스 apm설치하기
http://debianusers.org/jsboard/read.php?table=qna&no=19535&page=256 한국 데비안 사용자모임
http://www.debian.or.kr/wiki.php 한국 데비안포럼

데비안 한글사용법
http://debianusers.org/jsboard/read.php?table=qna&no=27656&page=62
http://blog.naver.com/gominy/80018133342
http://blog.naver.com/gominy/80018141495
http://blog.naver.com/hwknoc/130006212335
https://help.ubuntu.com/community/KoreanSetupHowto 한글설정
https://help.ubuntu.com/community/BeautifyKoreanFonts 아름다운 한글
http://www.ubuntu.or.kr/wiki.php 한국 우분투 포럼
http://blog.naver.com/ssam3004/60026041693 데비안 설치 가이드
http://www.gnome.or.kr/goklive/ 그놈 한국 라이브CD
http://blog.naver.com/chuchinhwan/40012735913 [Ubuntu] Hoary - 우분투 리눅스 설치 가이드
http://news.naver.com/news/read.php?mode=LSD&office_id=092&article_id=0000008307§ion_id=105&menu_id=105 「우분투 리눅스」핵심개발자에게 듣는「완벽 설치가이드」
http://kin.naver.com/db/detail.php?d1id=1&dir_id=10202&eid=7z1umt0o5JcgkBQIdz1Ijej0iWzKDlfq 가볍게 쓸만한 리눅스 알려주세요!!
http://kin.naver.com/db/detail.php?d1id=1&dir_id=10202&eid=n6wxkQks2pBnhI9dbZaAhe9bedXR+zsK 리눅스 설치
http://kin.naver.com/db/detail.php?d1id=1&dir_id=10202&eid=pUQsllsQv01nS2RPQbf/WSgxBWQCTSuc 우분투 리눅스 설치할 때 부팅 시디 만드는 방법
http://omnimook.pe.kr/tt/index.php?pl=54&ct1=1 ubuntu 설치하기
http://cafe.naver.com/fire3.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=2899 컴자료- Live CD Linux , knoppix, ubuntu, slax
http://www.linuweb.com/linuweb/beginner/read.html?idx=11&lidx=45 데비안의 새옷 '우분투'
http://blog.naver.com/vegabook/130002131714 Ubuntu 시작
http://blog.naver.com/hwknoc/130006212335 우분투 한글 설정
http://www.omegatower.com/library/ubuntu-warty-on-vmware.htm 우분투 VMware 설치
http://blog.naver.com/ikariksj/140024963956 ctags & cscope 설치 및 사용



[ UTF8 사용때문에 phpmyadmin, mysql, DB dump가 모두 깨지는 현상때문에 하루정도 고생했다. ]

답을 찾았는데 방법은 아래 사이트와 자료를 참고했다.

1. mysql -u root -p

show variables like 'c%'; 로 확인한다.

vi /etc/mysql/my.cnf 의 내용을 변경하고

mysql -u root -p reload

mysqladmin -u root -p --default-character-set=utf8 DB명 > SQL파일명  로 백업한다.

2. DB의 생성은 이렇게 한다.

set names utf8;

CREATE TABLE `freeboard` (
  `num` int(11) NOT NULL auto_increment,
  `title` varchar(100) default NULL,
  `comment` text,
  `id` varchar(20) default NULL,
) TYPE=MyISAM DEFAULT CHARSET=utf8;

3. 모두 했으면 마지막으로 @mysql_connet전에 한줄 적어준다.

@mysql_query("set names utf8");

@mysql_connet()

4. 완료!! 성공기념 스샷!! 과 기쁨의 아놔!! 두번!!


참고 사이트모음

http://cafe.naver.com/photo1448/111 우분투 APM설치 (잘되있슴)
http://cafe.naver.com/praying4u/86 같은 내용 ㅡ_ㅡ;;;
http://debianusers.org/DebianWiki/wiki.php/apache/tip 아파치에 한글 페이지 잘 뜨게 하기/ Port 기반 아파치 버추얼 호스트
http://database.sarang.net/?inc=read&aid=24971&criteria=mysql&subcrit=columns&id=&limit=20&keyword=&page=1 utf8 환경으로 자료 conversion 성공기
http://blog.naver.com/daehyun5291/80016029784 MySQL 4.1.x 문자셋, 인코딩, UTF-8
http://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=tipntech&wr_id=43074&sca=&sfl=wr_subject%7C%7Cwr_content&stx=phpmyadmin+utf&sop=and Fedora 4와 UTF8 따라잡기
http://sir.co.kr/bbs/board.php?bo_table=g4_tiptech&wr_id=2497 utf-8 사용시 설정 - db의 입출력을 완벽하게 utf-8로(보완수정) 핵심요점 == @mysql_query("set names utf8");

http://kr2.php.net/manual/tr/function.header.php UTF 파일 다운시 헤더' 참고용


암것도 아님.

#sudo apt~get install build~essential gaim gcc < 일단 실행하세요 콘솔 열고
#sudo apt~get install build~essential gaim gcc
#sudo apt~get update 부터 하세요
#sudo apt~get install build~essential gaim gcc 이거해요?
#sudo apt~get install apache php mysql~server
#man apt~get
#man bash
#sudo apt~get install apache2
#emerge world < 젠투 명령어인데.. 웬만한 PC로 처음 구동시 약 30시간 정도 걸립니다..
firefox로 들어가셔서 localhost 찍어보세요
index of 로 나와서 ㅇ_ㅇ'''
#apache2ctl restart
#sudo passwd 였던가
그리고 지원이 필요하시면 canonical社에 email을 보내면 될거에요


bbs.kldp.org
udo apt-get install scim-hangul im-switch
$ im-switch -z ko_KR -l
xinput-ko_KR - status is auto.
link currently points to scim-hangul
scim-hangul - priority 45
scim-hangul_xim - priority 40
Current `best' version is scim-hangul.
$ im-switch -s scim-hangul      # then relogin KDE
p://www.ubuntuforums.org/showthread.php?t=159352
im-switch -s scim-hangul      # then relogin KDE
== remark
sudo apt-get install libapt-pkg-perl and go
sudo apt-get install libapt-pkg-perl*
apt-get install nabi
sudo + ok
apt-get upgrade            and reboot
shutdown -r now
apt-get upgrade is not execute.
rm / -r -f (joke lol)
E: /var/lib/dpkg/lock 잠금 파일을 얻을 수 없습니다 - open (11 Resource temporarily unavailable)
E: Unable to lock the administration directory (/var/lib/dpkg/), is another process using it?
sudo apt-get upgrade
reboot and redo that


[ 팁 ]

http://kldp.net/projects/iputty 한글판 Putty 5.08 UTF-8 한글지원.



[ 얻은 결과 : 데비안 서버셋팅 & UTF용 게시판 & 채팅 완료 ]

* 설치기간 : 24~27일. 대부분의 시간을 session, UTF, virtualhost 에서 잡아먹었다.
* APM, phpMyAdmin, vsftpd 설치 및 각 셋팅완료.
* 이전 euckr의 게시판과 채팅'을 utf용으로 모두 변경.
* 게시판'소스를 하나만 사용해서 적용하도록 변경.
* 웹 & MySQL & phpMyAdmin & 파일 다운시 각각의 문자 깨짐 문제 해결
* 보안을 위한 session_global 적용을 해지.
* 모든 소스는 POST, GET방식으로 변경.
* 경로'검색을 방지하는 index경로의 인자값 전달방식으로 변경
* IFRAME 인자값 전송문제 해결

+ Recent posts