저번 포스팅에서 Docker의 개념에 대해서 알아보았으니 이번 포스팅에서는 Docker를 설치해보고 컨테이너를 직접 실행해보자. 실습 환경은 Ubuntu 16.04 이다.
설치하기 전에 먼저 update를 해준다.
sudo apt-get update
업데이트를 마쳤으면 이제 Docker를 설치해보자.
sudo apt-get install docker.io
Docker가 잘 설치돼있는지 확인하기 위해 버전을 확인해보면
잘 설치되어 있다. Docker 명령어가 잘 실행되는지 확인하기 위해 실행중인 컨테이너는 없지만 현재 실행중인 컨테이너들을 출력해주는 명령어인 docker ps를 입력해보자.
docker ps를 입력해보니 permission denied가 떴다. 기본적으로 대부분의 Docker 명령어를 실행할 때 root 권한이 필요하다. 그래서 sudo를 붙여야 하는데, Docker 명령어를 실행할 때마다 sudo를 붙이기에는 너무 귀찮은 노릇이다. 따라서, 이를 위해 해당 유저를 docker 그룹에 포함시켜준다.
첫번째 줄을 보면 groupadd로 docker 그룹을 추가했으나 docker를 설치할 때 이미 생성됐는지 already exists라는 메시지가 떴다. 그래서 그 다음줄에 gpasswd 명령어를 통해 해당 유저(pooh)를 docker라는 그룹에 추가해줬다. gpasswd에 -a 옵션을 주게 되면 특정 그룹에 새로운 그룹멤버를 추가해준다는 의미이다.
즉, gpasswd -a ${USER} docker
이를 해석하면 해당 유저를 docker라는 그룹에 그룹멤버로 추가해준다는 뜻이다.
그러고 나서 docker를 restart해준 다음 다시 docker ps를 입력했는데
docker 명령어가 실행되지 않았다. docker 그룹에 추가됐나 id 명령어로 확인해봤더니
추가가 되어 있지 않았다. 그래서 reboot 한 다음에 다시 id 명령어로 확인해보니
docker 그룹에 추가돼있음을 확인할 수 있었다. docker ps 명령어도 잘 실행되었고 이제 root가 아니어도 sudo를 붙일 필요 없이 Docker 명령어를 실행할 수 있게 되었다.
이제 이미지를 다운받아서 해당 이미지를 기반으로 생성된 컨테이너를 실행시켜보자. docker image 명령어를 통해 이미지가 있는지 확인해보면
역시 아무것도 없다. 이번 포스팅에서는 centos 컨테이너를 띄워보려고 한다. 따라서, centos 이미지를 다운받아보자. 이미지를 다운받을 때는 pull 명령어를 사용한다.
docker pull centos
다운받은 후에 docker images를 통해 이미지를 확인해보면 centos 이미지가 잘 받아졌음을 확인할 수 있다. TAG 부분에 latest라고 되어있는데 다운받을 때 이런식으로 따로 태그를 지정해주지 않으면 latest 즉, 가장 최신 버전으로 다운을 받는다고 생각하면 된다. 태그는 이미지 이름에 : 를 붙여 사용한다.(centos:7 이런 식으로)
이제 이미지를 다운받았으니 해당 이미지를 기반으로 한 컨테이너를 실행시켜 보자.
docker run 이라는 명령어로 컨테이너를 실행시키는데 여기서 옵션을 줄 수가 있다. 지금 여기서 준 옵션은 -i와 -t인데 이를 살펴보게 되면
정리하면 docker run -i -t [이미지 이름 or IMAGE ID] /bin/bash
이미지 이름 대신에 IMAGE ID를 넣어도 되고 -i -t 옵션을 한 번에 주려면 -it로 써주면 된다. 그리고 필자는 /bin/bash라는 쉘을 실행시키기 위해 뒤에 /bin/bash를 붙여준 것이지만 python을 실행시키려면 python을 입력해준다던지 등 여러 명령들을 입력해 줄 수 있다. 나중에 다른 명령들을 실행하는 예제들이 나오니 지금은 그냥 넘어가도록 하자.
docker run -i -t centos /bin/bash 실행해보면 밑에 pooh@pooh-virtual-machine이 아닌 root@0328a08bbd7c가 실행됐음을 알 수 있다. 즉, 컨테이너가 생성되었고 해당 컨테이너로 Bash 쉘이 실행된 것이다. centos 이미지를 기반으로 잘 생성됐는지 확인하기 위해 cat /etc/*release*로 버전을 확인해보면 CentOS라고 나온다.
지금은 컨테이너에 접속중이니 다른 터미널(이를 2번 터미널이라 하겠다)을 하나 더 띄워서 docker ps를 입력해보면
컨테이너가 실행되고 있음을 확인할 수 있다.
다시 컨테이너가 있는 터미널로 돌아와서 여기서 컨테이너를 빠져나가려면 exit 명령어를 사용하면 된다.
root@0328a08bbd7c에서 다시 pooh@pooh-virtual-machine로 바뀌었다. 이번에도 똑같이 버전을 확인해보면 Ubuntu 16.04라고 나온다. 잘 빠져나온 것이다.
지금 현재 exit로 컨테이너를 빠져나왔기 때문에 docker ps를 입력해보면 아무것도 나오지 않는다.
하지만 -a 옵션으로 docker ps -a를 입력하게 되면 아까 빠져나온 해당 컨테이너가 나온다. 이를 해석해보면 docker run에 의해 컨테이너가 띄워지고 /bin/bash를 실행했는데 exit로 인해 컨테이너가 중지된 것이다. 즉, 중지된 것이지 삭제된 게 아니라는 뜻이다. 아직 삭제가 된 것이 아니기 때문에 docker restart [이미지 이름 or IMAGE ID]를 해주게 되면
다시 컨테이너가 잘 실행되고 있음을 알 수 있다. 실행되고 있는 컨테이너에 접속하기 위해 attach명령어를 사용해보면
docker attach [컨테이너 이름 or CONTAINER ID]
아까처럼 root@0328a08bbd7c로 되었고 버전도 CentOS임을 확인할 수 있다.
그럼 이제는 컨테이너가 필요 없어졌을 때 컨테이너를 삭제하는 방법에 대해 알아보자. 컨테이너가 실행중일 때는 먼저 컨테이너를 중지하고 삭제를 시켜야 한다. 아까처럼 해당 컨테이너에서 exit로 컨테이너를 중지할 수도 있고 컨테이너에 직접 접속하지 않고 docker stop [컨테이너 이름 or CONTAINER ID]로 중지할 수도 있다. 중지를 시켰으면 이제 docker rm [컨테이너 이름 or CONTAINER ID]로 해당 컨테이너를 삭제해주면 된다.
docker ps -a로 입력해봐도 존재하는 컨테이너가 없다.
하지만 컨테이너를 실행시킬 때마다 이렇게 매번 중지하고 삭제를 해주자니 너무 번거롭다. 그래서 컨테이너를 실행할 때 –rm 옵션을 줄 수가 있다. –rm 옵션은 컨테이너를 중지하면 동시에 바로 삭제가 되는 옵션이다.
해당 컨테이너에서 exit로 중지하고 나서 docker ps -a로 확인해보면 따로 docker rm [컨테이너 이름 or CONTAINER ID]을 해주지 않아도 삭제가 되었음을 확인할 수 있다.
참고 블로그 : http://blog.nacyot.com/articles/2014-01-27-easy-deploy-with-docker/
problem 테이블과 stat 테이블이 있다. 각 테이블들에 대한 설명을 하자면 problem 테이블은 각 문제에 대한 내용, 내용 언어, 보기를 보여주고, stat 테이블은 어떤 사람이 해당 문제에 어떤 보기를 골랐는지를 보여주는 테이블이다. 필자는 stat 테이블의 결과값으로 problem 테이블의 값을 조회할 수 있는지가 궁금했다. 예를 하나 들어보자면
select id from stat where ex=’milk’를 하면 drink가 반환되는 것을 확인할 수 있다. 이를 이용해 select language from problem where id=’drink’; 대신에 select language from problem where id=(select id from stat where ex=’milk’);로 대체되는지가 궁금했다. 그래서 실제로 해봤더니
2개 모두 english를 반환했다. 즉, 어떤 특정값 대신 서브쿼리를 이용할 수도 있다는 것이다. 그런데, 똑같은 원리로 select language from problem where id=(select id from stat where ex=’water’);로 했더니
Subquery returns more than 1 row라는 에러가 떴다. 이를 해석해보면 서브쿼리가 1줄 보다 더 많은 결과를 반환했다는 뜻이다. 실제로 저 서브쿼리를 실행해보면
이렇게 3개의 결과값이 반환된다. 반면에 이전에 했던 select id from stat where ex=’milk’는
1개의 결과값만이 반환된다. 그래서 서브쿼리가 잘 실행됐던 것이다. 그러면 2개 이상의 결과값이 반환되면 서브쿼리를 실행할 수 없는걸까? 아니다. 이 때 서브쿼리 앞에 ANY를 붙여주면 된다.
select language from problem where id=ANY(select id from stat where ex=’water’);
이렇게 서브쿼리가 잘 실행됨을 확인할 수 있다.
컴퓨터를 공부하다보면 비트(bit) 와 바이트(Byte) 에 대해서 들어보게 되는데 이번 포스팅에선 비트(bit)와 바이트(Byte)에 대한 간단한 개념 설명 및 실제 사례 등을 알아보고자 한다.
사람과 사람간에 의사소통을 하기 위해 언어가 필요하다면 컴퓨터도 장비간에 의사 소통을 하기 위해 필요한 언어같은 것이 있다. 그 하나의 예가 바로 2진수(또는 비트(bit)) 이다.
비트(bit)란 binary digit의 약자로 컴퓨터에서 사용되는 최소단위이며 2진수로써 1 또는 0의 값을 가진다. 이를 컴퓨터와 연관시켜보면 컴퓨터는 전원을 이용한 기계이기 때문에 전원이 On 되었을 때 혹은 전원이 Off 되었을 때 이렇게 두 가지 상태만을 감지할 수 있다. 이것을 간단히 2진수로서 표현이 가능한데, 바로 1과 0이다. 좀 더 자세하게 말하면 컴퓨터는 단순히 데이터를 저장할 메모리와 이를 처리하는 연산장치, 그리고 입출력 장치로 구성되어 있는데 데이터를 저장할 메모리 소자나 데이터를 처리하는 소자가 충전(On) 혹은 방전(Off)되거나 하는 상태를 기점으로 1과 0이 세트되는 것이다.
컴퓨터는 일반적으로 8개 단위의 비트(8bit)를 하나의 그룹으로 사용하는데 이를 바이트(Byte)라고 한다. 1Byte = 8bit이고 1바이트에 On/Off 상태(즉, 1과 0)를 조합하여 나타낼 수 있는 수는 00000000 ~ 11111111 즉, 총 256 (2^8)개가 되기 때문에 1바이트(Byte)는 0부터 255 까지 값을 나타낼 수 있다. 또한 바이트(Byte)로 ASCII 코드와 같은 데이터 문자를 표현(영문, 숫자는 한 글자당 1Byte, 한글, 한자는 한 글자당 2Byte)하기도 한다.
보통 bit와 Byte는 모두 앞 글자가 b로 시작하기 때문에 비트는 소문자 b, 바이트는 대문자 B로 표기한다. 필자도 이 포스팅에선 비트는 b, 바이트는 B로 표현을 하겠다. 비트(bit) 와 바이트(Byte)의 개념을 알아 봤으니 흔히 볼 수 있는 실제 건물의 인터넷 속도와 데이터 전송 속도에 대해 알아보도록 하자. 어떤 집이 K사 100M 상품을 사용하고 있는데 실제 데이터 다운로드 시에 100M 속도가 나오지 않는다. 왜 그런걸까?
ISP(인터넷 서비스 업체)에서 100M라고 말하는 것은 실질적으로 100Mbps를 말하는데 이는 Byte 단위가 아닌 bit 단위를 나타내는 것이다. 즉, bps는 bit per second로 초당 전송되는 비트를 의미한다. 하지만 우리가 일반적으로 컴퓨터에서 데이터 파일을 나타내는 단위는 Byte로 표현이 된다. 따라서, 데이터 파일을 전송 시(다운로드, 업로드 등) 이를 실제 파일 전송 단위인 Byte로 변환해보면 100Mbps = 12.5MBps 즉, 초당 12.5MB라는 전송 속도가 나오게 되는 것이다. 물론 실제 전송시에는 이처럼 이론상의 속도가 나올수도 있지만 네트워크 대역폭, 혼잡도, 장비 성능 등 여러가지 변수들에 의해 속도가 달라질 수는 있다.
정리하면
- 비트(bit) : 컴퓨터에서 사용하는 가장 작은 데이터 단위로 하나의 비트는 2진수 1 또는 0으로 표현되어
데이터를 처리, 저장, 전송 할 때 사용된다.
- 바이트(Byte) : 데이터 파일의 크기, 디스크 또는 그 외 저장 매체의 공간, 그리고 네트워크를 통하여
전송 되는 데이터의 양을 표현하는데 사용 되는 측정 단위이다. 1Byte = 8bit로도 표현된다.
- bps(bit per second) : 초당 비트 수이며, 통신 기기의 속도를 나타낸다.
참고 블로그 : http://mindnet.tistory.com/entry/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-1%ED%8E%B8-Bit-%EC%99%80-Byte-%EC%B0%A8%EC%9D%B4%EC%A0%90?category=702276
환경 : VMware에서의 Ubuntu 16.04이다.
MySQL에 접속하기 위해 비밀번호를 입력했는데 이런 에러가 떴다.
이 에러는 보통 MySQL 데몬이 실행되고 있지 않은 경우에 발생한다. 그러면 MySQL 데몬이 어떤 상태인지 확인해보자.
sudo service mysql status
보면 inactive(dead)라고 나와 있고 MySQL Community Server가 Stop되어있는 것을 확인할 수 있다. 그러면 MySQL을 다시 시작해주자.
sudo service mysql start
다시 접속했더니 잘 접속이 된다.
아까의 상태와 비교하기 위해서 다시 status 명령어를 입력해서 확인해보면
sudo service mysql status
아까와는 다르게 active(running)로 되어있음을 확인할 수 있다.
LVM을 만들었으니 이제는 LVM을 삭제하는 방법에 대해서 알아보자. 복잡하게 생각할 필요 없이 LVM을 만들어줬던 과정에서 거꾸로 가면 된다.
실습 환경은 저번 포스팅들과 동일하게 VM에 있는 칼리리눅스이다.
맨 마지막에 부팅될 때마다 마운트 된 파일시스템이 적용될 수 있도록 /etc/fstab 파일을 열어서 설정을 해줬다. 따라서, 설정해줬던 것을 지워준다.
vi /etc/fstab
umount 명령어를 통해 /dev/vg/lv를 /lvmmount로부터 마운트를 해제시킨다.
umount /lvmmount
lvscan 명령어를 통해 논리 볼륨을 조회해보고 제거하고 싶은 논리 볼륨을 lvremove 명령어를 통해 제거한다.
lvremove /dev/vg/lv
잘 제거됐는지를 확인하려면 다시 lvscan 명령어를 입력해본다. 잘 제거됐다면 해당 논리 볼륨이 없어야 한다.
vgscan 명령어를 통해 볼륨 그룹을 조회해보고 제거하고 싶은 볼륨 그룹을 vgremove 명령어를 통해 제거한다.
vgremove vg
잘 제거됐는지를 확인하려면 다시 vgscan 명령어를 입력해본다. 잘 제거됐다면 해당 볼륨 그룹이 없어야 한다.
pvscan 명령어를 통해 볼륨 그룹을 조회해보고 제거하고 싶은 볼륨 그룹을 vgremove 명령어를 통해 제거한다.
pvremove /dev/sdc1
pvremove /dev/sdb1
잘 제거됐는지를 확인하려면 다시 pvscan 명령어를 입력해본다. 잘 제거됐다면 해당 물리 볼륨이 없어야 한다.
참고 : pvremove /dev/sdc1 /dev/sdb1 이렇게 쓰면 한 번에 물리볼륨을 제거할 수 있다.
이제 파티션을 제거할 건데, 사실 디스크까지 제거하는 목적이라면 굳이 파티션을 제거하지 않고 디스크를 제거할 수 있지만 해당 파티션만 지우고 새로운 파티션을 생성해서 디스크를 사용할 수도 있기에 이렇게 파티션을 제거해 보는 것이다. fdisk -l을 통해 디스크 정보들을 보자.
7G, 5G 디스크에 Linux LVM 형식의 파티션으로 돼있다. 이는 d 옵션을 통해 파티션을 제거할 수 있다.
–> 파티션 설정 옵션은 ‘LVM 실습(1) - 파티션 설정’ 포스팅을 참고해주세요!
일단 파티션을 제거하는 것 역시 설정해주는 부분이므로 fdisk 명령어를 사용한다.
fdisk /dev/sdc
d로 파티션을 제거한 후 w로 저장해준다. 5G(/dev/sdb)도 똑같이 파티션을 제거한 후 저장해준다.
fdisk /dev/sdb
그러고 나서 fdisk -l로 확인해보면
이런 식으로 Linux LVM 형식의 파티션이 제거됐음을 확인할 수 있다.
VM에서 디스크를 생성할 때와 동일하게 칼리리눅스를 끄고 Edit virtual machine settings를 클릭한다.
추가해준 5G, 7G 디스크가 보인다. 제거할 디스크를 선택한 후 밑에 remove를 눌러준다.
다 제거했으면 5G, 7G가 디스크가 없어져 있다. 이제 OK 버튼을 눌러준다.
그러고 나서 다시 칼리리눅스를 켠 후 fdisk -l을 입력해보면
7G, 5G 디스크가 잘 제거됐음을 확인할 수 있다.
실서버의 경우는 halt 명령어로 리눅스를 종료한 후 하드디스크를 제거하면 된다.
참고 블로그 : http://klero.tistory.com/entry/LVM-Logical-Volume-Manage-%EB%A7%8C%EB%93%A4%EA%B3%A0-%EC%82%AD%EC%A0%9C%ED%95%98%EA%B8%B0
데비안 계열 리눅스에서 apt나 apt-get 사용 시 이런 에러가 꽤나 자주 발생한다. 이 상황은 다른 사용자 또는 자신이 apt-get 을 사용중일 때 접근 시 발생한다. 물론 나도 안 쓰고 아무도 안 쓰는데도 발생할 때가 있다. 이런 경우는 lock 파일을 삭제해주면 된다.
저 에러만 봤을 때는 마지막에 있는 sudo rm /var/lib/dpkg/lock만 해주면 되지만 이것저것 설치하다보면 apt update(또는 apt-get update)를 많이 이용하게 되는데 이 때도 Could not get lock /var/lib/apt/lists/lock - open(11: Resource temporarily unavailable) 에러가 빈번하게 발생한다. 이때 역시 이런 식으로 제거해주면 된다. 이렇기 때문에 필자는 미리 제거한다는 개념으로 그냥 저렇게 3개를 한꺼번에 제거한다. 다 해주고 나서 다시 apt나 apt-get을 이용하면
이렇게 잘 작동함을 확인할 수 있다.
참고 블로그 : https://www.hahwul.com/2016/08/debian-apt-get-could-not-get-lock.html
저번 포스팅 때 파티션 설정까지 해줬으니 이제 그 위의 과정들을 한 번 해보려고 한다. 환경은 저번 포스팅과 동일하게 VM에 있는 칼리리눅스로 실습을 진행하였고 추후 포스팅하게 될 환경은 대부분 우분투일 것 같다.
먼저 fdisk -l 이라는 명령어를 통해 현재 디스크 상태를 확인해보면
저번 포스팅 때 5G, 7G 하드디스크를 추가해줬기 때문에 위 그림처럼 총 3개가 나오는 것을 확인할 수 있다. 이제 물리 볼륨을 만들어보자.
Physical Volume create -> pvcreate 명령어를 통해 물리 볼륨을 만들 수 있다. 5G 디스크의 이름이 /dev/sdb1, 7G 디스크는 /dev/sdc1이므로 위 그림처럼 해주면 Physical Volume 즉, 물리 볼륨이 잘 만들어졌다는 것을 확인할 수 있다.
이제 물리 볼륨을 만들어줬으니 볼륨 그룹을 만들어주자. 필자의 경우 이 2개의 물리 볼륨을 하나의 볼륨 그룹을 만들 것이지만 각 물리 볼륨을 하나의 볼륨 그룹으로 만들어 줄 수도 있다(즉, /dev/sdb1을 하나의 그룹으로, /dev/sdc1을 하나의 그룹으로 한다는 말). 상황 따라 해주면 된다.
Volume Group create -> vgcreate 명령어를 통해 볼륨 그룹을 만들 수 있다. 뒤의 vg는 이름이라서 설정하고 싶은대로 설정해주면 되고 어떤 물리볼륨을 그룹으로 묶어줄 것인지를 정해줘야 하기 때문에 저렇게 뒤에 /dev/sdb1 /dev/sdc1를 써준 것이다. 종합하면 물리볼륨 /dev/sdb1, /dev/sdc1을 vg라는 이름의 볼륨 그룹으로 만들어준다는 의미이다. 볼륨그룹이 잘 만들어졌는지 확인하려면 vgdisplay 명령어를 입력해주면 된다.
볼륨 그룹을 만들었으니 이제 논리 볼륨을 만들어보자. 위와 똑같다.
Logical Volume create -> lvcreate 명령어를 사용하면 된다.
위 그림의 옵션들만 간단하게 정리해보면
option
-L: LV의 사이즈를 지정하는 옵션으로 K(kilobytes), M(megabytes), G(gigabytes), T(terabyt
es) 단위를 붙여 지정할 수 있다.
-l: 이 역시 LV의 사이즈를 지정하는 옵션이지만 -L 옵션과 다르게PE의 개수로 용량을 지정한다.
(참고 : 보통 1PE당 4MB)
-n: LV의 이름을 지정하는 옵션이다.
참고 블로그 : http://attiadmin.guyweb.co.kr/linux/lvm.html
사이즈를 9.99GiB로 했는데 그냥 9.99G로 써줘도 된다. 정리하면 vg라는 이름의 볼륨 그룹을 9.99G 사이즈의 lv라는 이름의 논리 볼륨으로 만들겠다는 의미이다. 이 역시도 필자는 하나의 논리 볼륨으로만 만들었으나 상황에 따라 여러 개의 논리 볼륨으로 만들어 줄 수 있다. 이렇게 하면 볼륨 그룹 경로에 논리 볼륨이 만들어진다. /dev/vg 경로로 가보면
lv라는 이름의 논리볼륨이 만들어져있음을 확인할 수 있다.
이제 논리 볼륨을 파일시스템으로 만들어주자.
Make File System -> mkfs 명령어를 통해 해당 논리 볼륨을 파일시스템으로 만들어준다. 이 때 파일시스템 타입(ext2, ext3, ext4 등)을 정해서 포맷하여 파일시스템을 생성해줘야 하므로 mkfs.ext3 이런 식으로 써주는 것이다.
파일시스템도 생성했으니 이제 마운트를 시켜주자.
파일시스템을 마운트시킬 디렉토리를 하나 만들고 해당 디렉토리에다가 만들어 준 파일시스템을 마운트시키면 된다. 마운트가 잘 됐으면 df -h를 통해 마운트시킨 파일시스템의 정보도 확인할 수 있다. df는 disk free라고 해서 disk의 사용량을 보여주는 명령어이다. -h 옵션은 human-readable이라고 해서 읽기 쉬운 단위로 표현해주는 옵션이다. 여기까지 다 해줬으면 이제 컴퓨터가 부팅될 때마다 마운트 된 파일시스템이 적용될 수 있도록 설정을 해줘야 한다.
vi /etc/fstab
/etc/fstab을 열어서 마운트시킨 파일시스템의 정보를 추가해주면 된다.
VM에서 인터넷 브라우저를 켜야 할 상황이 생겼다. Ubuntu에 Mozilla Firefox가 있어 이거로 접속을 해봤는데, 되지 않았다. 그래서 특정 환경만 안 되는 건가 해서 네이버 사이트를 들어가 봤는데 역시 안 됐다. 그래서, 브라우저에 문제가 있다고 판단을 했고 에러를 잡아보기로 했다.
참고 : 환경은 VMware의 Ubuntu 16.04의 Mozilla Firefox이다.
일단 에러가 났으니까 Error code를 확인해봤더니 SEC_ERROR_OCSP_FUTURE_RESPONSE라고 나와 있다. 그래서 검색해봤더니 현재 시간과 맞지 않아서 나는 에러라고 한다.
그래서 실제로 확인해봤더니 정말 현재 시간과 달랐다. 밑의 부분이 VM밖의 컴퓨터 시간(현재 시간)이고 위의 부분은 VM안의 컴퓨터 시간이다. 그럼 VM안의 컴퓨터 시간을 현재 시간을 맞춰주자.
설정그림 -> System Settings -> Time & Date
처음 설치할 때 Seoul 시간에 자동으로 맞춰지도록 해서 위 그림처럼 돼있었다. 그럼에도 불구하고 왜 이렇게 현재 날짜와 시간이 차이가 나게 됐는지는 모르겠다. 여튼 그래서 해당 시간으로 맞춰봤다.
그러고 나서 다시 네이버로 접속을 해보면
이렇게 잘 접속이 됨을 확인할 수 있다.