일일 정리

도메인 위임, SQL 다양한 조건 검색, PHP 배열(배열의 구조와 정의)

mysecurity 2025. 2. 23. 00:15

목차

1. 도메인 위임

1-1 하위 도메인 생성 및 연결

 

2. SQL 다양한 조건 검색

2-1 NULL과 비교 연산

2-2 BETWEEN_AND 연산자

2-3 IN연산자

2-4 LIKE연산자

 

3. PHP 배열

3-1 PHP 배열 준비

3-2 배열의 구조와 정의

 

 

1. 도메인 위임

1-1 하위 도메인 생성 및 연결

각 DNS 서버는 하위에 독립적인 하부 도메인을 더 둘 수 있다. 최상위 DNS 서버로부터 각 DNS 서버는 할당된 도메인에 대해 독립적이며 하위 도메인에 대한 권리를 가진다.

 

기존 DNS 서버에 하위 도메인 서버를 만들 경우 기존 서버 측에 할 설정은 다음과 같다.

 

① 기존 ast09.sec.zone 파일에 다음과 같이 하위 도메인에 대한 정보를 추가한다.

 st.ast09.sec.       IN   NS   ns.st.ast09.sec.
 ns.st.ast09.sec.    IN   A    192.168.10.142

 

② 지정된 ip에 DNS 서버를 구성한다.

// 하위 도메인 서버의 zone 파일 //
$TTL    1D
@   IN   SOA  ns.st.st09.sec.   root.ns.st.ast09.sec. (
                                   1         ; Serial
                                   1D        ; Refresh
                                   1H        ; Retry
                                   1W        ; Expire
                                   3H )      ; Minimum
; Name Server
              IN     NS       ns.st.ast09.sec.
; Host address
              IN     A        192.168.10.142
ns            IN     A        192.168.10.142
www           IN     A        192.168.10.143

 

③ 상위 서버를 이용하여 하위에 등록된 도메인을 테스트한다.

상위 도메인 ~.141을 통한 하위 도메인 테스트 화면

 

2. SQL 다양한 조건 검색

2-1 NULL과 비교 연산

NULL은 값이 지정되지 않은 것이므로 비교 연산자(=, <, >)를 사용할 수 없다.

NULL에 대한 직접 검색은 다음 연산자를 이용한다.

‐ 컬럼 IS NULL

‐ 컬럼 IS NOT NUL

 

ex)

보너스가 결정되지 않은 사원을 검색한다.

SQL> SELECT * FROM emp WHERE comm IS NULL;

 

 

2-2 BETWEEN_AND 연산자

SELECT * | 컬럼, ... FROM 테이블 WHERE 컬럼 BETWEEN 값1 AND 값2 ORDER BY 컬럼...

 

- '컬럼 >= 값1 AND 컬럼 <= 값2' 와 동일하다. (between_and가 가독성이 더 높다.)

‐ 컬럼의 값이 값1에서 값2 사이의 값을 검색한다.

‐ 값1은 반드시 값2보다 작아야 한다. (음수를 입력할 때 주의한다.)

 

ex)

1992년에서 1996년 사이에 입사한 사원을 검색한다.

 SQL> SELECT * FROM emp WHERE hdate BETWEEN '1992/01/01' AND '1996/12/31' ORDER BY hdate;

 

위와 같이 작성한 경우, 데이터베이스의 프로그래밍에 따라 잘못된 값이 나올 수 있다.

입사일자가 '시:분:초' 가 '00:00:00' 으로 설정되도록 프로그래밍되어 있는 경우, 1996/12/31:00:00:00 이후 입사한 사원은 검색되지 않는 문제가 발생한다.

이와 같은 문제를 방지하기 위해 프로그래밍할 때 필요없는 부분은 잘라내는 것이 중요하다. 

 

2-3 IN연산자

SELECT * | 컬럼, ... FROM 테이블 WHERE 컬럼 IN (값1, 값2 ...) ORDER BY 컬럼....

 

‐ 값 중에 일치하는 값이 하나라도 있으면 검색된다.

‐ OR 연산자와 = 연산자로 교환 가능하다. (IN 연산자의 가독성이 더 좋다.)

- 서브 쿼리, 파티션 등 여러 기능에 사용된다.

 

ex)

10, 20번 부서 사원을 검색한다.

 SQL> SELECT * FROM emp WHERE dno IN ('10', '20') ORDER BY dno;

 

2-4 LIKE연산자

SELECT * | 컬럼, ... FROM 테이블 WHERE 컬럼 LIKE '리터럴' ORDER BY 컬럼...

 

‐ LIKE 연산자는 패턴 연산자의 일종으로 일부 문자열만을 이용해서 대상을 검색한다.

‐ 와일드 문자를 사용한다.

    % : 문자열을 검색한다. 이때 공백도 포함한다.

     _ : 문자를 검색한다.

 

설명 검색 대상
'이%' '이'로 시작하는 모든 문자열 이, 이과, 이산대수, 이불 ...
'%김%' '김'이 들어가는 모든 문자열 김, 김장, 돌김, 되새김질 ...
'_장' '장'으로 끝나는 두 글자 단어 김장, 쌈장, 된장, 대장 ...
'__화' '화'로 끝나는 세 글자 단어 무궁화, 운동화, 들국화 ...
'%이#%%' ESCAPE 코드를 '#' 으로 지정한 경우, '이%' 가 포함된 문자열
'_#%_' ESCAPE 코드를 '#' 으로 지정한 경우, '%'가 포함된 세 글자 단어

 

ex)

이름이 '하늘'인 사원을 검색한다.

성과 이름이 각각 한 글자인 사원을 검색한다.

SQL> SELECT * FROM emp WHERE ename LIKE '%하늘';

SQL> SELECT * FROM emp WHERE ename LIKE '__';

 

단, 성과 이름이 한 컬럼에 저장되어 있으면 첫 문장과 같이 검색 시 성이 '하', 이름이 '늘' 인 사람도 검색되므로 원하는 검색결과에 맞지 않는다.
이러한 문제를 방지하기 위해 성과 이름을 다른 컬럼에 저장해야 한다.

 

3. PHP 배열 

3-1 PHP 배열 준비

● 반복문 심화

for 문과 if 문을 조합하여 다음과 같이 입력한 수까지의 소수를 출력하는 프로그램을 작성해볼 수 있다.

					// num까지의 소수 출력 HTML //

<html>
<head>
<title>소수판별.html 입력 폼파일</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
</head>

<form method="post" action="sosu.php">
      num까지의 소수를 출력한다 : <input type="text" name="num"><br>
        <input type="submit" name="확인" value="확인">
        <input type="reset" name="취소" value="취소"><br>
</form>
 
<hr>
<?  show_source(__FILE__); ?>
</html>

					
                    
                   	 		// num까지의 소수 출력 PHP //
<html>
<head>
    <title>소수판별.php</title>
    <meta http-equiv="content-type" content="text/html; charset=utf-8">   
</head>

<body>
<?
   $num = $_POST["num"];    // 소수여부 판별
   $k = 0;
   
   if($num <= 1 ) { 
    echo("
         <script>
         window.alert('1보다 큰 값을 입력하세요');
         history.go(-1);
         </script>
        ");
    exit;
    }

    echo ("{$num}까지의 소수: ");
    for($a = 2; $a <= $num; $a++){

        for($i = 2; $a % $i != 0; $i++){
        }

        if($a == $i){
            echo("{$a} ");
            $k += 1;
        }
      
    }  
    echo("<br>{$num}까지 소수의 개수는 {$k}개이다.");
?>
<hr><p>
<? show_source(__FILE__); ?>
</body>
</html>

숫자 입력 화면
소수 출력 화면

 

●테이블 생성

for 문을 사용하여 사용자가 원하는 행과 열의 개수를 입력받아 다음과 같이 테이블을 생성할 수 있다.

					// 값을 입력받아 테이블 생성 HTML //
<html>
<head>
<title>행렬.html 입력 폼파일</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
</head>

<form method="post" action="table.php">
      행 : <input type="text" name="num"><br>
      열 : <input type="text" name="num2"><br>

        <input type="submit" name="확인" value="확인">
        <input type="reset" name="취소" value="취소"><br>
</form>
 
<hr>
<?  show_source(__FILE__); ?>
</html>


					// 값을 입력받아 테이블 생성 PHP //
<html>
    <head>
        <title>행렬.php</title>
        <meta http-equiv="content-type" content="text/html; charset=utf-8">
    </head>
<body>

<table border = '1'>
<?
    $a = $_POST["num"];
    $b = $_POST["num2"];

    for($i = 1; $i <= $a; $i++){         // 행
        echo("<tr>");
        for ($j = 1; $j <= $b; $j++){    // 열
            echo("<td width = 100, height = 30> </td>");
        }
        echo("</tr>");
    }
?>
</table>

</body>
</html>

행/열 입력 화면
테이블 생성 화면

 

3-2 배열의 구조와 정의

배열은 간단히 여러 개의 변수를 모아서 정의하는 것을 의미한다. 배열은 구조에 따라 1차원 배열과 2차원 이상의 다차원 배열로 나뉜다.

 

● 1차원 배열

1차원 배열은 가장 기본적인 배열 구조로 선형으로 나열된 변수와 동일하다.

$ar[1] = 'abc'; 
$ar[2] = 'def';
$ar[3] = 'ghi'; 
//요소   //값

 

배열은 배열의 이름과 키값 그리고 값을 가진다. 위의 문장에서 ar은 배열의 이름, 대괄호 안의 숫자는 배열의 키값(= 첨자), 할당된 'abc'는 배열에 저장된 값이다.

 

$ar과 같이 배열의 키값이 정수인 배열을 스칼라 배열이라고 한다. 그러나 배열의 키값에 반드시 숫자만 이용하는 것은 아니다. 키값은 필요하다면 다음과 같이 문자를 사용하는 것도 가능하다.

$row[sno] = 'S01009'; 
$row[sname] = '관우';
$row[syear] = 4;

 

위와 같이 배열의 키값이 문자인것을 연관 배열이라고 한다.

 

$ar1 = array(1,2,3);
$ar2 = array(3 => "abc", 4 => "def", "ghi");
$ar3 = array("a" => "ab", "k" => "a2", 0 => 23);

 

위의 array()는 배열을 생성하는 함수이다. 배열의 키값은 지정할 수도, 안 할 수도 있다. 생성된 $ar1, $ar2, $ar3의 구조는 다음과 같다.

배열 구조

 

 $ar = array(1,2,3,4,5);
 for($i = 0; $i < 5; $i++)	=> for ($i = 0; $i < count($ar); $i++) 
 {   
 . . . . .
 }

위와 같이 배열의 요소 수만큼 반복문을 실행시키는 문장의 경우 count() 함수를 이용하여 요소의 수를 직접 세지 않고 반복문을 만들 수 있다.

 

배열과 반복문을 활용하여 다음과 같이 배열 내의 소수를 출력하는 프로그램을 작성할 수 있다.

					// 배열 내의 소수 출력 PHP //

<html>
    <head>
        <title>ar02-2.php</title>
        <meta http-equiv="content-type" content="text/html; charset=utf-8">
    </head>
<body>
    <?
    $ar = array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15);
    $cn = count($ar);
    for($i=0; $i<$cn; $i++){
      $value = $ar[$i];
      if($value > 1){
         for($j = 2; $value % $j != 0; $j++){}
         if($value == $j) echo("$value &nbsp;&nbsp;");
      }
    }
    ?>            
<hr><p>
<? show_source(__FILE__); ?>
</body>

</html>

 

● 2차원 배열

2차원 배열은 엑셀과 같은 스프레드시트 프로그램에서 보는 것처럼 행과 열을 가진 배열을 의미한다. 2차원 배열은 이전에 사용한 1차원 배열과 달리 키값이 두 개인 배열로 각각의 키값은 행과 열을 의미한다.

 $ar[0][0] = "a"; $ar[0][1] = "b"; $ar[0][2] = "c";	/ $ar[행][열]
 $ar[1][0] = "d"; $ar[1][1] = "e"; $ar[1][2] = "f";
 $ar[2][0] = "g"; $ar[2][1] = "h"; $ar[2][2] = "i";
 
 // array() 함수를 이용한 같은 작업 //
 $ar = array(array("a","b","c"), array("d","e","f"),array("g","h","i"))

 

2차원 배열은 1차원 배열을 쌓아놓은 형태로, 2차원 배열에 count($ar)을 실행하면 행의 개수가 출력되고 count($ar[0])을 실행하면 0행의 요소 개수가 출력된다.

- count($ar)     : 1차원 배열을 몇 개 쌓았는지 출력한다. (2차원 배열의 행 개수를 출력한다.)

- count($ar[0]) : 그 행의 배열 요소가 몇 개인지 출력한다.

 

다음과 같이 키값을 문자로 하여 2차원 배열을 생성할 수 있다.

$ar = array(array(학번 => "123456",이름 => "유비", 학과 => "화학"),
            array(학번 => "123457",이름 => "관우", 학과 => "화학"),
            array(학번 => "123458",이름 => "장비", 학과 => "화학"))
  학번 이름 학과
$ar[0] 123456 유비 화학
$ar[1] 123457 관우 화학
$ar[2] 123458 장비 화학

 

2차원 배열을 다룰 때  $ar을 다룰 수도 있지만 필요 하다면 $ar[0], $ar[1], $ar[2]와 같은 1차원 배열로 바꿔 문제를 다룰 수도 있다.

다음과 같이 2차원 배열의 행의 수를 확인한 후, 행을 순서대로 읽어서 출력할 수 있다.

$count = count($ar);
 for($i = 0; $i < $count; $i++) {
      echo("row = $i : {$ar[$i]['학번']} - {$ar[$i]['이름']} - {$ar[$i]['학과']} <br>");
 }