인터넷을 통해 웹사이트를 사용자들에게 제공하려면, 사이트를 설치하고 배포할 별도의 서버가 필요합니다. 이 서버에 접속하기 위해서는 보통 사용자 계정과 암호를 이용하는데, 이 때 필요한 것이 바로 SSH 키입니다. SSH 키는 사용자 인증을 위해 사용되는 도구 중 하나로, 고유한 키를 통해 안전하게 서버에 접속할 수 있게 해줍니다. 이는 일반적인 암호 방식보다 더욱 강력한 보안 수단을 제공하며, SSH 키를 사용함으로써 서버의 보안을 효과적으로 강화할 수 있습니다.
SSH 키를 사용하면, 암호를 지속적으로 입력할 필요 없이 서버에 접속할 수 있습니다. 이는 일반적인 암호보다 보안이 향상되는 이점을 제공하며, 작업 효율성 또한 크게 향상시킵니다. 따라서 서버를 운영하는 데 있어 SSH 키의 사용은 필수적인 요소라고 할 수 있습니다.
이 글에서는 SSH 키의 여러 형식과 그것이 어떻게 사용되는지에 대해 알아보겠습니다. 먼저, 개인키와 공개키의 개념을 이해하고, 이것이 데이터의 보안에 어떤 역할을 하는지 정리하고, 그 다음, PEM과 PPK라는 두 가지 주요 SSH 키 형식을 살펴보고 그들 사이의 차이점을 파악하겠습니다. 마지막으로, 이러한 키들을 실제로 어떻게 사용하고 관리하는지에 대해 서도 정리합니다. 이를 통해, 서버 접속에 필요한 보안 환경을 설정하고 관리하는 능력을 키울 수 있을 것입니다.
튜토리얼 환경: Ubuntu 22.04, PuTTY
SSH 키란 무엇인가
SSH 키는 데이터를 안전하게 보호하며, 네트워크를 통해 서버에 액세스하는 중요한 방법입니다. SSH키는 기본적으로 서버에서 저장되는 공개키와 사용자(개인)이 보관하는 개인키, 이렇게 두 부분으로 구성됩니다. 이 두 키는 암호화와 복호화에 사용되며, 함께 작동하여 통신의 보안을 담당합니다.
공개 키 암호화란
공개 키 암호화는 데이터를 안전하게 전송하기 위한 방법 중 하나로, 두 개의 키(공개키와 개인키)를 사용합니다. 데이터를 암호화하는 데 사용되는 키는 공개 키이며, 암호화된 데이터를 복호화하는 데 사용되는 키는 개인 키입니다. 공개 키를 사용하여 암호화된 데이터는 해당 개인 키를 가진 사람만 복호화 할 수 있습니다.
개인키와 공개키의 차이점
그러면 개인키와 공개키는 어떠한 차이가 있는지도 간단하게 알아보도록 하겠습니다.
- 개인키: 개인키는 서버에 접속하는 사용자만이 가지고 있는 비밀키입니다. 이 키를 통해 암호화된 데이터를 복호화하거나, 데이터에 서명하여 데이터의 무결성을 확인하는 데 사용됩니다. 이 키는 절대로 외부에 노출되어서는 안 되는 중요한 정보입니다.
- 공개키: 공개키는 서버에 저장되며, 모든 사용자가 접근 가능한 키입니다. 이 키는 데이터를 암호화하거나, 개인 키에 의해 서명된 데이터의 무결성을 확인하는데 사용됩니다. 공개 키는 이름에서 알 수 있듯이 공개적으로 공유될 수 있습니다.
PEM과 PPK에 대하여
PEM과 PPK는 둘 다 공개 키 암호화에 사용되는 키 형식입니다. 이들은 서로 다른 툴이나 시스템에서 사용됩니다.
참고: 선택하는 키 형식은 주로 사용하는 SSH 클라이언트나 시스템에 따라 결정됩니다. PEM은 OpenSSH와 같은 리눅스 기반 시스템에서 널리 사용되며, PPK는 Windows 환경의 PuTTY에서 주로 사용됩니다.
PEM 키 형식 이해하기
PEMPrivacy Enhanced Mail은 원래 암호화된 메일을 보낼 때 사용하기 위해 개발된 형식입니다. 그러나 현재로서는 키, 인증서 및 기타 암호화 정보를 저장하는 데 널리 사용되는 형식이 되었습니다. 이 PEM 파일은 일반적으로 .pem
, .crt
, .cer
또는 .key
확장자를 가집니다.
PEM 키는 주로 SSH(보안 쉘) 같은 암호화 프로토콜에서 사용됩니다. 이는 클라이언트와 서버 사이의 통신을 암호화하여, 민감한 데이터를 안전하게 전송할 수 있게 해줍니다.
PEM 키 형식의 특징
PEM 키 형식은 보안 및 키 관리 분야에서 널리 사용되며, 다른 키 형식과의 변환도 쉽게 할 수 있어서 매우 유용한 형식 중 하나입니다. PEM 키 형식의 특징은 다음과 같습니다.
- PEM은 공개 키 및 개인 키와 같은 암호화 키를 저장하는 데 널리 사용되는 형식 중 하나입니다. 이 형식은 다양한 보안 프로토콜 및 애플리케이션에서 키 교환 및 인증을 위해 활용됩니다.
- OpenSSH와 같은 대부분의 SSH 클라이언트에서 기본적으로 사용됩니다. 따라서 SSH 키 관리와 원격 접속에 사용되는 경우 많이 쓰입니다.
- 기본적으로 베이스64 인코딩된 텍스트 형식을 사용하여 데이터를 인코딩합니다. PEM 형식은 주로 텍스트로 표현되며, 데이터는 베이스64 인코딩을 사용하여 ASCII 문자로 변환됩니다. 이로써 키 및 인증서를 텍스트로 표시하고 공유하기 용이합니다.
- PEM 형식의 데이터는 사람이 읽기 쉬우며, 다른 시스템 및 프로그램 간에도 쉽게 교환 가능합니다. 이러한 가독성은 디버깅 및 키 관리에 도움을 줍니다.
- PEM 형식의 데이터는 다른 키 포맷으로 변환할 수 있습니다. 예를 들어, OpenSSL을 사용하여 PEM 형식의 키를 DER 형식 또는 PFX 형식으로 변환할 수 있습니다.
PEM 파일 구조.
PEM 파일 구조는 다음과 같습니다.
--BEGIN TYPE---
BASE64 ENCODED DATA
--END TYPE---
여기서 TYPE은 저장된 데이터의 유형을 나타냅니다. 예를 들어, ---BEGIN RSA PRIVATE KEY---
와 ---END RSA PRIVATE KEY---
사이에 베이스64로 인코딩된 RSA 개인 키 데이터가 있습니다.
이 PEM 형식은 인증서Certificate, 개인 키Private Key, 공개 키Public Key, 루트 인증서Root Certificate, 인증서 체인Certificate Chain 등을 저장하는 데 사용될 수 있습니다. 이는 SSH 키, SSL 인증서 등 암호화된 네트워크 통신에서 광범위하게 사용됩니다.
PPK 키 형식 이해하기
PPKPuTTY Private Key는 PuTTY라는 유명한 SSH 및 텔넷 클라이언트에서 사용하는 키 형식입니다. PuTTY는 자체 키 형식을 사용하므로, PEM 형식의 키를 PPK 형식으로 변환해야 PuTTY를 통해 서버에 접속할 수 있습니다. Putty 사용법 더 알아보기
- PPK는 PuTTY SSH 클라이언트와 그 관련 도구에서 사용하는 키 형식입니다. PuTTY Key Generator로 ppk 생성하기
- PPK는 PuTTYgen 도구를 사용하여 PEM 키를 변환하여 생성할 수 있습니다. PEM키 PPK로 변환하기
- PuTTY는 Windows에서 널리 사용되는 SSH 클라이언트입니다.
PEM과 PPK의 차이점
PEM과 PPK의 주요 차이점은 다음과 같습니다.
- PEM 키 형식은 RSA 및 DSA 암호화 알고리즘을 적용한 키 저장에 사용되는 표준 형식이지만, PPK는 PuTTY 프로그램의 개인키 저장을 위해 사용되는 형식입니다.
- PEM 키 형식은 주로 Linux 및 UNIX 계열 운영 체제에서 사용되는 반면, PPK 키 형식은 주로 Windows 운영 체제의 PuTTY에서 사용됩니다.
- PEM 키 형식은 텍스트 마커와 Base64 인코딩을 사용하여 공개키 및 개인키를 표현하는 반면, PPK는 PuTTYgen 도구를 사용하여 생성되며 공개 키 및 개인 키로 구성되어 있습니다.
SSH 키의 사용 방법
개인키와 공개키를 생성하고 이렇게 생성된 공개키를 서버에 등록하고 접속하는 기본적인 방법을 정리합니다.
참고: 내용이 장황할 수 있지만 기본적으로 개인키는 본인이 보관하고 공개키는 접속할 서버에 업로드합니다. 그리고 개인키와 공개키가 서로 매칭되면 접속이 가능한 것입니다.
개인키와 공개키 생성하기
AWS, Google 클라우드 와 같은 서비스를 통해 서버를 생성하면 간편하게 SSH키 쌍을 생성하고 등록할 수 있습니다. 하지만 기본적으로 SSH 키는 직접 생성할 수 있습니다. 키 생성하는 방법은 사용하는 운영 체제나 도구에 따라 다르지만, Linux, macOS 또는 Git Bash와 같은 Unix 기반의 환경에서는 다음과 같은 명령어를 사용하여 생성할 수 있습니다.
리눅스 또는 macOS에서 생성하는 방법
ssh-keygen -t rsa
터미널Terminal을 실행한 다음, 위 명령을 입력하고 실행하면 다음과 같이 암호 생성 과정이 진행되고 결과가 출력됩니다. 만약 키 쌍의 이름을 변경하고 싶은 경우 ssh-keygen -t rsa -f /원하는/경로/및/파일이름
와 같이 명령합니다.
root@cd2f6e105529:/# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa
Your public key has been saved in /root/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:E+xTEzgfik2HgOzRSlp0pxwFXZmrEvBMqMnO/XAFSOI root@cd2f6e105529
The key's randomart image is:
+---[RSA 3072]----+
| .+o===o+oo |
| . .Xo+=* =. |
| .EB Bo=o=oo |
| = o =.+oo. |
| o . oS. |
| o o o .o |
| + . |
| . |
| |
+----[SHA256]---+
root@cd2f6e105529:/
위 작업 후 ~/.ssh
경로를 확인하면, 개인키는 id_rsa
파일에 공개키는 id_rsa.pub
파일에 저장됩니다.
root@cd2f6e105529:~/.ssh# ll
total 20
drwx---- 2 root root 4096 Aug 4 07:14 ./
drwx---- 1 root root 4096 Aug 4 07:16 ../
-rw----- 1 root root 2655 Aug 4 07:08 id_rsa
-rw-r--r-- 1 root root 571 Aug 4 07:08 id_rsa.pub
root@cd2f6e105529:~/.ssh#
~/.ssh/id_rsa
파일을 열어보면 다음과 같은 값을 볼 수 있습니다. 앞서 안내한 형식으로 파일이 저장되는 것을 확인할 수 있습니다.
--BEGIN OPENSSH PRIVATE KEY---
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
TJvaiHB64LG5AWXrEQqnCRIns8s=
--END OPENSSH PRIVATE KEY---
그리고 ~/.ssh/id_rsa.pub
파일을 열어보면 다음과 같은 값을 볼 수 있습니다.
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCu4PaHnNS7QD7zWb8tKKhK6sZNznz9iGwkMseBfgSHHobZb27Q7dM8tTfsZOSUj+i9lK7AUEevZAKKeRWUAPZ7DA2pyIskr6Wan60aBkzdIn7c1vGJffGwCtBSU9T1v+a9uEwdze01gXdNWHp0ajuEg7UHJ622Crgo5kzj/wBzUBD74lbyyRKsIaA1mL8AjaKq8v2ddwpQM0j8JUyyoNFYwBPs1gBoABq7TWU833amISHzLh6FnEDtsAe5wtsZc7fQ9cXcHX3QZWflJukb2DJgqFZL1yXAr+T56E52CJ6AQRK/KjFnYWLd6qeiNpaPi15t18jyz+M9+R8psFCsWa5y3hF5skDaXilFLxR5l1soOfZ93ZvbQlfVbqbtzJ+PnsQ/KAeyaexOtINq1mN0TZfB3RGwvuDtd+s7SwsK8ONXG/uequuvSsX/P8dB7I2Cr+o5bSBfB9jhh2heM+6rYgKlxrSVGYeBCxilOC4BQWTr/klYEJVDGn07ldwK5YxtPmU= root@cd2f6e105529
앞서 짧게 언급했지만, 조금 응용해 보면 다음과 같이 키의 이름, 저장 위치, 비밀번호 등을 원하는 값으로 지정 및 설정할 수 있습니다.
ssh-keygen -t rsa -b 4096 -C "your_email@example.com" -f /원하는/경로/및/파일이름
이 명령어는 4096비트 RSA 키를 생성하라는 의미이고, 생성 과정에서 몇 가지 질문이 나올 수 있으며, 이러한 옵션은 SSH 키 생성 시 추가적인 설정을 할 때 사용되며, 모든 옵션은 선택 사항이며 기본 설정값을 사용할 수도 있습니다. 사용자의 요구사항과 보안 필요에 따라 옵션을 조정할 수 있습니다.
-b 4096
: 비트 수를 나타내며, 4096비트로 키를 생성하라는 옵션입니다. 더 긴 키 비트 수는 더 강력한 보안을 제공하지만 생성 및 사용 시 더 많은 컴퓨팅 리소스를 요구할 수 있습니다. 일반적으로 2048비트 또는 4096비트를 사용합니다.-f /원하는/경로/및/파일이름
:-f
옵션을 사용하여 파일 이름을 변경하고, 생성되는 키 파일은 /원하는/경로/및/파일이름에 저장됩니다. 이 부분은 선택 사항입니다.-C "your_email@example.com"
:-C
옵션은 주석(comment) 필드로, 생성된 키에 사용자의 이메일 주소를 포함하라는 옵션입니다. 이 부분은 선택 사항이며, 키에 관련된 추가 정보를 제공할 때 사용됩니다.
Windows에서 생성하는 방법
Windows에서 키 쌍을 생성하려면 PuTTYgen을 사용합니다. PuTTYgen을 다운로드 받고 실행한 다음, Generate 버튼을 클릭해서 공개 및 개인키를 생성합니다. 그 다음 Save public key와 Save private key를 클릭하여 각각의 키를 저장합니다.
공개키 등록하는 방법
SSH 공개키를 등록하는 방법은 사용자 계정 및 서버에 따라 다릅니다. 하지만 일반적인 방법으로는 공개키를 원격 서버의 사용자 계정에 등록하는 것입니다. 이를 위해서는 다음과 같은 단계를 따릅니다.
mkdir -p ~/.ssh
- 원격 서버에 SSH를 사용하여 접속합니다. 접속한 후에는 사용자의 홈 디렉토리에
.ssh
라는 이름의 디렉토리를 생성합니다. 대부분의 리눅스 기반 시스템에서는 사용자가 처음 SSH를 사용하게 되면~/.ssh
디렉토리가 자동으로 생성되니 만약 이미 디렉토리가 존재한다면 이 단계는 건너뛰어도 됩니다.
echo your_public_key >> ~/.ssh/authorized_keys
- 생성된
.ssh
디렉토리 내부에authorized_keys
라는 파일을 생성하고, 이 파일에 공개키를 추가합니다. 이때your_public_key
는 본인의 실제 공개키로 교체해야 합니다.
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
.ssh
디렉토리와authorized_keys
파일의 권한을 업데이트합니다..ssh
디렉토리는 본인만 접근할 수 있도록,authorized_keys
파일은 본인만 읽고 쓸 수 있도록 설정해야 합니다.
이제 원격 서버에 자신의 공개키가 등록되었습니다. 이제부터는 개인키를 가진 클라이언트만이 해당 사용자 계정으로 서버에 접속할 수 있게 됩니다.
참고: 위의 방법은 일반적인 Linux 서버에서의 공개키 등록 방법입니다. 다른 서비스나 환경에서는 웹 기반 인터페이스를 제공하는 경우도 있으니, 각 서비스의 문서를 참고하시는 것이 좋습니다.
키 사용해서 접속하기
전술한대로 클라우드 서비스에서 인스턴스를 최초 생성할 때 공개키가 주입되어 있습니다. 인스턴스를 생성하는 과정에서 새 키 쌍을 생성하거나, 기존에 발급받은 키를 가져와 그대로 사용할 수도 있습니다. 이후 인스턴스에 연결하려면 개인키를 사용하여 SSH를 설정해야 합니다. 여기서는 서버에 접속하는 방법을 아주 간단하게 안내합니다.
리눅스 및 macOS에서 연결하는 방법
터미널에서 다음 명령을 입력하십시오. your_private_key
는 개인키 파일의 경로, username
은 서버 사용자 계정(user, ubuntu 혹은 ec2-user 등) 이름, server_ip
는 원격 서버의 IP 주소로 대체해야 합니다. 콘솔과 터미널 알아보기
ssh -i your_private_key username@server_ip
Windows에서 연결하는 방법
Windows에서도 터미널 지원이 좋아지면서 Bash 쉘을 사용할 수 있는 기능이 추가되었습니다. 이를 통해 Linux에서와 거의 동일한 방식으로 SSH 키를 생성하고, 공개키를 서버에 등록할 수 있게 되었습니다. 터미널 외에도 PuTTY를 이용해서 > > 메뉴로 이동한 다음, 에 개인키 PPK 파일을 지정합니다(PEM 키는 위에서 설명한대로 PPK로 변환해야 함). 그러고나서 Session 메뉴에서 호스트 이름 및 포트 번호를 입력하고 Open을 클릭하여 연결합니다.
이를 통해 SSH 키를 사용하여 원격 서버에 안전하게 접속할 수 있습니다. 사용자 계정이 여러 개인 경우, 각 사용자에 대해 독립적인 공개키를 등록하여 접근 권한을 관리할 수 있습니다.
SSH 에이전트 사용
SSH 에이전트는 로컬 컴퓨터에서 개인 키를 안전하게 관리하고, 원격 서버에 로그인할 때 해당 개인 키를 사용하여 접속하는 기능을 수행합니다. SSH 에이전트 전달Agent Forwarding을 활성화하고 싶다면 SSH의 -A
옵션을 사용합니다.
SSH 에이전트
SSH 에이전트를 사용하여 원격 서버에 로그인하려면 다음과 같이 -A
옵션을 사용합니다.
ssh -A -i your_private_key username@server_ip
이때, -i
옵션을 통해 개인 키 파일을 지정하고, -A
옵션을 사용하여 에이전트 포워딩을 활성화합니다.
- 에이전트 포워딩을 사용하면 원격 서버에 로그인한 후에도 현재 로그인된 사용자의 SSH 에이전트에 저장된 개인 키를 사용할 수 있습니다. 이것은 여러 서버 간에 로그인하는 데 매우 편리하며, 중간 서버(점프 호스트)를 통해 다른 서버로 접속해야 할 때 유용합니다.
- 단, SSH 에이전트를 사용하기 위해서는 로컬 컴퓨터에서 SSH 에이전트가 실행 중이어야 하며, SSH 에이전트에 개인 키를 추가하고 활성화해야 합니다. 에이전트가 실행 중이지 않다면
ssh-agent
명령으로 실행할 수 있습니다. - 안전한 원격 서버 접속을 위해 SSH 에이전트와 에이전트 포워딩을 사용하는 것은 좋은 관행 중 하나입니다.
운영체제별 에이전트 포워딩
SSH 에이전트 및 에이전트 포워딩은 Windows, macOS 및 Linux 모두에서 사용 가능합니다. 그러나 사용하는 운영체제에 따라 설정 방법이 다를 수 있습니다.
Windows
- Windows에서는 SSH 에이전트로
Pageant
라는 프로그램을 주로 사용합니다. Pageant는 PuTTY와 함께 제공되며, PuTTY의 공개 키 형식인 PPK 파일을 사용합니다. - 에이전트 포워딩을 활성화하려면 PuTTY에서 설정할 수 있습니다. PuTTY를 사용하여 원격 서버에 연결하면 SSH 에이전트가 활성화됩니다.
- 다만, Windows PowerShell에서 SSH 에이전트 및 에이전트 포워딩을 기본적으로 지원하지는 않습니다.
macOS
- macOS에서는 기본적으로 SSH 에이전트를 제공합니다. 일반적으로 개인 키 파일을
~/.ssh/
디렉터리에 저장하고ssh-add
명령을 사용하여 에이전트에 키를 추가합니다. - 에이전트 포워딩은 macOS에서도 사용 가능하며,
-A
옵션을ssh
명령어에 추가하여 활성화할 수 있습니다.
Linux
- 대부분의 Linux 배포판은 SSH 에이전트를 기본으로 포함하고 있습니다. 개인 키 파일을
~/.ssh/
디렉터리에 저장하고ssh-add
명령을 사용하여 에이전트에 키를 추가할 수 있습니다. - 에이전트 포워딩은 Linux에서도 사용 가능하며,
-A
옵션을ssh
명령어에 추가하여 활성화할 수 있습니다.
SSH 키 관리
편의를 위해 계정 수준에서 SSH키를 하나만 생성해서 여러 사이트에서 사용하는 경우를 자주보게 되는데 이때 고려해야 하는 부분과 기본적인 키 관리와 보안에 대해서 짧게 추가합니다.
주의: 하나의 SSH 키를 여러 서비스에 걸쳐 사용하는 것은 편리할 수 있지만, 보안 상의 이유로 권장되지 않습니다. 키가 하나의 서비스에서 노출되면, 모든 서비스가 위험에 노출될 수 있기 때문입니다. 가능하다면, 각 서비스에 대해 별도의 키를 생성하고 관리하는 것이 좋습니다. 또한 키를 정기적으로 갱신하는 것이 중요하며, 갱신 주기는 적어도 6개월에서 1년이 권장됩니다.
SSH 키 관리는 시스템의 보안 수준을 크게 좌우합니다. 키를 안전하게 보관하고, 절대 노출되지 않도록 해야 합니다. 특히 개인키는 매우 중요한데, 이는 서버에 접속하는 데 사용되므로 누구에게도 알려져서는 안됩니다.
- 개인키를 파일 형태로 저장할 때는 암호화하여 보관하는 것이 좋습니다. 또한 키 파일의 권한을 적절히 설정하여, 다른 사용자가 접근할 수 없도록 해야 합니다. Linux에서는
chmod 600
명령을 사용하여 키 파일의 권한을 설정할 수 있습니다. - 또한 키의 생명주기를 관리하는 것도 중요합니다. 예를 들어, 특정 프로젝트나 직원이 회사를 떠난 경우 해당 키를 폐기해야 합니다. 이렇게 하면 더 이상 필요하지 않은 키로 인한 보안 위협을 방지할 수 있습니다.
마치며
이번 글에서는 SSH 키의 종류와 사용법, pem 키, ppk키 그리고 개인키, 공개키에 대해 알아보았습니다. SSH 키는 네트워크를 통한 서버 접속 시 중요한 보안 역할을 합니다. 서로 다른 서비스에 대해 각각의 키를 사용하고, 키를 정기적으로 갱신하는 것은 기본적인 키 관리 방법입니다. 또한, 개인키는 매우 중요한 정보로, 이를 안전하게 보관하고 절대 노출되지 않도록 해야 합니다.
PEM과 PPK는 두 가지 주요 SSH 키 형식으로, PEM은 널리 사용되는 표준 키 형식이며, PPK는 PuTTY SSH 클라이언트에서 사용하는 키 형식입니다. 이들은 각각의 환경과 요구에 맞게 사용되어야 합니다. 마지막으로, 개인키와 공개키는 SSH 키를 이루는 두 가지 부분으로, 이 둘은 키 생성 및 관리, 그리고 서버 접속에 있어 핵심적인 역할을 합니다. 개인키는 사용자만이 가지고 있어야 하며, 공개키는 원격 서버에 등록되어, 해당 키를 가진 사용자만이 접속할 수 있도록 합니다.
이번 글을 통해 SSH 키와 관련한 기본적인 지식을 얻었기를 바랍니다. 이를 바탕으로 보다 안전한 서버 접속 및 관리를 위한 준비가 되었기를 바라며, 더 깊이 있는 공부를 위해 추가 자료를 찾아보시는 것도 추천합니다.