How to Start WSL2 : Windows Subsystem for Linux (WSL) 설치와 사용법
- 공유 링크 만들기
- 이메일
- 기타 앱
How to Start WSL2 : Windows Subsystem for Linux (WSL) 설치와 사용법
WSL사용법- How To Start WSL
- 1. Windows Subsystem for Linux (WSL) 설치와 사용법
- 2. 알면 좋은 WSL 기본 명령 사용법
- 3. WSL 설치 디렉토리 경로 변경
- 4. WSL ssh 설치와 접속 하기
리눅스용 윈도우 하위 시스템 (WSL: Windows Subsystem for Linux) 개요
Windows Subsystem for Linux (WSL)은 Windows 운영 체제에서 네이티브하게 Linux 명령 및 응용 프로그램을 실행할 수 있도록 하는 기술입니다.
WSL을 이용하면 Microsoft Windows 운영체제 내부에 리눅스 OS을 함께 설치하여 사용 할수 있게 되었습니다.
예전에는 리눅스를 사용하려면 멀티 OS 부팅으로 리눅스를 별도로 설치해서 사용했지만, Winodws OS 시스템상에서 리눅스 명령과 프로그램을 실행할 수 있게 되어 개발자들에게 높은 유연성을 제공합니다.
1. Windows Subsystem for Linux (WSL) 의 특징
1. 네이티브 Linux 환경:
WSL은 실제로 Linux 커널을 사용하여 Linux 바이너리를 Windows에서 실행할 수 있도록 합니다. 이는 Linux 환경에서 작동하는 응용 프로그램을 Windows에서 동일하게 실행할 수 있게 해줍니다.
2. 멀티 디스트리뷰션 지원:
WSL은 사용자가 원하는 여러 가지 Linux 배포판을 선택하여 설치하여 사용할 수 있습니다. Ubuntu, Debian, Fedora 등 다양한 배포판이 지원됩니다.
3. 인터페이스 통합:
WSL은 Windows 명령 프롬프트나 PowerShell에서 Linux 명령을 실행할 수 있는 통합된 환경을 제공합니다. 이는 사용자가 Windows와 Linux 간에 쉽게 전환하고 명령을 실행할 수 있게 해줍니다.
4. 파일 시스템 통합:
WSL은 Windows 파일 시스템에 직접 액세스할 수 있으며, 반대로 Windows에서도 Linux 파일 시스템에 접근할 수 있습니다. 서로 파일을 공유하여 사용할수 있어서 Windows의 개발툴을 이용하여 개발하고 서버 시스템은 리눅스에서 작동이 가능하게 되어 개발 환경을 쉽게 구성할 수 있습니다.
5. 개발자 툴 지원:
WSL은 기본적으로 다양한 개발자 도구와 언어를 지원합니다. Python, Java, Node.js 등의 언어와 Git, Docker 같은 도구를 사용할 수 있습니다.
6. 버전 업그레이드 용이:
WSL 2는 더 빠르고 향상된 가상 머신 기술을 사용하여 Linux 커널을 쉽게 설치하고 실행할 수 있습니다.
2. WSL 설치와 사용법
1) Windows 기능 켜기/끄기 열기:
- 시작 메뉴에서 "Windows 기능 켜기/끄기"를 검색하거나 "제어판" > "프로그램" > "Windows 기능 켜기/끄기" 로 이동합니다.
2) Linux용 Windows 하위 시스템 확인:
- 목록에서 "Linux용 Windows 하위 시스템" 옵션이 선택되어 있는지 확인합니다.
3. 가상 머신 플랫폼 확인:
- 목록에서 "가상 머신 플랫폼" 옵션이 선택되어 있는지 확인합니다.
4. 재부팅:
- 변경사항을 적용하기 위해 컴퓨터를 재부팅합니다.
3. WSL 기본 명령
1) wsl --help 명령: WSL 명령어를 사용할 때 다양한 옵션과 사용법을 확인
2) wsl --set-version <Version> : Linux 배포판의 버전을 설정합니다. Version : 2
3) wsl --set-default-version <Version>: 기본 Linux 배포판의 버전을 설정합니다.
4) wsl --list --online, -o : 설치 가능한 Linux 배포판 목록을 표시합니다.
wsl --list --verbose : 설치된 Linux 배포판 목록을 표시합니다.
5) wsl --install <배포판명> : Linux 배포판을 설치 합니다.
예) wsl --install --distribution Ubuntu-22.04
6) wsl --distribution <Distribution Name> --user <User Name> : 지정한 배포판을 실행하고 특정 사용자로 접속 합니다
7) wsl --terminate, -t <배포판명> : 실행중인 배포판을 종료 합니다.
8) wsl --shutdown : 실행 중인 모든 배포판과 WSL 2 경량 유틸리티 가상 머신을 즉시 종료합니다.
4. WSL기본 명령 사용 방법
1) wsl --list --online
PS C:\Users\agilebus> wsl --list -o 다음은 설치할 수 있는 유효한 배포 목록입니다. 'wsl --install -d <배포>'를 사용하여 설치하세요. NAME FRIENDLY NAME Ubuntu Ubuntu Debian Debian GNU/Linux kali-linux Kali Linux Rolling Ubuntu-18.04 Ubuntu 18.04 LTS Ubuntu-20.04 Ubuntu 20.04 LTS Ubuntu-22.04 Ubuntu 22.04 LTS OracleLinux_7_9 Oracle Linux 7.9 OracleLinux_8_7 Oracle Linux 8.7 OracleLinux_9_1 Oracle Linux 9.1 openSUSE-Leap-15.5 openSUSE Leap 15.5 SUSE-Linux-Enterprise-Server-15-SP4 SUSE Linux Enterprise Server 15 SP4 SUSE-Linux-Enterprise-15-SP5 SUSE Linux Enterprise 15 SP5 openSUSE-Tumbleweed openSUSE Tumbleweed
WSL Ubuntu 배포판 설치
PS C:\Users\agilebus> wsl --install -d Ubuntu-22.04 설치 중: Ubuntu 22.04 LTS Ubuntu 22.04 LTS이(가) 설치되었습니다. Ubuntu 22.04 LTS 실행 중...
WSL 배포판이 이미 설치되어 있을 경우
PS C:\Users\agilebus> wsl --install -d ubuntu-22.04 Ubuntu 22.04 LTS은(는) 이미 설치되어 있습니다. Ubuntu 22.04 LTS 실행 중...
WSL 배포판 설치 확인
: wsl --list 명령으로 설치 결과를 확인합니다.
PS D:\WSL_Data> wsl --list Linux용 Windows 하위 시스템 배포: Ubuntu-22.04(기본값)
WSL 배포판이 설치가 안되어 있는 경우
PS D:\WSL_Data> wsl --list
Linux용 Windows 하위 시스템에 배포가 설치되어 있지 않습니다.
아래의 Microsoft Store에서 배포를 설치할 수 있습니다.
https://aka.ms/wslstore
5. WSL 실행하여 사용하는 방법
- wsl --install -d "배포판이름"
- wsl --list --running : 실행중인 배포판을 나열합니다.
- wsl -u root : Root 계정으로 접속합니다.
- useraddd -u 1000 -g 1000 wsladm : linux 셀에서 wsladm 계정을 생성합니다.
- wsl -u wsladm : 설치된 배포판을 실행하고 생성한 wsladm 이라는 특정 사용자 계정으로 접속
- exit : wsl 터미널을 종료하고 윈도우 터미널로 나옵니다.
실행중인 WSL을 확인 합니다.
PS C:\Users\AgieBus> wsl --list --running --verbose
NAME STATE VERSION
* Ubuntu-22 Stopped 2
Wsl이 중지되어 있으면 기본 배포판을 실행하고 root 계정으로 접속합니다.
PS D:\WSL_Data> wsl -u root
이제 Linux용 Windows 하위 시스템을 Microsoft Store에서 사용할 수 있습니다.
'wsl.exe --update'를 실행하거나 https://aka.ms/wslstorepage를 방문하여 업그레이드할 수 있습니다.
Microsoft Store의 WSL을 설치하면 최신 WSL 업데이트가 더 빠르게 제공됩니다.
자세한 내용은 https://aka.ms/wslstoreinfo를 방문하세요.
Welcome to Ubuntu 22.04.3 LTS (GNU/Linux 5.10.16.3-microsoft-standard-WSL2 x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
This message is shown once a day. To disable it please create the
/root/.hushlogin file.
root@DESKTOP-RTQU492:/mnt/c/Users/AgileBus$
WSL로 설치된 버전을 업그레이드 할 수 있습니다.
root@DESKTOP-RTQU492:/mnt/d/WSL_Data# wsl --update Command 'wsl' not found, but can be installed with: apt install wsl
WSL에서 리눅스 명령들을 사용 할 수 있습니다.
root@DESKTOP-RTQU492:/mnt/d/WSL_Data# w 14:30:16 up 0 min, 0 users, load average: 0.04, 0.01, 0.00 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root@DESKTOP-RTQU492:/mnt/d/WSL_Data# pwd /mnt/d/WSL_Data root@DESKTOP-RTQU492:/mnt/d/WSL_Data# ls -al total 932696 drwxrwxrwx 1 root root 4096 Feb 22 14:18 . drwxrwxrwx 1 root root 4096 Feb 22 14:19 .. -rwxrwxrwx 1 root root 937972031 Feb 22 14:00 WSL-UbuntuonWindows_2004.2021.825.0.AppxBundle -rwxrwxrwx 1 root root 17104896 Feb 22 14:17 wsl_update_x64.msi
WSL의 "/etc"에 있는 다양한 환경 파일을 확인 할 수 있습니다.
root@DESKTOP-RTQU492:/mnt/d/WSL_Data# ls -al /etc/ total 700 drwxr-xr-x 73 root root 4096 Feb 22 14:29 . drwxr-xr-x 19 root root 4096 Feb 22 14:29 .. -rw------- 1 root root 0 Nov 23 06:36 .pwd.lock drwxr-xr-x 2 root root 4096 Nov 23 06:37 PackageKit drwxr-xr-x 4 root root 4096 Nov 23 06:37 X11 -rw-r--r-- 1 root root 3028 Nov 23 06:36 adduser.conf drwxr-xr-x 2 root root 4096 Nov 23 06:37 alternatives drwxr-xr-x 3 root root 4096 Nov 23 06:37 apparmor drwxr-xr-x 8 root root 4096 Nov 23 06:37 apparmor.d drwxr-xr-x 3 root root 4096 Nov 23 06:37 apport drwxr-xr-x 8 root root 4096 Nov 23 06:37 apt -rw-r--r-- 1 root root 2319 Jan 7 2022 bash.bashrc -rw-r--r-- 1 root root 45 Nov 12 2021 bash_completion drwxr-xr-x 2 root root 4096 Nov 23 06:37 bash_completion.d -rw-r--r-- 1 root root 367 Dec 16 2020 bindresvport.blacklist drwxr-xr-x 2 root root 4096 Apr 8 2022 binfmt.d drwxr-xr-x 2 root root 4096 Nov 23 06:37 byobu drwxr-xr-x 3 root root 4096 Nov 23 06:36 ca-certificates -rw-r--r-- 1 root root 6253 Nov 23 06:36 ca-certificates.conf -rw-r--r-- 1 root root 5529 Nov 23 06:36 ca-certificates.conf.dpkg-old drwxr-xr-x 2 root root 4096 Nov 23 06:36 console-setup drwxr-xr-x 2 root root 4096 Nov 23 06:36 cron.d drwxr-xr-x 2 root root 4096 Nov 23 06:37 cron.daily drwxr-xr-x 2 root root 4096 Nov 23 06:36 cron.hourly drwxr-xr-x 2 root root 4096 Nov 23 06:36 cron.monthly drwxr-xr-x 2 root root 4096 Nov 23 06:37 cron.weekly -rw-r--r-- 1 root root 1136 Mar 23 2022 crontab drwxr-xr-x 4 root root 4096 Nov 23 06:36 dbus-1 -rw-r--r-- 1 root root 2969 Feb 20 2022 debconf.conf -rw-r--r-- 1 root root 13 Aug 23 2021 debian_version drwxr-xr-x 2 root root 4096 Nov 23 06:37 default -rw-r--r-- 1 root root 604 Sep 16 2018 deluser.conf drwxr-xr-x 2 root root 4096 Nov 23 06:36 depmod.d drwxr-xr-x 4 root root 4096 Nov 23 06:36 dhcp drwxr-xr-x 4 root root 4096 Nov 23 06:36 dpkg -rw-r--r-- 1 root root 685 Jan 9 2022 e2scrub.conf -rw-r--r-- 1 root root 106 Nov 23 06:36 environment -rw-r--r-- 1 root root 1816 Dec 27 2019 ethertypes -rw-r--r-- 1 root root 37 Nov 23 06:36 fstab -rw-r--r-- 1 root root 694 Mar 23 2022 fuse.conf -rw-r--r-- 1 root root 2584 Feb 3 2022 gai.conf drwxr-xr-x 2 root root 4096 Nov 23 06:37 groff -rw-r--r-- 1 root root 708 Nov 23 06:37 group -rw-r----- 1 root shadow 588 Nov 23 06:37 gshadow drwxr-xr-x 3 root root 4096 Feb 22 2022 gss -rw-r--r-- 1 root root 4436 Dec 16 2020 hdparm.conf -rw-r--r-- 1 root root 92 Oct 15 2021 host.conf -rw-r--r-- 1 root root 16 Feb 22 14:29 hostname -rw-r--r-- 1 root root 481 Feb 22 14:29 hosts drwxr-xr-x 2 root root 4096 Nov 23 06:37 init.d -rw-r--r-- 1 root root 1748 Jan 7 2022 inputrc drwxr-xr-x 4 root root 4096 Nov 23 06:36 iproute2 -rw-r--r-- 1 root root 26 Aug 2 2023 issue -rw-r--r-- 1 root root 19 Aug 2 2023 issue.net drwxr-xr-x 4 root root 4096 Nov 23 06:36 kernel -rw-r--r-- 1 root root 14907 Feb 22 14:29 ld.so.cache -rw-r--r-- 1 root root 34 Dec 16 2020 ld.so.conf drwxr-xr-x 2 root root 4096 Feb 22 14:21 ld.so.conf.d drwxr-xr-x 2 root root 4096 Nov 23 06:37 ldap -rw-r--r-- 1 root root 267 Oct 15 2021 legal -rw-r--r-- 1 root root 191 Mar 18 2022 libaudit.conf drwxr-xr-x 2 root root 4096 Nov 23 06:37 libnl-3 -rw-r--r-- 1 root root 2996 Mar 4 2022 locale.alias -rw-r--r-- 1 root root 9458 Nov 23 06:36 locale.gen lrwxrwxrwx 1 root root 30 Feb 22 14:29 localtime -> /usr/share/zoneinfo/Asia/Seoul drwxr-xr-x 3 root root 4096 Nov 23 06:36 logcheck -rw-r--r-- 1 root root 10734 Nov 12 2021 login.defs -rw-r--r-- 1 root root 592 Jan 25 2022 logrotate.conf drwxr-xr-x 2 root root 4096 Nov 23 06:37 logrotate.d -rw-r--r-- 1 root root 104 Aug 2 2023 lsb-release -r--r--r-- 1 root root 0 Nov 23 06:37 machine-id -rw-r--r-- 1 root root 111 Sep 12 02:59 magic -rw-r--r-- 1 root root 111 Sep 12 02:59 magic.mime -rw-r--r-- 1 root root 5217 Mar 18 2022 manpath.config -rw-r--r-- 1 root root 72029 Mar 21 2022 mime.types -rw-r--r-- 1 root root 744 Jan 9 2022 mke2fs.conf drwxr-xr-x 2 root root 4096 Nov 23 06:36 modprobe.d -rw-r--r-- 1 root root 195 Nov 23 06:36 modules drwxr-xr-x 2 root root 4096 Nov 23 06:36 modules-load.d lrwxrwxrwx 1 root root 19 Nov 23 06:36 mtab -> ../proc/self/mounts -rw-r--r-- 1 root root 11204 Feb 9 2022 nanorc -rw-r--r-- 1 root root 767 Mar 25 2022 netconfig drwxr-xr-x 2 root root 4096 Mar 10 2022 netplan drwxr-xr-x 8 root root 4096 Nov 23 06:36 networkd-dispatcher -rw-r--r-- 1 root root 91 Oct 15 2021 networks drwxr-xr-x 2 root root 4096 Nov 23 06:36 newt -rwxr-xr-x 1 root root 228 Mar 23 2022 nftables.conf -rw-r--r-- 1 root root 510 Nov 23 06:36 nsswitch.conf drwxr-xr-x 2 root root 4096 Nov 23 06:36 opt lrwxrwxrwx 1 root root 21 Aug 2 2023 os-release -> ../usr/lib/os-release -rw-r--r-- 1 root root 552 Aug 12 2020 pam.conf drwxr-xr-x 2 root root 4096 Nov 23 06:37 pam.d -rw-r--r-- 1 root root 1374 Nov 23 06:37 passwd drwxr-xr-x 3 root root 4096 Nov 23 06:37 perl drwxr-xr-x 3 root root 4096 Nov 23 06:37 pm drwxr-xr-x 4 root root 4096 Nov 23 06:37 polkit-1 -rw-r--r-- 1 root root 582 Oct 15 2021 profile drwxr-xr-x 2 root root 4096 Nov 23 06:37 profile.d -rw-r--r-- 1 root root 2932 Apr 2 2013 protocols drwxr-xr-x 2 root root 4096 Nov 23 06:36 python3 drwxr-xr-x 2 root root 4096 Nov 23 06:36 python3.10 drwxr-xr-x 2 root root 4096 Nov 23 06:37 rc0.d drwxr-xr-x 2 root root 4096 Nov 23 06:37 rc1.d drwxr-xr-x 2 root root 4096 Nov 23 06:37 rc2.d drwxr-xr-x 2 root root 4096 Nov 23 06:37 rc3.d drwxr-xr-x 2 root root 4096 Nov 23 06:37 rc4.d drwxr-xr-x 2 root root 4096 Nov 23 06:37 rc5.d drwxr-xr-x 2 root root 4096 Nov 23 06:37 rc6.d drwxr-xr-x 2 root root 4096 Nov 23 06:37 rcS.d lrwxrwxrwx 1 root root 20 Feb 22 14:29 resolv.conf -> /mnt/wsl/resolv.conf lrwxrwxrwx 1 root root 13 Feb 16 2023 rmt -> /usr/sbin/rmt -rw-r--r-- 1 root root 887 Apr 2 2013 rpc -rw-r--r-- 1 root root 1382 Dec 24 2021 rsyslog.conf drwxr-xr-x 2 root root 4096 Nov 23 06:37 rsyslog.d -rw-r--r-- 1 root root 3663 Jun 20 2016 screenrc drwxr-xr-x 4 root root 4096 Nov 23 06:36 security drwxr-xr-x 2 root root 4096 Nov 23 06:36 selinux -rw-r--r-- 1 root root 12813 Mar 28 2021 services -rw-r----- 1 root shadow 729 Nov 23 06:37 shadow -rw-r--r-- 1 root root 158 Nov 23 06:37 shells drwxr-xr-x 2 root root 4096 Nov 23 06:36 skel drwxr-xr-x 3 root root 4096 Nov 23 06:37 ssh drwxr-xr-x 4 root root 4096 Nov 23 06:36 ssl -rw-r--r-- 1 root root 0 Nov 23 06:36 subgid -rw-r--r-- 1 root root 0 Nov 23 06:36 subuid -rw-r--r-- 1 root root 4573 Feb 14 2022 sudo.conf -rw-r--r-- 1 root root 9390 Feb 14 2022 sudo_logsrvd.conf -r--r----- 1 root root 1671 Feb 8 2022 sudoers drwxr-xr-x 2 root root 4096 Nov 23 06:36 sudoers.d -rw-r--r-- 1 root root 2355 Feb 25 2022 sysctl.conf drwxr-xr-x 2 root root 4096 Nov 23 06:36 sysctl.d drwxr-xr-x 5 root root 4096 Nov 23 06:36 systemd drwxr-xr-x 2 root root 4096 Nov 23 06:36 terminfo -rw-r--r-- 1 root root 11 Feb 22 14:29 timezone drwxr-xr-x 2 root root 4096 Nov 23 06:37 tmpfiles.d drwxr-xr-x 2 root root 4096 Nov 23 06:36 ubuntu-advantage -rw-r--r-- 1 root root 1260 Jun 16 2020 ucf.conf drwxr-xr-x 4 root root 4096 Nov 23 06:36 udev drwxr-xr-x 3 root root 4096 Nov 23 06:37 ufw drwxr-xr-x 3 root root 4096 Nov 23 06:37 update-manager drwxr-xr-x 2 root root 4096 Nov 23 06:37 update-motd.d drwxr-xr-x 2 root root 4096 Nov 23 06:36 vim lrwxrwxrwx 1 root root 23 Nov 23 06:36 vtrgb -> /etc/alternatives/vtrgb -rw-r--r-- 1 root root 4942 Jan 24 2022 wgetrc -rw-r--r-- 1 root root 21 Feb 22 14:21 wsl.conf -rw-r--r-- 1 root root 681 Mar 23 2022 xattr.conf drwxr-xr-x 4 root root 4096 Nov 23 06:36 xdg -rw-r--r-- 1 root root 460 Dec 8 2021 zsh_command_not_found
WSL을 종료하고 윈도우 터미널로 나옵니다.
$ exit
PS D:\WSL_Data>
6. WSL 배포판 수동 설치 : WSL이미지를 수동으로 다운로드 받아 설치 하는 방법
Microsoft Store를 사용하여 WSL Linux 배포판을 설치할 수 없는(또는 설치하고 싶지 않은) 몇 가지 시나리오가 있습니다.
- 필자의 시스템은 인터넷 보안 시스템이 있어서 HTTS로 파일 다운로드가 막혀 있기 때문에 설치 배포판을 수동으로 다운 받아 설치하고자 합니다.
[다운로드 가능한 배포판들]
Microsoft Store 앱을 사용할 수 없는 경우 다음 링크를 사용하여 Linux 배포판을 다운로드하고 수동으로 설치하면 됩니다.
- Ubuntu
- Ubuntu 22.04 LTS
- Ubuntu 20.04
- Ubuntu 20.04 ARM
- Ubuntu 18.04
- Ubuntu 18.04 ARM
- Ubuntu 16.04
- Debian GNU/Linux
1) Invoke-WebRequest : 배포판을 다운 로드 받는 Powershell 명령
[윈도우즈 PowerShell 이용] Invoke-WebRequest -Uri https://aka.ms/wslubuntu2004 -OutFile Ubuntu.appx -UseBasicParsing
2) Curl을 이용한 배포판 다운로드
[curl을 사용하여 Ubuntu 20.04를 다운로드]
curl.exe -L -o ubuntu-2004.appx https://aka.ms/wslubuntu2004
* https://wslstorestorage.blob.core.windows.net/wslblob/CanonicalGroupLimited.UbuntuonWindows_2004.2021.825.0.AppxBundle
3) 다운받은 배포판을 실행
[Appx 패키지 다운로드가 완료되면 appx 파일을 두 번 클릭하여 새 배포 실행]
Add-AppxPackage .\app_name.appx
(예시)
PS D:\WSL_Data> Add-AppPackage .\WSL-UbuntuonWindows_2004.2021.825.0.AppxBundle
7. WSL 설치 오류 해결 - WSL2 Linux Kernel Update
Windows 10 / Windows 11 에서 WSL 로 Ubuntu 실행 시, 0x800701bc 에러가 발생할 수 있습니다.
이 경우 WSL2 Linux Kernel Update를 하면 해결 됩니다.
Installing, this may take a few minutes...
WslRegisterDistribution failed with error: 0x800701bc
Error: 0x800701bc WSL 2? ?? ?? ?? ????? ?????. ??? ??? https://aka.ms/wsl2kernel? ??????.
Press any key to continue...
1) WSL2 Linux Kernel Update 를 다운로드 합니다.
Windows 10 / Windows 11 에서 WSL 로 Ubuntu 실행 시, 0x800701bc 에러가 발생할 수 있다.
이 경우 WSL2 Linux Kernel Update 를 설치하면 해결됩니다.
(WSL2 Update 다운로드) 링크: https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi
2) 다운받은 Wsl 업데이트 패키지를 실행합니다.
[참고]
[InfraPlatform] - How to Start WSL2 : Windows Subsystem for Linux (WSL) 설치와 사용법
[InfraPlatform] - How to Start WSL2 - WSL 기본 명령들
[InfraPlatform] - How to WSL2 - WSL 설치 경로 변경
- 공유 링크 만들기
- 이메일
- 기타 앱
댓글
댓글 쓰기