Ubuntu - 4. 하드디스크 마운트, RAID(Redundant Array of Independent Disks)

 

 

 


 

 

 

1. 하드디스크 연결

 새로운 하드디스크를 os에 연결하려면

 

1. 파티션

2. 포멧

3. 마운트

4. fstab 설정

 

순으로 과정이 진행된다.

 

 

1) 파티션

 

 파티션은 하드 디스크를 논리적으로 나누어 여러 영역으로 구분하는 것을 말한다. 각 파티션은 독립된 공간으로 취급되어 파일 시스템이나 데이터가 저장된다. 이는 하나의 물리적인 디스크를 여러 영역으로 나누어 다양한 용도로 사용할 수 있도록 한다.

 간단하게 설명하면, 파티션은 디스크를 여러 조각으로 나누어 하나의 디스크에 다양한 종류의 데이터를 저장할 수 있도록 하는데 사용된다. 예를 들어, 운영체제가 설치되는 시스템 파티션, 사용자 데이터가 저장되는 데이터 파티션 등으로 나눌 수 있다.

 일반적으로 리눅스 시스템에서 물리적인 디스크는 "/dev/sda", "/dev/sdb","/dev/sdc"와 같은 형태로 표현되며, 파티션은 "/dev/sda1", "/dev/sda2", "/dev/sda3"로 표현된다.(SCSI 또는 SATA 디스크 기준)

 

 

- lsblk

 

 lsblk 명령어는 Linux 시스템에서 사용되는 명령어 중 하나로, 블록 디바이스 (block devices)에 대한 정보를 표시하는 데 사용된다. 블록 디바이스는 주로 하드 디스크, SSD, 파티션, 루트 파일 시스템 등을 포함한 블록 레벨의 저장 장치를 나타낸다.

 lsblk 명령어를 실행하면 블록 디바이스에 대한 트리 구조를 표시하며, 각 디바이스에 대한 정보를 요약해서 보여준다. 주요 정보에는 디바이스 이름, 크기, 타입, 마운트 포인트 등이 포함된다.

 

AWS에서는 가상화 플랫폼에 따라 "/dev/sda"네이밍 대신 "/dev/xvda"를 쓴다.(https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/device_naming.html)

 

 

- fdisk

 

 fdisk는 리눅스에서 사용되는 파티션 관리 도구로, 디스크의 파티션 테이블을 생성하고 관리하는 데 사용된다. fdisk를 사용하여 디스크의 파티션을 만들거나 수정할 수 있다.

 

1. 우선 "fdisk -l"로 하드디스크 정보를 조회한다.

파티션을 진행할 하드디스크 경로는 "/dev/xvdf"이다.

 

 

2. 해당 하드디스크를 파티션 하기 위해 fdisk /dev/xvdf 명령어를 입력한다. 

 

이때 m을 누르고 엔터치면 사용법을 보여준다.

 

 

 

3.  n을 눌러서 파티션 추가를 한다.

 

 

primary는 1~4개 파티션 설정 가능하고,

extend는 4개를 초과한 파티션 설정 시에 이용한다.

p를 입력하고 엔터친다.

 

4. 파티셔닝 설정 과정을 진행한다.

 

 

  1. Partition number (1-4, default 1): 1
    • 생성할 파티션 번호를 선택한다. 여기서는 1번을 선택했으므로 파티션 1 개로 한다.
  2. First sector (2048-209715199, default 2048):
    • 파티션의 시작 섹터를 선택한다. 일반적으로 디스크의 시작부터 파티션을 생성한다. 여기서는 그냥 엔터를 쳐서 디폴트 값인 2048을 선택한다.
  3. Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-209715199, default 209715199):
    • 파티션의 끝 섹터 또는 크기를 선택한다. 디폴트 값인 209715199는 파티션을 디스크의 끝까지 생성하겠다는 의미이다. 여기서는 그냥 엔터를 쳐서 디폴트 값인 209715199를 선택한다.

 

 

5. w를 입력하여 파티셔닝을 진행한다.

 

 

 

 

6. ls -l /dev/xvdf* 로 파티션 된것을 확인한다.

 

/dev/xvdf1으로 파티션 됨

 

 

 

2) 포멧(mkfs)

 

디스크를 초기화하고 파일 시스템을 설정하기 위해 다음 명령어로 포멧을 한다.

 

mkfs.ext4 /dev/xvdf1

 

 

파일시스템의 종류: https://www.kingston.com/kr/blog/personal-storage/understanding-file-systems

 

파일 시스템 이해하기

파일 시스템은 운영 체제에서 스토리지의 파일을 구성하고 관리하는 데 사용하는 구조입니다. 파일 시스템마다 특성이 다르며 특정 운영 체제나 장치에만 적용되는 경우가 많습니다.

www.kingston.com

 

 

 

 

 

3) 마운트

 

 리눅스에서는 새로 설치된 하드디스크 경로인 "/dev/xvdf1"를 바로 사용 할 수 없고 다른 경로랑 연결을 한 다음에 사용할 수 있다. "마운트(Mount)"는 파일 시스템을 특정한 디렉토리에 연결하는 과정을 나타낸다. 마운트를 통해 특정 디렉토리에 다른 디스크 또는 파티션의 파일 시스템을 연결하여 사용할 수 있다.

 

우선 "mkdir /mnt/mydisk2" 로 마운트할 폴더를 만든다.

 

 

 그다음 mount 명령어를 이용하여 연결한다.

#mount [파디션한 하드디스크 경로] [사용하기 위해 연결할 경로]
mount /dev/xvdf1 /mnt/mydisk2

 

 

df -h를 입력하여 마운트 된 것을 확인한다.

 

 

 

 

4) fstab 설정

 

재부팅을 하면 마운트된 것이 해제 된다. 이를 영구적으로 설정하기 위해서는 /etc/fstab파일을 편집해야 한다.

 

 

vi /etc/fstab으로 fstab에 들어간다.

 

텍스트의 의미는 띄어쓰기를 기준으로,

 

"하드디스크 물리주소 혹은 디스크 UUID" / "마운트 포인트" / "파일 시스템 타입" / "마운트 옵션" / "dump 옵션" / "Pass 옵션" 

 

  • UUID: 하드디스크 고유식별값
  • /mnt/mydisk1: 마운트 포인트로 지정된 디렉터리이다.
  • ext4: 파일 시스템 유형은 ext4이다.
  • defaults: 일반적인 옵션을 사용하여 마운트한다.
  • 0: 백업 도구가 파일 시스템 백업을 안한다.(0일 경우 안함)
  • 0: 부팅 시 자동으로 파일 시스템을 검사하지 않는다.(1일 경우 검사)

 

여기에 마운트 정보를 등록하는 방법은 두 가지가 있다.

 

1. 하드디스크 경로로 지정

 

위에서 UUID 항목을 하드디스크 경로로 대체하는 것이다.

 

따라서 /dev/xvdf1을 /mnt/mydisk2에 영구적으로 마운트하기 위해서 다음과 같이 작성한다.

/dev/xvdf1 /mnt/mydisk2 ext4 defaults 0 0

 

 

 

2. UUID로 지정

 

UUID는 디스크의 고유 식별값이다. 경로는 이름이 바뀔 수 있기 때문에 고유값인 UUID를 사용하는 것을 추천한다.

blkid로 디스크 UUID를 확인할 수 있다.

 

 

/dev/xdf1을 UUID로 대체한다.

UUID=d50cd51f-7df5-450d-a307-3f7beb17bce4 /mnt/mydisk2 ext4 defaults 0 0

위 텍스트를 /etc/fstab에 작성하면 재부팅할 때 위 정보를 토대로 마운트를 자동으로 진행한다.

 

 

 

 

2. RAID(Redundant Array of Independent Disks)

 

 RAID는 "Redundant Array of Independent Disks"의 약자로, 여러 개의 하드 디스크 드라이브를 하나의 논리적인 저장 장치로 결합하여 데이터의 안정성과 성능을 향상시키는 기술이다. RAID 시스템은 여러 가지 레벨로 나뉘어 있으며, 각 레벨은 다양한 방식으로 데이터를 분산하고 복제하여 안정성을 확보하거나 성능을 향상시키는 목적을 가지고 있다

 

 

1) RAID 0

 

 RAID 0은 "Striping"이라고 불리는 방식을 사용하여 여러 개의 하드 디스크 드라이브를 하나의 논리적인 저장 장치로 결합하는 기술이다. Striping 이란 데이터를 여러 디스크에 분산시켜 저장하는 것으로, 이를 통해 동시에 여러 디스크에서 데이터를 읽거나 쓸 수 있어 전체적인 성능을 향상시킬 수 있다.

 

 

 

 RAID 0에서는 데이터를 여러 디스크에 분산 저장하기 때문에, 하나의 디스크라도 손상되면 해당 데이터 블록 전체가 손실이 된다. RAID0으로 구성된 디스크 중에 1개라도 고장이 나면 시스템 전체의 데이터가 손실될 수 있는 것이다. 따라서 RAID0은 주로 성능이 중요하고 데이터의 안전성이 크게 요구되지 않는 환경에서 사용될 수 있다.

디스크의 개수가 N개 일 때 저장공간 효율은 N이다.
 
 
 

 

 

2) RAID1

 

 RAID 1은 "Mirroring"이라고 불리는 방식을 사용하여 여러 개의 하드 디스크 드라이브를 하나의 논리적인 저장 장치로 결합하는 기술이다. Mirroring이란 모든 데이터를 두 개 이상의 디스크에 복제하여 저장하는 것을 말한다. 여러 디스크에 데이터를 미러링하여 하나의 디스크에 문제가 발생해도 다른 디스크에서 데이터를 제공할 수 있기 때문에 안정성이 크게 향상된다.

 

 

 

 RAID1은 강력한 안정성을 제공하지만 디스크 용량을 효율적으로 사용하지 못하며 비용이 비싸다. 왜냐하면 모든 데이터가 두 배의 저장 공간을 차지하기 때문이다. RAID 1은 주로 데이터의 안정성이 중요한 환경에서 사용되며, 예를 들어 중요한 서버 데이터, 데이터베이스, 또는 중요한 문서 등을 안전하게 저장하고자 할 때 활용될 수 있다.

 

디스크의 개수가 N개 일 때 저장공간 효율은 N/2이다.

 

 

 

 

3) RAID4

 

 RAID 4는 "Striping with Dedicated Parity" 방식을 사용하는 RAID 레벨 중 하나이다. "Striping"은 데이터를 여러 디스크에 나누어 저장하는 것이고, " Dedicated Parity"는 디스크에 패리티 정보를 전용으로 저장하는 구성이다. 패리티 정보는 나머지 디스크들에 저장된 데이터 블록들의 오류를 검출하고 복구하는 데 사용된다.

 

 

 

패리티 정보 예시로, 패리티 정보는 1의 개수가 짝수가 되도록 조절된다고 가정한다. 여러 디스크에 데이터가 저장되는데, 패리티 디스크에 저장되는 숫자는 다른 디스크들의 데이터 블록에서 나오는 1의 개수를 합한 결과가 짝수가 되도록 지정된다.

 

 

 

 

 

 

Disk3이 파손되었다고 가정하고, 패리티 정보를 이용하여 이를 복구하는 과정은 다음과 같다.

 

 

 

 패리티 정보는 1의 개수가 짝수가 되도록 조절되어 있어, 디스크 중 하나가 손상되어도 해당 디스크의 데이터를 역으로 복구할 수 있다. 단, 2개이상 디스크에 손상되면 복구할 수 있다.

 

 RAID 4는 한 디스크에 모든 패리티 정보가 집중되어 저장되기 때문에 쓰기 작업 시에는 항상 패리티 디스크를 업데이트해야 하므로 해당 디스크가 병목이 될 수 있다. 이를 개선한 것이  RAID5이다.

 

디스크의 개수가 N개 일 때 패리티 저장 공간을 제외하면 저장공간 효율은 N-1이다.

 

 

 

 

5) RAID5

 

 RAID 5는 여러 디스크에 데이터를 나누어 저장하면서, 각 디스크에는 패리티 정보가 분산되어 저장되는 RAID 레벨 중 하나이다. 하나의 디스크에 패리티 정보를 저장하는 RAID 4의 문제점을 개선한다.

 

 

 

 

 RAID 5는 데이터의 안정성과 쓰기 성능을 균형잡혔게 제공하므로, 일반적으로 비교적 안정적이고 효율적인 RAID 레벨 중 하나로 여겨진다. RAID 5는 안정성과 성능의 균형을 필요로 하는 경우에 적합한다. 하지만 RAID4와 마찬가지로 디스크가 2개 이상 파손되면 복구를 할 수 없다. 이를 개선한 것이 RAID6이다.

 

디스크의 개수가 N개 일 때 패리티 저장 공간을 제외하면 저장공간 효율은 N-1이다.

 

 

 

 

6) RAID6

 

 RAID 6는 여러 개의 하드 디스크 드라이브를 결합하여 데이터의 안정성을 향상시키는 기술 중 하나이다. RAID 6는 RAID 5와 유사하지만, 두 개의 패리티 블록을 사용하여 여러 디스크에서 동시에 두 개의 디스크 고장이 발생해도 데이터 손실이 없도록 보호한다. 또한 RAID6는 최소 4개이상의 디스크를 요구한다.

 

 

 

 

RAID6는 추가적으로 연산할 것이 생기므로 RAID5보다는 성능이 낮다. RAID 6는 대용량 데이터 저장이 필요하면서도 높은 안정성이 요구되는 환경에서 사용되며, 두 개 이상의 디스크 고장에 대한 내구성이 필요한 상황에서 선택될 수 있다.

 

디스크의 개수가 N개 일 때 패리티 저장 공간을 제외하면 저장공간 효율은 N-2이다.

 

 

 

7) Nested RAID

 

 Nested RAID는 두 개 이상의 RAID 구성을 조합하여 높은 수준의 데이터 안정성과 성능을 제공하는 RAID 구성을 말한다. 이러한 조합은 주로 RAID 레벨을 중첩시켜 만들어지며, 이는 RAID 레벨을 조합하여 더 강력한 특성을 얻을 수 있도록 한다.

 

-RAID 0+1(Mirror of Stripes)

 RAID 01은 여러 RAID 0배열을 만들고, 각각의 RAID 0배열 안에서는 RAID 1를 적용한다. 즉, 스트라이핑을 먼저하고 복사를 한다.

 

https://en.wikipedia.org/wiki/Nested_RAID_levels

 

 

- RAID 10(Stripe of Mirrors)

 

 RAID 10은 여러 RAID 1 배열을 만들고, 각각의 RAID 1 배열 안에서는 RAID 0를 적용합니다. 이는 높은 안정성과 빠른 성능을 제공하며, 최소한 하나의 디스크만 동작하면 된다. 즉, 복사를 먼저하고 이를 스트라이핑한다는 것이다.

 

 

https://en.wikipedia.org/wiki/Nested_RAID_levels

 

 

 

참고:https://www.diskinternals.com/raid-recovery/raid-10-vs-raid-01/

 

RAID 01 vs RAID 10: Is There Any Difference?

Do you want to find out RAID 10 vs RAID 01 difference? This article is for you. Here you will learn is there any difference in RAID 01 and RAID 10 data recovery.

www.diskinternals.com

 

 

 

 

 

3. 우분투 RAID 실습

 

 

1) 하드 디스크 파티션

 

파티션할 디스크 목록들이다.

 

 

파티션을 하고나서 Type이 Linux가 되어 있는데 이를 수정해야한다.

 

 

t를 눌러서 타입변경을 한다. L을 누르면 변경할 타입의 Alias를 확인 할 수 있다.

 

 

raid를 적용하기 위해서 FD를 입력하여 Type을 변경한다.

 

 

Type이 Linux raid autodetect로 된 것을 확인한다. 이 과정을 RAID를 진행할 모든 디스크에 적용한다.

 

 

 

 

 

 

2) RAID 구성

 

실습은 RAID0, RAID1, RAID5로 구성하며 구성할 하드디스크는 각 각 2개,2개,3개이다.

 

 

 

- RAID0

 

mdadm명령어를 이용하여 RAID를 구성한다.

 

#mdadm --create [새로만들 RAID하드디스크 경로] --level=[RAID 레벨] --raid-devices=[하드디스크 개수] [하드디스크 경로]
mdadm --create /dev/md0 --level=0 --raid-devices=2 /dev/xvdf1 /dev/xvdg1

 

 

 

mdadm --detail --scan로 새로 만들어진 RAID0 경로인 "/dev/md0"을 확인한다.

 

 

이후에 앞에서 배운 하드디스크 연결 과정처럼 포멧팅, 마운트 fstab를 수정한다.

#포멧
mkfs.ext4 /dev/md0

#연결할 폴더 생성
mkdir /raid0

#마운트
mount /dev/md0 /raid0

#fstab
vi /etc/fstab

#fstab에 해당 내용 추가
UUID=[UUID] /raid1 ext4 defaults 0 0

 

 

mdadm --detail /dev/md0로 정보를 확인한다. raid level = 0과 "/dev/xvdf1", "/dev/xvdg1"으로 구성된 것을 확인 할 수 있다. 

 

 

- RAID1

 

RAID1도 RAID0를 만드는 과정과 같다. 이때 level = 1로만 바꾸면 된다.

# 하나로 합쳐서 폴더 생성
mdadm --create /dev/md1 --level=1 --raid-devices=2 /dev/xvdh1 /dev/xvdi1

#포멧
mkfs.ext4 /dev/md1

#연결할 폴더 생성
mkdir /raid1

#마운트
mount /dev/md1 /raid1

#fstab
vi /etc/fstab

#fstab에 해당 내용 추가
UUID=[UUID] /raid1 ext4 defaults 0 0

 

 

-RAID5

 

RAID5도 RAID0를 만드는 과정과 같다. 이때 level = 5, devices = 3으로 바꾸면 된다.

# 하나로 합쳐서 폴더 생성
mdadm --create /dev/md5 --level=5 --raid-devices=3 /dev/xvdj1 /dev/xvdk1 /dev/xvdl1

#포멧
mkfs.ext4 /dev/md5

#연결할 폴더 생성
mkdir /raid5

#마운트
mount /dev/md5 /raid5

#fstab
vi /etc/fstab

#fstab에 해당 내용 추가
UUID=[UUID] /raid1 ext4 defaults 0 0

 

 

 

3) 우분투 추가사항

 

우분투에서 RAID를 만들고 나면 다음 과정도 추가적으로 해야 한다.

 

1. mdadm --detail --scan 으로 확인된 다음 정보들을 복사한다.

 

 

2. vi /etc/mdadm/mdadm.conf에서 복사한 내용을 붙혀넣는데 이때 "name="부분 다 삭제하고 저장한다.

 

3. update-initramfs -u 로 변경사항을 반영한다.

 

 

최종적으로 df -h로 RAID를 마운트한 것을 확인할 수 있다.

 

 

 

 

4) RAID 디스크 고장시 대처

 

 

RAID0은 복구가 불가능하고 RAID1, RAID5는 복구가 가능하다. 만약 RAID1, RAID5의 디스크가 각 각 하나 씩 파손되었다고 가정하면 다음 과정으로 복구한다.

 

mdadm --run /dev/md1 #raid1활성화
mdadm --run /dev/md5 #raid5활성화

 

이후에 파손된 디스크를 새로운 디스크를 교체하기 위해서 다음 명령어를 쓴다.

 

mdadm /dev/md1 --add /dev/xvdm1 #raid1 그룹에 새로운 디스크 추가
mdadm /dev/md5 --add /dev/xvdn1 #raid5 그룹에 새로운 디스크 추가

 

 

 

 

4. LVM(Logical Volume Manage)

 

 물리적 볼륨 관리(LVM)는 여러 개의 하드디스크를 하나의 스토리지로 합치고, 필요에 따라 그것을 다시 나누어 사용하는 기술을 말한다. LVM은 다음의 단계를 거친다.

 

 

 

 

 

1. 하드디스크 합치기:

  • 물리적 볼륨(Physical Volume, PV): 여러 개의 하드디스크를 선택하여 각각을 물리적 볼륨으로 지정한다.
  • 볼륨 그룹(Volume Group, VG): 선택한 물리적 볼륨들을 물리적 볼륨 그룹으로 묶는다.

이 단계에서 여러 디스크가 하나의 대용량 공간으로 통합되어 물리적 볼륨 그룹이 형성된다.

2. 파일 시스템 구성:

  • 논리적 볼륨(Logical Volume, LV): 물리적 볼륨 그룹에서 필요한 크기만큼 논리적 볼륨을 생성한다.
  • 해당 논리적 볼륨에 파일 시스템을 생성하여 사용한다.

 

3. 필요에 따른 나누기:

  • 필요에 따라 논리적 볼륨을 나누거나 조정할 수 있다.
  • 새로운 논리적 볼륨을 생성하거나, 기존 논리적 볼륨의 크기를 조절하여 스토리지를 유연하게 관리할 수 있다.

이러한 LVM의 개념을 통해 여러 개의 하드디스크를 하나의 큰 스토리지로 합치고, 그것을 필요에 따라 적절하게 나누어 사용할 수 있다. 이것은 데이터 관리의 유연성과 성능을 높이는데 도움이 된다.

 

 

- 우분투 실습

 

디스크를 LVM 물리 볼륨으로만 사용하려는 경우 해당 디스크에 파티션을 할 필요가 없지만 파티션을 한 경우를 가정으로 진행한다.

 

 

1. 파티션한 디스크에 진입하여 Type을 lvm으로 수정한다.

 

 

2. 물리볼륨 생성

 

pvcreate /dev/xvdf1
pvcreate /dev/xvdg1

 

 

3. 볼륨 그룹 생성

vgcreate myVG /dev/xvdf1 /dev/xvdg1

#결과확인
vgdisplay

 

 

4. 논리 그룹 생성

 

논리 그룹을 각 각 5GB,5GB,10GB으로 나눈다.

lvcreate --size 5G --name myLG1 myVG
lvcreate --size 5G --name myLG2 myVG
#정확히 10G가 안 남으므로 나머지를 쓴다는 의미임
lvcreate --extents 100%FREE --name myLG3 myVG

#결과확인
ls -l /dev/myVG

 

 

 

5. 포멧, 마운트, fstab등록 

#포멧
mkfs.ext4 /dev/myVG/myLG1
mkfs.ext4 /dev/myVG/myLG2
mkfs.ext4 /dev/myVG/myLG3

#마운트
mkdir /lvm1 /lvm2 /lvm3
mount /dev/myVG/myLG1 /lvm1
mount /dev/myVG/myLG2 /lvm2
mount /dev/myVG/myLG3 /lvm3

#fstab
vi /etc/fstab

#fstab에 해당 내용 추가
UUID=[UUID] /raid1 ext4 defaults 0 0

 


 

 

정리

 

1. 하드디스크 연결:

  • 파티션: 하드 디스크를 논리적으로 나누어 여러 영역으로 구분하여 파일 시스템이나 데이터를 저장.
  • 포맷: 파티션에 파일 시스템을 생성하여 사용 가능한 상태로 만듬.
  • 마운트: 파일 시스템을 특정 디렉토리에 연결하여 사용.
  • fstab 설정: 부팅 시 자동으로 마운트할 디스크 및 디렉토리 설정.

2. RAID(Redundant Array of Independent Disks):

  • RAID 0: 여러 하드 디스크를 "Striping"을 통해 결합하여 성능 향상. 데이터 분산으로 손상 시 데이터 손실.
  • RAID 1: "Mirroring"을 통해 여러 디스크에 동일한 데이터를 복제하여 안정성 향상. 디스크 용량 효율이 낮음.
  • RAID 4: "Striping with Dedicated Parity" 방식 사용. 복구 가능하지만 쓰기 작업이 병목이 될 수 있음.
  • RAID 5: 데이터와 패리티 정보를 여러 디스크에 분산 저장하여 안정성과 성능 균형 제공.
  • RAID 6: RAID 5와 유사하지만 두 개의 패리티 블록을 사용하여 높은 안정성 제공.
  • Nested RAID: 두 개 이상의 RAID 구성을 조합하여 안정성과 성능을 향상시키는 방법.

3. 우분투 RAID 실습:

  • RAID 0, RAID 1, RAID 5 구성 실습.
  • 각 RAID 레벨에 따른 명령어와 설정 과정 설명.
  • RAID 구성 후 우분투 추가 설정(mdadm.conf, update-initramfs) 내용 설명.

4. LVM(Logical Volume Manage):

  • 물리적 볼륨 관리: 여러 개의 하드디스크를 물리적 볼륨으로 지정하고 볼륨 그룹으로 묶음.
  • 논리적 볼륨 생성: 물리적 볼륨 그룹에서 필요한 크기만큼 논리적 볼륨을 생성하여 사용.
  • 유연한 관리: 논리적 볼륨을 나누거나 조정하여 스토리지를 유연하게 관리 가능.