달력

22025  이전 다음

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

Collection(List, Set) 과 Map.. 기억하자 기억하자 다짐하면서 번번히 차이점을 잊어버리곤 한다.

 

이번엔 절대로!! 잊지 않겠다는 신념으로  "Head First 자바" 부록을 참고해서 확실하게 정리해 보았다. -_-+

 

 

1. Collection

Collection 은 여러개의 객체를 하나의 유닛으로 다루기 위한 최상위 인터페이스이다.

 

객체 집합을 하나의 객체로 다루는 방법에 따라서 두가지로 나뉘는데, List 는 객체들이 들어온 순서대로 참조를 유지하기 위한 목적을 가지고 있고 Set 은 중복된 참조를 허용하지 않는 목적을 가진다.

 

 

2. List

Collection 인터페이스를 상속한 List는 객체들이 들어온 순서대로 참조를 관리한다.

 

들어온 순서가 중요하기 때문에 객체들에게 index(색인)을 부여하고 이를 통해서 각각의 객체에 접근한다.

 

List 에서 중요한 것은 객체들의 순서를 관리하는 것이다. 즉, List 는 index 로 순서를 추적하는데에 관심이 있을 뿐, 같은 객체의 참조가 여러번 들어오거나 null 참조가 들어오는 것은 조사하지 않는다.

 

만일 List에 참조가 여러개 존재하지 않아야 하는 상황이라면 List 보다는 Set 계열의 클래스를 이용하는 것이 좋다.

 

 

a. Vector

 

자바 1.0 부터 수많은 개발자들로부터 사랑받아오던 원년 멤버이지만 Collection 프레임워크가 등장하고 나서 List 인터페이스를 구현하면서 Collection 프레임워크로 편입됐다. Vector는 멀티 쓰레드 환경에서도 사용될 수 있도록 객체의 삽입, 삭제 시에 동기화를 보장하도록 되어있다.

 

하지만 Multi Thread 환경이 아니라면 ArrayList 보다 성능이 떨어지므로 Single Thread 에서 접근한다면 ArrayList 를 대신 사용하는 것이 효율적이다.

 

b. ArrayList

 

Collection 을 상속한 클래스들 중에서 add 메소드의 실행이 가장 빠르고 배열의 크기를 자유자재로 늘릴 수 있다. 하지만 Vector 처럼 동기화 과정은 제공하지 않는다. Collection 계열 클래스들은 (Vector를 제외하고) 여러개의 쓰레드가 동시에 접근하는 상황에 대한 대비책은 없기 때문에 주의할 필요가 있다. (이에 관한 추가 사항은 6.Collections 에서 다룬다.)

 

c. LinkedList

 

List 인터페이스의 기본적인 구현 외에도 추가적으로 몇개의 메소드를 넣어서 사용의 편리성을 도모했다. 이 몇개의 메소드란 addFirst(), addLast(), removeFirst(), removeLast() 등이다. LinkedList는 자체로서 사용되기 위해서라기 보다는 스택, 큐 등 사용자가 ADT를 구축할 때 내부에서 사용되기 위한 측면이 강하다.

 

따라서 단순히 객체에 대한 참조를 넣고 빼기 위해서라면 LinkedList 를 쓰기보다는 Vector나 ArrayList 를 사용하는 것이 바람직하다.(쓰더라도 문제될 건 없다.)

 

 

3. Set

List 가 항목의 순서를 관리하는데 비해 Set 는 중복된 항목을 방지하는데 관심이 있다. 이를 위해서 Set 에 의해서 관리되는 객체는 equals() 메소드를 구현해야 한다.

 

자바에서 == 는 단순히 객체의 주소에 근거해서 비교 결과를 반환하기 때문에 equals() 메소드에서 객체의 "내용"을 비교하는 과정을 적어넣아야 Set 에서 equals() 메소드를 통해서 이미 존재하는 항목인지 아닌지를 확인할 수 있다.

 

a. HashSet

 

HashSet 은 가장 빠른 접근을 보장한다. HashSet은 내부적으로 HashMap 을 이용한다. HashSet에 추가되는 항목은 HashMap의 키값으로 저장이 되기 때문에 HashSet이 하는 일이란 HashMap과 사용자 사이의 중계 역할만을 할 뿐이다. 

 

HashSet에서는 항목의 순서를 확인할 수 없다.새로운 객체가 HashSet 에 들어오게 되면 내부에서 객체의 참조 위치가 바뀔 수도 있는데, 이는 HashSet 내부에서 이용하는 HashMap의 특성때문이다.

 

b. LinkedHashSet

 

Set 에 순서를 부여하기 위해서 java 1.4에서 LinkedHashSet 클래스가 등장했다. 이 클래스는 내부에서 double-link 를 이용해서 linked list 를 구현함으로써 원소가 추가된 순서를 유지한다.  LinkedHashSet도 HashSet과 마찬가지로 내부에서 LinkedHashMap 인스턴스를 사용하고 있다.

 

TreeSet 은 Set의 항목들을 정렬된 순서대로 보관한다. 항목을 정렬하기 위해서 TreeSet이 하는 일이란 SortedMap 인스턴스에 작업을 위임하는 것 뿐이다. TreeSet 에 추가되는 항목은 SortedMap 인스턴스의 키값으로 등록이 된다. (키값의 정렬은 Map 인터페이스의 역할이다.)

 

위에서 살펴본대로 Set 계열의 클래스들은 자신의 작업을 Map 계열의 클래스들에게 전적으로 위임하고 있다. Set 에서 중복된 원소를 허용하지 않는 정책은 Map에서 중복된 키값이 존재해서는 안되는 정책이므로, Set에서 삽입되는 원소는 모두 Map 인스턴스에서 키값으로 추가가 된다.

 

이러한 이유 때문에 Set 계열의 클래스들과 Map 계열의 클래스들의 이름이 비슷하게 된 것이 아닌가 싶다.

 

 

 

4. Map

 

 

구조적으로 볼 때 Map 인터페이스는 Collection 인터페이스와 피한방울 섞이지 않은 남남이다. Map 인터페이스는 키와 값을 대응시키기 위해서 사용된다. 여기서 키(key)라 함은 하나의 Map 에 담기는 객체들을 유일하게 식별할 수 있는 객체를 의미하는데, 이는 하나의 Map 내에서 같은 값을 가지는 key 는 존재할 수 없음을 뜻한다.

 

주어진 키에 대응 하는 값을 빠르게 찾기 위한 탐색의 측면에서 Map 계열 클래스들의 의미가 있다고 하겠다.

 

*Collection 은 객체들을 넣고 빼는데 있어서 어떻게 이 객체들을 관리할 것인가를 다루고 있고 Map 은 키를 통해서 실제 객체에 접근한다.*

 

 

5. Collections

 

Collections 클래스는 Collection 인터페이스를 구현한 하위 클래스들에게 다양한 오퍼레이션을 제공할 목적으로 모든 메소드가 static 메소드이다. 따라서 모든 Collection 계열의 인스턴스에 대해서 필요에 따라 다양한 작업을 할 수 있다.

 

http://java.sun.com/j2se/1.4.2/docs/api/java/util/Collections.html

 

a. 동기화 지원

 

위에서 언급한 ArrayList 뿐만이 아니라, Collection 을 구현하는 클래스들은 모두 ArrayList 처럼 동기화에 대한 대비책이 없다. 따라서 Vector와 Hashtable 을 제외한 모든 Collection 객체들이 Multi Thread 환경에서 사용되기 위해서는 별도의 기능을 갖춰야 하는데, 이를 위한 메소드가 Collections 클래스에 존재한다.

 

static CollectionsynchronizedCollection(Collection c)
          Returns a synchronized (thread-safe) collection backed by the specified collection.
static ListsynchronizedList(List list)
          Returns a synchronized (thread-safe) list backed by the specified list.
static MapsynchronizedMap(Map m)
          Returns a synchronized (thread-safe) map backed by the specified map.
static SetsynchronizedSet(Set s)
          Returns a synchronized (thread-safe) set backed by the specified set.
static SortedMapsynchronizedSortedMap(SortedMap m)
          Returns a synchronized (thread-safe) sorted map backed by the specified sorted map.
static SortedSetsynchronizedSortedSet(SortedSet s)
          Returns a synchronized (thread-safe) sorted set backed by the specified sorted set.

 

다음과 모든 Collection 계열의 객체에 대해서 synchronized...(..) 메소드로 Multi Thread 환경에서 이용가능하도록 전환할 수 있다. 

 

List list = Collections.synchronizedList(new ArrayList(...));

List list = Collections.synchronizedList(new LinkedList(...));

 

SortedSet s = Collections.synchronizedSortedSet(new TreeSet(...));

Set s = Collections.synchronizedSet(new HashSet(...));

Set s = Collections.synchronizedSet(new LinkedHashSet(...));

 

 

Map m = Collections.synchronizedMap(new HashMap(...));

Map m = Collections.synchronizedMap(new TreeMap(...));
Map m = Collections.synchronizedMap(new LinkedHashMap(...));

 

'JAVA > JSE' 카테고리의 다른 글

[펌] Sorting Algorithm  (0) 2005.01.15
[link] 자바 검색 봇~  (0) 2005.01.11
소스포지.. 디컴파일해두 소스 안보여주는  (0) 2004.11.23
[허가없는 링크^^] 패턴  (0) 2004.10.25
[펌] JAVA application 성능향상..  (0) 2004.10.07
Posted by tornado
|
[방문히트이벤트] 4000 히트를 잡아라! (이웃한정)
인탑님이 당첨되었습니다.

'이것저것 > 낙서장' 카테고리의 다른 글

4100 히트 이벤트!!!  (2) 2005.01.04
도대체 모지??  (0) 2005.01.03
[펌] 바쇼의 하이쿠  (0) 2004.12.21
3900 히트 이벤트!!!  (0) 2004.12.16
3800 히트 이벤트!!!  (0) 2004.12.08
Posted by tornado
|
Posted by tornado
|

마쓰오 바쇼는 일본 에도시대 하이쿠 작가.

하이쿠는 일본 전통시. 짧은 말 몇개로만 간결하게 쓴다.

내용에 계절을 연상시키는 말이 들어가야 한다는게 형식.

짧지만 여운이 길다.

 

 


얼마나 놀라운 일인가,

번개를 보면서도

삶이 한 순간인 걸 모르다니

 

 


한밤중에 잠이 깨니

물항아리 얼면서

금 가는 소리

 

 


생선가게 좌판에 놓인

도미 잇몸이

시려 보인다

 

 


내 앞에 있는 사람들

저마다 저만 안 죽는다는

얼굴들일세

 

 


두 눈을 맞대고 들여다보니

암소 얼굴이

몹시도 외롭구나

 

 


너무 울어

터엉 비어버렸는가

이 매미 허물은

 

 


오래된 연못

개구리

풍덩

 

 


봄의 첫날

나는 줄곧 가을의

끝을 생각하네

 

 


봄이 가고 있다

새들은 울고

물고기 눈에는 눈물이

 

 


당신은 모르겠지만

지금 울고 있는 저 매미는

오래 살 수가 없어

'이것저것 > 낙서장' 카테고리의 다른 글

도대체 모지??  (0) 2005.01.03
4000 히트 이벤트!!!  (0) 2004.12.22
3900 히트 이벤트!!!  (0) 2004.12.16
3800 히트 이벤트!!!  (0) 2004.12.08
[허가없는 링크] 허걱...  (0) 2004.12.08
Posted by tornado
|

헐.. 죽이넹

JAVA/JSP_Servlet 2004. 12. 21. 15:14

'JAVA > JSP_Servlet' 카테고리의 다른 글

[펌]Single Sign On...  (0) 2005.01.17
JSP 다운로드시 헤더 ㅡㅡ  (0) 2005.01.13
얼... 좋은걸~  (0) 2004.12.17
Converting JDBC Result Sets to XML  (0) 2004.12.09
[펌] requestmon - 톰캣과의 사투중 발견한 유용한 정보..  (0) 2004.11.10
Posted by tornado
|

보안에 문제가 많을 듯 ㅡㅡ


--stdin 이라는걸 오늘 첨 알았음... 리눅스 계열 밖에 없는듯 합니다.


FreeBSD 에는 없넹..


================================================================================

파일 이름 : uadd.sh

퍼미션     : 700

사용법     : uadd.sh 아이디 패스워드

================================================================================

#!/bin/bash
userId=$1;
userPasswd=$2;

# User Add
/usr/sbin/useradd $userId

echo $userPasswd | /usr/bin/passwd --stdin $userId



 

================================================================================

파일 이름 : chpwd.sh

퍼미션     : 700

사용법     : chpwd.sh 아이디 패스워드

================================================================================

#!/bin/bash
userId=$1;
userPasswd=$2;

echo $userPasswd | /usr/bin/passwd --stdin $userId

================================================================================

파일 이름 : duser.sh

퍼미션     : 700

사용법     : duser.sh 아이디

================================================================================

#!/bin/bash

userId=$1;

userdel -r $userId



쓰고보니 허접의 극치를 달리는군 ㅡㅡ


Posted by tornado
|
질문,광고 등록 절대금지! 질문은 Q&A로
글쓴이:jyuvenia [서버]대량 메일 발송???조회수:7304

jyuvenia


대량의 메일이 발송되지 않는다고 호소를 하는군요.

:)

덕분에 그 문제에 관하여 이곳을 검색해보니...

별 방법이 전부 동원이 되는군요.

결과론적으로 몇백통씩 끊어서 보내는것이 사실상 전례가 된듯

합니다.

솔직히 약간 당황스럽습니다.

개인적으로 아직까지 몇만통을 한번에 그냥 보내도 빠짐없이

잘 가는데 왜 그런 문제들이 일어나서 끊어 보내는 일이

발생하는지 잘 이해가 가질 않았습니다.

대부분 조급하신 분들이 많은 관계로 방법 부터 거론하면..

1. sendmail 은 8.10.x 이상의 버전을 사용

2. /var 의 파일시스템은 저널링 파일 시스템 이어야 함 (ReiserFS, ext3)

3. Multiple Queues 를 사용


위 3가지면 충분합니다.

3번을 사용하기 위한 설정 밥법은 sendmail.cf 에서

O QueueDirectory

라는 행을 찾아서

O QueueDirectory=/var/spool/mqueue/q*

으로 변경을 하시거나 추가를 하시기 바랍니다.

그 다음 /var/spool/mqueue 에 q1 애서 q6 정도 까지 만들어 줍니다.

# cd /var/spool/mqueue
# mkdir q1 q2 q3 q4 q5 q6
# chown root.mail q*

그다음 sendmail 을 재시작 하면 되겠죠?

참고로 Multiple Queues 의 장점은

1. 고성능
2. 병렬 큐 처리
3. 파일 시스템 결점 보완

입니다.

더 자세한 부가적인 설명을 원하신다면 kldp.org 를 참고하시거나

http://kldp.org/~yong  

으로 가보세요.. 특히 http://kldp.org/~yong 사이트는 개인적으로

아주 좋아하는 사이트 입니다.

국내 리눅스계에 공헌을 아주 많이 하신 분이죠 :)

사이트 또한 정말 멋집니다.   :)

역시 성질 급하신 분은 http://kldp.org/~yong/misc/sendmail/

로 바로~~~~

 

 

 

Ext2 가라~!

Posted by tornado
|

얼... 좋은걸~

JAVA/JSP_Servlet 2004. 12. 17. 11:00
Posted by tornado
|

뻘짓거리.. ㅡㅡ;

OS/LINUX 2004. 12. 16. 15:42

어제 잘 되던 CVS 가 갑자기 먹통...


내 이클립스 셋팅 불량인줄 알고.. 셋팅 싹~! 지우고 다시 구성..


그래두 안됨 ㅡㅡ


nmap 으로 열린 포트 검사해보니.. 2401 포트 안보임 ㅡㅡ 대략 난감...


혹시나 해서 iptables 보니 ...


헐.... 2401 포트 막아놨네 ㅡㅡ ... 이거 막으면 어쩌라고 ㅡㅡ


포트 막을때는 왜 막았는지 주석좀 답시다.






Posted by tornado
|
[방문히트이벤트] 3900 히트를 잡아라!
dkdnddkdnd님이 당첨되었습니다.
Posted by tornado
|
Posted by tornado
|
[방문히트이벤트] 3800 히트를 잡아라!
그리니치님이 당첨되었습니다.
Posted by tornado
|
Posted by tornado
|

##

## httpd.conf -- Apache HTTP server configuration file

##

 

 

httpd.conf 파일은 크게 세부분으로 나누어져 있다.

    Section 1: Global Environment  : 아파치 전체적인 영향이 미치는 설정
    Section 2: 'Main' server configuration : 주 서버에 대한 설정
    Section 3: Virtual Hosts : 가상 호스트에 대한 설정

 

     ### Section 1: Global Environment

전제환경설정 파트로 Section 1에서 설정하는 것들은 아파치 웹서버에

전반적인 영향을 미친다.

 

ServerType standalone

서버의 구동방법으로는 standalone과 inetd방식이 있는데,  standalone
방식은 하나의 웹데몬(아파치서버)이 클라이언트의 접속을 모두 처리하는
방식으로 응답속도가 빠른 방법으로 주로 이방식을 사용한다. inetd 방식은
inetd라는 시스템의 /etc디렉토리 끝에 존재하는 inetd라는 슈퍼데몬이
클라이언트의 접속요구가 있을 때마다 웹서버를 구동하는 방식이다.
일반적으로 응답속도가 빠르고 효율적인 standalone으로 설정하여 사용한다.


ServerRoot "/usr/apache"

아파치서버의 홈디렉토리를 지정하며 절대경로로 지정한다. 이후로 나오는
대부분의 패스들은 이 경로에 대한 상대경로로 지정이 된다. 예를 들어
환경설정파일, 에러로그파일등의 상대경로의 기준이 되는 위치이다.


LockFile logs/accept.lock

아파치 컴파일시 USE_FCNTL_SERIALIZED_ACCEPT나

USE_FLOCK_SERIALIZED_ACCEPT으로 컴파일 했을 때 사용되는
LockFile의 경로지정시에 사용된다. 가급적 기본값으로 사용한다.

    LockFile /usr/apache/logs/httpd.lock


PidFile logs/httpd.pid

PidFile 설정은 ServerType을 Standalone으로 설정했을때만 유효한
것으로 아파치 서버의 프로세스가 생성되어 있을 때 그 프로세서ID(PID)를
기록하는 파일을 지정한다.  당연히 아파치서버가 재시작되거나 과부하로
인해 PID가 바뀌게 될 경우에는 이 파일의 PID값도 바뀌게 된다.  즉
다시말해서 여기서 지정된 파일(httpd.pid)에 실행되고 있는 아파치서버의
프로세스번호(PID)값이 기록된다고 하면 정답이다. ServerRoot를 기준으로한
상대경로로 지정된다.  절대경로로 지정하려면 "/"로 시작하는 절대경로를
적어주면 된다.

    PidFile /usr/apache/logs/httpd.pid

 

ScordBoardFile /usr/apache/logs/httpd.scoreboard

내부 서버 프로세서 정보를 저장하는데 사용된다. 모든 아키텍쳐가 이것을 필요로 하진 않는다.


ResourceConfig conf/srm.conf
AccessConfig conf/access.conf

아파치 서버의 환경설정파일은 3개이다. au httpd.conf, srm.conf, access.conf
가 그것이다. 그러나 하나의 설정파일로 하는 것이 효율적이기 때문에
지금은 httpd.conf파일안에 3개의 파트(Section)로 나누어서 하나의
파일안에서 설정을 하고 있다. srm.conf와 access.conf파일의 내용은 현재
비어있는 상태이지만, 필요하다면 이 파일 내에도 설정을 할 수 있다.
아파치 서버가 실행이 될 때는 httpd.conf, srm.conf, access.conf 순으로
언제나 이 3개의 파일을 모두 읽고 난뒤에 실행이 되기 때문이다. 만약 이
두 개의 파일을 서버가 무시하도록 하려면 다음과 같이 하거나 "#"으로 붙여
두면 주석처리되어 무시된다.

    #ResourceConfig /usr/apache/conf/srm.conf
    #AccessConfig /usr/apache/conf/access.conf

   
Timeout 300

클라이언트의 요청에 의해 서버와 연결이 되었을 때 클라이언트와
서버간에 아무런 메시지가 발생하지 않았을 때 오류로 처리될 시간을
초단위로 설정한다. 초기값은 1200이며 보통은 300초로 지정을 한다.
네트웍의 속도가 나쁠수록 수치값은 높게 설정하는 것이 좋다.

 

KeepAlive On

접속한 채로 특별한 요청없이 지속적인 연결을 허용할 것인지를 설정한다.
허용하지 않으려면 off

 

MaxKeepAliveRequests 100

클라이언트가 접속된 시간동안 아파치서버에 요청할 수 있는 최대의
개수를 지정한다. 0을 지정하면 제한없음을 의미하며, 서버의 성능향상을
위하여 가능한 높은 값이 좋다.
 
KeepAliveTimeout 10

아파치 서버는 같은 접속상태의 클라이언트에서 여기서 지정한 초만큼의
요청이 없었을 때 접속을 끊게 된다.

 

MinSpareServers 5
MaxSpareServers 10

아파치 웹서버는 성능향상과 빠른 응답속도를 위해 유휴서버(현재 서비스대기 중인

프로세스)를 만들게 되는데 이 유휴서버의 개수는 시스템의 상황에 따라 달라지게 된다.

유휴서버가 MinSpareServers의 개수(5) 보다 적게되면 추가로 생성을 하게 되며 MaxSpareServers의 개수(10)보다 많게 되면 죽이게 된다.

즉, 유휴서버의 개수를 적절히 조절하기 위한 것이라 생각하면 된다.


StartServers 5  

아파치 웹데몬이 구동될 때 자식프로세스를 몇 개로 할 것인가를 지정한다.

시작할 때 동시에 띄우게 될 웹데몬의 개수이다. 그러나 웹데몬이 구동되고 난 뒤엔 시스템의 상황(부하율등)에 따라 대부분 합리적인 개수만큼 동적으로 생성되었다가 죽기도 하므로 큰 의미를 가지는 것은 아니다.

 

MaxClients 150

아파치웹서버에 접근할 수 있는 클라이언트의 최대갯수는 이 상한값으로
제한한다. 여기서 지정한 개수이상의 클라이언트의 요청이 생긴다면
아파치는 응답하지 않고 이 요청을 무시한다.  이를 제한하는 이유는
시스템의 자원을 아파치 웹서버가 무한정 차지하는 것을 방지하기 위한
것이다.

 

MaxRequestsPerChild 30

아파치 웹서버의 자식프로세스들이 클라이언트의 요청 개수를 지정한다.
만약 자식프로세스가 이 값만큼의 클라이언트요청을 받았다면 이 자식프로세스는 자동으로 죽게된다. 이 값이 0으로 설정이 된다면 자식프로세스가 자동으로 죽는일은 없을 것이다. 그러나 0아닌 다른 값으로 설정함으로서 프로세스의 수를 적절히 조절하여 시스템의 부하조절과 자원낭비를 어느정도 방지 할 수 있다.

 

Listen 3000
Listen 12.34.56.78:80

사용자 Request를 대기하는 port 시스템의 기본값이외에 다른 IP Address와 포트에 대해서도 연결할 수 있도록 해 준다. 환경설정파일(httpd.conf) 맨뒤에 나오는 가상호스트(Virtual
Host)부분에서 설정되는 가상호스트를 설정하기 위해 필요하다.


BindAddress *

서버가 응답할 수 있는 IP Address를 설정하는 것이다. 하나의 시스템에
있는 아파치웹서버 하나로 여러 웹서버처럼 관리하는 웹호스팅서비스등에서
많이 이용하는 것으로 여러 IP Address를 인식할 수 있게 한다. "*"으로
설정이 되었다면 모든  IP Address에 대해 응답할 수 있으며, IP Address를
지정한다면 지정한 IP Address에 대해서만 응답할 수 있게 된다.  여러개의
IP Address를 ISP로부터 할당받아서 웹호스팅서비스를 하고자 한다면
이부분에서 지정해 주면된다. 이 설정파일의 맨 뒷부분에 나오는
<VirtualHost>~</VirtualHost>부분의 IP bind 가상호스트부분에서 아파치
웹서버가 응답할 수 있도록 하려면 여기서 IP Address를 지정해 줘야 한다.

 

Dynamic Shared Objdec(DSO) support

DSO로 빌트된 모듈의 기능을 사용하기 위하여 쓰인다.

DSO 매카니즘에 대하여 상세히 알고 싶으면 http://httpd.apache.org/docs/dso.html을 읽기 바란다. httpd binary에 이미 설치된 모듈리스트르 알고 싶으면 httpd -l 을 실행한다.

로드된 모듈의 순서는 중요하기 때문에 변경시 주의를 요한다.
  ex) LoadMule foo_module libexec/mod_foo.so

 

ExtendedStatus On

server-status로 아파치웹서버의 상태를 상태를 모니터링 할 때
"자세한상태정보"기능을 제공할 것인지(On) 아닌지(Off)를 설정하는 것이다.

 

 

     ### Section 2: 'Main' server configuration

Section 2에서 설정하는 항목들은 아파치의 주된서버가 사용할 값들을
지정한다. <VirtualHost>에 정의된 가상호스트들에서 지정하지 않는 것은
여기서 지정된 값이 기본값으로 적용된다. 또한 여기서 지정하는 값을 각
<VirtualHost>내에도 지정할 수 있으며 이경우엔 각<VirtualHost>내에서
지정한 값이 우선적용된다.

 

Port 80

아파치웹서버의 기본포트를 지정한다. 특별하게 사용하는 것이 아니라면
80번으로 해둬야 한다. 사용가능한 포트는 0 ~ 65535이며 1024이하의
포트번호는 시스템에서 특별하게 예약되어 있으므로 80번 이외의 다른
포트를 사용하려면 1024이상의 포트번호를 지정해서 사용해야 할 것이다.
특별한 지정이 없다면 <VirtualHost>에 정의된 각각의 가상호스트들의
기본포트가 된다. 만약 <VirtualHost> 내에서 Port가 지정이 된다면 그
포트번호가 우선한다.

(특별히 PORT를 따로 지정해 줄 필요가 있을 때는 따로 지정해 주며,
이때는 웹서버로 접근할 때 반드시 따로지정한 PORT번호로 접근해야 한다.
예를들어 Port 1234로 지정했다면, 접근시 : http://www.domain.co.kr:1234
로 접속해야한다. 단, 80번은 default이므로 Port번호를 입력하지 않아도
도메인만으로 그냥 접근할 수 있다. 예: http://www.domain.co.kr )

 

SSL Support

SSL을 제공하고자 할때 HTTP port와 HTTPS port를 listen해야 한다.

    <IfDefine SSL>

    Listen 80

    Listen 443

    Listen 8888

    </IfDefine>

 

User nobody
Group nobody

아파치 웹데몬이 요청을 받았을 때 여기서 지정한 user와 group으로
응답을 하게된다. 이 설정은 ServerType이 Standalone방식이며, 아파치의
실행이 root권한으로 실행이 되었을 때 유효한 것이다. 많은
웹서버관리자들이 nobody로 설정을 해 두고 있으며, 만약 시스템에 nobody
user가 없다면 새로생성(useradd)을 해야 할 것이다. 단, root로 설정하는
것은 절대로 있어서는 안되며 nobody이외의 다른 시스템사용자 id로 지정을
한다면 정말 신중히 모든면(시스템 보안 및 자원사용등)에서 깊게 고려를
해봐야 한다.

 

ServerAdmin webmaster@www.domain.co.kr

여기서 지정하는 email address는 웹문서 로딩에러등의 문제에서
클라이언트측으로 보내질 메일주소값이다. 대부분
웹서버관리자의 email address로 설정을 한다.

 

ServerName new.host.name

클라이언트에게 보여주는 호스트이름을 지정한다. www를 쓰지않는
호스트에서 www를 쓰는 것처럼 보이게 할 수 있다. 예를 들어
bbs.manualand.co.kr을 www.manualand.co.kr로 지정해서 쓸 수 있다.
이곳에 IP Address를 적게 되면 클라이언트에는 Ip Address를 보여준다.

 

DocumentRoot "/usr/local/apache/htdocs"

아파치 웹서버의 웹문서가 있는 경로를 지정한다. 예를 들어
"http://www.manualand.co.kr/index.html"의 초기 문서라면 이 초기문서의
절대 경로는 여기서 지정된 "/usr/local/apache/htdocs/index.html"이 된다.
경로의 맨 마지막에 "/"를 추가해서는 안된다. Alias를 사용하여 다른 위치를
지정할 수도 있다.

 

<Directory />
    Options FollowSymLinks
    AllowOverride None
</Directory>      
                

<Directory>에서 지정되는 값에 대한 옵션은 다음과 같은 의미를 가지고
있다.
        None : 일단 모든허용을 하지 않는다.
        All : 모든허용을 한다.
        Indexes :
        Includes :
        FollowSymlinks :
        ExeCGI :
        MultiViews :


UserDir public_html

<IfModule mod_userdir.c>

    UserDir public_html

</IfModule>

하나의 아파치 웹서버에서 여러 사용자의 홈페이지를 별도로 만들어
관리할 때 필요한 개별 가입자의 홈페이지 디렉토리이름이다. 예를 들어
sspark이란 계정가입자의홈페이지는 "http://manualand.co.kr/~sspark"라는
홈페이지를 가지고 있을 때 sspark의 계정에서 "public_html"이란
디렉토리가 홈디렉토리가 되어 이 디렉토리에 있는 초기문서 index.html을
불러서 보여주게 된다.

 

<Directory /home/*/public_html>
    AllowOverride FileInfo AuthConfig Limit
    Options MultiViews Indexes SymLinksIfOwnerMatch
IncludesNoExec
    <Limit GET POST OPTIONS PROPFIND>
        Order allow,deny
        Allow from all
    </Limit>
    <Limit PUT DELETE PATCH PROPPATCH MKCOL COPY
MOVE LOCK UNLOCK>
        Order deny,allow
        Deny from all
    </Limit>
</Directory>

계정사용자의 홈페이지(public_html)의 접근에 대한 옵션을 지정한 것이다.


DirectoryIndex index.html

디렉토리만을 지정했을 경우에 그 디렉토리에서 찾게될 문서의 순서를
지정해 준다. 즉, 디렉토리 이름만을 지정하더라도 여기서 지정한
index.html을 찾아서 웹브라우즈에 보여준다. 여러개의 파일을 지정할 수
있으며, 이런 경우에는 순서대로 찾아서 보여준다. 예를 들어
"DirectoryIndex index.html index.htm"로 지정했다면 먼저 "index.html"을
찾아서 있다면 이 파일을 로딩하고, "index.html"이 없다면 "index.htm"을
찾아서 로딩해 준다.

    <IfModule mod_userdir.c>

        DirectoryIndex index.html

    </IfModule>

 

AccessFileName .htaccess

디렉토리별로 접근제어할 정보(ID, Password)를 담고 있는 파일을
지정한다. 디렉토리별로 인증을 거쳐서 접근할 수 있는 설정을 하기위한
것이다. 예를 든다면 어떤 홈페이지의 전부나 혹은 일부에로 접근하려고 할
때 ID, Password를 묻는 창이 뜨면서 맞게 입력한 경우에만 접근허용하는
것이다.  보안상의 이유로 이 파일의 이름을 다른 이름으로 바꾸로 싶다면
".htaccess"대신에 다름이름을 적어주면 된다.

 

<Files ~ "^\.ht">
    Order allow,deny
    Deny from all
</Files>

바로위에서 설정한 파일(".htaccess")의 내용을 볼 수 없게 할 때 사용하는
옵션이다. 보안상의 이유로 이 옵션은 설정해 두는 것이 좋다. 만약 이
옵션을 주석처리해 둔다면 ".htaccess"파일에 대한 보안은 누구도 장담할 수
없을 것이다.

 

CacheNegotiatedDocs

디폴드로 아파치는 content와 연관된 각각의 document에 "Pragma: no-cache"를 보낸다.

이것은 proxy 서버가 document에 cache를 사용하지 않을것인지를 묻게 된다.

이 라인을 주석처리 하면 documents에 cache를 허용할수 있게 된다.

#CacheNegotiatedDocs


UseCanonicalName On

On으로 설정하면, self-referencing URL을 만들때마다 "canonical" name 형식에 따른 hostname과 port를 사용할것이다.

Off로 설정하면 아파치는 가능하면 client가 제공한 hostname과 port를 사용할것이다.

이것은 또한 CGI 스크립트의 SERVER_NAME과 SERVER_PORT에 영향을 준다.

 

TypesConfig conf/mime.types

웹서버의 mime type을 지정한 파일을 지정한다. mime.types파일은 서버에
의해 리턴될 수 있는 파일명과 mime형식을 기술해 놓은 파일이다.

  <IfModule mod_mime.c>

       TyperConfig /usr/apache/conf/mime.types

   </IfModule>

  

DefaultType text/plain

mime.types 파일에 정의 되어있지 않은 파일형식에 대한 요청을 받았을 때
알 수 없는 문서타입에 대하여 사용할 기본적인 mime 타입을 정해둔다.

 

<IfModule mod_mime_magic.c>

    MIMEMagicFile /usr/apache/conf/magic

</IfModule>

mod_mime_magic module은 서버에서 type별 정의된 다양한 hints를 사용할수 있게 해준다.

MIMEMagicFile은 hint가 정의된 위치를 알려준다.


HostnameLookups Off

웹서버의 로그(access_log)를 지정하는 Format에서 "DNS Lookup"으로
지정하였을 때, domain으로 남길 것인가, IP Address로 남길 것인가를
지정한다. Default로 Off는 IP Address로 남기는 것이며, Domain으로 변경할
필요가 없으므로 on으로 설정한 것보다는 속도가 조금빠르다.on으로 하게
되면 IP address를 IP Domain으로 변환해야 하므로 속도가 조금 느릴 수
있다.

 

ErrorLog /usr/apache/logs/error_log

아파치 웹서버의 에러로그 기록파일을 지정한다.  참고할 사항은 맨마지막에 설정하는 <VirtualHost>부분에서 각서버에 대한 에러파일을 지정해 두지 않으면 그에 대한 에러로그도 여기에 기록되며, 지정해 두게 되면 그에 해당하는 로그는 이 파일에 기록되지 않는다.

 

LogLevel warn

바로위에서 설정한 에러로그 파일에 얼마나 자세하게 적을 것인지를
결정한다. 다음에 해당하는 순서대로 중요도가 정해진다.

" debug → info → notice → warn → error → crit → alert → emerg "

 

SetEnvlf Request_URI \.gif dontlog

SetEnvlf Request_URI server-status dontlog

아래에서 사용할 CustomLog에서 사용자지정 환경변수 지정을 사용할수 있다.

해당 항목에 대해서는 log파일에 추가되지 않음.

 

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\"
\"%{User-Agent}i\"" combind
LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent

바로 아래에서 사용할 CustomLog에서 사용할 몇가지 로그형식의 별명을 정한 곳이다.
웹서버의 관리자나 서버관리자는 이 부분을 특히 유심히 봐둬야 한다.
웹서버의 로그를 어떤 식으로 남길 것인가를 결정하는 Format을 지정하는 곳이다.

원하는 정보를 지정해서 볼 수 있으므로, 관리자에게 필요한 Format으로 설정해야 하며,

또한 접속통계를 내기에 적당한 Format으로 설정해 둬야 한다.

 

CustomLog /usr/apache/logs/access_log common env=!dontlog

위에서 정한 로그형식(여기선 common)대로 로그를 남기게 된다.
맨마지막에서 지정하는 <VirtualHost>부분에서도 아파치 1.3.9버전 부터는
CustomLog를 가상호스트별로 지정할수 있도록 CustomLog를 제공한다.
<VirtualHost>에서 CustomLog를 지정하지 않으면 여기서 지정한 형식대로
로그를 남기게 되며 <VirtualHost>부분에서 CustomLog를 지정했을
경우에는 여기서 지정한 로그형식은 무시된다.

 

#CustomLog  /usr/apache/logs/referer_log referer
#CustomLog  /usr/apache/logs/agent_log agent
#CustomLog  /usr/apache/logs/access_log combined

위에서 지정한 4가지의 로그형식(combind, common, referer, agent)중에서
원하는 부분의 #(주석행)을 제거하면 지정된다.

 

ServerSignature On

Optionally하게 서버가 생성하는 문서(error documents, FTP directory listings, mod_status and mod_info output etc., but not CGI generated documents)에 서버 버전과 가상호스트 이름을

포함하는 라인을 추가한다. 
"EMail"로 설정하면 mailto에 의해 SeverAdmin에 링크된다.

ON | OFF | EMail

 

EBCDIC configuration:

Fujitsu-Siemens' BS2000/osd, IMB's OS/390, IMB's TPF 과 같은 메인프레임에서만

EBCDIC 코드셋을 사용한다.

아래의 디폴트 설정은 bianary 파일이 ASCII 머신에  저장될때 text 파일이 EBCDIC에 저장된다구 가정한다. 따라서 일반적인 POSIX 툴이나 grep, sort를 이용하여 조작할수 있다.

    EBCDICConver tByType On=InOut text/message/multipart/

    EBCDICConver tByType On=In      application/x-www-form/urlencoded

    EBCDICConver tByType On=Inout  application/postscript model/vrml

    EBCDICConver tByType Off=InOut

ASCII HTML 문서와 EBCDIC HTML 문서를 동시에 사용하고자 한다면, ASCII 문서에 전환을 위한 파일 확장자를 사용할수 있다.

    AddType            text/html  .ahtml

    EBCDICConvert Off=InOut  .ahtml

 

Alias /icons/ "/usr/local/apache/icons/"

필요한 만큼의 디렉토리 별칭을 만들어 쓸 수 있다. 사용하는 형식은 다음과 같다.
Alias fakename(가상이름) realname(진짜이름)

fakename이 /로 끝나면 서버는 그것이 표현된 URL을 요구할것이다.

fakename이 /로 끝나면 realname도 /로 끝나야 한다.

fakename이 /를 생략하면 realname로 /를 생략해야한다.

 

    Alias /icons/ "/usr/local/apache/icons/"

 

    <Directory "/usr/local/apache/icons">
          Options Indexes MultiViews
          AllowOverride None
          Order allow,deny
          Allow from all
    </Directory>

 

ScriptAlias /cgi-bin/ "/usr/local/apache/cgi-bin/"

ScriptAlias는 서버스크립트를 포함한다. ScriptAlias는 실제디렉토리 안에
들어있는 문서를 서버에 의해 응용프로그램으로 취급되어 실행되는 것을
제외하고는 근본적으로 Aliases와 같다.

 

Redirect old-URi new-URL

client에게 서버의namespace에 문서가 더이상 존재하지 않을때 clinet에게 재위치된 문서가

어디에 있는지 알려준다.

    Format: Redirect old-URI new-URL


IndexOptions FancyIndexing

IndexOPtions는 디렉토리목록을 표시할 때 사용할 옵션을 지정한다.
Standard는 표준적인 디렉토리를 나타내며, FancyIndexing은 좀더 예쁜
디렉토리목록을 표시해 준다.

 

AddIcon*

아래에서 지정하는 AddIcon으로 시작하는 설정은 바로위에서 설정한
디렉토리인덱싱 옵션을 FancyIndexing으로 한 경우에 해당하며 디렉토리
목록을 표시할 때 각 파일 확장자에 따라서 어떤 아이콘을 선택하여 보여줄
것인지를 지정한다.

AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip
AddIconByType (TXT,/icons/text.gif) text/*
AddIconByType (IMG,/icons/image2.gif) image/*
AddIconByType (SND,/icons/sound2.gif) audio/*
AddIconByType (VID,/icons/movie.gif) video/*

AddIcon /icons/binary.gif .bin .exe
AddIcon /icons/binhex.gif .hqx
AddIcon /icons/tar.gif .tar
AddIcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv
AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip
AddIcon /icons/a.gif .ps .ai .eps
AddIcon /icons/layout.gif .html .shtml .htm .pdf
AddIcon /icons/text.gif .txt
AddIcon /icons/c.gif .c
AddIcon /icons/p.gif .pl .py
AddIcon /icons/f.gif .for
AddIcon /icons/dvi.gif .dvi
AddIcon /icons/uuencoded.gif .uu
AddIcon /icons/script.gif .conf .sh .shar .csh .ksh .tcl
AddIcon /icons/tex.gif .tex
AddIcon /icons/bomb.gif core

AddIcon /icons/back.gif ..
AddIcon /icons/hand.right.gif README
AddIcon /icons/folder.gif ^^DIRECTORY^^
AddIcon /icons/blank.gif ^^BLANKICON^^


DefaultIcon /icons/unknown.gif

여기서 지정한 확장가가 아닌 경우에 여기서 지정한 기본아이콘으로
보여준다.

 

AddDescription "GZIP compressed document" .gz
AddDescription "tar archive" .tar
AddDescription "GZIP compressed tar archive" .tgz

AddDescription은 서버가 생성한 인덱스의 파일 뒤에 간단한 설명을
표시할 때 사용한다. 이 설정은 IndexOptions가 FancyIndexing으로
설정되었을때만 표시되며, 설정형식은 다음과 같다.
형식 : AddDescription "표시할 설명" 파일확장자

 

ReadmeName README

ReadmeName은 디렉토리목록표시 뒤에 붙여서 보여줄 README파일의
이름을 지정한다.(일종의 꼬릿말)

 

HeaderName HEADER

HeaderName은 디렉토리목록표시 앞에 붙여질 파일의 이름을 지정한다.
(일종의 머릿말)

 

IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t

디렉토리목록을 인덱싱할 때 제외할 파일명을 지정한다. 즉 디렉토리
목록에 포함하지 않을 파일을 지정한다. 쉘스타일의 와일드카드(*, ?)가
허용된다.

 

AddEncoding x-compress Z
AddEncoding x-gzip gz tgz

AddEncoding은 특정브라우즈(Mosaic/X 2.1+)에서 받고있는 중에 정보에
대한 압축해제를 할 수 있도록한다. 단 모든 웹브라우즈에서 이 기능을
제공하는 것은 아니다.

 

AddLanguage en .en
AddLanguage fr .fr
AddLanguage de .de
AddLanguage da .da
AddLanguage el .el
AddLanguage it .it

AddLanguage는 문서의 언어를 지정하게 한다.

 

LanguagePriority en fr de

언어의 우선순위를 내림차순으로 지정한다.

 

AddType application/x-httpd-php3 .php3
AddType application/x-httpd-php3-source .phps
AddType application/x-tar .tgz

AddType은 mime.types의 실제 편집없이도 mime을 설정할 수 있다.

또한 특정 type에 특정 files을 만들게도 할수 있다.

 

AddHandler cgi-script .cgi

AddHandler는 파일확장자를 처리기(Handler)에 매핑(연결)시켜주게 된다.

서버 측면의 include나 CGI outside ScriptAliased directories를 사용하려면

이 라인을 주석처리 하면 된다.

 

AddType text/html .shtml
AddHandler server-parsed  .shtml

server-parsed HTML 파일을 사용하려고 할때

 

 

 

#AddHandle send-as-is asis

Apache의 send-asis HTTP 파일특성의 사용을 위해서는 이 라인을 주석처리할것.

 

#AddHandle imap-file map

server-parsed imagemap 파일을 사용하려고 할때

 

SSI(Server Side Include)문서를 인식하게 하기위한 설정이다. SSI코드가
들어가 있는 문서는 확장자가 *.shtml이다. 시스템의 날짜와 카운터등
CGI프로그램을 하지 않아도 HTML문서에서 단 몇줄로 CGI의 효과를 낼 수
있는 SSI기능을 인식하게끔 하는 설정이다.


#Format: Action media/type /cgi-script/location
#Format: Action handler-name /cgi-script/location

Action은 매칭되는 파일이 호출될때마다 스크립트를 실행시킬 수 있도록
미디어 타입을 정의한다.

 

MetaDir .web

MetaDir은 아파치가 찾을 메타정보파일들의 디렉토리이름을 지정한다. 이
파일들은 문서를 전송할 때 포함되는 HTTP 헤더정보가 포함되어 있다.

 

MetaSuffix .meta

MetaSuffix는 메타정보를 포함하고 있는 접미어의 이름을 지정한다.


에러발생시 응답을 정의할 수 있는 방법을 3가지 나타내고 있다.

    1) 일반적인 텍스트

ErrorDocument 500 "The server made a boo boo.

    2) 지역적인 방향전환

ErrorDocument 404 /missing.html
ErrorDocument 404 /cgi-bin/missing_handler.pl

    3) 외부 방향전환

ErrorDocument 402
http://some.other_server.com/subscription_info.html


  다음의 BrowserMatch는 keepalives기능을 쓰지못하게 하며 HTTP
헤드방식을 설정한다.

BrowserMatch "Mozilla/2" nokeepalive

  이 설정은 Netscape 2.x 또는 이를 따르는 브라우즈에 대하여 KeepAlive
기능을 쓰지 못하게한다.

BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0
force-response-1.0

  이 설정은 잘못구현된 HTTP/1.1과 301또는 302반응에 대하여
KeepAlive를 적절히 제공하지 못하는 마이크로소프트 인터넷익스플로러
4.0b2d에 관한 것이다.

BrowserMatch "RealPlayer 4\.0" force-response-1.0
BrowserMatch "Java/1\.0" force-response-1.0
BrowserMatch "JDK/1\.0" force-response-1.0

  위의 3가지 설정은 기본적인 1.1반응도 처리하지 못하며 HTTP/1.0 스팩을
제한하고 있는 브라우즈에 대하여 HTTP/1.1반응을 하지 못하게 한 것이다.

<Location /server-status>
    SetHandler server-status
    Order deny,allow
    Deny from all
    Allow from www.manualand.co.kr
</Location>

  서버의 상태를 점검할 수 있게하는 설정이다. 이는
"http://www.manualand.co.kr/server-status"와 같은 형식으로 서버의 상태를
점검할 수 있다. "6장. 아파치서버 모니터링"편에서 자세히 설명되어 있다.
여기서 지정한 "SetHandler server-status"의 설정으로 인해 서버
모니터링을 할 수 있는 것이다.

<Location /server-info>
    SetHandler server-info
    Order deny,allow
    Deny from all
    Allow from www.manualand.co.kr
</Location>

  이설정을 위해서는 mod_info.c가 적재되어야 하며, 이는
"http://www.manualand.co.kr/server-info"와 같은 방식으로 서버의 정보를
볼 수 있다. 위에서 설정한 server-status와 함께 실행중인 웹서버의
상태점검을 위한 것이다.

<Location /cgi-bin/phf*>
    Deny from all
    ErrorDocument 403 http://phf.apache.org/phf_abuse_log.cgi
</Location>

  아파치 1.1이전 버전의 오래된 버그에 대한 악용이 있을시에는 지정한곳
(http://phf.apache.org/phf_abuse_log.cgi) 으로 방향을 전환시킨다.


<IfModule mod_proxy.c>
ProxyRequests On

  아파치 웹서버를 Proxy서버로 사용할 때 on을 해줘야 한다. 즉   
프락시서버 지시자로서 프락시서버를 on 시킨다.

<Directory proxy:*>
    Order deny,allow
    Deny from all
    Allow from .your_domain.com
</Directory>

ProxyVia On

  HTTP/1.1 "Via:"헤드처리를 활성화시킬 것인지 비활성화 시킬것인지를
지정한다. Off, On, Full, Block중 하나가 올 수 있으며 Full은 서버버전을
포함하며, Block은 나가는 모든 것에 대해 Via:헤더를 제거한다.

CacheRoot "/usr/local/apache/proxy"
CacheSize 5
CacheGcInterval 4
CacheMaxExpire 24
CacheLastModifiedFactor 0.1
CacheDefaultExpire 1
NoCache a_domain.com another_domain.edu joes.garage_sale.com

  이 설정은 캐시기능을 활성화 하기 위한 것이다.

### Section 3: 가상호스트 설정

  여러분의 시스템에서 여러개의 도메인이나 호스트네임을 설정하여
관리하고자 한다면 <VirtualHost>부분을 설정해 줘야 한다. 가상호스트에
대한 정보는 http://www.apache.org/docs/vhosts/를 참조해 보면 좀더
자세한 정보를 얻을 수 있다.  '-S'옵션을 사용함으로써 가상호스트의 설정에
대한 점검을 할 수 있다.  name-based 가상호스트를 사용하길 원한다면
적어도 한 개이상의 IP Address를 정의할 필요가 있다. "4-2절의 내용"과
"10장.웹호스팅 서비스를 위한 가상호스트"편에서 자세히 설명되어 있다.

NameVirtualHost 12.34.56.78:80
NameVirtualHost 12.34.56.78

<VirtualHost www.manualand.co.kr>
    ServerAdmin webmaster@manualand.co.kr
    DocumentRoot /home/sspark/public_html
    ServerName www.manualand.co.kr
    ErrorLog /home/sspark/public_html/aw/error_log
    CustomLog /home/sspark/public_html/aw/access_log common
</VirtualHost>

        ServerAdmin은 해당서버의 관리자 전자우편이며,
        DocumemtRoot는 해당서버의 홈디렉토리이며,
        ServerName은 해당서버의 도메인이며,
        ErrorLog는 해당서버의 에러파일 위치이며
        CustomLog는 로그파일위치와 포맷을 지정한 것이다.

<VirtualHost _default_:*>
</VirtualHost>

  Default 가상호스트 설정으로 위에서 설정되지 않은 다른 모든 호스트에
대해서 응답을 하고자 할 경우설정해 준다.

'OS > LINUX' 카테고리의 다른 글

[phpschool 펌] [서버]대량 메일 발송???  (0) 2004.12.17
뻘짓거리.. ㅡㅡ;  (0) 2004.12.16
[엠파스 펌] netstat 에서 state 설명  (0) 2004.12.02
[펌] FreeBSD설치 안내서  (0) 2004.11.11
[펌] Installing Oracle9i on FreeBSD  (0) 2004.11.11
Posted by tornado
|
용문집 (2299-4648~9) : 절대미각대비 안창살, 육회 95점...나머지 80점...



이곳 위치는 도살장으로 유명한...마장동...
사진 보시다시피, 마장동 도살장 바로뒤에 위치한 현대아파트 상가의 2층입니다.
아시는 분들은 다 아시는 곳입니다.
몇번 TV에도 방영되었다는데...그런건 중요하지 않고...

주변경관은 정말정말...뻘쭘 그 자체입니다...
자 보세요...



전에 비오는 날 여기 왔다가, 택시에서 내리는 순간 동네자체에서
피비린내가 올라오는데 죽겠더만요...
아마 모르긴 몰라도 여기 마장동 현대아파트는 집값이 절대 오르지 않을것 같습니다...

그 비린내를 좀만 참으시고 일단 상가안으로 침투하시면 별세계가 기다립니다.



뭐 가격은 여느 고깃집하고 별반 차이는 없어보이지만...
무슨 비책으로 좋은 고기들을 갖다놓으시는지...
제목에 써놓은바와 같이 도살장을 드나드시는 도살업자분들이 많이 다니신다는 고깃집입니다.
그만큼 맛은 정평이 나있죠...



같이 간 사람들때문에 어쩔 수 없이 양념 갈비를 먹었습니다만,
실은 안창살의 마블링이 예술입니다...(흑, 사진이 없어요...)

안창살의 매력은 '딱 한번 뒤집는다'인거는 아실겁니다.
한번 쭈욱...고기를 깔고...조금 익었다 싶었을때
한번만 뒤집어서...조금더 익히면...핏물이 위로 송송송 올라옵니다.
그때를 놓치지 않고 소금장에 살짝 찍어먹으면...ㅠ.ㅠ (어우 배고파)



하지만 절대 빼먹을 수 없는 아이템...
뷔페식당에서 조차 입맛없을때 가장 땡기는 아이템...
바로 '육회'입니다...
빡빡 우겨서 이것만큼은 꼭 먹고왔죠...

보이시죠? 저 시뻘건 육질과 채썬 배...약간의 참기름...
번덕번덕 빛나는 노른자...
확 비벼서 먹으면 정말 죽습니다...
이럴땐 반드시 소주와 함께...(딴지일보 초기화면같당...)



밑반찬으로 나오는 간과 천엽도 제가 좋아하는 것이구요...
더 달라고 하면, 안줍니다. 메뉴판에도 나와있으니
시켜드세요...

참고로, 냉면은 꽝이오니(특히 물냉면)
좋았던 기분 식사로 꺾지 마시고...
그냥 밥드시고 나오세요~~~ *^^*

'이것저것 > 낙서장' 카테고리의 다른 글

3800 히트 이벤트!!!  (0) 2004.12.08
[허가없는 링크] 허걱...  (0) 2004.12.08
[펌] 힘들다구 불평하지 말아요..  (0) 2004.12.03
3700 히트 이벤트!!!  (0) 2004.12.03
드뎌 다 읽었당  (0) 2004.11.25
Posted by tornado
|

1965년생인 이병우는 85년 조동익과 함께했던 그룹 어떤날 의 기타리스트로 유명하며, 양희은의 사랑, 그 쓸쓸함에 대하여 , 들국화의 오후만 있던 일요일 의 작곡자로도 또한 많은 팬을 갖고있다. 89년 홀연히 유학길에 오른 그는 오스트리아 빈 국립대학 클래식 기타과를 수석 졸업했으며 미국의 피바디 컨서버토리 대학에서 기타를 전공하며 기타 공부에 매진했다. 대중음악과 클래식을 넘나들며 자유로운 연주를 팬들에게 선사한다. 지금까지 4장의 솔로앨범을 발표했다.

 

회사에서의 심야 호출~ 씩씩하게 달려온 홀릭군....

원래 야간비행을 올리려 했으나 런닝 타임이 너무 길군요.

 

 


 이병우 - 새

Posted by tornado
|

[link] dhtml

DHTML 2004. 12. 3. 16:08
Posted by tornado
|

'이것저것 > 낙서장' 카테고리의 다른 글

[허가없는 링크] 허걱...  (0) 2004.12.08
[펌] [마장동] 용문집-도살업자들이 드나드는 고기집!!!  (0) 2004.12.07
3700 히트 이벤트!!!  (0) 2004.12.03
드뎌 다 읽었당  (0) 2004.11.25
3600 히트 이벤트!!!  (0) 2004.11.24
Posted by tornado
|
[방문히트이벤트] 3700 히트를 잡아라!
netby님이 당첨되었습니다.
Posted by tornado
|
NETSTAT [-a] [-e] [-n] [-s] [-p proto] [-r] [interval]
-a 모든 커넥션 - 모든 접속 및 listen 포트 정보 알아내기
-e Ethernet 통계정보
-n 주소와 포트 정보
-p proto 지정된 프로토콜과 관련된 커넥션 정보
   netstat -s -p tcp 3 (tcp관련된 패킷량을 3초 마다 다시 보여주기)
-r 라우팅 테이블 정보
interval 통계 정보를 지정 시간마다
 

netstat 상태확인시 서버 프로그램에서는 connection갯수가 11개이고
                   클라이언트 쪽에는 conection갯수가 10개인 경우
서버와 클라이언트가 연결을 끊을때
1. 클라이언트가 서버에게 연결을 끊겠다고알린다.
2. 서버는 클라이언트에게 알았다고 대답한다.
3. 클라이언트는 이 응답을 받고 연결을 끊는다.
4. 하지만 서버는 연결을 바로 끊지않고 일정시간동안 연결을 유지시킨다
   - 서버가 클라이언트로부터 연결을 끊겠다는 신호를 받고 알았다고 응답패킷을
     보냈는데 클라이언트가 이것을 받지 못하고 다시 서버측에 연결을 끊겠다고 신호를 보낼때가 있다.
     이때 서버쪽에서 바로 연결을 끊어버렸다면 이 신호를 무시하게 될테고,
     클라이언트는 연결을 끊기 위해 서버쪽에 계속 신호를 보낼수 있기 때문이다.

State
state는 TCP Connection state를 말하는 것으로 아래와 같은 의미를 가진다.
CLOSED      - TCP 소켓의 최초상태
              또는 서버로 SYN을 보낸후 SYN-ACK를 못 받아서 TIME OUT 된 상태
CLOSE_WAIT  - 애플리케이션이 FIN패킷을 받고 ACK를 보낸상태
SYN_SENT    - TCP소켓을 성립시키기 위해 SYN 패킷을 서버쪽으로 보낸 상태
ESTABLISHED - SYN을 보내고 SYN-ACK를 받은후 ACK패킷을 서버쪽으로 보낸 상태
FIN_WATE_1  - 소켓 종료를 위해 FIN 패킷을 보낸 상태
FIN_WAIT_2  - FIN 패킷을 보내고 FIN_ACK를 받은 상태
TIME_WAIT   - FIN_WAIT_2에서 상대가 FIN을 보내고 그것에 대해 ACK로 답한후의 상태
              LAST_ACK이 손실될 경우를 대비해서 2MSL을 대기한 후 CLOSED로 바뀐다.

LISTEN
서버 애플리케이션이 적재되어 수동적인 모드로 포트를 개설하였음을 의미.
TCP는 연결 요청이 수신 되기를 기다림

SYN-SENT
로컬 시스템의 클라이언트 애플리케이션이 원격 호스트에 능동적인 개설을
요청. TCP는 Synchronize flag 를 설정한 시작 세그먼트를 전송 하였으며, 원격 시스
템도 역시 Synchronize flag 를 설정한 시작 세그먼트로 응답할 것을 기다림.

SYN-RECEIVED
서버의 TCP가 원격 클라이언트로부터 Synchronize flag가 설정된 시작 세
그먼트를 수신하였고 자신의 시작 세그먼트로 응답 하였으며, 그 세그먼트에 대한 확인
메세지를기다림.

ESTABLISHED
가상회선이 작동. 3단계 핸드셰이킹 과정이 완료되면 두 시스템은 이 상태
에 들어감.

FIN-WAIT-1
로컬 애플리케이션은 가상 회선에 능동적인 종결을 요청하였으며, TCP는
Finish flag가 설정된 종결 세그면트를 전송. 그러나 TCP는 아직도 원격 시스템이 세그
먼트에 대한 확인 메세지와 자신만의 종결 세그먼트로 응답하기를 기다림. 회선이 완
전히 종결될 때까지 원격 시스템으로부터 데이터는 수신하지만, 추가적인 데이터를 전
송하지는않음.

COLSE-WAIT
(FIN-WAIT-1 의 설명과 같이) Finish flag 가 설정된 종결 세그먼트가 수신
되었고 로컬 TCP는 그 세그먼트에 대한 확인 메세지를 송신 시스템에 전송함. 그러
나 로컬 TCP는 로컬 애플리케이션에서 작업을 종료하지않아 자신의 종결 세그먼트를 생
성하지 못함
 
FIN-WAIT-2
(FIN-WAIT-1 의 설명과 처럼) 로컬 TCP는 Finish flag 가 설정된 종결 세그
먼트를 전송하였으며, (WAIT-CLOSE 의 설명대로) 원격 시스템으로 부터 그 세그먼
트에 대한 확인 메세지를 수신함. 그러나 원격 애플리케이션이 아직 작업을 종료 하지 않
아 원격TCP가 자신의 종결 세그먼트를 생성하지 못하고 있는 상태임.
 
LAST-ACK
(FIN-WAIT-1의 설명과 같이) Finish flag 가 설정된 종결 세그먼트가 수신되
었고, 로컬 애플리케이션은 회선의 종결에 합의하여 자신도 종결을 요청함. 그 결과
로컬 TCP는 Finish flag 가 설정된 자신의 종결 세그먼트를 전송 하였으며, 이 세그먼
트에 대한 확인 메세지가 수신되면 종결됨.
 
CLOSING
이 상태는 흔하지 않으며, 일반적으로 세그먼트가 네트워크에서 분실되었다
는것을 나
타냄. 이런 경우 로컬 TCP는 (FIN-WAIT-1 의 설명과 같이) Finish flag 가
설정된 종결 세그먼트를 전송 하고 (LAST-ACK 의 설명과 같이) 원격 시스템의 종결
세그먼트도수신하였지만, FIN-WAIT-1 단계에서 전송한 세그먼트에 대한 확인 메세지
가 수신되지않은 상태임. 이 상태는 보통 확인 메세지가 전송 도중 분실되었다는 의미임.
 
TIME-WAIT
회선의 종결 절차가 완결되었으나 TCP 는 분실되었을지 모르는 느린 세그
먼트를 위해 당분간 소켓을 열어 놓은 상태로 유지. 이 상태는 새로운 연결이 기존의 연결
에서 사용된 일련번호를 다시 사용하는 것을 막음. 원격 시스템이 종결하는 호스트
로부터 더이상 데이터를 수신할 가능성이 없으므로, 이 상태는 능동적인 종결을 요청
한 호스트에서만 나타남.
 
CLOSED
아무일도 발생하지 않음. 회선은 종결되었고, TCP는 그 가상 회선에 사용하
였던 모든자원을 놓아줌. 이 상태를 보여줄 수 있는 가상 회선이 없으므로 아무 일도
발생하지 않음.

'OS > LINUX' 카테고리의 다른 글

뻘짓거리.. ㅡㅡ;  (0) 2004.12.16
[펌] [Apache] httpd.conf 환경설정  (0) 2004.12.08
[펌] FreeBSD설치 안내서  (0) 2004.11.11
[펌] Installing Oracle9i on FreeBSD  (0) 2004.11.11
[펌] FreeBSD 5.0 설치하기  (0) 2004.11.11
Posted by tornado
|