컴퓨터를 SSD로 바꾸면 부팅이 몇 초 만에 끝나고 프로그램도 눈 깜짝할 새 열리죠. 그런데 몇 년 쓰다 보면 가끔 파일 복사가 뚝뚝 끊기거나, 용량이 거의 찼을 때 전체가 굼떠지는 느낌을 받기도 해요. 하드디스크는 조각 모음을 하면 된다고 배웠는데, SSD는 조각 모음을 하지 말라고 하니 헷갈리고요. SSD의 속도를 유지하는 핵심 기능이 바로 TRIM이에요. 오늘은 SSD 속 플래시 메모리가 데이터를 어떻게 쓰고 지우는지부터, TRIM이 왜 필요한지, 그리고 내 컴퓨터에서 켜져 있는지 확인하는 방법까지 정리해 볼게요.
플래시 메모리는 덮어쓰기를 못 해요
하드디스크는 자기 기록 방식이라 같은 자리에 새 데이터를 덮어쓰면 그만이에요. SSD의 낸드 플래시 메모리는 달라요. 플래시 메모리 설명처럼 플래시는 데이터를 기록하려면 먼저 그 칸이 비어 있어야 해요. 이미 데이터가 들어 있는 칸에는 바로 덮어쓸 수 없고, 한 번 지운 다음에 써야 해요. 여기까지는 불편한 정도인데, 진짜 문제는 쓰는 단위와 지우는 단위가 다르다는 점이에요.
플래시는 데이터를 페이지 단위로 써요. 페이지는 보통 수 KB에서 16KB 정도예요. 반면 지울 때는 수백 개의 페이지를 묶은 블록 단위로만 지울 수 있어요. 블록 하나가 수 MB에 이르기도 해요. 그러니까 블록 안의 페이지 하나만 고치고 싶어도, 그 블록 전체를 지워야 하는 구조예요. 공책으로 비유하면 한 줄을 고치려면 그 페이지가 있는 공책 한 권을 통째로 지워야 하는 셈이에요.
| 동작 | 단위 | 크기(대략) |
|---|---|---|
| 읽기 | 페이지 | 수 KB~16KB |
| 쓰기 | 페이지(빈 칸에만) | 수 KB~16KB |
| 지우기 | 블록(여러 페이지 묶음) | 수백 KB~수 MB |
그래서 SSD는 새 자리에 쓰고, 헌 자리는 '무효'로 표시해요
이 불편을 피하려고 SSD 컨트롤러는 영리한 방법을 써요. 파일 일부가 바뀌면 원래 자리를 고치는 대신, 이미 지워져 비어 있는 다른 페이지에 새 내용을 쓰고, 예전 페이지에는 '더 이상 쓰지 않음(무효)' 표시만 해 둬요. 운영체제가 '10번 주소에 저장해'라고 하면 SSD는 그 주소를 실제로 어느 페이지에 저장했는지 지도를 따로 관리해요. 이 지도를 관리하는 계층을 FTL(플래시 변환 계층)이라고 불러요.
시간이 지나면 블록마다 유효한 페이지와 무효 페이지가 뒤섞여요. 빈 블록이 줄어들면 SSD는 청소를 해야 해요. 무효 페이지가 많은 블록을 골라, 아직 유효한 페이지만 다른 빈 블록으로 옮겨 적은 뒤 원래 블록을 통째로 지워 새 빈 블록을 만드는 거예요. 이 과정을 가비지 컬렉션이라고 불러요. 쓰레기를 치워 빈방을 만드는 셈이죠. 가비지 컬렉션은 SSD가 한가할 때 뒤에서 조용히 진행돼요.
문제: SSD는 내가 지운 파일을 몰라요
여기서 중요한 틈이 생겨요. 우리가 휴지통을 비워 파일을 지우면 운영체제는 파일 시스템의 목차에서 '이 자리는 이제 비었음'이라고 표시할 뿐, 실제 데이터 칸을 건드리지 않아요. 하드디스크라면 나중에 그 자리에 덮어쓰면 되니 문제가 없어요. 하지만 SSD 입장에서는 그 페이지들이 여전히 '유효한 데이터'로 보여요. 운영체제가 따로 알려 주지 않으면 SSD는 사용자가 이미 지운 파일을 계속 소중한 데이터로 여기고, 가비지 컬렉션 때마다 이 쓰레기 데이터를 성실하게 다른 블록으로 옮겨 적어요.
불필요한 복사가 늘면 두 가지 손해가 생겨요. 첫째, 청소에 시간이 더 걸려 빈 블록을 만드는 속도가 느려지고, 빈 블록이 모자라면 새 데이터를 쓰려는 순간 기존 블록을 읽고, 지우고, 다시 쓰는 과정을 바로 해야 해서 쓰기 속도가 뚝 떨어져요. 요청에서 말한 '읽기-수정-쓰기' 지연이 바로 이 상황이에요. 둘째, 플래시는 지우고 쓸 수 있는 횟수가 정해져 있는데, 사용자가 쓴 데이터보다 훨씬 많은 양을 SSD 내부에서 옮겨 쓰게 돼 수명이 줄어요.
게다가 플래시의 각 칸은 지우고 쓰기를 반복할 수 있는 횟수에 한계가 있어서, SSD는 특정 블록만 닳지 않도록 쓰기를 여러 블록에 고르게 나누는 마모 평준화도 함께 해요. 이 작업 역시 데이터를 옮겨 적는 일이라, 불필요한 데이터가 많을수록 부담이 커져요.
쓰기 증폭: 1을 썼는데 3을 쓰게 되는 현상
사용자가 요청한 데이터 양 대비 SSD가 실제로 플래시에 쓴 양의 비율을 쓰기 증폭 계수라고 해요. 쓰기 증폭 설명처럼 이 값이 1이면 이상적이고, 클수록 불필요한 쓰기가 많다는 뜻이에요. 예를 들어 사용자가 10GB를 저장했는데 SSD 내부에서는 가비지 컬렉션 때문에 30GB를 썼다면 쓰기 증폭은 3이에요. SSD의 수명을 나타내는 TBW(총 기록 가능 용량)가 600TB라면, 쓰기 증폭이 3일 때 사용자 입장에서는 실제로 200TB 정도만 쓸 수 있는 셈이 돼요. 쓰기 증폭을 줄이는 것이 곧 속도와 수명을 함께 지키는 일이에요.
TRIM: 운영체제가 SSD에게 '이건 지워도 돼'라고 알려 줘요
TRIM 설명처럼 TRIM은 운영체제가 SSD에게 '이 주소들의 데이터는 더 이상 쓰지 않는다'고 알려 주는 명령이에요. 파일을 지우면 운영체제가 해당 주소 목록을 SSD에 보내고, SSD는 그 페이지들을 곧바로 무효로 표시해요. 그러면 가비지 컬렉션 때 이 페이지들은 옮길 필요 없이 버리면 되니, 블록 청소가 훨씬 가볍고 빨라져요. 빈 블록도 미리미리 넉넉하게 준비해 둘 수 있어서, 새 데이터를 쓸 때 곧바로 빈 페이지에 쓸 수 있어요.
- 사용자가 파일을 지워요.
- 운영체제가 파일 시스템 목차를 고치고, 해당 주소 범위를 TRIM 명령으로 SSD에 알려요.
- SSD는 그 페이지들을 무효로 표시해요.
- 한가한 시간에 가비지 컬렉션이 무효 페이지가 많은 블록을 쉽게 정리해요.
- 빈 블록이 넉넉하니 다음 쓰기가 빠르고, 쓰기 증폭도 줄어요.
SSD를 가득 채우면 왜 느려질까요
TRIM이 켜져 있어도 SSD가 거의 가득 차 있으면 가비지 컬렉션이 일할 여유 공간이 부족해요. 빈 블록을 만들려면 유효한 데이터를 옮길 자리가 필요한데, 그 자리가 모자라니 청소가 자꾸 급하게 이뤄지고 쓰기 속도가 떨어져요. 그래서 SSD 제조사는 사용자에게 보이지 않는 여분 공간을 따로 남겨 두는데, 이를 오버 프로비저닝이라고 해요. 사용자 입장에서도 SSD 용량의 10~20% 정도는 비워 두는 게 속도와 수명에 좋아요. 1TB SSD라면 100~200GB 정도의 여유를 남겨 두라는 뜻이에요.
내 컴퓨터에서 TRIM이 켜져 있는지 확인하는 법
- 윈도우: 명령 프롬프트를 관리자 권한으로 열고 'fsutil behavior query DisableDeleteNotify'를 입력해요. 결과가 0이면 TRIM이 켜져 있어요.
- 윈도우의 '드라이브 조각 모음 및 최적화'는 SSD에서는 조각 모음 대신 TRIM을 다시 보내는 최적화를 수행해요. 예약 최적화가 켜져 있는지 확인하세요.
- 맥: 애플 기본 SSD는 TRIM이 기본으로 켜져 있어요. 시스템 정보의 저장장치 항목에서 'TRIM 지원: 예'를 확인할 수 있어요.
- 리눅스: 많은 배포판이 주기적으로 fstrim을 실행하는 타이머를 켜 두고 있어요.
- 외장 SSD는 연결 방식(USB 브리지 칩)에 따라 TRIM이 전달되지 않을 수 있어요. 제품 사양에서 UASP·TRIM 지원 여부를 확인하세요.
SLC 캐시가 끝나면 속도가 뚝 떨어지는 이유
TRIM과 함께 알아 두면 좋은 현상이 있어요. 요즘 많이 쓰는 TLC·QLC 낸드는 한 칸에 3~4비트를 저장해 용량이 크지만 쓰기가 느려요. 그래서 SSD는 비어 있는 공간 일부를 한 칸에 1비트만 쓰는 빠른 방식(SLC 캐시)으로 먼저 받아 두었다가, 한가할 때 원래 방식으로 옮겨 적어요. 수십 GB짜리 대용량 파일을 한 번에 복사하면 처음에는 매우 빠르다가 어느 순간 속도가 확 떨어지는데, 이 캐시가 가득 찼기 때문이에요. SLC 캐시 크기는 빈 공간이 많을수록 커지는 제품이 많아서, 여기서도 여유 공간과 TRIM이 속도를 지키는 열쇠가 돼요.
용량 단위를 헷갈리지 않는 것도 중요해요. SSD 상자에 적힌 1TB는 10의 12제곱 바이트이고, 윈도우는 2의 40제곱 바이트를 1TB로 계산해 약 931GB로 보여 줘요. 용량이 줄어든 게 아니라 단위 기준이 달라서 생기는 차이예요. 여유 공간을 계산할 때도 이 차이를 감안해야 해요.
SSD에 조각 모음을 하면 안 되는 이유
하드디스크의 조각 모음은 흩어진 파일 조각을 한곳에 모아 헤드가 덜 움직이게 하는 작업이에요. SSD는 헤드가 없고 어느 주소든 거의 같은 속도로 읽어서, 조각이 흩어져 있어도 성능 차이가 거의 없어요. 오히려 조각 모음은 대량의 데이터를 다시 쓰게 만들어 쓰기 증폭과 수명 소모만 늘려요. 다행히 요즘 윈도우는 SSD를 알아보고 조각 모음 대신 TRIM 최적화를 해 주니, 기본 설정 그대로 두면 돼요.
TRIM과 데이터 복구의 관계
하드디스크에서 실수로 지운 파일은 덮어쓰기 전이라면 복구 프로그램으로 살릴 수 있는 경우가 많았어요. SSD에서는 TRIM이 켜져 있으면 지운 직후 SSD가 해당 페이지를 무효 처리하고, 곧 가비지 컬렉션으로 실제로 지워 버려요. 그래서 SSD에서 삭제한 파일은 복구가 훨씬 어려워요. 보안 측면에서는 장점이지만, 실수로 지운 파일을 되살리기는 어렵다는 뜻이기도 해요. 중요한 파일은 SSD 한 곳에만 두지 말고 꼭 백업해 두세요.
자주 묻는 질문
첫째, TRIM을 켜면 SSD가 더 빨리 닳나요? 반대예요. TRIM은 불필요한 데이터 이동을 줄여 쓰기 증폭을 낮추니 수명에 도움이 돼요. 둘째, 새 SSD의 벤치마크 속도가 몇 달 뒤 조금 떨어졌어요. 고장인가요? 처음에는 모든 블록이 비어 있어 가장 빠르고, 사용하면서 가비지 컬렉션이 필요한 상태로 자리 잡으면 조금 낮아지는 게 일반적이에요. 이를 정상 상태 성능이라고 불러요. 크게 떨어졌다면 여유 공간과 TRIM 설정을 확인해 보세요. 셋째, SSD 수명은 얼마나 되나요? 제품 사양의 TBW와 보증 기간을 보면 돼요. 하루 50GB씩 쓴다면 1년에 약 18TB라서, TBW 600TB 제품은 이론상 30년 넘게 버티는 계산이 나와요. 일반 사용자는 수명보다 다른 부품 고장이나 용량 부족으로 먼저 바꾸는 경우가 대부분이에요.
정리해 볼게요
SSD의 플래시 메모리는 덮어쓰기가 안 되고, 페이지 단위로 쓰되 블록 단위로만 지울 수 있어요. 그래서 SSD는 새 자리에 쓰고 헌 자리는 무효로 표시한 뒤, 가비지 컬렉션으로 블록을 청소해 빈 공간을 만들어요. 그런데 운영체제가 지운 파일을 SSD는 모르기 때문에, TRIM이 없으면 쓰레기 데이터까지 옮겨 적느라 느려지고 수명도 줄어요. TRIM은 지운 주소를 SSD에 알려 청소를 가볍게 하고 빈 블록을 미리 확보해 쓰기 속도를 지켜 줘요. TRIM 설정을 확인하고, 용량의 10~20%를 비워 두고, 조각 모음은 하지 않는 것만 기억하면 SSD를 오래 빠르게 쓸 수 있어요.
