목차
1. APACHE - httpd.conf
1-1 httpd.conf 개요
1-2 httpd.conf : Directory 설정
1-3 httpd.conf : Document Root
1-4 httpd.conf : 가상 호스트
2. 다중 행, 다중 열 서브 쿼리
2-1 다중 행 서브 쿼리
2-2 다중 열 서브 쿼리
3. 집합 연산자
3-1 집합 연산자 개요
4. 단일 행 함수와 문자 함수
4-1 단일 행 함수
4-2 문자 함수
4-3 문자함수 : 문자 치환 함수
1. APACHE - httpd.conf
1-1 httpd.conf 개요
● httpd.conf 파일의 구문 점검
# /app/apache/bin/httpd ‐t
- httpd.conf 파일의 문법상의 오류를 찾아준다.
- "Syntax OK" : 오류 없음 표시이다.
● 전역 환경 설정
- ServerRoot “/app/apache”
:웹서버의 설정파일로, 로그 파일 등이 저장되는 최상위 디렉토리이다.
- Timeout 120
: 클라이언트와 아무런 메시지가 없을 때에 오류로 처리되는 초단위 시간을 설정한다.
- MaxClients 150
: 접속 가능한 최대 client 수를 설정한다. (회사 인원이 1000명인 경우 150이면 충분하다.)
- Startservers 20
: 초기 서버 프로세스의 수를 설정한다.
- MinSpareServers / MaxSpareServers
: 대기 상태의 프로세스 수를 설정한다.
- ServerName [명칭]
: DNS나 hosts 파일에 등록된 Apache 서버의 이름을 설정한다.
● 기본 서버 구성
- DocumentRoot “/app/apache/htdocs”
: 웹서버의 홈 디렉토리이다.
- DirectoryIndex index.html index.java index.php
: 메인페이지 파일명으로, 최초로 index.html을 참조한다. 이 파일이 없다면 index.java를, 이 또한 없다면 index.php를 참조한다.
- ErrorLog logs/error_log
: 웹서버에 문제가 발생 시에 에러를 기록하는 로그파일이다.
- CustomLog logs/access_logcombind
: 외부에서 접근한 기록에 대한 로그파일이다.
- UserDir public_html
: 개인 홈 디렉토리 지정파일이다.
- ServerAdmin root@localhost
: 관리자의 메일주소
1-2 httpd.conf : Directory 설정
웹서버는 디렉토리 단위로 설정한다. 즉, 해당 디렉토리에 엑세스를 할 수 있도록 설정한다.
이때 초기 서비스 파일은 엑세스를 허용해야 서버에 접속이 가능하다.
ex)
<Directory "/app/apache/htdocs">
Options Indexes FollowSymLinks
AllowOverrideNone
Order allow, deny
Allow from all
</Directory>
● Options 항목
- ALL : 가능한 모든 옵션을 다 사용한다.
- None : 아무런 옵션도 없다.
- Indexes : 메인 페이지가 없는 경우 파일 목록을 보여준다.
- FollowSymLinks : 디렉토리의 심볼릭 링크를 이용한다.
● AllowOverride 항목
- 현재는 사용하지 않는다.
● Order 항목
- 접근 권한 적용 순서를 설정한다.
- Order allow, deny 문장의 경우 허용관련 설정 후 거부관련 설정을 하라는 뜻이다.
ex) 192.168.123. 으로 시작하는 IP를 제외하고 모든 접속을 막는다.
Order deny, allow
Deny from all
Allow from 192.168.123.
※ Require를 이용한 설정도 가능하다.
Require all [denied | granted] : 기본 설정
Require [not] ip ip_주소 : IP별 설정
ex) 192.168.123.0 네트워크를 제외하고 모두 접속을 허용한다.
Require all granted
Require not ip 192.168.123.0/24
● 각 사용자의 개인 홈 디렉토리에 대한 설정
<Directory "/home/*/public_html">
Options Indexes FollowSymLinks
AllowOverride None
Order allow, deny
Allow from all
</Directory>
1-3 httpd.conf : Document Root
HTTPD 서버 관리와 웹페이지 관리는 서로 다른 책무이므로 반드시 분리해 구성한다.
- 웹페이지 관리자가 시스템 디렉토리에 접근해서는 안된다.
- 웹페이지 관리자 계정 web 계정을 생성하고 홈 디렉토리 내에서 관리가 이뤄지도록 한다.
관리자 정보 예시
- 계정 : webmaster(group:web)
- Document Root : /home/httpd/html
웹페이지는 웹페이지 관리자의 직무 영역이므로 웹페이지 관리자의 홈디렉토리를 Document Root 경로에 마운트하여 관리한다.
1-4 httpd.conf : 가상 호스트
하나의 웹서버에 둘 이상의 호스트가 존재할 수 있다. 즉, 하나의 웹서버에서 둘 이상의 서로 다른 ip주소의 페이지들을 가질 수 있다.
● IP 기반 호스트
IP 기반으로 호스트를 설정할 경우 httpd.conf 파일에 다음과 같이 설정할 수 있다.
<VirtualHost 접속IP>
DocumentRoot 홈디렉토리
ServerName IP 또는 도메인명
</VirtualHost>
ex)
<VirtualHost 192.168.10.222>
DocumentRoot /home/httpd/sec
ServerName 192.168.10.222
</VirtualHost>
<VirtualHost 192.168.10.333>
DocumentRoot /home/httpd/itc
ServerName 192.168.10.333
</VirtualHost>
- <VirtualHost> 항목에는 모든 전역 설정 파라미터가 기술 가능하다.
- 추가로 DNS 서버 쪽에 기존과 같이 해당 ip에 대한 도메인 설정을 하고, 아파치 서버쪽에 각각의 DocumentRoot 경로에 대한 퍼미션을 지정하여 해당 페이지에 접속할 수 있다. (1-2 httpd.conf : Directory 설정 부분)
+
- 'ifconfig 이더넷인터페이스 IP' 명령어로 추가 인터페이스를 생성해야 페이지로 접속이 가능하다.
ex) ifconfig ens160:0 192.168.10.333 (2025-02-28 추가)
2. 다중 행, 다중 열 서브 쿼리
2-1 다중 행 서브 쿼리
SELECT 컬럼...
FROM 테이블
WHERE 컬럼다중_행_연산자(SELECT 문장: Sub query문)
. . . .;
- 서브 커리에 여러 행이 검색되는 경우 사용한다.
- 다중 행 연산자를 이용한다.
IN : 검색된 값 중 하나만 일치하면 된다.
ANY : 부등호와 쓰이며, 검색된 값 중 일부와 조건이 부합하면 된다.
ALL : 부등호와 쓰이며, 검색된 값 전체와 조건이 부합해야 한다.
● IN 연산자를 이용한 다중 행 서브 쿼리
ex)
화학과 교수의 부임일과 동일한 날 입사한 사원의 명단을 검색한다.
20번 부서원과 동일한 관리자로부터 관리받는 사원을 검색한다.
SQL> SELECT eno 사번, ename 이름
2 FROM emp
3 WHERE hdate IN (SELECT hiredate
4 FROM professor
5 WHERE section = '화학');
SQL> SELECT * FROM emp
2 WHERE mgr IN(SELECT mgr FROM emp
3 WHERE dno= '20')
4 AND dno != 20; //20번 부서원까지 출력되지 않도록 주의한다.
● ANY, ALL을 이용한 다중 행 서브 쿼리
ex)
10번 부서원들보다 급여가 낮은 사원을 검색한다.
SQL> SELECT eno 사번, ename 이름, dno 부서번호
2 FROM emp
3 WHERE sal< ALL (SELECT sal
4 FROM emp
5 WHERE dno = '10');
- 서브 쿼리를 다음과 같이 그룹함수로 대체하여 사용할 수 있다. 그룹함수의 가독성이 더 우수하여 주로 그룹함수를 이용한다.
(SELECT MIN(sal) FROM emp WHERE dno= '10');
2-2 다중 열 서브 쿼리
SELECT 컬럼...
FROM 테이블
WHERE (컬럼1, 컬럼2, ...) IN(SELECT 문장: Sub query문)
. . . .;
- 서브 쿼리의 SELECT 문에 여러 개의 컬럼을 검색한다.
- 이 경우 반드시 비교 대상 컬럼과 1:1 대응이 돼야한다.
- 서브 쿼리의 검색 결과가 한 행이 나온다면 '=' 연산자 사용도 가능하나, 되도록 'IN' 연산자를 이용한다.
ex)
김선유와 부서 및 업무가 동일한 같은 사원을 검색한다.
SQL> SELECT eno 사번, ename 이름, dno 부서번호, job 업무
2 FROM emp
3 WHERE (dno, job) IN (SELECT dno, job
4 FROM emp
5 WHERE ename = '김선유')
6 AND ename != '김선유';
SQL> SELECT eno 사번, ename 이름, dno 부서번호, job 업무
2 FROM emp
3 WHERE dnoIN (SELECT dnoFROM emp WHERE ename = '김선유')
4 AND job IN (SELECT job FROM emp WHERE ename = '김선유')
5 AND ename != '김선유';
위의 두 문장은 같은 기능을 수행하는 것처럼 보이나, 김선유가 두 명 이상이라면 결과값이 다르게 나오게 되므로 되도록이면 'IN' 연산자를 사용하도록 한다.
3. 집합 연산자
3-1 집합 연산자 개요
SELECT ...
[UNION ALL | UNION | INTERSECT | MINUS]
SELECT ...
- 둘 이상의 SELECT 문의 결과를 집합 연산하는 것이다.
- 검색 결과의 헤더는 앞쪽 SELECT 문에 의해 결정된다.
- 두 SELECT 문의 컬럼 개수와 데이터 타입이 반드시 일치해야한다.
연산자 | 의미 | 결과 |
UNION | 합집합 | 검색된 결과의 합으로 중복이 제거된다. |
UNION ALL | 검색된 결과의 합으로 중복을 허용한다. | |
INTERSECT | 교집합 | 양쪽 모두에 포함된 결과만 검색한다. |
MINUS | 차집합 | 첫 번째 검색 결과에서 두 번째 검색 결과를 제외하여 검색한다. |
- UNION과 UNION ALL 중 마음대로 선택하여 사용할 수 있다.
- INTERSECT와 MINUS는 사실상 거의 쓰이지 않는다.
●집합 연산자를 이용한 검색
ex)
2000년 이후에 입사한 사원과 부임한 교수의 명단을 부임일 순으로 검색한다.
SQL> SELECT pno 번호, pname 이름, hiredate 입사일_부임일
2 FROM professor
3 WHERE hiredate >= '2000/01/01'
4 UNION ALL
5 SELECT eno, ename, hdate
6 FROM emp
7 WHERE hdate >= '2000/01/01'
8 ORDER BY 3;
- 헤더는 첫 번째 SELECT 문에 의해 결정된다.
- ORDER BY 절은 SELECT 문 끝에 추가한다.
pno나 eno가 아니라 반드시 번호를 이용해서 정렬한다.
4. 단일 행 함수와 문자 함수
4-1 단일 행 함수
- 단일 행 함수를 이용하여 검색된 데이터에 대해 각 행별로 연산된 결과값을 얻을 수 있으며 중첩이 가능하다.
- 응용 프로그램의 오류를 줄이고 개발 시간을 단축할 수 있다.
- 인수로는 컬럼 명, 수식, 변수 등을 사용할 수 있으며, 인수 개수는 함수마다 다르다.
- SELECT 절이나 WHERE 절 등 값이 필요한 거의 모든 구문에 사용이 가능하다.
※ 단일 행 함수의 종류
문자 함수, 숫자 함수, 날짜 함수, 변환 함수, 일반 함수 등
- 숫자 함수와 날짜 함수는 같은 함수이다. 숫자를 주면 숫자 함수, 날짜를 주면 날짜 함수이다.
- 변환 함수는 포맷을 맞춰주는 기능으로 데이터를 출력할 때 반드시 써야한다.
4-2 문자 함수
문자 함수는 문자 데이터를 받아 데이터를 리턴해주는 함수이다.
우리가 보는 화면에 출력되는 값은 모두 문자이므로 알맞은 포맷을 지정하여 사용한다.
다음과 같은 문자 함수들이 있다.
함수명 | 기능 | 함수명 | 기능 |
LOWER | 문자열을 소문자로 변환한다. | INSTR | 문자의 위치를 반환한다. INSTR(문자열, 검색문자, 시작위치, 횟수) |
LOWER(‘ORACLE’) → oracle | INSTR(‘ORACLE’, ‘A’) → 3 | ||
UPPER | 문자열을 대문자로 변환한다. | TRIM | 문장 앞뒤의 글자를 잘라낸다. TRIM([leading | trailing | both] 제외문자 FROM 문자열) |
UPPER(‘oracle’) → ORACLE | TRIM(‘o’ FROM ‘oracle’) → racle | ||
INITCAP | 첫 번째 문자는 대문자로, 나머지는 소문자로 변환한다. | LENGTH LENGTHB |
문자열의 길이나 byte를 반환한다. |
INITCAP(‘oracle’) → Oracle | LENGTH(‘가나’) → 2 LENGTHB(‘가나’) → 4 | ||
SUBSTR | 문자열 내 지정된 위치의 문자열을 검색한다. SUBSTR(문자열, STR,CNT) |
LPAD RPAD |
지정된 문자열의 길이만큼 빈 부분에 문자를 채운다. LPAD(문자열, 출력폭, 채움문자) |
SUBSTR(‘oracle’, 1, 2) → or | LPAD(‘20000’, 10, ‘*’) → *****20000 |
- SUBSTR(‘oracle’, 1, 2) 은 oracle의 첫 번째부터 두 글자를 추출한다.
- TRIM('문장') 은 문장 앞뒤에 공백이 있으면 지운다.
- ed 를 이용하여 썼던 SQL문을 수정할 수 있다. / 를 이용하여 다시 실행시킬 수 있다.
● 문자 함수를 이용한 검색
ex)
부서명과 문자열의 길이를 출력한다.
SUBSTR 함수를 이용해서 사원 이름의 일부 내용만을 검색한다.
다양한 방법으로 'a'가 나오는 위치를 출력한다.
SQL> SELECT dname, LENGTH(dname), LENGTHB(dname)
2 FROM dept;
SQL> SELECT ename, SUBSTR(ename,2),
2 SUBSTR(ename,‐2),
3 SUBSTR(ename,1,2),
4 SUBSTR(ename,‐2,2)
5 FROM emp;
SQL> SELECT INSTR('database','a'),
2 INSTR('database','a',3),
3 INSTR('database','a',1,3)
4 FROM dual;
- SUBSTR(ename,‐2,2): 뒤에서 두 번째 글자부터 두 글자를 출력한다.
- INSTR('database','a',1,3): 첫 번째 글자 이후부터 세 번째로 나오는 a의 위치를 출력한다.
ex)
부서명의 마지막 글자를 제외하고 검색한다.
SQL> SELECT dname, SUBSTR(dname, 1, LENGTH(dname)‐1) dname
2 FROM dept;
- dname의 첫 번째 글자부터 (글자수-1)번째 글자까지 출력한다.
- SQL에서 지원하는 여러 함수들은 필요에 따라 위와 같이 중첩 사용이 가능하다.
4-3 문자함수 : 문자 치환 함수
단일행 | 기능 |
TRANSLATE | 문자 단위로 치환된 값을 반환한다. TRANSLATE(문자열, 검색문자, 치환문자) |
TRANSLATE(‘oracle’, ‘a’,’#’) → or#cle | |
REPLACE | 문자열 단위로 치환된 값을 반환한다. REPLACE(문자열, 검색문자열, 치환문자열) |
REPLACE(‘oracle’, ‘or’, ‘##’) → ##acle |
- TRANSLATE 는 특수한 상황에 사용한다. 그냥 쓰지 않는 것이 좋다.
- REPLACE 를 주로 많이 사용한다.
- 각각 '문자'를 변환하는 것과 '문자열'을 변환하는 것이므로 그 차이를 주의한다.
ex)
원문의 'Wo'를 '--'로 변환한다.
SQL> SELECT TRANSLATE('World of Warcraft', 'Wo', '‐‐') Translate,
2 REPLACE('World of Warcraft', 'Wo', '‐‐') Replace
3 FROM dual;
- TRANSLATE 는 'W' 와 'o'를 모두 '-' 와 '-' 로 각각 변환한다.
- REPLACE 는 'Wo' 문자열을 '--' 로 변환한다.
'일일 정리' 카테고리의 다른 글
APACHE - 가상 호스트, 단일 행 함수 날짜 함수, 단일 행 함수 변환 함수, 그룹 함수와 GROUP BY (0) | 2025.03.04 |
---|---|
단일 행 함수 - 숫자 함수와 날짜 연산, PHP - 2차원 배열 (0) | 2025.02.28 |
APACHE, 자기 참조 조인과 외부 조인, 단일 행 서브 쿼리 (0) | 2025.02.26 |
JOIN - 등가 조인과 비등가 조인, 조인문 작성 요령 (0) | 2025.02.25 |
도메인 위임, SQL 다양한 조건 검색, PHP 배열(배열의 구조와 정의) (0) | 2025.02.23 |