Posts by Tags

GPU

GPU Acceleration

less than 1 minute read

Published:

이전 포스팅들에서 GPU에 대해서 다뤘던 적이 꽤 있습니다. GPU를 효율적으로 활용하는 자료구조와 GPU로 직접 데이터를 전송하는 새로운 기술 등을 다뤘습니다. 이번 포스팅은 GPU를 사용한 데이터베이스 연산에 관한 연구들을 다뤄보고자 합니다. 이 포스팅에 모든 내용을 담지는 않고, 일종의 인덱스 포스팅으로 삼으려고 합니다.

GPU LSM: A Dynamic Dictionary Data Structure for the GPU

less than 1 minute read

Published:

출처: Ashkiani, Saman, et al. “GPU LSM: A dynamic dictionary data structure for the GPU.” 2018 IEEE International Parallel and Distributed Processing Symposium (IPDPS). IEEE, 2018.

KV store

GPU LSM: A Dynamic Dictionary Data Structure for the GPU

less than 1 minute read

Published:

출처: Ashkiani, Saman, et al. “GPU LSM: A dynamic dictionary data structure for the GPU.” 2018 IEEE International Parallel and Distributed Processing Symposium (IPDPS). IEEE, 2018.

LSM Tree

11 minute read

Published:

작년에 ICDE에서 발표된 WipDB라는 논문을 보면서 LSM 트리(log-structured merge tree, LSM Tree)라는 자료구조를 접했습니다. LSM 트리를 처음 접하는 것은 아니지만, LSM 트리라는 것이 워낙 많이 쓰이기도 하고, 이 논문과 다른 여러 논문을 읽을 때 도움이 될 것 같아 이 기회에 정리를 해보려고 합니다. 이 글에서는 LSM 트리가 무엇인지, 어디에 쓰이는지, 어떤 변형들이 있는지 간단하게 정리할 것입니다. 다른 배경지식에 흥미가 없으시면 바로 LSM Tree 섹션으로 건너뛰셔도 무방합니다.

c++

C++ Tricks

4 minute read

Published:

LevelDB를 하나하나 뜯어보면서 공부하고 있습니다. 이 코드를 보기 시작하면서 C++에 신기한 기능들이 정말 많다는 것을 알게 되었고, 코딩테스트 준비를 하면서 사용한 C++의 여러 기능들은 정말 수박 겉핥기였다는 것을 새삼 느끼고 있습니다. 또, 이미 아는 내용도 정말 세련되게 사용하는 방법들이 있다는 것도 깨닫게 되었습니다.

C++ Exports

4 minute read

Published:

LevelDB 코드를 읽다가 export.h라는 파일을 읽었습니다. 원래는 나중에 따로 읽어보려고 했는데, 먼저 읽어보고 이렇게 따로 정리하는 데에는 이유가 크게 두 가지 있습니다. 첫째는 제가 열어본 모든 헤더 파일들이 export.h 파일을 include 하고 있기 때문입니다. 둘째는 처음 시작한 db.h 파일에 이런 클래스가 있었기 때문입니다.

centos

Trying Docker

3 minute read

Published:

도커(Docker)를 올해 처음 써봤습니다. 정확하게는 지난 학기에 과제를 하면서 시뮬레이터를 로컬에 돌리기 어려웠을 때, 다행히도 해당 시뮬레이터가 도커 이미지를 제공해줘서 그 이미지를 기반으로 과제를 했었습니다. 써보니까 너무 가볍고 간편해서 왜 지금까지 이걸 몰랐지, 그리고 앞으로 자주 써야겠다, 라는 생각을 했습니다.

cmake

CMake Basics

5 minute read

Published:

원래는 LevelDB의 코드를 하나하나 뜯어보면서 어떻게 시스템이 구성되어 있는지 확인하는 포스팅을 작성할 계획이었습니다. 당연히 하나로는 택도 없고 몇 개에 나누어서 할 생각이었습니다. 그런데 다짜고짜 코드를 뜯어서 보기 시작하는 것 보다 CMakeLists.txt 파일을 보면서 이 프로젝트가 어떻게 빌드되는지 확인하는 것이 도움이 될 것 같아서 CMake부터 공부를 하기로 마음먹었습니다.

database

B+ Tree

2 minute read

Published:

LSM 트리에 관한 지난 포스트에서 B+ 트리에 대한 언급이 있었습니다. LSM 트리를 이해하는 데에 도움이 되지만 추가하기 너무 길어져서 별도의 포스팅으로 정리한다는 것이었는데요. 이 포스팅에서는 B+ 트리에 대해서 다뤄보고자 합니다. 기본적인 구조에서부터 어떻게 삽입, 삭제, 업데이트가 이루어지는지, 그리고 왜 B+ 트리가 효과적인지에 대해 살펴볼 예정입니다.

Bloom Filter

less than 1 minute read

Published:

블룸 필터(bloom filter)는 정말 단순하면서도 강력한 성능을 보이기 때문에 수많은 데이터베이스에서 사용되는 자료구조입니다. 사실 카테고리를 인덱스라고 설정하긴 했는데, 엄밀히 말하면 인덱스라고 보기에는 어렵습니다. 데이터가 담긴 위치를 정확하게, 혹은 근사해서라도 저장하고 있지 않기 때문입니다. 오히려 인덱싱 혹은 탐색을 조금 더 쉽게 하기 위한 조미료라고 생각하면 편합니다. 이번 포스팅에서는 블룸 필터에 대해서 살펴보도록 하겠습니다.

LSM Tree

11 minute read

Published:

작년에 ICDE에서 발표된 WipDB라는 논문을 보면서 LSM 트리(log-structured merge tree, LSM Tree)라는 자료구조를 접했습니다. LSM 트리를 처음 접하는 것은 아니지만, LSM 트리라는 것이 워낙 많이 쓰이기도 하고, 이 논문과 다른 여러 논문을 읽을 때 도움이 될 것 같아 이 기회에 정리를 해보려고 합니다. 이 글에서는 LSM 트리가 무엇인지, 어디에 쓰이는지, 어떤 변형들이 있는지 간단하게 정리할 것입니다. 다른 배경지식에 흥미가 없으시면 바로 LSM Tree 섹션으로 건너뛰셔도 무방합니다.

docker

Trying Docker

3 minute read

Published:

도커(Docker)를 올해 처음 써봤습니다. 정확하게는 지난 학기에 과제를 하면서 시뮬레이터를 로컬에 돌리기 어려웠을 때, 다행히도 해당 시뮬레이터가 도커 이미지를 제공해줘서 그 이미지를 기반으로 과제를 했었습니다. 써보니까 너무 가볍고 간편해서 왜 지금까지 이걸 몰랐지, 그리고 앞으로 자주 써야겠다, 라는 생각을 했습니다.

Installing PyFlink

6 minute read

Published:

지난 포스팅에서는 도커를 설정하는 과정을 다뤘습니다. 처음으로 Dockerfile을 만들고, 베이스 이미지로 사용한 CentOS 위에 자바나 파이썬, 플링크같이 이것저것 올리는 과정을 기록했습니다. 하지만 플링크를 어떻게 다루는지보다는 도커 설정과 실행시키는 것에 초점을 뒀기 때문에 그 이미지 그대로 도커 컨테이너를 실행시킨다면 제대로 작동하지 않습니다. 이번 포스팅에는 플링크의 파이썬 API 문서를 살펴보며 어떻게 환경 설정을 하고 실행시키는 것인지 알아보도록 하겠습니다. 원래는 Flink에 대해 전체적으로 알아보려고 했는데, 설치하는 방법을 알아내는 데에만 너무 시간이 많이 소모되어 아예 이 포스팅을 설치하는 것으로 대체하기로 했습니다!

Trying Docker

3 minute read

Published:

도커(Docker)를 올해 처음 써봤습니다. 정확하게는 지난 학기에 과제를 하면서 시뮬레이터를 로컬에 돌리기 어려웠을 때, 다행히도 해당 시뮬레이터가 도커 이미지를 제공해줘서 그 이미지를 기반으로 과제를 했었습니다. 써보니까 너무 가볍고 간편해서 왜 지금까지 이걸 몰랐지, 그리고 앞으로 자주 써야겠다, 라는 생각을 했습니다.

htap

HTAP Databases

1 minute read

Published:

지난 1학기, 컴퓨터구조 강의를 들으면서 이것저것 논문을 찾아보다가 우연하게 찾은 논문이 하나 있습니다. 딱히 내용이 궁금했던 것은 아닌데, 논문의 저자 중에서 컴퓨터구조 분야에서 정말 많이 보이던 이름을 발견해서 흥미가 생겼습니다. 왜 흥미가 생겼냐면, 논문의 주제가 데이터베이스였기 때문입니다. 아키텍쳐 교수님이 데이터베이스 논문을? 이라는 생각이 들어 흥미롭게 읽었던 논문입니다.

index

B+ Tree

2 minute read

Published:

LSM 트리에 관한 지난 포스트에서 B+ 트리에 대한 언급이 있었습니다. LSM 트리를 이해하는 데에 도움이 되지만 추가하기 너무 길어져서 별도의 포스팅으로 정리한다는 것이었는데요. 이 포스팅에서는 B+ 트리에 대해서 다뤄보고자 합니다. 기본적인 구조에서부터 어떻게 삽입, 삭제, 업데이트가 이루어지는지, 그리고 왜 B+ 트리가 효과적인지에 대해 살펴볼 예정입니다.

Bloom Filter

less than 1 minute read

Published:

블룸 필터(bloom filter)는 정말 단순하면서도 강력한 성능을 보이기 때문에 수많은 데이터베이스에서 사용되는 자료구조입니다. 사실 카테고리를 인덱스라고 설정하긴 했는데, 엄밀히 말하면 인덱스라고 보기에는 어렵습니다. 데이터가 담긴 위치를 정확하게, 혹은 근사해서라도 저장하고 있지 않기 때문입니다. 오히려 인덱싱 혹은 탐색을 조금 더 쉽게 하기 위한 조미료라고 생각하면 편합니다. 이번 포스팅에서는 블룸 필터에 대해서 살펴보도록 하겠습니다.

LSM Tree

11 minute read

Published:

작년에 ICDE에서 발표된 WipDB라는 논문을 보면서 LSM 트리(log-structured merge tree, LSM Tree)라는 자료구조를 접했습니다. LSM 트리를 처음 접하는 것은 아니지만, LSM 트리라는 것이 워낙 많이 쓰이기도 하고, 이 논문과 다른 여러 논문을 읽을 때 도움이 될 것 같아 이 기회에 정리를 해보려고 합니다. 이 글에서는 LSM 트리가 무엇인지, 어디에 쓰이는지, 어떤 변형들이 있는지 간단하게 정리할 것입니다. 다른 배경지식에 흥미가 없으시면 바로 LSM Tree 섹션으로 건너뛰셔도 무방합니다.

leveldb

[LevelDB #01] LevelDB Structure

3 minute read

Published:

LevelDB는 LSM 트리를 사용한 대표적인 데이터베이스입니다. (LSM 트리에 대해서는 제 이전 포스팅이나 위키피디아를 참고하시길 바랍니다.) LSM 트리를 사용하기 때문에 LevelDB는 효율적인 쓰기 성능과 상대적으로 덜 효율적인 읽기 성능을 보입니다. LevelDB가 쓰기에서 뛰어난 성능을 보이는 이유는 쓰기 작업이 들어오면 그 작업을 스토리지에 즉각적으로 반영하는 것이 아니라 메모리에 위치하는 버퍼에 저장만 한 뒤, 버퍼가 가득 차면 스토리지로 내려보내는 방식으로 작동하기 때문입니다. 따라서 쓰기 작업이 있을 때마다 스토리지를 참조할 필요가 없어지기 때문에 쓰기 성능이 좋아지겠죠.

C++ Tricks

4 minute read

Published:

LevelDB를 하나하나 뜯어보면서 공부하고 있습니다. 이 코드를 보기 시작하면서 C++에 신기한 기능들이 정말 많다는 것을 알게 되었고, 코딩테스트 준비를 하면서 사용한 C++의 여러 기능들은 정말 수박 겉핥기였다는 것을 새삼 느끼고 있습니다. 또, 이미 아는 내용도 정말 세련되게 사용하는 방법들이 있다는 것도 깨닫게 되었습니다.

C++ Exports

4 minute read

Published:

LevelDB 코드를 읽다가 export.h라는 파일을 읽었습니다. 원래는 나중에 따로 읽어보려고 했는데, 먼저 읽어보고 이렇게 따로 정리하는 데에는 이유가 크게 두 가지 있습니다. 첫째는 제가 열어본 모든 헤더 파일들이 export.h 파일을 include 하고 있기 때문입니다. 둘째는 처음 시작한 db.h 파일에 이런 클래스가 있었기 때문입니다.

CMake Basics

5 minute read

Published:

원래는 LevelDB의 코드를 하나하나 뜯어보면서 어떻게 시스템이 구성되어 있는지 확인하는 포스팅을 작성할 계획이었습니다. 당연히 하나로는 택도 없고 몇 개에 나누어서 할 생각이었습니다. 그런데 다짜고짜 코드를 뜯어서 보기 시작하는 것 보다 CMakeLists.txt 파일을 보면서 이 프로젝트가 어떻게 빌드되는지 확인하는 것이 도움이 될 것 같아서 CMake부터 공부를 하기로 마음먹었습니다.

linux

WSL Username Configuration

2 minute read

Published:

잠깐동안 우분투를 네이티브로 설치했다가 다시 윈도우로 회귀했습니다. 너무 윈도우가 느려지고 계속 오류가 나서 어차피 컴퓨터에 내용도 별로 없고 중요한 자료는 다 클라우드에 올라가있겠다, 그냥 포맷을 시켜버리기로 마음먹었습니다. 포맷을 시키고 나니 이것저것 설정할 것이 조금 있더군요.

가장 먼저 한 것은 git이나 vscode, Windows Terminal, WSL2 등을 설치한 것이었습니다. 하지만 이 포스팅은 그런 큼직한 내용을 다루기 위한 것이 아닙니다. 정말 사소한, WSL에서 구동하는 우분투 내의 기본 사용자 이름을 바꾸는 것에 관한 것입니다.

우선 WSL을 설치하는 것은 정말 간단합니다. 제가 예전에 할 때는 더 복잡했던 것 같은데, 이제는 PowerShell에 다음 명령어 한 줄만 쳐도 가능합니다.

# PowerShell
$ wsl --install

그러면 설정부터 우분투 설치까지 알아서 다 해 줍니다. 그리고 난 뒤, 컴퓨터를 재부팅을 하고 터미널을 키면 우분투 설정을 마무리하게 되죠. 유저명과 비밀번호를 설정하는 것으로 말입니다.

그런데 저는 여기서 정말 멍청한 실수를 했습니다. 아무런 생각 없이 유저명을 user로 해 버린 것입니다. 그래서 너무 늦기 전에 유저명을 바꾸기로 했습니다.

Changing Username (Unnecessary)

출처: https://www.linuxuprising.com/2019/04/how-to-change-username-on-ubuntu-debian.html

위 링크의 설명을 하나하나 따라가면 쉽습니다. 먼저 임시 유저를 하나 만들고 sudo 권한을 부여합니다. 저는 tempuser라는 유저를 새로 만들었습니다.

# Ubuntu
$ sudo adduser tempuser

그러면 여기서 이름이나 부서나 이메일같이 지금 저희에게는 쓸모없는 설정을 마구 물어봅니다. 모두 설정할 필요 없이 엔터키를 눌러 스킵합니다. 그리고 해당 유저에게 sudo 권한을 부여합니다.

# Ubuntu
$ sudo usermod -aG sudo tempuser

이 다음에는 새로운 유저인 tempuser로 로그인을 해야 합니다. 저는 WSL에서 우분투를 쓰면서 이 부분이 조금 곤란했습니다. 어떻게 유저를 변경해야 하는지 몰랐기 때문입니다.

Changing Current User

WSL 우분투에서 사용자를 바꾸기 위해서는 다시 윈도우 명령 프롬프트로 들어가야 합니다. 명령 프롬프트에서 다음 명령어를 쳐 봅시다.

# CMD Prompt
$ ubuntu config --default-user root

그러면 WSL에서 우분투 터미널을 킬 때 로그인되는 사용자가 root일 것입니다. 여기서 앞서서 tempuser 사용자를 만드는 것이 왜 불필요한 것인지 알 수 있습니다. 어차피 우리가 사용하는 WSL에 대한 루트 권한이 있기 때문에 굳이 별도의 유저를 만들 필요가 없는 것입니다.

Changing Username

그러면 이제 root 사용자로 우분투를 켠 뒤 어떻게 설정하면 되는지 알아보도록 하겠습니다.

가장 먼저 기존 사용자 이름으로 실행되고 있던 프로세스를 죽여야 합니다. 다음 명령어를 통해 현재 실행되고 있는 프로세스를 찾습니다.

# Ubuntu
$ ps -ef

그러면 현재 실행되고 있는 프로세스를 실행시킨 사용자 이름(UID)와 프로세스 번호(PID)를 비롯한 정보를 확인할 수 있습니다. 여기서 우리가 바꾸고자 하는 사용자가 실행중인 프로세스 번호를 죽입니다. 다음 명령어를 실행하면 됩니다.

# Ubuntu
$ kill <pid>

애초에 우리는 지금 루트 권한으로 로그인한 것이기 때문에 권한을 획득할 필요가 없습니다. 바꾸고자 하는 사용자가 실행중인 프로세스를 위 명령어를 통해 모두 죽여서 해당 사용자가 실행중인 프로세스가 없을 때 비로소 사용자 이름을 바꿀 수 있습니다.

# Ubuntu
$ usermod -l <newusername> -d /home/<newusername> -m <oldusername>

그러면 비로소 사용자 이름을 바꿀 수 있는 것입니다. 잊지 말고 명령 프롬프트에서 기본 접속 아이디를 바꿔놓도록 합시다.

# CMD Prompt
$ ubuntu config --default-user <newusername>

이렇게 설정하면 우리가 바꾼 사용자 이름으로 로그인할 수 있게 됩니다.

Ubuntu Setup

8 minute read

Published:

많은 시행착오를 거쳐서 데스크탑에 우분투를 설치했습니다. 참고로 우분투 버전은 20.04, 리눅스 커널 버전은 5.4.0-21-generic입니다. 이번 포스팅에서는 우분투를 처음 설치했을 때 환경설정 과정을 기록하고자 합니다.

Windows/Ubuntu Dual Booting

less than 1 minute read

Published:

GPUDirect Storage를 사용해보기 위해서는 조건이 몇가지 있습니다. 그 중에서는 NVMe가 사용 가능한 SSD가 필요하다는 조건이 있습니다. 제가 당장 쓸 수 있는 조건을 만족하는 SSD는 제 운영체제가 설치된 SSD 하나밖에 없었습니다. 그래서 남는 용량을 파티션해서 우분투를 설치해 사용하려고 계획했습니다. 유튜브 영상과 블로그를 몇가지 참조했는데, 이전 포스팅과 같이 문제가 잘 풀렸으면 포스팅을 작성하지 않았을 것입니다.

misc

Disk Partitioning

5 minute read

Published:

제가 6개월 가까이 쳐다보지 않고 질질 끌던 문제를 드디어 해결했습니다. 이 문제가 어디서부터 시작된 상황인지 천천히 되짚어 보겠습니다.

paper review

GPU LSM: A Dynamic Dictionary Data Structure for the GPU

less than 1 minute read

Published:

출처: Ashkiani, Saman, et al. “GPU LSM: A dynamic dictionary data structure for the GPU.” 2018 IEEE International Parallel and Distributed Processing Symposium (IPDPS). IEEE, 2018.

ubuntu

WSL Username Configuration

2 minute read

Published:

잠깐동안 우분투를 네이티브로 설치했다가 다시 윈도우로 회귀했습니다. 너무 윈도우가 느려지고 계속 오류가 나서 어차피 컴퓨터에 내용도 별로 없고 중요한 자료는 다 클라우드에 올라가있겠다, 그냥 포맷을 시켜버리기로 마음먹었습니다. 포맷을 시키고 나니 이것저것 설정할 것이 조금 있더군요.

가장 먼저 한 것은 git이나 vscode, Windows Terminal, WSL2 등을 설치한 것이었습니다. 하지만 이 포스팅은 그런 큼직한 내용을 다루기 위한 것이 아닙니다. 정말 사소한, WSL에서 구동하는 우분투 내의 기본 사용자 이름을 바꾸는 것에 관한 것입니다.

우선 WSL을 설치하는 것은 정말 간단합니다. 제가 예전에 할 때는 더 복잡했던 것 같은데, 이제는 PowerShell에 다음 명령어 한 줄만 쳐도 가능합니다.

# PowerShell
$ wsl --install

그러면 설정부터 우분투 설치까지 알아서 다 해 줍니다. 그리고 난 뒤, 컴퓨터를 재부팅을 하고 터미널을 키면 우분투 설정을 마무리하게 되죠. 유저명과 비밀번호를 설정하는 것으로 말입니다.

그런데 저는 여기서 정말 멍청한 실수를 했습니다. 아무런 생각 없이 유저명을 user로 해 버린 것입니다. 그래서 너무 늦기 전에 유저명을 바꾸기로 했습니다.

Changing Username (Unnecessary)

출처: https://www.linuxuprising.com/2019/04/how-to-change-username-on-ubuntu-debian.html

위 링크의 설명을 하나하나 따라가면 쉽습니다. 먼저 임시 유저를 하나 만들고 sudo 권한을 부여합니다. 저는 tempuser라는 유저를 새로 만들었습니다.

# Ubuntu
$ sudo adduser tempuser

그러면 여기서 이름이나 부서나 이메일같이 지금 저희에게는 쓸모없는 설정을 마구 물어봅니다. 모두 설정할 필요 없이 엔터키를 눌러 스킵합니다. 그리고 해당 유저에게 sudo 권한을 부여합니다.

# Ubuntu
$ sudo usermod -aG sudo tempuser

이 다음에는 새로운 유저인 tempuser로 로그인을 해야 합니다. 저는 WSL에서 우분투를 쓰면서 이 부분이 조금 곤란했습니다. 어떻게 유저를 변경해야 하는지 몰랐기 때문입니다.

Changing Current User

WSL 우분투에서 사용자를 바꾸기 위해서는 다시 윈도우 명령 프롬프트로 들어가야 합니다. 명령 프롬프트에서 다음 명령어를 쳐 봅시다.

# CMD Prompt
$ ubuntu config --default-user root

그러면 WSL에서 우분투 터미널을 킬 때 로그인되는 사용자가 root일 것입니다. 여기서 앞서서 tempuser 사용자를 만드는 것이 왜 불필요한 것인지 알 수 있습니다. 어차피 우리가 사용하는 WSL에 대한 루트 권한이 있기 때문에 굳이 별도의 유저를 만들 필요가 없는 것입니다.

Changing Username

그러면 이제 root 사용자로 우분투를 켠 뒤 어떻게 설정하면 되는지 알아보도록 하겠습니다.

가장 먼저 기존 사용자 이름으로 실행되고 있던 프로세스를 죽여야 합니다. 다음 명령어를 통해 현재 실행되고 있는 프로세스를 찾습니다.

# Ubuntu
$ ps -ef

그러면 현재 실행되고 있는 프로세스를 실행시킨 사용자 이름(UID)와 프로세스 번호(PID)를 비롯한 정보를 확인할 수 있습니다. 여기서 우리가 바꾸고자 하는 사용자가 실행중인 프로세스 번호를 죽입니다. 다음 명령어를 실행하면 됩니다.

# Ubuntu
$ kill <pid>

애초에 우리는 지금 루트 권한으로 로그인한 것이기 때문에 권한을 획득할 필요가 없습니다. 바꾸고자 하는 사용자가 실행중인 프로세스를 위 명령어를 통해 모두 죽여서 해당 사용자가 실행중인 프로세스가 없을 때 비로소 사용자 이름을 바꿀 수 있습니다.

# Ubuntu
$ usermod -l <newusername> -d /home/<newusername> -m <oldusername>

그러면 비로소 사용자 이름을 바꿀 수 있는 것입니다. 잊지 말고 명령 프롬프트에서 기본 접속 아이디를 바꿔놓도록 합시다.

# CMD Prompt
$ ubuntu config --default-user <newusername>

이렇게 설정하면 우리가 바꾼 사용자 이름으로 로그인할 수 있게 됩니다.

Ubuntu Setup

8 minute read

Published:

많은 시행착오를 거쳐서 데스크탑에 우분투를 설치했습니다. 참고로 우분투 버전은 20.04, 리눅스 커널 버전은 5.4.0-21-generic입니다. 이번 포스팅에서는 우분투를 처음 설치했을 때 환경설정 과정을 기록하고자 합니다.

Windows/Ubuntu Dual Booting

less than 1 minute read

Published:

GPUDirect Storage를 사용해보기 위해서는 조건이 몇가지 있습니다. 그 중에서는 NVMe가 사용 가능한 SSD가 필요하다는 조건이 있습니다. 제가 당장 쓸 수 있는 조건을 만족하는 SSD는 제 운영체제가 설치된 SSD 하나밖에 없었습니다. 그래서 남는 용량을 파티션해서 우분투를 설치해 사용하려고 계획했습니다. 유튜브 영상과 블로그를 몇가지 참조했는데, 이전 포스팅과 같이 문제가 잘 풀렸으면 포스팅을 작성하지 않았을 것입니다.