안녕하세요! 마무입니다. 오늘은 앞으로 리눅스를 사용하면서 계~속 사용하게 될 파일 압축 및 해제때 쓰이는 "리눅스 tar, gzip, bzip2, xz"에 대해서 자세히 알아보겠습니다.
굳이 "yum", "rpm"이 있는데, 'tar와 압축기술'을 알아야하나?
라는 의문이 드실 수 있겠지만, 보안이 정말 중요한 '서버 프로그램'인 경우 직접 소스코드를 다운받고 원하는 디렉토리에 컴파일하는데, 이때 무조건 사용하며, 이 외에도 압축이 필요한 모든 곳에 사용되니 꼭 알아둬야 하는 명령어입니다!
제 블로그 글이 특성상 매우 길어서, 다 읽기가 싫으실 수 있습니다! 그럴 경우 3번 총정리만 보셔도 됩니다만... 결국 원리를 배우지 못했기에 계속 스스로 의문이 들면서, 제대로 공부가 안 되실겁니다 ㅎㅎ
그러니 딱! 한번만 마음 편~히 첨부터 끝까지 읽어주시고, 이후에 까먹을 때마다 '3. 총 정리'만 보시길 바랍니당!
-----목차-----
1. 리눅스 tar란
i) tar 사용법과 옵션
2. 리눅스 gzip, bzip2, xz란
i) gzip 사용법과 옵션
ii) bzip2 사용법과 옵션
iii) xz 사용법과 옵션
3. 총 정리
--------------
입니다.
여기서 못 찾은 정보는
리눅스 독학 페이지 : https://mamu2830.blogspot.com/p/blog-page_13.html
에서 찾아보세요!
1. 리눅스 tar란
리눅스를 사용한다면 정~말 정~말 자주 쓰는 'tar(tape archive)'란 명령어가 있습니다. 바로 여러 파일들을 하나의 파일로 묶는 명령어인데요, 여기서 'Tape'란 아시는 분들은 다 아시는
바로 이 '자기테이프'가 맞습니다.
네? 모르겠다고요?(예끼! 라뗀말야..) 흠.. 그럼 '비디오테이프'는 아시죠? 그 비디오테이프가 바로 자기테이프로, 자기테이프에 영상과 소리를 기록한 것이죠!
이러한 '자기테이프'는 용량대비 가격이 제일 싸고(현대 사용중인 저장장치중), 또한 물리적으로도 손상에 강하며, 수명도 보통 15년~30년 사이로 매우 길기 때문에 아직까지도 정말 중요한 문서들이나 데이터들은 이런 자기테이프에 백업을 한다고 합니다.
하지만, 장점이 있다면 단점도 있는법.. 이런 대규모 자기테이프의 정보를 읽고 쓰는 '자기테이프 드라이브'가 매우 비싸기에 정말 큰 규모의 회사나 기관이 아니면 그냥 하드디스크를 쓴다고 합니다.
얘기가 길어졌는데, 어쨌든 "tar(tape archive)"의 'tape'는 이 자기테이프를 말한다는 거였습니다.
그럼 "archive(아카이브)"는 뭘까요? archive(아카이브)란 원래 "역사적인 기록들의 모음"을 의미합니다. 그리고 이 의미는 컴퓨터쪽에선 "만일을 대비해 데이터를 백업해두는 것"을 말합니다.
그래서 결국 "tape archive"의 뜻이란? 말 그대로 "자기테이프를 이용한 백업'입니다 ㅋㅋㅋ
어? 그러면 리눅스에서 저희가 배우는 이 'tar'란 명령어는 자기테이프에 백업을 하는 명령어인가요?
네!
네.. 과거엔 그랬습니다... 과거에는 지금처럼 좋은 저장장치가 없었기에, 굳이 거창하게 "만일을 대비한 백업"이라기 보단 애초 쓰는 저장장치가 바로 자기테이프였습니다.
그런데 당시 '자기테이프'는 지금의 하드디스크에서 쓰이는 수준의 파일시스템이 없어서 테이프에 저장하는 데이터 블록 단위가 고정돼 있었고, 그래서 데이터를 저장했다 끊었다를 하기가 힘들기에, 데이터를 하나로 묶고 한방에 저장하는 방식이 필요하게 됩니다.
그래서 'tar'명령어를 써서 여러 파일들을 하나로 묶은 것이죠.
그러나... 현대에 와서는 기술의 발전으로 하드디스크, 플래시 메모리등 여러 저장장치가 많이 등장해서 자기테이프에 저장하기 위해 쓸 일이 거의 없어졌습니다.
그런데 이 "tar"명령어가 위에서 말했다시피, 여러 파일을 하나로 묶어주는 기능을 갖고 있기에 그냥 지금까지도 여러 파일들을 하나의 파일로 묶는용도로 사용하기 시작했습니다.
당연히 자가테이프가 사용되던 시절은 '유닉스(Unix)'가 막 개발돼 시장을 점령하던 시절으로, 이후 당연히 유닉스 계열(리눅스 포함)의 대부분은 지금까지도 이 "tar" 명령어를 애용합니다.
그리고 이젠 다들 아시겠지만, 리눅스는 확장자에 특별한 기능이 없기에 대신 무엇에 쓰이는 것이다라고 확장자를 직접 붙이거든요? ex) .rpm, .swp 등등...
이 'tar'도 마찬가지로, 'tar'로 묶은 파일임을 나타내기 위해 파일 이름 뒤에 ".tar"를 붙인 형태로 이름을 짓습니다.
i) tar 사용법과 옵션
이 "tar"명령어가 아직까지도 계속 애용되는 이유가 있습니다. 바로 "tar"로 묶는 파일들의 속성, 링크, 접근시간등 원래 파일 상태 그~대로 묶어주는 것이죠.
그리고 말 그대로 archive(백업용)이기 때문에, 묶은 파일들이 .tar파일 안으로 들어가는게 아니라, 완전히 똑같은 파일들이 복사된 후 '.tar'로 묶이는 겁니다.
또한 당연하다고 느낄 수도 있지만, 하위 디렉토리와 하위 파일까지 당연히 싹다 같이 묶어줍니다.
뭐 그냥 "tar"로 파일을 묶을 땐, 변할 걱정은 안해도 된다~ 이렇게 생각하시면 되겠습니다.
그래서 현재 윈도우에서도 사람들이 많은 프로그램이나 여러 파일들을 배포할 때 '묶어서' 배포하듯이, 리눅스(유닉스)에서도 현재 대부분의 파일들이 배포될 때 "tar"로 묶어서 배포합니다.
그럼 이 "tar"의 사용법을 알아봐야죠! tar의 명령어 형식은
tar [필수옵션+부가옵션] [묶을 파일들...]
입니다만, '필수옵션'이 보이시죠? 'rpm'때도 그랬지만, 이 "tar"를 사용할 때도 용도에 맞게 꼭 써야하는 필수 옵션(정식 x, 제가 이름 붙인겁니다)이 있습니다.
'부가 옵션'은 말 그대로 필요에 따라 부가적으로 쓸 수 있는 옵션입니다.
-tar 필수옵션 종류-
-f(file name) [tar 파일이름] : 'tar' 파일 이름을 짓거나, 파일들을 뺄 'tar'파일을 지정하는 옵션으로, 무조건 붙여줘야함
+
-c(create) : create, 맨 뒤에 적은 여러 파일들을 이용해서 'tar'파일을 만들겠다.
-x(extract) : extract, 즉 'tar'파일에 들어있는 여러 파일들을 빼내겠다.
-r(renew) [추가할 파일들..] : renew(제가 끼워맞춘 영어), 즉 기존 'tar'파일에 새로운 파일들을 추가해서 갱신하겠다.
-t(list) : list, 즉 'tar'파일속 파일들을 펼쳐서 list형태로 보여줘라
-------------------------
주의할게 있습니다! 반드시 써야하는 '필수'옵션이지만, 'tar'파일 이름을 지정하는 '-f'를 제외한 나머지 옵션들은 무조건 한 명령어에 내에서 하나만 써야합니다.
무슨 소리냐, '-c', '-x', '-r', '-t' 옵션들은 동시에 같이 쓰일 수 없다는 것이죠.
뭔가 외워야 할 것 같은 느낌이 들면서 머리가 아파오시죠? 에이~ 그럴 필요 없습니다.
그냥 우리는 논리적으로만 생각하면 됩니다.
일단 'tar'파일을 (c)만들든, (x)빼든, (r)갱신하든, (t)내용물을 보든 당연히 'tar'파일을 지정해야하니, '-f' 옵션은 무조건 써야하는 것을 우린 알 수 있고
그리고 다른 옵션들인 경우 예를 들어, '-c(create)' 옵션을 써서 'tar'파일로 만드는 동시에 '-x(extract)'로 파일을 빼는게 말이 안되죠?
마찬가지로 '-c'로 'tar'파일을 만들면서, '-t'를 써서 'tar'파일에 속한 파일들을 보여주는 것도말이 안되고, '-c'로 만들면서 '-r'로 다른 파일을 추가하는 것도 말이 안되기에 같이 쓸 수 없습니다.
굳이 외운다기 보단, 이렇게 논리적으로 생각하시면 자연스럽게 '-f'외엔 필수옵션중 하나만 써야한다는 것이 체화되실겁니다!
그리고 'tar'는 특이하게도 옵션을 쓰실 때, 한번에 여러 옵션을 붙여 쓰는 경우
"ex) tar -cvf [파일.tar] [넣을 파일들...]"
이렇게 다른 기존 리눅스 명령어들과 같이 옵션을 이렇게 '-'하나에 여러 옵션을 붙인 형태로 줘도 되지만
"ex) tar cvf [파일.tar] [넣을 파일들...]"
이렇게 '-'를 생략해도 됩니다.
취향의 차이라고 볼 수 있습니다만 저는 그냥 개인적으로 원래 다른 리눅스 명령어처럼 '-'를 붙인 옵션을 쓰길 추천합니다.
왜냐?
이게 부가적인 옵션을 같이 사용하는 경우(밑에서 배우겠지만 '-C'란 옵션을 이용한 예시를 든다면)
부가적인 옵션은 바로 뒤에 옵션값을 줘야하기에 "-옵션1 [옵션 값1] -옵션2 [옵션 값2]"이런 형식을 결국에는 취해야해서
"ex) tar xvfC /tmp/ [파일.tar]" 이렇게 쓸 수 없거든요!(-f옵션 바로 뒤에 -C옵션값 '/tmp/'가 아닌, "파일.tar"값을 줘야하기 때문에)
그래서 쓰려면 결국
"ex) tar xvf [파일.tar] -C /tmp/" 이렇게 써야하는데, 이렇게 어떤건 '-'붙이고, 어떤건 안 붙이일바엔 그냥 헷갈리지 않게 처음부터
"ex) tar -xvf [파일.tar] -C /tmp/" 다른 리눅스 명령어 옵션들처럼 이렇게 쓰자는 것이죠~
그래서 저는 그냥 첨부터 헷갈리지 않게 '-'를 붙여서 쓰길 추천한겁니다.
-tar 부가옵션 종류-
-v(verbose) : verbose(자세하게), 라는 뜻대로 진행정도를 보여줌
위 사진이 '-v'를 안 썻을 때 사진이고
이게 '-v'를 썻을 때 사진입니다.
확실히 '자세히'라 볼 수 있을 정도로, 재료가 되는 파일들을 나열해주듯, 차이가 있죠?
-C(Change{대문자} directory) [경로]: Change directory, 뜻 그대로 디렉토리를 이동하는 것으로, 옵션값으로 적은 위치로 디렉토리를 이동합니다.
예를 들어서, 만약에 '/root/'에서 "tar -cf test.tar 1 2 3 -C /var log"라고 칠 경우 이건
애초 '-C'옵션 앞의 "tar -cf test.tar 1 2 3"란 명령어가
2. 리눅스 gzip, bzip2, xz란
자 여러 파일들을 묶고 푸는건 'tar'라는 명령어로 충분히 잘 사용하는데, 문제가 생겼습니다.
무슨 문제냐? 위에서 알려준대로 'tar'명령어를 이용해 '.tar'파일을 만드시고, 용량을 확인한 분들은 분명 뭔가 이상함을 눈치챌 수 있으실 겁니다.
바로 기존에 묶은 파일들을 합친 것보다 훨~씬 더 큰 용량으로 '.tar'파일로 묶이는 것을 말이죠.
다시 말해서 용량이 '0'인 파일 3개를 묶었더니 10240바이트(10K)라는 크기의 .tar파일이 똻!하고 나온다는 것이죠. (tar는 신인가..!?)
이렇게 'tar'를 쓸 경우 무에서 유를 창조하듯이 비약적으로 용량이 커지는 이유는 사실 'tar'의 역사와 연관이 있습니다.
위에서 언급했듯이, '자기테이프'는 원래 고정된 사이즈의 블록단위만 쓸 수 있기에 자기테이프와의 호환을 위해서 '프로그램(tar를 쓰는)'도 고정된 블록 단위로 데이터를 저장하고 읽습니다.
(블록이 뭔지 궁금하신 분들은 운영체제 페이지 ->파일시스템 총 정리포스트 를 읽고 오시길!)
블록 단위라.. 그럼 512Byte나 1KB면 되지 왜 굳이 10KB나 될까요? 그건 사실 'tar'의 장점이 바로 파일들을 묶었을 때, 묶는 파일들의 정보들을 그~대로 유지되는거랬잖습니까? 바로 그 장점에 비밀이 있습니다.
그렇습니다.
'tar'는 파일을 묶을 때, 기존 파일들의 고유 정보들(이름, 모드, 권한, 크기, 체크섬, 링크수, 링크이름, 여배 공간 채우기용)등 많은 부가정보들을 같이 저장해야하기 때문에 고정 블록 사이즈를 작게 잡을 수가 없었던겁니다.
그래서 'tar'의 기본 블록 사이즈는 보통 '10KB(10240byte)'로 정했다고 합니다.(사실 정하는 사람 마음이지...)
그래서 'tar'파일을 만들 때 쓰이는 파일들의 크기 총합이 10KB미만이여도, 무조건 10KB 사이즈가 배정되는 것이죠.
어쨌든, 이렇듯 'tar'를 사용하니 너무나 파일 크기가 커져서, 파일을 인터넷을 통해 배포하거나, 백업하는데 등 매우 불편해지자 결국 당연하게도 압축기술을 같이 사용하게 됐습니다.
그래서 원래는 'tar'로 파일을 묶은 다음, 압축 프로그램을 이용해 압축을 해야하지만, 'tar'를 사용한다면 거의 무조건으로 압축기술을 같이 사용하기에 지금은 유명한 압축 프로그램들을, 'tar'를 사용할 때 '옵션'으로써 사용할 수 있게 만들어놓아, 한번에 묶고 압축을 합니다.
i) gzip 사용법과 옵션
'gzip(GNU zip)'은 이름 그대로 GNU 프로젝트를 통해 만들어진 압축 프로그램으로,
간단하게
gzip [압축할 파일]
형태로 사용이 가능합니다.
항상 말하지만! 리눅스는 확장자에 특별한 기능은 없지만, 어떤 용도 파일로 사용됨을 나타낸다고 했듯이
'gzip'을 사용해서 파일을 압축하면 자동으로 '.gz(gzip)'라는 확장자가 끝에 붙습니다.
이렇게 말이죠. 그리고 당연하게 '압축'프로그램이니 사이즈도 줄어듭니다.
위에 보시면 잘 티가 안나지만, 자세히 보시면 파일 크기가 무려 '0'단위 줄어든 걸 볼 수 있습니다!
그럼 압축 해제는 어떻게 할까요?
바로 이전의 행위를 나타내는 영어 'un'을 붙여주면 됩니다!
하지만 ungzip이라고 하면 폼이 안나서 그런가? 압축 해제는 'gunzip'라고 치면 됩니다.
gunzip [압축해제할 파일]
이렇게 말이죠.
그리고 위에서 언급했듯이 보통 tar를 쓰면 압축도 같이하기에, gzip을 'tar 옵션'으로 실행하여 보통 한번에 아카이브와 압축, 압축해제와 아카이브해제를 동시에 합니다.
그리고 이때 사용하는
tar에서의 gzip의 옵션은 바로 '-z(소문자)'입니다.
ex) "tar -zcf test.tar.gz 1 2 3" --> 1 2 3파일을 test.tar.gz란 파일로 묶고, gzip으로 압축해라
여기서 편의성을 위해서, 만들겠다는 '-c'옵션과 gzip 옵션 '-z'가 같이 쓰이면, 같은 맥락으로 .tar 파일을 만들고 압축을 하며
해제하겠다는 '-x'옵션과 '-z'를 같이 쓰면, 같은 맥락으로 .tar파일 해제와 압축 해제를 합니다.
또한 '-f'옵션 값인 파일 이름에 직접 '.gz'확장자를 붙여줘야 하는 것을 꼭 기억하셔야 합니다.
물론 사실 '-f' 옵션값으로 확장자 '.gz'를 까먹고, 'test.tar'라고 이름을 지어도 압축된 'test.tar'가 나오긴 합니다만,
압축 해제, 즉 'gunzip'이나 'tar -zxf'를 쓸 경우엔 확장자가 '.gz'가 붙어있어야 인식을 하므로! 꼭 '.gz'확장자를 붙여줍시다.(물론 실수로 안 붙여줬을 경우 이름 변경으로 끝에 .gz를 붙여주면 됩니다!)
ii) bzip2 사용법과 옵션
"bzip2"란 '줄리안 시워드'란 사람이 만들어낸 압축 프로그램으로, 뒤에 '2'라는 이름이 붙듯이 기존 "bzip"라는 압축 프로그램의 업그레이드 버전이며, gzip보다 압축률이 좀 더 좋습니다.
압축프로그램들은 모두 사용방법과 파일 이름 지어지는 메커니즘이 같습니다. 그러니
'gzip'과 똑같이 압축할 때는
bzip2 [압축할 파일]
이렇게 압축을 하면, 끝에 자동으로 ".bz2"란 확장자가 붙은 상태로 압축이 되며, 반대로 압축해제할 때는 gunzip과 마찬가지로!
bunzip2 [압축 해제할 파일]
이렇게 쓰면 됩니다!
그리고~ 항상 압축프로그램은 'tar'와 같이 쓰기에, 당연하게도 'tar'에서 'bzip2 옵션'이 있습니다! 바로 '-j'로
tar -jcvf [파일이름.tar.bz2] [tar만들 파일들...]
이렇게 쓰시면 됩니다.
'gzip'이든, 지금의 'bzip2'든, 뒤에서 나올 'xz'든 'tar'의 옵션으로 쓰일 때는 '-c'와 '-x'의 맥락에 맞게 자동으로 압축이 되든가 해제가 됩니다.
'bzip2'도 'gzip'과 마찬가지로 직접 tar 파일을 만들 때, 이름 끝에 확장자 ".bz2"를 붙여줘야 하며, 그래야 압축 해제할 때 인식이 됩니다!
압축 해제는 'tar'의 '-x'옵션이 이미 해제와 같은 의미이므로,
tar -jxvf [파이리름.tar.bz2]
이렇게 그대로 'tar'의 기존 옵션에 '-j'만 붙여줘도 바로 tar -> bzip2압축 해제까지 일사천리로 됩니다!
iii) xz 사용법과 옵션
"xz"는 "The Tukaani Project"라는 'slackware 계통 리눅스 배포판'에서 시작된 프로젝트로 만들어진 매우 효율적인 압축 프로그램입니다.
기존의 압축 프로그램이라 하면 'zip'란 단어가 꼭 들어가야한다는 고정관념이 우리에게 뿌리박혀있는데, 이 'xz'란 이름은 ... 참 당황스럽죠 ㅎㅎ
하지만 이런 이단아 같은 압축 프로그램 'xz'는 매우 효율적인 압축력 때문에 인기가 폭발적이였고, 결국 정식으로 GNU에서 채택이 됐으며, 현재까지도 대부분의 운영체제에서 애용하고 지원하는 훌륭한 압축 프로그램입니다.
'매우 효율적 압축'이란 말대로 gzip보다 압축률이 좋은 bzip2보다 더 압축률이 좋습니다.
그래서
압축률은 gzip < bzip2 < xz 인 셈이죠.
이름은 이단같지만, 다행스럽게도 사용법은 다른 압축 프로그램과 같습니다!
xz [압축할 파일]
이렇게 말이죠. 압축이 되면 자동으로 확장자로서 '.xz'가 붙습니다.
압축 해제는 당연히~ 'un'을 붙인 xunz(이건 아니지..)가 아닌 'unxz'입니다.
아쉽게도 이건 이단이네요 ㅋㅋ
unxz [압축 해제할 파일]
GNU에서 공식으로 인정받은 만큼, 'xz'도 당연히 'tar' 옵션이 있습니다!
그건 'bzip2(-j)'보다 좋다고 해서 대문자 '-J'입니다.
그래서 여타 다른 압축프로그램처럼 맥락에 맞게 tar의 '-c'와 '-x' 옵션과 함께 쓰시면 됩니다.
tar -Jcfv [tar파일.tar.xz] [tar만들 파일들...]
이렇게 만들 때나
tar -Jxfv [tar파일.tar.xz]
이렇게 압축해제 할 때처럼 말이죠!
3. 총 정리
i) 리눅스 'tar(tape archive)'란 명령어는 여러 파일들을 하나의 파일로 묶어주는 명령어로, 이름에 'tape'가 들어가는 것처럼 원래는 자기테이프에 데이터를 저장하기 위해 사용하는 명령어였다.
ii) 'tar'의 명령어 형식은 tar [필수옵션+부가옵션] [묶을 파일들...] 이며
---tar 필수옵션 종류---
-f(file name) [tar 파일이름] : 'tar' 파일 이름을 짓거나, 파일들을 뺄 'tar'파일을 지정하는 옵션으로, 무조건 붙여줘야함
+
-c(create) : create, 맨 뒤에 적은 여러 파일들을 이용해서 'tar'파일을 만들겠다.
-x(extract) : extract, 즉 'tar'파일에 들어있는 여러 파일들을 빼내겠다.
-r(renew) [추가할 파일들..] : renew(제가 끼워맞춘 영어), 즉 기존 'tar'파일에 새로운 파일들을 추가해서 갱신하겠다.
-t(list) : list, 즉 'tar'파일속 파일들을 펼쳐서 list형태로 보여줘라
-------------------------
---tar 부가옵션 종류---
-v(verbose) : verbose(자세하게), 라는 뜻대로 진행정도를 보여줌
-C(Change{대문자} directory) [위치]: Change directory, 뜻 그대로 디렉토리를 이동하는 것으로, 옵션값으로 적은 위치로 디렉토리를 이동합니다.
--------------------------
iii)
-압축-
gzip [압축할 파일] 형식으로 압축을 하며, 'gzip'을 사용해서 파일을 압축하면 자동으로 '.gz(gzip)'라는 확장자가 끝에 붙습니다.
bzip2 [압축할 파일] 형식으로 압축을 하며, 'bzip2'를 사용해서 압축하면, 자동으로 '.bz2(bzip2)'란 확장자가 끝에 붙습니다.
xz [압축할 파일] 형식으로 압축을 하며, 'xz'를 사용해서 압축하면, 자동으로 '.xz'란 확장자가 끝에 붙습니다.
-해제-
gunzip [압축해제할 파일], 압축해제를 하며, 확장자가 ".gz"로 끝나야 인식을 합니다.
bunzip2 [압축해제할 파일] 형식으로 압축 해제를 하며, 확장자가 '.bz2'로 끝나야 인식합니다.
xz [압축 해제할 파일] 형식으로 압축 해제하며, 확장자가 '.xz'로 끝나야 인식합니다.
-tar의 옵션값-
gzip == '-z(소문자)'
bzip2 == '-j(소문자)'
xz == '-J'
로 각각 'tar'에서 맥락에 맞게, '-c'와 같이 쓰이면 압축하고, '-x'와 같이 쓰이면 압축해제 합니다.
후.. 오늘은 처음에 리눅스를 공부할 때 참 외울게 많아 보이고, 짜증나는 tar와 압축프로그램들에 대해서 알아보았는데요. 생각보다 쓸게 많아서, 저도 이 포스트를 쓰는데 하루에 7시간, 총 2일이나 걸렸네요 하하...
안타깝게도 'tar'는 리눅스를 사용한다면 무조건 알아야할 수준의 'vi'와 같은 프로그램이기 때문에 힘들어도 꼭 한번쯤 따라하며 전부다 읽어보셨으면 좋겠습니다.
긴 글 읽어주시느라 고생하셨고! 도움이 됐다면 따뜻한 댓글 달기 및 팔로우 클릭을 해주시면 저에게 큰 힘을 줘, 포스트 퀄리티 향상에 도움이 됩니다!
그럼 다음에 더 좋은 포스트로 찾아뵙겠습니다!
압축에 관한 흥미로운 글! 재미있게 잘 읽었습니다. 감사합니다~
답글삭제도움이 돼 다행입니닷! 힘이나는 따뜻한 댓글 감사해요~
삭제도움이 돼 다행입니다! 댓글 감사합니다~
답글삭제