본문 바로가기
수업자료

보안융합 필답평가 풀이 2021.10.13

by ^..^v 2021. 10. 6.
728x90
반응형

[문항1]
다음 도커 명령 중 도커 허브의 계정을 꼭 필요로 하는 것은?

1) docker image push 
2) docker image pull
3) docker container run 
4) docker image rm




정답: 1)

도커 허브에 이미지를 등록하기 위해서는 도커 허브에 등록된 사용자 계정과 동일한 이름으로 이미지를 만들어야 하며, docker login 명령어로 인증해야 합니다. 





[문항2]
다음과 같이 실행된 컨테이너의 쉘로 접속하는 방법으로 가장 적합한 것은?

C:\Users\myanj> docker run -itd --name mycentos centos:centos7
b945d94504e584b47640a9783cd003a109f59673f709f240f1a24852f5ffd19e

C:\Users\myanj> docker container ls
CONTAINER ID   IMAGE            COMMAND       CREATED          STATUS          PORTS     NAMES
b945d94504e5   centos:centos7   "/bin/bash"   11 seconds ago   Up 10 seconds             mycentos



1) docker exec -it centos /bin/bash
2) docker exec -it centos:centos7 /bin/bash
3) docker exec -it mycentos /bin/bash
4) docker exec -it mycentos:centos7 /bin/bash




정답: 3)

docker exec 명령어는 실행 중인 컨테이너에 명령어를 전달할 때 사용합니다. 실행 중인 컨테이너에 /bin/bash 명령어를 실행하면 해당 컨테이너의 쉘을 이용할 수 있게 됩니다. 
이때, 컨테이너의 식별자, 즉, 컨테이너 아이디 또는 컨테이너 이름을 명시해 명령어를 실행할 컨테이너를 지정합니다. 





[문항3]
다음은 컨테이너를 실행, 종료, 조회, 실행을 연속적으로 수행하고 있습니다. 
예시와 같이 동일한 이름으로 컨테이너를 실행하고자 할 경우, 밑줄친 부분에 들어갈 옵션으로 가장 적합한 것은? 

C:\Users\myanj> docker run -it ___________________ --name mycentos centos:centos7
[root@71b49ee25be2 /]# exit
exit

C:\Users\myanj> docker container ls -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

C:\Users\myanj> docker run -it --name mycentos centos:centos7
[root@8a50c7159c00 /]#



1) -d 
2) -p 8080:80
3) --rm
4) -v 8080:80




정답: 3)

도커 컨테이너 이름은 유니크해야 하며, 중지된 상태의 컨테이너와도 이름이 중복되면 실행되지 않습니다. 
동일 이름의 컨테이너가 존재하면 이전 컨테이너를 삭제하고 실행해야 하며, 컨테이너가 중지되었을 때 자동으로 삭제되도록 하기 위해서는 --rm 옵션과 함께 컨테이너를 실행합니다. 





[문항4]
다음 중 PowerShell에서 모든 컨테이너를 강제로 삭제하는 명령어로 가장 올바른 것은? 

1) docker container rm -f $(docker container ls -a -q)
2) docker container ls -a -q $(docker container rm -f)
3) docker container rm $(docker container ls -aq)
4) docker container ls -aq $(docker container rm -f)




정답: 1)

docker container rm -f ⇒ 컨테이너를 강제로 삭제
$() ⇒ 괄호 안의 명령어 실행 결과를 앞의 명령어의 입력으로 전달
docker container ls -aq ⇒ 모든 상태의 컨테이너 아이디를 조회





[문항5]
latest 태그의 webserver 이미지로 컨테이너를 실행합니다. 
호스트의 9090 포트로의 요청을 컨테이너의 8080 포트로 전달되도록 하고, 컨테이너 실행 시 service nginx start 명령어가 실행되도록 하는 도커 명령어로 가장 올바른 것은?

1) docker container run -itd -p 9090:8080 webserver service nginx start
2) docker exec webserver:latest -p 9090:8080 service nginx start
3) docker service nginx start -p 9090:8080 --image webserver 
4) docker attach webserver:latest --port 9090:8080




정답: 1)

컨테이너 실행은 docker container run 명령어를 이용합니다. 
-p 옵션은 호스트 포트와 컨테이너 서비스 포트를 맵핑시킬 때 사용하며, 
이미지 이름에 태그 이름을 생략하면 latest 태그를 기본값으로 가집니다. 
이미지 이름 다음에 컨테이너 내부에서 실행할 명령어를 기술해 이미지에 명시된 CMD 값을 덮어 쓸 수 있습니다. 





[문항6]
다음은 MySQL과 Wordpress 두 개의 컨테이너를 연동하는 docker-compose.yaml 파일입니다. 밑줄 친 부분에 들어갈 내용으로 가장 적합하게 짝 지어진 것은?

version: "3.3"
services: 
  db:
    image: mysql:5.7
    restart: always                   
    environment:                      
      MYSQL_ROOT_PASSWORD: p@ssw0rd   
      MYSQL_DATABASE: wp_db
      MYSQL_USER: wp_user
      MYSQL_PASSWORD: wp_password
    volumes:
      - db_data:/var/lib/mysql
  wordpress:
    depends_on:
      - ________(A)________
    image: wordpress:latest           
    ports:
      - 8888:80
    restart: always
    environment:                      
      WORDPRESS_DB_HOST: ________(B)________:3306      
      WORDPRESS_DB_NAME: ________(C)________
      WORDPRESS_DB_USER: wp_user
      WORDPRESS_DB_PASSWORD: ________(D)________
volumes:
  db_data: {}



1) (A) db        (B)mysql      (C) wp_db     (D) p@ssw0rd
2) (A) mysql     (B) db        (C) db        (D) wp_password
3) (A) db        (B) db        (C) wp_db     (D) wp_password
4) (A) mysql     (B) mysql     (C) db        (D) p@ssw0rd




정답: 3)

wordpress 서비스는 db 서비스에 의존합니다. 
즉, db 서비스가 먼저 기동되어야 하므로 (A)에는 db가 들어 갑니다. 

WORDPRESS_DB_HOST 환경변수는 접속할 데이터베이스의 접속지 주소와 포트 번호가 설정됩니다. 
같은 서비스 내에서는 서비스 이름으로 접근이 가능하므로, (B)에도 db가 들어 갑니다. 

WORDPRESS_DB_NAME 환경변수에는 사용할 데이터베이스의 이름이 들어 갑니다. 
MySQL 컨테이너 실행 시 설정한 데이터베이스 이름(MYSQL_DATABASE 환경변수의 값)과 동일하므로 (C)에는 wp_db가 들어 갑니다. 

WORDPRESS_DB_USER 환경변수와 WORDPRESS_DB_PASSWORD 환경변수의 값은 사용할 데이터베이스의 계정 정보가 들어 갑니다. 
MySQL 컨테이너 실행 시 설정한 MYSQL_USER와 MYSQL_PASSWORD 환경변수의 값과 동일하므로 (D)에는 wp_password가 들어 갑니다. 

 

 

 

 

 

[문항7]
다음 중 SyntaxError를 일으키는 표현식은?

1) 6 * -------8
2) (((( 4 ** 3 )))))
3) (-(+(-(-3))))
4) -------1 * 6




정답: 2
여는 괄호가 닫는 괄호 보다 많은 경우에는 추가 입력을 위해 대기하지만, 
닫는 괄호가 여는 괄호 보다 많은 경우에는 괄호 개수가 일치하지 않아서 SyntaxError가 발생합니다.





[문항8]
다음 중 출력 결과가 나머지와 다른 것은?

1) print("%s %s" % ("one", "two"))
2) print("%s %s" % ("one", "two", "three"))
3) print("{} {}".format("one", "two"))
4) print("{} {}".format("one", "two", "three"))




정답: 2
C언어 스타일의 포맷 문자열은 포맷 문자열의 개수와 값의 개수가 일치하지 않으면 TypeError가 발생하는 반면, string.format() 함수는 값의 개수가 적은 경우에는 IndexError가 발생하지만 많은 경우에는 생략되어 처리됩니다. 





[문항9]
다음 코드에 대한 설명으로 가장 거리가 먼 것은?

file = open('sample.txt', 'w')

1) sample.txt 파일을 쓰기 위해서 연다.
2) 파일 쓰기가 끝나면 반드시 close() 함수를 호출해서 파일을 닫아야 한다. 
3) 파일 쓰기가 끝나면 컨텍스트 관리자가 자동으로 파일을 닫으므로 close() 함수를 호출할 필요가 없다.
4) sample.txt 파일이 없으면 파일을 새로 생성한다.




정답: 3
with 구문을 사용하지 않았기 때문에 파일 사용이 끝나면 close() 함수를 호출해 명시적으로 파일을 닫아 줘야 합니다.





[문항10] 
다음 밑줄에 들어갈 코드 실행 결과 (A), (B)로 가장 적합한 것은?

>>> user_input = input("숫자를 입력하세요 : ")
숫자를 입력하세요 : 100
>>> type(user_input)
_____(A)_____
>>> user_input = int(user_input)
>>> type(user_input)
_____(B)_____

1) <class 'str'> <class 'int'>
2) <class 'int'> <class 'str'>
3) <class 'tuple'> <class 'list'> 
4) <class 'list'> <class 'tuple'>




정답: 1) 
input 함수는 사용자가 입력한 데이터 타입과 관계없이 항상 문자열을 반환하므로, (A)에는 str 타입이 출력되며, 해당 문자열을 int 함수를 이용해서 형변환했으므로 (B)에는 int 타입이 출력됩니다. 





[문항11]
다음 밑줄에 들어갈 코드 실행 결과 (A), (B)로 가장 적합한 것은?

>>> list_a = [ 1, 2, 3, 4 ]
>>> list_b = list_a
>>> id(list_a)
2462410511168
>>> id(list_b)
_____(A)_____
>>> list_a[2] = 9
>>> print(list_b[2])
_____(B)_____



1) (A) [ 1, 2, 3, 4 ]  (B) 9
2) (A) [ 1, 2, 3, 4 ] (B) 3
3) (A) 2462410511168 (B) 9
4) (A) 2462410511168 (B) 3




정답: 3) 
list_b = list_a 를 통해 두 변수가 동일한 주소를 공유하므로 (A)에는 id(list_a)와 동일한 값이 출력되며, list_a의 세번째 요소의 값을 바꾸면 같은 주소 공간을 가리키고 있는 list_b도 변경된 내용을 참조하므로 (B)에는 9가 출력되게 됩니다. 





[문항12]
다음 중 나머지 셋과 실행 결과가 다른 것은?

1)
>>> def addsub1(a, b):
...     return a + b, a - b
...
>>> addsub1(20, 5)

2)
>>> addsub2 = lambda a, b: (a + b, a - b)
>>> addsub2(20, 5)

3)
>>> addsub3 = (lambda a, b: (a + b, a - b))(20, 5)
>>> addsub3

4)
>>> addsub4 = (lambda a, b: a + b, a - b)(20, 5)
>>> addsub4




정답: 4)
다른 보기는 모두 (25, 15)를 반환하는 반면, 보기 4번은 NameError를 반환합니다. 람다 함수에서 반환값이 여러 개인 경우 튜플 형태로 반환해야 합니다. 





[문항13]
다음 중 나머지 셋과 실행 결과가 다른 것은?

1) >>> 'abc' < 'Abc'
2) >>> 'abc' < 'abcd'
3) >>> ' abc' < 'abc'
4) >>> ' abc' < 'Abc'




정답: 1) 
나머지는 모두 True를 반환하는 반면, 보기 1번은 False를 반환합니다. 문자 크기 비교는 ASCII 코드를 기준으로  공백(32) < A(65) < z(122) 순으로 크기가 결정되며, 문자열은 사전순으로 서로 대응하는 문자를 왼쪽에서 오른쪽으로 비교합니다. 

728x90
반응형

댓글