1. 주석

 어느 프로그래밍 언어에서나 마찬가지이지만 주석은 꼭 필요하고 다는 것을 생활화 해야하는 중요한 요소입니다.

 

 자바의 주석으로는 아래의 3가지가 있습니다.

 - /*~*/ : C언어로부터 따온 주석으로 여러 줄을 묶어서 주석으로 처리할 수 있습니다.

 - // : C++로부터 따온 주석으로 해당 줄의 끝까지를 주석으로 처리할 수 있습니다.

 - /**~*/ : 자바의 고유한 도큐먼트(Document) 주석으로 사용자 정의 Document API를 만들 때 사용하는 주석입니다.

 

 이러한 주석들이 있다는 것을 알았고 이제 소스 코드로 알아보겠습니다.

/*
 여러 줄 주석
 작성일자 : 2019-04-09
*/

// 한 줄 주석
public class Round03_Ex01 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println("주석처리"); //'주석처리'문구를 내보내기 위한 명령어
	}

}

 위의 코드를 실행하게 되면 "주석처리"라는 문구만 표시 될 것입니다.

위의 소스코드를 실행한 화면

 

2. 멤버의 개념, 접근, Doc의 활용

 자바는 여러 멤버와 집합으로 구성되어 있는 언어입니다. 대표적으로 JDK(Java Develope Kit) 라는 집합 내 com, java, javax, launcher, org, sunw와 같은 6개의 집합이 있고 이 중 공개되어 있는 집합은 java, javax, org 3개 입니다. 이 외의 집합들은 내부적으로 사용됩니다. 또 이 집합 내에는 여러 개의 집합이 포함되어 있습니다. java의 집합 같은 경우는 awt, applet, beans, io, lang, math, net  등등의 13개의 집합이 있습니다. awt안에는 다시 color, dnd 등의 집합이 있습니다. 이런 집합의 가장 아래에는 클래스라는 멤버들이 있습니다. 또 클래스 안에는 Field, Construct, Method라는 멤버를 포함하고 있습니다.

 

 쉬운 이해를 위해 아래의 소스코드를 살펴보겠습니다.

import java.lang.*;

public class Round03_Ex01 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println("hello world");
	}

}

 이 소스코드는 단순히 'hello world'라는 문구를 출력하는 소스코드입니다. '위의 import java.lang.*'이라는 문구를 볼 수 있을 것입니다. 이 문구는 import라는 명령어를 통해 java라는 집합 아래의 lang이라는 집합에 있는 모든 클래스(*)를 참조시키겠다는 뜻입니다. 이후 중앙의 System.out.println("Hello world");라는 문구는 lang 집합 아래의 System이라는 클래스 아래의 out이라는 멤버 아래에 있는 println이라는 멤버에 접근해 "Hello world"라는 문자열을 집어넣겠다는 것을 의미합니다. 이때 각 집합의 아래에 있는 집합이나 멤버로 접근할 때에는 참조 연산자'.'를 사용합니다.

 ex) java.lang.*;

 

 자바에서는 이러한 복잡한 구조를 Document API라는 것을 통해 보기 쉽게 제공하고 있습니다. Document API 문서는 아래의 링크를 통해 확인할 수 있습니다.

https://docs.oracle.com/javase/7/docs/api/

 

Java Platform SE 7

 

docs.oracle.com

 

3. 상수와 변수, 자료형

 위의 것들에 대한 개념은 JAVA뿐만 아니라 다른 프로그래밍 언어, 일상생활에서도 자주 쓰이는 용어들이므로 쉽게 이해할 수 있을 것이라 생각이 됩니다. 

 

 - 상수(Constant) : 항상 일정한 값을 유지하는 데이터( 변하지 않는 수 )

 - 변수(Variable) : 특정 상황에 따라 값이 변하는 데이터( 변하는 수 )

 - 자료형 : 상수나 변수의 유동적인 데이터를 저장할 수 있는 크기를 규정하는 형태

 

 자료형에 대해 간략히 말하자면 쉽게 말해 데이터를 넣어야 하는 공간의 크기를 말한다고 할 수 있습니다. 실생활에서 보았을 때 int형이 1cm^2의 상자라면 float은 10cm^2의 상자와 같은 비유를 들 수 있습니다. 또 넣고자하는 데이터의 종류에 따라 다르게 사용한다고 볼 수 있습니다. 문자열을 넣고 싶을 때는 String, 정수를 넣고 싶을 때는 int를 사용하는 것을 예시로 들 수 있습니다.

 

4. 자바의 기본 자료형 & String 클래스

 자바의 자료형에는 크게 논리형, 자료형, 실수형이 있고 클래스형 자료형인 String에 대해 알아보겠습니다.

 

 1] 논리형 자료형

  - boolean | 사용 바이트:1byte, 입출력 범위:true/false

                 예) boolean bool = false;

  boolean 자료형은 참과 거짓만을 나타내기 위해 사용하는 자료형입니다.

 

 2] 정수형 자료형

  - byte | 사용 바이트:1byte, 입출력 범위:-128~127(-2^7~2^7-1)

            예) byte by = 123;

  byte는 정수형 자료형 중 가장 작은 범위를 갖고 있습니다. C에서는 byte by = 128;이라고 한다면 이를 허용하지만

  자바에서는 이를 허용하지 않고 컴파일 에러가 나게 됩니다. 하지만 증감연산자를 통해 이를 침범하는 것은 가능합니    다. 예를 들어 byte by = 127; by++;을 입력하게 되면 컴파일은 가능하지만 값은 128이 아닌 -128이 되게 됩니다. 이는

  다른 자료형에서도 마찬가지입니다.

 

  - char | 사용 바이트:2byte(유일한 unsigned data), 입출력 범위:0~65,535(0~2^16-1)

            예) char ch = 65;

                char ch = 'A';

  char 자료형은 정수형 자료형 중에서 문자형 자료형에 속합니다. 또 이 char 자료형은 자바의 자료형 중에서 유일하게    unsigned(음수가 없는 자료형)인 자료형입니다. 유니코드의 도입으로 2byte로 이루어져 있으며 0~65535 사이의 값을    저장할 수 있습니다.

 

  - short | 사용 바이트:2byte, 입출력 범위:-32,768~32,767(`2^15~2^15-1)

             예) short sh = 12345;

 

  - int | 사용 바이트:4byte, 입출력 범위:-2,147,483,648~2,147,483,647

         예) int i = 100;

  int 자료형은 정수형 자료형 중에서 대표적으로 사용되고 모든 언어에서의 기본이 되는 자료형입니다.

 

  -long | 사용 바이트:8byte, 입출력 범위:-9,223,372,036,854,775,808~9,223,372,036,854,775,807(`2^63~2^63-1)

           예) long lo = 12345L;

  long 자료형은 int 자료형보다 큰 정수형 데이터를 저장하기 위한 목적으로 만들어졌습니다. long 자료형은 초기화할

  때 꼭 뒤에 l이나 L을 붙여야 합니다. 이것은 현재 시스템에게 int 기본 자료형보다 크다는 사실을 인식시키기 위함

  입니다.

 

 3] 실수형 자료형

  - float | 사용 바이트:4byte, 입출력 범위:1.4E^-45~3.402823E^38

           예) float f = 12.34f;

  float 자료형은 4byte 범위를 표시할 수 있지만 정수형 자료형들보다 훨씬 많은 양의 범위를 포함하고 있습니다. 정수보

  단 실수가 훨씬 많기 때문입니다. 실수형의 기본 자료형은 double이기 때문에 기본 자료형이 아니라는 의미로 끝에 f

  혹은 F를 붙여줘야 합니다.

 

  - double | 사용 바이트:8byte, 입출력 범위:4.9E^-324~1.8E^308

              예) double dou = 12345.6789;

  double 자료형은 실수형 기본 자료형입니다. 일반적으로 은행에서 돈을 관리할 때 사용하는 자료형입니다.

 

 4] 클래스형 자료형 

  - String | 사용 바이트:4byte(레퍼런스형), 입출력범위:무한대

             예) String str = "asdf";

  String은 자바에서 자료형처럼 사용할 수 있도록 만든 클래스입니다. 자바에서의 클래스 변수는 4byte이기 때문에 안에

  어떤 값이 들어가 있던 String으로 선언된 것은 모두 4byte입니다.

 

5. Promotion, Casting을 이용한 형변환

 형변환이라는 것은 앞서 말했던 자료형에 저장돼 있던 값을 다른 자료형에 넣는 방식을 말합니다. 예를 들어 int형에 있던 것을 float형에 넣는 다던지 말입니다. 형변환은 크게 2가지로 나눌 수 있습니다.

  - 자동 형변환(Promotion) : 큰 자료형에 작은 자료형의 값을 대입하는 경우

                                    예) byte a = 10;

                                        int b = a;

  - 강제 형변환(Casting) : 작은 자료형에 큰 자료형의 값을 대입하는 경우

                                예) int a = 10;

                                     byte b = (byte)a;

 

 위에서 봤을 때 큰 자료형에서 작은 자료형에 값을 대입하는 경우에는 형변환 자체가 필요가 없습니다. 다만 메모리가 낭비된다는 문제 외에는 별다른 것은 없습니다. 하지만 작은 자료형에서 큰 자료형에 값을 대입하는 경우에는 형변환이 필요합니다. 이처럼 형변환이 딱히 필요없는 자동 형변환을 'Promotion', 형변환이 필요한 강제 형변환을 'Casting'이라고 합니다. 강제 형변환을 할 때에는 변환하고자 하는 형태의 자료형을 앞에 소괄호에 넣어주면 됩니다.

(예> byte b = (byte)a;)

 

 형변환을 하기에 앞서 자료형이 큰지 작은지부터 알아야 합니다. 이러한 기준은 크게 2가지로 나눌 수 있습니다. 첫째는 자료형의 입출력 범위이고 둘째는 '실수형인가 정수형인가'입니다. 첫째의 기준으로는 대입되는 자료형의 입출력 범위가 대입하는 자료형의 입출력 범의를 포함한다면 강제 형변환이 되는 것이고 반대이면 자동 형변환이 되는 것입니다. 예를 들어 보겠습니다.

  

  short a = 10;

  char b = a;

 

 위의 경우에서는 short의 자료형 범위가 -32768~32767인 반면 char의 자료형 범위는 0~65535이므로 강제 형변환이 일어나야 합니다. 만약 위의 예시가 자동 형변환이 되기 위해서는 char의 입출력 범위가 short의 입출력 범위를 모두 포함하고 있어야 합니다. 위의 예시를 맞게 고친다면 아래와 같이 고칠 수 있습니다.

 

  short a = 10;

  char b = (char)a;

 

 두번째 조건인 정수형인가 실수형인가를 따지는 조건은 정수형이 실수형보다 작다고 설명했었으므로 넘어가도록 하겠습니다.

 

6. 초기화

 자바에서 필드(field)를 선언하면 크게 두 가지의 메모리가 할당되게 됩니다. 하나는 지역 변수인 'Runtime Stack', 다른 하나는 멤버 변수인 'Garbage Collection Heap' 입니다. 이 중 'Runtime Stack'은 메모리가 할당될 당시에 자동으로 초기화 작업이 진행되지 않기 때문에 초기화 작업을 해주어야 합니다. 아래의 예시를 통해 알아보도록 하겠습니다.

 

public class Round03_Ex02 {

	public static void main(String[] args) {
		
		int x;
		System.out.println(x);
		
	}

}

 위의 코드를 컴파일 하게 된다면 아래와 같은 문구가 뜨는 것을 확인할 수 있습니다.

 

 variable x might not have been initialized

 System.out.println(x);

 

 이 메시지는 x의 값이 초기화 되지 않은 상태에서 사용을 하고 있다는 뜻입니다. 이러한 문제를 해결하려면 아래와 같이 소스코드를 작성하면 됩니다.

public class Round03_Ex03 {

	int x;
	
	public static void main(String[] args) {
		
		Round03_Ex03 rd = new Round03_Ex03();
		System.out.println(rd.x);
		
	}

}

 위와 같이 작성하면 x라는 변수가 'Garbage Collection Heap'에 할당되므로 자동 초기화가 진행됩니다. 따라서 실행을 하면 0이라는 초기값이 나타나게 됩니다. 만약 이 방법이 아닌 다른 방법으로 해결하고 싶다면 Round03_Ex02의 클래스 파일 소스에서 'int x;'를 'int x=0;'과 같이 초기화를 해주면 됩니다. 

'프로그래밍 > JAVA' 카테고리의 다른 글

자바 연산자 - 문제  (0) 2019.04.16
자바 연산자 - 2  (0) 2019.04.15
자바 연산자 - 1  (0) 2019.04.14
자바 기본 입출력 - 문제  (0) 2019.04.11
자바 기본 입출력  (0) 2019.04.10

 안녕하세요. 이번 시간에는 RAID라는 기술에 대해 알아보도록 하겠습니다. RAID라는 기술은 서버에서 데이터를 저장할 때 여러 개의 스토리지를 묶어놓고 다양하게 저장하는 기술로써 데이터의 손실을 막기 위한 기술입니다. 그렇다면 RAID의 종류에 대해 알아보도록 하겠습니다.


 Linear RAID : 하나의 스토리지에 데이터가 가득 차면 다음 스토리지로 넘어가도록 설정하는 방식입니다.

 RAID 0 : 2개의 스토리지를 묶어 놓고 분산하면서 저장함으로써 스토리지를 동시에 사용하는 방식으로 Striping이라고도 합니다.

 RAID 1 : 2개의 스토리지를 묶어 놓고 양쪽 스토리지에 같은 내용을 저장함으로써 Mirroring이라고도 합니다.

 RAID 2 : X

 RAID 3 : 패리티라는 것을 사용하고 디스크를 병렬 처리하는 기술로 데이터는 바이트 단위로 쪼개져서 모든 디스크에 균등하게 나뉘어 저장되며 패리티 정보는 별도의 디스크에 저장하는 기술입니다.

 RAID 4 : 각 디스크는 패리티 블럭을 공유하고 모든 파일은 블럭으로 쪼개지게 됩니다. 각 블럭은 여러 디스크에 저장되지만 균등하지는 않습니다. 패리티를 처리하기 위해 별도의 디스크가 사용됩니다.

 RAID 5 : 최소 3개 이상의 디스크 필요로 하고 전체 디스크 용량의 75%만 사용 가능합니다. Parity Across Disks라고도 합니다.

 RAID 6 : RAID 1로 구성한 데이터를 다시 RAID 0으로 구성함으로써 RAID 1,2의 성능을 동시에 확보하는 기술입니다.


 이처럼 여러개의 RAID 방식이 있지만 이번 포스팅에서는 RAID 5에 대해서 알아보도록 하겠습니다. 우선 이 기술을 시작하기에 앞서 서버에서는 주 스토리지 외에 추가적으로 스토리지가 필요하므로 3개의 스토리지를 더 추가해보도록 하겠습니다.








위와 같은 방식으로 3개를 추가해줍니다.



 위처럼 HDD를 모두 추가했으면 서버를 재부팅 후 'ls -l /dev/sd*' 명령어를 통해 HDD가 제대로 추가되었는지 확인해줍니다.



 위 화면에서는 sdb, sdc, sdd만 주목해주면 됩니다. 제대로 들어간 것을 확인했으니 이제 RAID설정에 들어가보도록 하겠습니다. 'fdisk /dev/sdb' 명령어를 통해 첫번째 스토리지를 설정해줍니다.



 

 이후에는 위처럼 순서대로 'p-n-p-<ENTER>-<ENTER>-t-fd-p-w'를 눌러주시면 됩니다. 이 옵션들의 설명은 아래에 나와있습니다. 이외의 다른 설정들에 대해 알아보고 싶다면 m을 통해서 알아볼 수 있습니다.


 RAID Options

  Command : n (새로운 파티션 분할)

  Select : p (Primary 파티션 선택)

  Partition number : 1 (파티션 번호 1 선택)

  First Cylinder : 엔터 (시작 실린더 번호)

  Last Cylinder : 엔터 (마지막 실린더 번호)

  Command : t (파일 시스템 유형 선택)

  Hex code : fd (Linux raid autodetect)

  Command : p (설정 내용 확인)

  Command : w (설정 저장)


  a : toggle a bootable flag

  b : edit nested BSD disklabel

  c : toggle the dos compatibility flag

  d : delete a partition

  l : list known partition types

  n : add a new partition

  p : print the partition table

  t : change a partition type

  v : verity the partition table

  m : print this menu

  u : change display/entry units

  x : extra functionality ( experts only )

  w : write table to disk and exit

  q : quit without saving changes

  g : create a new empty GPT partition table

  G : create a new empty SGI (IRIX) partition table

  o : create a new empty DOS partition table

  s : create a new empty Sun partition table


※ 첫번째 p는 'print the partition table' 옵션의 p이고, 두 번째 p는 primary로 설정하겠다는 옵션의 p입니다.

 'fdisk' 명령어가 제대로 됐는지 확인하려면 'fdisk- l'을 통해 알아볼 수 있습니다. 이런식으로 sdb, sdc, sdd 모두 설정을 끝마친 후 'mdadm --create /dev/md5 --level=5 --raid-devices=3 /dev/sdb /dev/sdc /dev/sdd'명령어를 입력해줍니다. 참고로 'mdadm' 명령어는 패키지를 설치해야합니다. ( apt-get install -y mdadm ) 



 명령어를 실행하면 마지막에 'continue creating array?'라는 문주를 확인할 수 있는데 y를 눌러서 yes를 표시해줍니다. 이제 'mkfs.ext4 /dev/md5' 명령어를 입력해줍니다.



 명령어를 입력하면 위와 같이 뭐가 막 되는 것을 확인할 수 있습니다. 이제 다시 'mdadm --detail --scan' 명령어로 확인을 해줍니다. 



 정상적으로 있는 것을 확인할 수 있습니다. 이제 '/raid'라는 폴더를 생성해준 후 '/etc/fstab'이라는 폴더에 들어가줍니다.

들어가면 아래와 같은 화면을 확인할 수 있습니다.



  위 파일에 '/dev/md5 /raid ext4 defaults 1 2'를 양식에 맞게 써줍니다.( 꼭 맞출 필요는 없습니다 ) 다시 'mdadm --detail /dev/md5' 명령어로 확인해줍니다.



 잘 만들어진 것을 확인할 수 있습니다. 이제 'update-initramfs -u'를 입력해주면 됩니다. 이상으로 RAID 5에 대한 포스팅을 마치도록 하겠습니다.

'Server > Debian(Linux)' 카테고리의 다른 글

Master DNS  (0) 2018.12.24
Debian 9 IP 설정  (0) 2018.11.14
Debian 9.2 Install  (0) 2018.11.07

 안녕하세요. 이번 시간에는 DNS 서버 중에서도 마스터 DNS(Master DNS)서버를 구축하는 방법에 대해 알아보도록 하겠습니다. 저는 korea.com이라는 도메인을 통해 실습해보도록 하겠습니다. 우선 항상 해오던 방법대로 서버를 생성해줍니다.



 여기는 로그인을 하고 난 후 기본화면입니다. 이제 필요한 패키지들을 설치하도록 하겠습니다. 저는 편의상 'vim' 'net-tools' 'dnsutils' 를 설치하였습니다.


※ 참고로 Debian 8버전에서 9버전으로 넘어오면서 여러 요소가 바뀐 관계로 'net-tools'와 'dnsutils'를 설치하지 않으면 'ifconfig'명령어와 'nslookup'명령어가 사용 불가능합니다.



 설치를 모두 완료했으면 /etc/vim/vimrc 파일에서 필요한 설정을 하도록 하겠습니다. 저는 'syntax on'이라는 구문을 주석해제하고 'set nu'라는 구문을 추가하면서 앞에 번호가 새겨지도록 하였습니다.



 설정을 했으면 파일을 나가서 DNS에 필요한 설정들을 하겠습니다. 우선 호스트이름과 로컬 hosts파일에 접속해 필요한 설정들을 해줍니다.



 위의 화면은 로컬 hosts파일에 접속한 화면입니다. 기존의 127.0.1.1 DNS 밑에 '192.168.0.1 DNS.korea.com DNS'를 추가해줌으로써 192.168.0.1은 FQDN이 DNS.korea.com이고 호스트이름은 DNS라는 것을 명시하여주었습니다. (FQDN : Full Qualified Domain Name, 도메인의 전체 이름)



 위의 화면은 /etc/hostname 파일에 자신의 호스트이름을 명시해 준 모습입니다. 다음으로 필수가 되는 IP를 설정하도록 하겠습니다.

 


  위의 화면을 보시면 기존의 Debian 8과는 꽤 바뀐 모습을 확인할 수 있습니다. 우선 NIC(Network Interface Card)이름이 eth0, eth1 이런식에서 ens33, ens37 과 같은 식으로 바뀌었습니다. 또 번거롭게 netmask 255.255.255.0 할 필요 없이 IP뒤에 prefix 값만 적어주어도 되도록 편리해졌습니다. 게이트웨이는 현재의 토폴로지에서는 필요없기 때문에 적어주지 않았습니다.



 IP를 설정해주었다면 'service network interface'명령어를 통해 네트워크를 재시작해줍니다. 그러면 위와 같이 제대로 된 설정이 보입니다. IP 설정까지 잘 되었다면 'bind9' 패키지를 깔아주도록 합니다. 'bind9'은 Debian에서 DNS를 실행하기 위해 사용하는 패키지입니다.


 설치가 완료되면 /etc/bind/named.conf 파일로 접속해보도록 하겠습니다. 



 파일에 접속하면 위와 같은 화면을 보실 수 있습니다. 9~11 번 문장은 각 문장의 경로에 있는 파일을 참조한다는 구문입니다. 11번째 정상적인 서버라면 루트 DNS가 존재하고 해당 루트 서버로부터 정보를 받아야하기 때문에 필요하지만 현재의 토폴로지에서는 Master 서버 하나만 존재하기 때문에 주석처리 해주었습니다. 주석처리를 해준 후 /etc/bind/named.conf.local 파일에 접속해줍니다.



 처음 접속하면 1~7번 줄 까지밖에 없는 공백의 화면을 보실 수 있습니다. 이제 위의 화면처럼 필요한 도메인에 대한 정보들을 기재해 주시면 됩니다. 아래는 기본 형식입니다.


zone "korea.com" {                                    // 도메인에 대한 선언입니다. 저는 'korea.com'이라는 도메인을 선언했습니다.

type master;                                       // 이 서버는 master 서버로 동작한다는 선언입니다.

file "/var/cache/bind/korea.com.zone";      // 해당 도메인에 대한 레코드는 /var/cache/bind/korea.com.zone에 있습니다.

※ 여기서 /var/cache/bind/까지의 경로는 무조건 같아야 합니다.

allow-query { ( any | A.B.C.D ) };               // 요청을 허락한다는 문구입니다. any로 하면 모든 IP로부터이고 A.B.C.D는                                                            특정 IP로부터 입니다. 생략 가능

allow-update { ( any | A.B.C.D ) };             // 업데이트 요청을 허락한다는 문구입니다. DDNS 구축시에 사용합니다. 

   생략 가능

notify yes;    

};


zone "0.168.192.in-addr.arpa" {                      // 위는 정방향에 대한 설정이고 아래는 역방향에 대한 설정입니다.

type master;                                        // 내용은 정방향과 같습니다.

file "/var/cache/bind/korea.com.rev";

allow-query { ( any | A.B.C.D ) };

allow-update { ( any | A.B.C.D ) };

notify yes;

};


 기본 형식은 위와 같습니다. 필요에 맞게 수정하여 설정해주시면 됩니다. 참고로 DNS에는 정방향과 역방향이라는 것이 존재하는데 역방향을 꼭 설정하지는 않아도 됩니다. 


※ 정방향 : 도메인에 대한 IP를 물어보는 요청

    역방향 : IP에 대한 도메인을 물어보는 요청


 위와 같이 정방향과 역방향에 대한 설정이 끝났다면 이제 레코드를 수정해주도록 합니다. 위의 과정은 해당 도메인에 대한 정보가 어느 파일에 있고 어떻게 관리할 것인가에 대한 설정이었다면 이제부터는 해당 도메인에 대한 레코드(호스트와 IP를 매칭시켜놓은 정보)가 무엇이 있고 추가, 삭제할 때 접속하는 파일입니다. 우선 이 파일들을 생성하기 위해 복사를 해줍니다.


cp /etc/bind/db.local /var/cache/bind/korea.com.zone       

cp /etc/bind/db.127 /var/cache/bind/korea.com.rev 



 처음 접속하면 위와 같은 화면을 볼 수 있습니다. 이제 :을 누르고 '%s:localhost:korea.com:g'를 입력해줍니다. 그러면 localhost라는 부분이 모두 korea.com으로 바뀌는 것을 볼 수 있습니다.

 


 이제 필요한 레코드들을 기재해주면 됩니다. 우선 로컬 서버의 호스트인 DNS를 적어주도록 합시다.

 


 호스트를 기재하기 전에 '@ IN A [ local IP ]'를 꼭 기재해주셔야 합니다. 그래야 DNS가 동작하면서 해당 서버의 IP를 확인할 수 있고 DNS 서버로 지정된 서버가 맞는지 확인할 수 있습니다. 

 위의 문구를 기재했다면 이제 필요한 설정들을 해줍니다. 로컬 서버인 DNS를 추가해보겠습니다. 아래의 문구만 적어주면 됩니다.

 

 DNS IN A 192.168.0.1


 여기서 알 수 있는 것은 DNS라는 호스트는 192.168.0.1이라는 IP와 매칭시킨다는 것을 알 수 있습니다. 정방향에 대한 설정이 끝났으면 역방향에 대한 설정도 해보도록 하겠습니다. 아까 복사했던 /var/cache/bind/korea.com.rev 파일로 들어가줍니다.



 접속하면 위와 같은 화면을 볼 수 있습니다. 여기서도 아까와 같이 ':%s:localhost:korea.com:g'를 입력해줍니다. 그러면 'localhost'라고 써있던 부분들이 'korea.com'으로 바뀌는 것을 확인할 수 있습니다.



 여기서는 정방향과 다르게 입력해주어야 합니다. 아까는 'host' IN A 'IP 순서였다면 이번에는 'IP' IN PTR 'host'순서대로 적어주어야 합니다. 또 IP를 적을때도 IP를 전체 다 적어주는 것이 아니라 위처럼 끝의 옥탯만 적어주면 됩니다. 위에서는 DNS라는 호스트의 IP가 192.168.0.1이기 때문에 1만 적어주었습니다.



 설정이 모두 끝났으면 /etc/resolv.conf 파일로 접속해줍니다. 그 후 'nameserver 192.168.0.1'이라고 적어줌으로써 DNS 서버는 192.168.0.1이라는 것을 명시해줍니다. 이제 파일을 나간 후 'service bind9 restart'를 입력하고 'service bind9 status'를 통해 정상적으로 작동하는지 확인해줍니다.



 Active : active(running)이라고 뜨는 것을 보아 정상적으로 작동하는 것을 확인할 수 있습니다. 이제 nslookup을 통해 조회를 해보도록 하겠습니다.



 nslookup으로 조회환 결과 레코드에 작성했던 IP를 제대로 가져오는 것을 확인할 수 있습니다. 이상으로 Master DNS 서버에 대한 포스팅을 마치도록 하겠습니다.

'Server > Debian(Linux)' 카테고리의 다른 글

Debian - RAID  (0) 2019.03.06
Debian 9 IP 설정  (0) 2018.11.14
Debian 9.2 Install  (0) 2018.11.07

+ Recent posts