Synology NAS Docker 우분투 컨테이너 생성하기

 

NAS Info

 

 

Ubuntu 17.04 이미지 다운로드 및 실행

  • Docker – 레지스트리 – “ubuntu” 검색 후 “ubuntu” 다운로드

  • Docker – 이미지 – ubuntu – 실행 – 마법사로 실행

 

1 단계에서

컨테이너 이름에 원하는 이름(여기서는 ubuntu1) 넣고.. (hostname 으로 사용됨)

로컬 포트에는 실제 접속 시 사용할 포트(여기서는 8081)를, 컨테이너 포트에는 8080, 유형은 TCP로 설정

2 단계(고급 설정)는

"볼륨" 탭에 컨테이너에서 사용할 볼륨을 지정한다.

물론, 기본적인 볼륨이 생성 되기는 하지만, 필요에 의해서 설치하게 될 sw / application / log 를 위와 같이 NAS 의 영역을 매핑하면

컨테이너가 실행되고 있지 않아도 확인 할 수 있다.

 

"포트 설정" 탭에서는 컨테이너 포트와 로컬(NAS) 포트 매핑을 정의

 

컨테이너 실행

 

빨간색 부분의 스위치 버튼을 클릭하여 컨테이너 실행

 

SSH 를 이용하여 컨테이너에 터미널 접속

SSH 터미널 접속 툴을 사용하여 NAS 에 접속한다.
다음과 같이 명령행에 입력하면 NAS 의 root 로 접속이 가능하다.

sudo su -

현재 실행되고 있는 도커 컨테이너를 확인 하기 위해 다음 명령어를 입력한다.

docker ps

다음 화면처럼 현재 실행되고 있는 컨테이너 목록을 확인 할 수 있다.

 

컨테이너에 접속 하기 위하여 다음 명령어를 입력한다.

docker exec -it 6c6aa89df191 /bin/bash

 

터미널 접속을 위해 SSHD 설치 및 접속

1. SSH 서버 설치

apt-get install ssh

2. 서비스 시작

service sshd start

3. 포트 확인

netstat -tulpn | grep :22

4. 설정
    4.1 sshd_config 파일 오픈

vi /etc/ssh/sshd_config

    4.2 root 로그인 금지

PermitRootLogin no

    4.3 특정 사용자만 허용

AllowUsers user1 user2

    4.4 포트 변경

Port 22

    4.5 저장 및 서비스 restart

service sshd restart

초보를 위한 도커 안내서 - 도커란 무엇인가?

docker logo

 

서버를 관리한다는 것

복잡하고 어려운 서버관리

일반적으로 서버를 관리한다는 건 복잡하고 어려우며 고급 개발자들의 섬세한 작업이 필요한 영역입니다.

처음 리눅스를 접하며 매뉴얼을 보고 Redhat Linux 를 설치했던 기억은 정확히 기억이 나지는 않지만 설치 매뉴얼은 길고 복잡했고 알 수 없는 이유로 자꾸 설치를 실패하였습니다. 제대로 설치가 되지 않으면 다시 OS를 설치하는 것부터 반복하여 몇 번을 재설치한 끝에 성공하곤 했습니다.

새로운 서버를 셋팅하는 날은 밤을 새는 날이였고 몇 번 밤을 새다보니 ./configuremake && make install의 달인이 되어 있었습니다. 어느 정도 익숙해졌다고 생각한 시점에도 리눅스 배포판이 바뀌거나 환경이 달라지면 꼭 문제가 생기곤 했습니다.

하나의 서버에 여러개의 프로그램을 설치하는 것도 문제였는데 서로 사용하는 라이브러리의 버전이 다르거나 동일한 포트를 사용하는 경우는 설치가 굉장히 까다로웠습니다. 차라리 서로 다른 서버에 설치하는게 나았고 그렇게 조립PC는 늘어나고 자원은 낭비됩니다.

시간이 흐르면서 서버 환경이 계속 바뀌는데 CentOS에 익숙해지면 Ubuntu를 써보고 싶어지곤 했습니다.

DevOps의 등장으로 개발주기가 짧아지면서 배포는 더 자주 이루어지고 마이크로서비스 아키텍쳐가 유행하면서 프로그램은 더 잘게 쪼개어져 관리는 더 복잡해집니다. 새로운 툴은 계속해서 나오고 클라우드의 발전으로 설치해야 할 서버가 기하급수적으로 늘어나는 상황에서 도커(Docker) 가 등장하고 서버관리 방식이 완전히 바뀌게 됩니다.

 

도커의 역사

도커는 2013년 3월 산타클라라에서 열린 Pycon Conference에서 dotCloud의 창업자인 Solomon Hykes가 The future of Linux Containers 라는 세션을 발표하면서 처음 세상에 알려졌습니다.

이 발표 이후 도커가 인기를 얻으면서 2013년 10월 아예 회사이름을 도커(Docker Inc.)로 바꾸고 2014년 6월 도커 1.0을 발표합니다. 2014년 8월 도커에 집중하기 위해 dotCloud 플랫폼을 매각하고 2015년 4월 $95M(약 1,100억원) 투자를 유치한 후 계속해서 빠르게 성장하고 있습니다.

 

The Evolution of the Modern Software Supply Chain - The Docker Survey, 2016

도커에서한 2016년 설문조사에서 90%가 개발에 사용중이고 80%가 DevOps에 사용할 예정이며 58%가 운영환경에서 사용중이라고 합니다. 2014년 도커 서울 밋업을 시작할 때만 해도 대부분의 사람들이 도커를 잘 모르고 개념도 이해하지 못했는데 이제는 거의 모르는 사람이 없을 정도로 널리 쓰이고 있습니다.

 

도커란?

도커는 컨테이너를 관리하는 플랫폼

도커는 컨테이너 기반의 오픈소스 가상화 플랫폼입니다.

컨테이너라 하면 배에 실는 네모난 화물 수송용 박스를 생각할 수 있는데 각각의 컨테이너 안에는 옷, 신발, 전자제품, 술, 과일등 다양한 화물을 넣을 수 있고 규격화되어 컨테이너선이나 트레일러등 다양한 운송수단으로 쉽게 옮길 수 있습니다.

서버에서 이야기하는 컨테이너도 이와 비슷한데 다양한 프로그램, 실행환경을 컨테이너로 추상화하고 동일한 인터페이스를 제공하여 프로그램의 배포 및 관리를 단순하게 해줍니다. 백엔드 프로그램, 데이터베이스 서버, 메시지 큐등 어떤 프로그램도 컨테이너로 추상화할 수 있고 조립PC, AWS, Azure, Google cloud등 어디에서든 실행할 수 있습니다.

컨테이너를 가장 잘 사용하고 있는 기업은 구글인데 2014년 발표 에 따르면 구글은 모든 서비스들이 컨테이너로 동작하고 매주 20억 개의 컨테이너를 구동 한다고 합니다.

컨테이너(Container)

docker container

컨테이너는 격리된 공간에서 프로세스가 동작하는 기술입니다. 가상화 기술의 하나지만 기존방식과는 차이가 있습니다.

기존의 가상화 방식은 주로 OS를 가상화하였습니다.

우리에게 익숙한 VMwareVirtualBox같은 가상머신은 전가상화Full virtualization방식이라고 하는데 호스트OS위에 게스트 OS 전체를 가상화하여 사용하는 방식입니다. 이 방식은 여러가지 OS를 가상화(리눅스에서 윈도우를 돌린다던가) 할 수 있고 비교적 사용법이 간단하지만 무겁고 느려서 운영환경에선 사용할 수 없었습니다.

이러한 상황을 개선하기 위해 CPU의 가상화 기술(HVM)을 이용한 KVMKernel-based Virtual Machine반가상화 Paravirtualization방식의 Xen이 등장합니다. 반가상화 방식은 게스트 OS가 필요하긴 하지만 전체OS를 가상화하는 방식이 아니였기 때문에 전가상화 방식에 비해 성능이 향상되었습니다. 이러한 기술들은 OpenStack이나 AWS, Rackspace같은 클라우드 서비스에서 가상 컴퓨팅 기술의 기반이 되었습니다.

가상머신과 도커

전가상화든 반가상화든 추가적인 OS를 설치하여 가상화하는 방법은 어쨋든 성능문제가 있었고 이를 개선하기 위해 프로세스를 격리 하는 방식이 등장합니다.

리눅스에서는 이 방식을 리눅스 컨테이너라고 하고 단순히 프로세스를 격리시키기 때문에 가볍고 빠르게 동작합니다. CPU나 메모리는 딱 프로세스가 필요한 만큼만 추가로 사용하고 성능적으로도 거어어어어의 손실이 없습니다.

도커의 기본 네트워크 모드는 Bridge모드로 약간의 성능 손실이 있습니다. 네트워크 성능이 중요한 프로그램의 경우 --net=host 옵션을 고려해야 합니다.

하나의 서버에 여러개의 컨테이너를 실행하면 서로 영향을 미치지 않고 독립적으로 실행되어 마치 가벼운 VMVirtual Machine을 사용하는 느낌을 줍니다. 실행중인 컨테이너에 접속하여 명령어를 입력할 수 있고 apt-get이나 yum으로 패키지를 설치할 수 있으며 사용자도 추가하고 여러개의 프로세스를 백그라운드로 실행할 수도 있습니다. CPU나 메모리 사용량을 제한할 수 있고 호스트의 특정 포트와 연결하거나 호스트의 특정 디렉토리를 내부 디렉토리인 것처럼 사용할 수도 있습니다.

새로운 컨터이너를 만드는데 걸리는 시간은 겨우 1-2초로 가상머신과 비교도 할 수 없이 빠릅니다.

이러한 컨테이너라는 개념은 도커가 처음 만든 것이 아닙니다. 도커가 등장하기 이전에, 프로세스를 격리하는 방법으로 리눅스에서는 cgroupscontrol groups와 namespace를 이용한 LXCLinux container가 있었고 FreeBSD에선 Jail, Solaris에서는 Solaris Zones이라는 기술이 있었습니다. 구글에서는 고급 기술자들이 직접 컨테이너 기술을 만들어 사용하였고 lmctfy(Let Me Contain That For You)라는 오픈소스 컨테이너 기술을 공개했지만 성공하진 못했습니다.

도커는 LXC를 기반으로 시작해서 0.9버전에서는 자체적인 libcontainer 기술을 사용하였고 추후 runC기술에 합쳐졌습니다.

이미지(Image)

Docker image

도커에서 가장 중요한 개념은 컨테이너와 함께 이미지라는 개념입니다.

이미지는 컨테이너 실행에 필요한 파일과 설정값등을 포함하고 있는 것으로 상태값을 가지지 않고 변하지 않습니다(Immutable). 컨테이너는 이미지를 실행한 상태라고 볼 수 있고 추가되거나 변하는 값은 컨테이너에 저장됩니다. 같은 이미지에서 여러개의 컨테이너를 생성할 수 있고 컨테이너의 상태가 바뀌거나 컨테이너가 삭제되더라도 이미지는 변하지 않고 그대로 남아있습니다.

ubuntu이미지는 ubuntu를 실행하기 위한 모든 파일을 가지고 있고 MySQL이미지는 debian을 기반으로 MySQL을 실행하는데 필요한 파일과 실행 명령어, 포트 정보등을 가지고 있습니다. 좀 더 복잡한 예로 Gitlab 이미지는 centos를 기반으로 ruby, go, database, redis, gitlab source, nginx등을 가지고 있습니다.

말그대로 이미지는 컨테이너를 실행하기 위한 모든 정보를 가지고 있기 때문에 더 이상 의존성 파일을 컴파일하고 이것저것 설치할 필요가 없습니다. 이제 새로운 서버가 추가되면 미리 만들어 놓은 이미지를 다운받고 컨테이너를 생성만 하면 됩니다. 한 서버에 여러개의 컨테이너를 실행할 수 있고, 수십, 수백, 수천대의 서버도 문제없습니다.

Docker Store

도커 이미지는 Docker hub에 등록하거나 Docker Registry 저장소를 직접 만들어 관리할 수 있습니다. 현재 공개된 도커 이미지는 50만개가 넘고 Docker hub의 이미지 다운로드 수는 80억회에 이릅니다. 누구나 쉽게 이미지를 만들고 배포할 수 있습니다.

 

왜 이렇게 핫한가?

도커는 완전히 새로운 기술이 아니며 이미 존재하는 기술을 잘 포장했다고 볼 수 있습니다.

컨테이너, 오버레이 네트워크overlay network, 유니온 파일 시스템union file systems등 이미 존재하는 기술을 도커처럼 잘 조합하고 사용하기 쉽게 만든 것은 없었고 사용자들이 원하는 기능을 간단하지만 획기적인 아이디어로 구현하였습니다.

레이어 저장방식

Docker Layer

도커 이미지는 컨테이너를 실행하기 위한 모든 정보를 가지고 있기 때문에 보통 용량이 수백메가MB에 이릅니다. 처음 이미지를 다운받을 땐 크게 부담이 안되지만 기존 이미지에 파일 하나 추가했다고 수백메가를 다시 다운받는다면 매우 비효율적일 수 밖에 없습니다.

도커는 이런 문제를 해결하기 위해 레이어layer라는 개념을 사용하고 유니온 파일 시스템을 이용하여 여러개의 레이어를 하나의 파일시스템으로 사용할 수 있게 해줍니다. 이미지는 여러개의 읽기 전용read only 레이어로 구성되고 파일이 추가되거나 수정되면 새로운 레이어가 생성됩니다. ubuntu 이미지가 A + B + C의 집합이라면, ubuntu 이미지를 베이스로 만든 nginx 이미지는 A + B + C + nginx가 됩니다. webapp 이미지를 nginx 이미지 기반으로 만들었다면 예상대로 A + B + C + nginx + source 레이어로 구성됩니다. webapp 소스를 수정하면 A, B, C, nginx 레이어를 제외한 새로운 source(v2) 레이어만 다운받으면 되기 때문에 굉장히 효율적으로 이미지를 관리할 수 있습니다.

컨테이너를 생성할 때도 레이어 방식을 사용하는데 기존의 이미지 레이어 위에 읽기/쓰기read-write 레이어를 추가합니다. 이미지 레이어를 그대로 사용하면서 컨테이너가 실행중에 생성하는 파일이나 변경된 내용은 읽기/쓰기 레이어에 저장되므로 여러개의 컨테이너를 생성해도 최소한의 용량만 사용합니다.

가상화의 특성상 이미지 용량이 크고 여러대의 서버에 배포하는걸 감안하면 단순하지만 엄청나게 영리한 설계입니다.

이미지 경로

Docker image url

이미지는 url 방식으로 관리하며 태그를 붙일 수 있습니다. ubuntu 14.04 이미지는 docker.io/library/ubuntu:14.04 또는 docker.io/library/ubuntu:trusty 이고 docker.io/library는 생략가능하여 ubuntu:14.04 로 사용할 수 있습니다. 이러한 방식은 이해하기 쉽고 편리하게 사용할 수 있으며 태그 기능을 잘 이용하면 테스트나 롤백도 쉽게 할 수 있습니다.

Dockerfile

1
2
3
4
5
6
7
8
9
10
11
12
13
 # vertx/vertx3 debian version
 FROM subicura/vertx3:3.3.1
 MAINTAINER chungsub.kim@purpleworks.co.kr

 ADD build/distributions/app-3.3.1.tar /
 ADD config.template.json /app-3.3.1/bin/config.json
 ADD docker/script/start.sh /usr/local/bin/
 RUN ln -s /usr/local/bin/start.sh /start.sh
 
 EXPOSE 8080
 EXPOSE 7000

 CMD ["start.sh"]

도커는 이미지를 만들기 위해 Dockerfile이라는 파일에 자체 DSLDomain-specific language언어를 이용하여 이미지 생성 과정을 적습니다. 추후에 문법에 대해 자세히 다루겠지만 위 샘플을 보면 그렇게 복잡하지 않다는 걸 알 수 있습니다.

이것은 굉장히 간단하지만 유용한 아이디어인데, 서버에 어떤 프로그램을 설치하려고 이것저것 의존성 패키지를 설치하고 설정파일을 만들었던 경험이 있다면 더 이상 그 과정을 블로깅 하거나 메모장에 적지 말고 Dockerfile로 관리하면 됩니다. 이 파일은 소스와 함께 버전 관리 되고 원한다면 누구나 이미지 생성과정을 보고 수정할 수 있습니다.

Docker Hub

Docker Hub Hits 5 Billion Pulls(2016/08)

도커 이미지의 용량은 보통 수백메가로 수기가가 넘는 경우도 흔합니다. 이렇게 큰 용량의 이미지를 서버에 저장하고 관리하는 것은 쉽지 않은데 도커는 Docker hub를 통해 공개 이미지를 무료로 관리해 줍니다.

Command와 API

도커 클라이언트의 커맨드 명령어는 정말 자아아알 만들어져 있습니다. 대부분의 명령어는 직관적이고 사용하기 쉬우며 컨테이너의 복잡한 시스템 구성을 이해하지 못하더라도 편하게 사용할 수 있습니다. 또한 http기반의 Rest API도 지원하여 확장성이 굉장히 좋고 훌륭한 3rd party 툴이 나오기 좋은 환경입니다.

유용한 새로운 기능들

도커는 발전속도가 아주 빠른 오픈소스입니다. 사용하면서 부족하다고 느꼈던 부분은 빠르게 개선되고 새로운 버전이 나오면 유용한 기능이 대폭 추가됩니다. 1.13버전에서는 Docker stacks이라는 여러개의 컨테이너를 한번에 관리하는 기능이 정식으로 릴리즈 되었고 system 커맨드가 추가되어 이미지, 컨테이너 관리가 더 편해졌습니다. Secrets Management라는 비밀정보를 관리하는 기능도 추가됩니다.

새로운 기능이 계속 추가되고 있고 다음 릴리즈가 기대됩니다.

훌륭한 생태계

도커는 굉장히 큰 생태계를 가지고 있고 커다란 기업과 협력하여 사실상 클라우드 컨테이너 세계의 de facto가 되었습니다. 로깅, 모니터링, 스토리지, 네트워크, 컨테이너 관리, 배포등 다양한 분야에서 다양한 툴들이 존재하며 아예 도커를 위한 OS(coreos-> container linux)도 존재합니다.

현재 도커를 기반으로한 오픈소스 프로젝트는 10만개가 넘고 굉장히 활발하게 진행되고 있습니다.

커뮤니티 지원

도커는 기술기업답지 않게 홍보와 커뮤니티 관리에 굉장히 신경쓰고 있습니다. 커뮤니티를 위한 스티커나 티셔츠를 무료로 제공하고 필요하면 연사요청도 할 수 있습니다. 홈페이지에서는 전세계에서 열리는 밋업 상황을 볼 수 있고 일주일마다 발송되는 뉴스레터에는 다양한 개발자들의 글이 실려있습니다.

 

moby dock

Tux(linux) - Moby Dock(docker) - Gopher (golang)

도커는 넘나 귀여운 고래를 로고로 하고 있습니다. 로고 스티커는 항상 인기가 넘치고 로고가 그려진 티셔츠는 입고 돌아다녀도 개발자처럼 보이지 않습니다. 도커가 성공한 가장 큰 이유는 귀여운 고래 덕분이라고 생각합니다.

정리

여기까지 도커에 대해 기본적인 내용을 아주 얕게 살펴보았습니다. 이제 실전으로 들어가봅시다!

AOP(Aspect oriented Programming) - 관점 지향 프로그래밍
    한 어플리케이션 내의 다양한 모듈에서 공통적으로 이용되는 기능을 분리시켜 사용하는 것.
    모듈의 핵심 기능 외의 기능을 해당 모듈에 응집되지 않도록 하기 위한 기술
   
    * 공통적으로 이용되는 기능(공통 관심 사항)이란?
        - 어떤 특정 모듈에서만 필요로 하는 것이 아니라, 어플리케이션 전반에 걸쳐 필요한 기능
            . Logging 기능
            . DB 트랜잭션 기능
            . 보안
            . 기타 등등...
       
   
    * 순수 자바는 공통 관심 사항을 어떻게 적용할까?
        - 상속!
            단점 :  - 다중상속이 불가능한 자바 특성상 다중 모듈에서 사용되는 공통 기능을 상속화 시키기 어렵다
                    - 상속은 코드 구현단에서부터 공통 모듈이 결정되는 정적 방식으로 비추...
                   
        - 공통 class
            단점 :  메소드가 자신의 주요 기능만을 유지하는 것이 아니라, 외부적인 공통 모듈을 호출하는 코드를 갖게 된다.
                    자신에게 필요한 순수 기능만을 유지하는 방법은 없을까?

    이러한 순수 자바의 상속/공통class 의 단점을 보완하기 위해
    Spring AOP는 Aspect(관점) 이라는 특별한 객체로 모듈화하여 가각의 모듈에 공통 기능을 '끼워넣는' 방식을 사용.
   
    * AOP 용어
        - Aspect(관점)
            여러 객체에 공통으로 적용되는 공통 관심 사항
           
        - Advice
            Aspect 가 해야할 작업 내용. 순수 부가기능 자체
           
        - Joinpoint
            어디에 Advice를 적용 할지에 대한 지점으로 메서드 호출, 필드값 변경 등이 여기에 속함.
            code 와 Advice 를 연결해 주는 설정 정보
        - Pointcut
            Joinpoint의 부분 집합. 실제롤 Advice가 적용되는 Joinpoint
            클래스/메소드명/정규표현식 등의 조건을 통해 선택된 Joinpoint 의 일부.
        - Weaving
            Advice. Pointcut 을 조합하여 어플리케이션에 적용하는 과정.
            Weaving 시점 :  컴파일시(class파일생성), 클래스로딩시(JVM), 런타임시
                            스프링은 런타임시점에 Weaving 지원.
        - Target
            Advice 적용될 객체 (모듈)
       
        - Proxy
            Advice 를 Target 에 적용했을 때 생성되는 객체(Target + Advice)
            실제 구현자가 원했던 공통모듈과 모듈의 원래 기능을 모두 수행할 수 있는 객체
       
    * 스프링 AOP 특징
        - 스프링 어드바이스는 자바로 구현한다.
        - 스프링 Aspect 는 Runtime 시점에 만들어진다.
        - 스프링은 메소드 조인포인트만 지원한다.(생성자/소멸자등의 조인포인트 지원불가)
       
    * 스프링에서 AOP 구현시에 사용되는 방법
        - 스프링API를 이용한 AOP 구현                            - 사용성 하
        - POJO 클래스를 이용한 AOP 구현                          - 사용성 중
        - AspectJ5에서 정의한 @Aspect 어노테이션 기반의 구현     - 사용성 상
        => 어떤 구현방식을 사용하던 스프링은 내부적으로 프록시 방식으로 AOP구현된다.  

이번 글에서는 우분투 이미지를 올린 container 에 web server 를 구축해 보도록 하겠습니다.

개인 데이터 저장 및 홈 미디어 서버로 사용하고 있는 시놀로지 716+2 NAS 에 도커 패키지를 설치 후 필요한 container 를 구축하였으며,
여기서는 이번 글에서 작업할 container 설정을 보도록 하겠다.

아래 그림에서 중요한 부분은 그림 왼편 하단의 포트 설정 부분을 잘 보시면 되실 것 입니다.


첫번째 설정은 SSH 접속을 위하여 외부 222 포트를 컨테이터의 22 포트로 포워딩하며 두번째 설정은

앞으로 우리가 설치할 webtob 접속을 위한 8081 포트를 8080포트로 포워딩 하는 설정을 보여주고 있습니다.

그리고 이 컨테이너에 할당된 이름은 ubuntu-web 이라는 것을 확인 할 수 있으며, 이것은 ssh 터미널 접속을 할 경우 hostname 으로 보여지게 됩니다.


webtob 설치를 위하여 container 로 ssh 터미널 접속을 해 보도록 하겠습니다.

위 그림의 첫 줄에 보면 192.168.0.117 서버(NAS)의 222 포트로 접속하고 있는 것을 확인 할 수 있습니다.

접속이 정상적으로 수행되면 root 계정으로 ubuntu-web 서버(container)에 접속 하였다는 것을 확인 할 수 있습니다.


그럼 이제 본격적으로 webtob 를 설치해 보도록 하겠습니다.

(아래 설치 과정은 이전 글에서 이미 webtob 설치 과정을 작성한 것을 재 활용 하였습니다.)


1. 설치 이미지 확인


2. WEBTOB4_1_SP9_Fix0_LinuxK2_6_ia64.bin 실행

3. License 정책 확인 (Y 입력)


4. Install Set 선택 (난 가상머신에 Jeus 연동까지 진행할 것이라 1번 WebtoB 만을 설치)

5. 설치 경로 입력

6. 설치 경로 입력 정보 확인

7. 설치 정보 및 디스크 여유 공간 확인

8. 설치 확인

9. 설치 완료

10. 환경 파일 컴파일    

webtob 설치 후 환경 파일 컴파일 시에 위와 같은 라이브러리를 찾을 수 없다는 메세

지가 나오면서 컴파일이 안 되는 경우가 있다.

아래 화면과 같이 .profile 에 환경변수 "LD_LIBRARY_PATH" 를 확인 하여야 한다.

설치하는 OS 에 따라 환경 변수 명이 조금씩 다르기 때문이다.

아래 화면은 우분투16.04에서 확인 한 내용이다.

11. 컴파일 성공

위 화면과 같이 컴파일을 성공하면 기본적인 webtob 설치및 환경은 구성이 되었다고

보아도 된다. 구성하고자 하는 내용에 따라 환경 파일을 작성하고 컴파일 후 webtob

를 기동하면 웹서버 기동이 되는 것이다.


아래 그림은 실제로 container 에 설치된 webtob 를 구동하는 것을 보여 줍니다.



이렇게 구동이 되었으면 이제 실제로 브라우저를 통해서 webtob webserver에 접속 해 보겠습니다.

짜잔!! 192.168.0.117:8081 로 접속한 화면 입니다.^^


오늘은 ubuntu 이미지를 올린 컨테이너에 web server(webtob)를 구축하는 것 까지 해 보았습니다.

다음 글에서는 또 하나의 ubuntu 이미지를 올린 컨테이너에 was server(jeus)를 구축하고 오늘 구축한 webtob와의 연결까지 해 보도록 하겠습니다.

 

최근 우분투를 새로이 설치하면서 찾아본 오라클 JDK 설치 방법을 2가지로 정리 해본다.


1. PPA (Personal Package Archive) 이용


$ sudo apt-add-repository ppa:webupd8team/java
$ sudo apt-get update
$ sudo apt-get install oracle-java8-installer

2. Manual Install

  - Oracle Site에서 .tar.gz 파일을 다운로드.

     (http://www.oracle.com/technetwork/java/javase/downloads/index.html)

  - 압축 해제

$ tar zxvf jdk-8u45-linux-x64.tar.gz
$ sudo mkdir /usr/lib/jvm
$ sudo mv jdk1.8.0_45 /usr/lib/jvm

  - 명령어 등록

$ sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk1.8.0_45/bin/java 1
$ sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk1.8.0_45/bin/javac 1
$
sudo update-alternatives --install /usr/bin/javaws javaws /usr/lib/jvm/jdk1.8.0_45/bin/javaws 1

- 설치된 Java버전이 여러개인 경우 차례대로 jdk1.8.0_45 버전 선택

$ sudo update-alternatives --config java

There are 2 choices for the alternative java (providing /usr/bin/java). Selection Path Priority Status ------------------------------------------------------------ * 0 /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java 1071 auto mode 1 /usr/lib/jvm/jdk1.8.0_45/bin/java 1 manual mode 2 /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java 1071 manual mode Press enter to keep the current choice[*], or type selection number: 1 update-alternatives: using /opt/jdk1.8.0_20/bin/java to provide /usr/bin/java (java) in manual mode

$ sudo update-alternatives --config javac
$
sudo update-alternatives --config javaws

- 설치 확인

$ java -version

 

이번 글에서는 우분투 이미지를 올린 Container 에 Oracle java6 환경을 구축해 보도록 하겠습니다.

기존 sun사의 java에서 oracle로 변경 되면서 java 설치 방법이 변경되었고, 기본 패키지로 설치가 불가능합니다. 기본 패키지로 설치시에는 open jdk 설치가 가능합니다. open-jdk를 설치할 경우 호환성의 문제가 간혹 발생하여 oracle의 java 설치를 가급적 권합니다.

java6의 설치와 주 버전 선택 방법까지 알아보겠습니다.

 

  • Oracle JDK 를 Download 한다.
    • 참고로 JDK 와 JRE 와의 관계는 JDK 를 설치하면 JRE 는 깔려있다.
      • JRE 는 Java Application 을 구동하기위한 최소한의 Runtime Environment 이고, JDK 는 Java Application 을 개발하기 위한 JRE 를 포함한 Development Kit 이다.
  • JDK 를 다운받은 폴더로 이동하여 실행 권한을 준다.
    •  $ sudo chmod +x jdk-6u38-linux-i586.bin

  • JDK 파일을 실행하여 압축을 푼다.
    •  $ ./jdk-6u38-linux-i586.bin

  • JDK 압축이 끝나면 다음과 같이 JDK 압축이 풀린 jdk1.6.0_38 이란 폴더가 생긴다.
  • 생성된 폴더를 /usr/lib/jvm 폴더로 이동시킨다.
    •  $ sudo mv jdk1.6.0_38/ /usr/lib/jvm/

  • 시스템내에서 자바를 설치한다.
    •  sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk1.6.0_38/bin/javac 1

    •  sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk1.6.0_38/bin/java 1

    •  sudo update-alternatives --install /usr/bin/javaws javaws /usr/lib/jvm/jdk1.6.0_38/bin/javaws 1
  • 설치한 자바가 Default 설정이 되도록 다음과 같이 설정한다.
    •  sudo update-alternatives --config javac

    •  sudo update-alternatives --config java

    •  sudo update-alternatives --config javaws

  • 설치된 자바의 버전을 확인한다.

    •  $ java -version

  • Java Path 를 설정하기 위해서 home 에 있는 .bashrc 파일을 수정한다.
    •  $ vi .bashrc

  • 다음 구문을 추가.
    •  export JAVA_HOME=/path/your/jdk

       export PATH=$JAVA_HOME/bin:$PATH

 



클래스의 배경이 되는 여러 가지 요소들을 클래스의 기본 배경에서 알아보았다. 데이터타입, 변수, 상수, 할당을 클래스라는 관점에서 어떠한 관련이 있는지를 알아보자. 그리고 클래스의 전신이라 할 수 있는 구조체가 어떻게 관련이 있는지에 대해서 알아보고 실제 클래스가 어떻게 만들어지고
어떻게 사용되어지는지 살펴보자.
이번 글에서 소개하는 내용은 다음과 같다.
    - 클래스란?
    - 구조체로 데이터 타입을 생성하는 방법
    - 클래스로 데이터 타입을 생성하는 방법
    - 클래스만의 특징
    - 클래스 변수를 생성하는 법의 차이

클래스와 객체의 의미는 혼동되는 요소들이다. 처음으로 객체와 클래스를 접했을 때, 이 개념을 이해 하는데 거의 1년 이상 걸린다고 하다. 프로그래머로서 가장 잘 다루어야 하는 부분이지만 너무나도 간단히 책장을 넘겨버리기 때문에 대충 넘어가기 쉬운 부분이기도 하다. 프로그램을 한참 배우고 난 후, 진정한 클래스의 의미에 대해 다시 생각해 볼 때쯤에 이해 할 법한 부분이다. 보통의 자바 Beginner의 경우, 이 개념을 안다면 자바의 절반이상을 깨닫고 있다고 해도 과언이 아니다. 이 장에서 설명되는 대부분의 것들은 앞장의 데이터 타입을 습득하지 않으면 거의 이해 할 수 없게 설명되어 있다. 앞장의 데이터 타입을 한번 읽어보는 것은 좋다.

1 클래스란?

1.1 클래스란?
클래스란 새로운 데이터 타입을 만드는 데이터 타입 생성기이다. 기존의 데이터 타입을 이용하여 새로운 데이터 타입을 만들어내는 것이 바로 클래스의 역할이다. 클래스가 데이터 타입 생성기라는 말만 이해하고 있어도 많은 부분이 해결되는 느낌을 가질지도 모른다.
여러분은 지금까지 클래스로 새로운 데이터타입을 만들고 있었던 것이다. 보통 뭔가를 탐구하면서 뭘 하는지 모르고 일을 하고 있을 때만큼 답답한 순간은 없다. 자바 언어를 조금 공부해 보면 수없이 클래스를 만들고, 그 클래스로 작업을 한다. 그런데 정작 클래스가 뭘 하는 건지 모르고 작업하는 경우가 많다. 여기서 정확하게 정의를 내려 두자.

클래스는 새로운 데이터 타입을 만드는 데이터 타입 생성기이다.

이 명제는 자바뿐만 아니라 C++ 관련 언어를 한다면 누구나 다 기억해야 하는 객체지향언어의 제1조의 원칙에 해당 된다.

1.2 클래스의 지위와 구조
앞장에서 설명한 데이터 타입과 변수와 상수의 구조는 계층구조로 되어 있다. 이 구조를 알고 있다면 쉽게 클래스의 개념에 접근 할 수 있다. 그 구조를 다시 살펴보면 다음과 같다.

데이터 타입과 변수와 상수의 구조

데이터 타입

변수

상수

 무 존재

존재

실존

데이터 타입의 하위에는 변수가 존재하며 변수의 하위에는 상수가 존재하다. 각각의 역할이 없으면 프로그램은 수행 될 수 없다. 그렇다면 클래스는 어느 부분에 속하는 것일까? 위의 구조에서 제일 상위에 존재하는 것이 바로 클래스이다. 클래스는 데이터 타입의 윗부분에 자리를 차지하고 있으며
데이터 타입과 관련이 있다. 그 구조를 다시 만든다면 아래와 같이 나타낼 수 있다.

데이터 타입과 변수와 상수의 구조

클래스

데이터 타입

변수

상수

 무 존재

존재

실존

무엇에 사용하는 것이길래 제일 위에 있을까? 답은 데이터 타입을 새로 하나 만드는 역할을 담당하고 있다. 데이터 타입은 형태는 있지만 존재하지 않기 때문에 무존재라고 칭했다. 그렇지만 클래스는 그 상위레벨에 있기 때문에 아예 무에서 무존재, 즉 무형을 만드는 역할을 한다. 그래서 위의 표에서 무(無)라고 표시했다. 클래스는 신(神)이라고 생각된다. 신은 인간이라는 데이터 타입을 만들었다. 그리고 인간이라는 데이터 타입에 각각의 이름을 부여하여 하나의 객체(변수)로 만들었다. 인간이라는 데이터 타입을 만든 이는 바로 클래스이다. 그래서 클래스는 신이다. 개인적인 생각이다.!! 현재에서 가장 핵심적인 사항은 “클래스는 데이터 타입 생성기의 역할을 한다“라는 것이다. 주제는 잊지말자.

자바에서 제공하는 기본적인 데이터 타입은 int, long, float, double, char…. 등이 있는데 이러한 데이터 타입을 우리는 기본 데이터타입이라고 부른다. 기본데이터 타입의 한계는 하나의 데이터만을 넣을 수밖에 없다는 단점이 있다. 각각의 형태에 해당되는 데이터를 하나만을 담을 수 있는 것이다. 현실 세계의 데이터들은 제일 밑바닥에는 이러한 기본 데이터들로 이루어져 있겠지만 알고 보면 기본적인 데이터를 묶어서 또 다른 형태의 틀을 만든다. 예를 들어 인간이라는 데이터 타입이 있다. 이 데이터 타입의 형태는 여러분이 어렴풋이 생각하는 인간의 형태 그 자체이다. 여기에 변수를 붙이면, 즉 이름을 홍길동이라고 준다면 홍길동은 현실 세계에 공간을 차지하는 하나의 변수가 된다.
    - 인간 홍길동;

자세히 들여다보면 인간이라는 데이터 타입의 밑바닥은 변수로 이루어져 있으며, 많은 변수가 뭉쳐서 하나의 데이터 타입을 이루고 있다. 이와 같이 여러 개의 변수를 묶어서 하나의 데이터 타입으로 생성하는 역할을 하는 놈이 바로 class이다. 인간이 만들어지기 위해서는 클래스에서 아주 다양한 형태의 작업을 해주어야 하다 클래스로 간단히 인간이라는 . 데이터 타입을 만드는 것을 보여주고 있다.

인간 클래스의 디자인
    class 인간{
        String name;
        int age;
        float height;
        float weight;
        등등….
    }

이쯤에서, 다시 한번 class에 대해서 정의를 내리면, 많은 변수들이 뭉쳐서 새로운 데이터 타입을 만들어 내는 역할을 하는 것이 클래스라고 정의를 내린다. 그런데 왜 데이터가 아니고 변수일까? 그것은 인간이 태어나면 각각의 이름과 나이, 키 등을 부여 받는다. 각각이 생성되기 전 단계이기 때문에 생성되는 순간 어떠한 값이 할당 될지 알 수 없으니 즉, 데이터 타입은 형태에서 만들어지는 순간 각각 다른 값을 가져야 하기 때문에 변수의 형태로 데이터 타입 내에 들어가는 것이다.

자바에서는 클래스를 사용하지만, 자바 이전의 C 언어에서는 구조체라는 것을 사용한다. 구 조체는 자바의 전 단계에 데이터 타입을 만드는 놈이었다. 클래스의 할아버지 정도 되는 구조체의 의미를 이해한다면 클래스의 정확한 특징을 이해 할 수 있을 것이다.

1.3 결론
클래스는 데이터 타입을 만들며 그리고 데이터 타입은 변수를 생성하며 변수에는 상수를 할당할 수 있다. 클래스는 새로운 데이터 타입을 만드는 데이터타입 생성기이다. 그리고 다음 장에서 구조체와 클래스 그리고 데이터 타입 생성기라는 측면에서 클래스를 살펴보자.


2 구조체로 데이터타입을 생성하는 방법

2.1 구조체란?
구조체는 클래스가 없던 표준 C에서 시절에 새로운 데이터 타입을 만드는 역할을 담당하고 있었다. 현재 우리가 언급한 데이터 타입은 분명히 하나만의 데이터를 담을 수 있는 데이터 타입이다. “int a=3“ 이라고 했을 때 우리는 a라는 변수에 다른 수를 담고자 한다면 3이라는 값은 사라진다. 즉,
a=5라고 했을 때 a에 들어 있던 3은 없어지고 다시 5라는 수가 a의 메모리에 자리를 잡게 된다. 이러한 측면에서 기본 데이터 타입의 문제점은 단 하나의 데이터를 넣을 수 있다는 것이다. 데이터 타입이 2개의 수를 담을 수 있다고 한다면 어떨까? 표준 C(ANSI C)언어에서는 이를 구조체라는 것을 사용하여 해결하고 있다. 물론, 자바 언어에서는 사용하지 않지만 구조체의 의미는 객체 언어의 역사를 말해 주고 있기 때문에 구조체에 대해 약간의 지식을 가지고 있으면 자바 언어가 어떠한 구조로 되어 있는지 쉽게 이해 할 수 있다 . 구조체의 정확한 문법 구조는 알 필요가 없다. 단순히 아~ 이렇게 만드는구나 정도를 이해하면 된다. 일단 구조체의 예를 살펴보자.

2.2 구조체를 만드는 방법
클래스로 데이터 타입을 만든다고 했다. 구조체는 데이터타입을 생성하는 데이터 타입 생성기 역할을 하고 있기 때문에 클래스와 같은 레벨에 존재한다. 그래서 구조체는 클래스와 동급이다. 구조체는 완벽하게 클래스와 그 의미는 같다. 그리고 초기 구조 또한 클래스와 아주 흡사하다. 구조체의 위치는 아래에서와 같이 제일 위에 존재한다.

구조체, 데이터 타입, 변수, 상수의 구조

구조체

데이터 타입

변수

상수

 무 존재

존재

실존

구조체로 데이터 타입을 생성하는 예를 살펴보자.

구조체 사용의 예
    struct PERSON {
        int age;
        long height;
        float weight;
    }
        family_member;
        struct PERSON sister; // C style structure declaration
        PERSON brother; // C++ style structure declaration
        sister.age = 13; // assign values to members
        brother.age = 7; 

자바 언어는 C++의 문법 구조를 따르고 있으며 C++는 C 언어를 기반으로 하고 있다. C 언어의 구조체는 C++에 와서 완전하게 다른 모습인 class라는 이름으로 발전하여 원래의 구조체와 공존하게 된다. 현재 소개되는 C, C++문법을 잘 살펴보면 특정한 Rule을 찾을 수 있다. 그리고 이러한 Rule은 자바 언어에서도 그대로 사용하게 된다.
위의 구조체에 대한 예를 하나씩 따져 보자. 구조체라는 것은 앞에 struct이라는 키워드를 사용하며 이름을 지정하고 있다. 즉 PERSON이라는 이름으로 구조체를 만든다는 의미이다. 그리고 그 내부에는 3개의 변수를 포함하고 있다. struct 키워드를 이용하여 3개의 변수를 묶어서 PERSON이라고 부르겠다는 것이다. 하나씩 분해해서 보면 다음과 같다.

데이터 타입과 변수와 상수의 구조
    - struct : 구조체를 만드는 키워드
    - PERSON : 구조체로 만들어진 새로운 데이터 타입
    - int age : PERSON 내부의 멤버
    - int height : PERSON 내부의 멤버
    - int weight : PERSON 내부의 멤버

이 부분에서 구조체에 대해 헷갈리지 않게 이해를 잘 해야 한다. 구조체는 새로운 형태의 데이터 타입을 만드는 역할을 한다. 이러한 점에서 구조체는 클래스와 같은 역할을 한다. 여기서 PERSON은새로운 데이터 타입이며 struct은 표준 C 언어에서 제공하는 데이터 타입 생성기이다.

    - 누가 만들었을까?
      그것은 누구나 만들 수 있으며 여기서는 제가 임의의 이름으로 하나 만들었다.

    - PERSON이라는 이름은 무엇일까?
      새로운 데이터 타입의 이름이다.

    - struct는 무엇을 하는 것일까?
      새로운 데이터 타입을 만들 수 있게 해주는 키워드이다.

    - age, height, weight는 새로운 데이터 타입 내부에 존재하는 멤버이다.

정리를 해보자. 기존에는 주어진 데이터타입으로 데이터를 하나만 넣을 수 있는 변수를 선언하여 하나의 데이터만을 넣어 사용했다. 이제는 달라졌다. 구조체를 이용하여 PERSON이라는 새로운 데이터타입을 만들었으며, 그 속에는 3개의 변수를 포함하고 있으며, 3개의 변수들을 대표하는 이름을 바로PERSON으로 하겠다는 것이다.

앞에서 언급한 데이터 타입을 상기시켜보자. 데이터 타입은 어디에 사용한다고 했나? 바로 변수를 선언할 수 있다는 것이다. 위의 만들어진 데이터 타입 PERSON을 이용하여 아래와 같이 변수를 선언했다.
    PERSON brother;
이와 같이 변수를 하나 만들었을 때 메모리가 하나 생성된다. 여기서, 변수이름은 누가 뭐래도 brother이다. 하지만 아주 곤란한 문제가 발생한다. 기존의 방식대로라면 이 속에 있는 3개의 변수에 값을 넣을 수가 없다. 그래서 나온 것이 점의(.) 원리이다. 그냥 단순히 이해하자면 소속이라는 의미
이다.
    PERSON brother;
    brother.age =100
    brother.height=170L
    brother.weight=67.5F

이와 같이 사용자가 임의로 새로운 데이터타입을 만들며 그리고 그 타입을 사용할 수 있게 하는 것이 의 구조체이다 구조체의 의미는 여기까지만 ANSI C . 알아 두자. 더 이상 구조체는 자바에서 사용 되지 않는다. 하지만 이 구조체야 말로 자바 언어에 대한 핵심의 의미를 그대로 담고 있으니 그 느낌 만큼은 정확히 알아 두어야 한다.

2.3 결론
구조체가 클래스와 사용방법이 동일하다면 왜 굳이 구조체를 이용하지 않고 새로운 형태의 클래스를 만들었을까? 바로 이 차이점이 클래스만의 특징이며 객체 지향언어의 장점이다. 앞으로 구조체보다 왜 클래스가 나은가를 알게 된다면 클래스의 개념을 어느 정도 파악하고 있는 것이다.
뭐가 다른지 답부터 보고 다음으로 넘어가자. 구조체와 클래스는 데이터 타입의 생성이라는 측면에서는 같은 역할을 한다. 클래스가 구조체보다 강력한 점은 접근 제어, 상속의 개념 그리고 메서드의 활용 부분이 클래스에 추가 되었다는 점이다. 자바를 배운다는 것은 바로 클래스의 장점을 배우는 것이다.

3 클래스로 데이터 타입을 만드는 방법

3.1 배경
위에서는 구조체로 데이터 타입을 만드는 방법에 대하여 알아보았다. 이 데이터 타입을 만드는 방법을 자바의 클래스라는 측면에서 살펴보자. C 언어의 구조체와 자바의 클래스가 같은 역할을 한다면 확장된 클래스가 아닌 기본적인 자바 클래스는 구조체와 그 모습이 동일하다는 것을 밝히면서 클래스의 의미를 다시 한번 상기 시켜 보자.

3.2 클래스 만들기
먼저, 앞에서 만들어 본 구조체와 똑같은 데이터 타입을 자바 클래스로 만들어 보자. 아래의 클래스는 앞 절에서 나온 구조체와 철자도 틀린 것이 별로 없다.
PERSON.java
    public class PERSON {
        public int age;
        public long height;
        public float weight;
    }
C:\examples\1.클래스의 개념>javac PERSON.java
C:\examples\1.클래스의 개념>dir
C:\examples\1.클래스의 개념 디렉터리
2001-06-03 09:29p <DIR> .
2001-06-03 09:29p <DIR> ..
2001-06-03 09:29p 246 PERSON.class
2001-06-03 09:29p 90 PERSON.java

이 파일을 컴파일 했을 때 우리는 확장자를 .class 가진 파일을 하나 얻을 수 있다. 약간 다르긴 하지만 public을 모두 제거하고 struct 키워드를 class로 바꾼다면 모든 면에서 구조체와 똑같다. 3개의 변수를 담고 있는 새로운 데이터 타입이 만들어진 것이다.
위의 class 키워드로 만든 데이터 타입을 실제 자바로 실행해 볼 수 있는 main 메서드를 포함한 코드를 제작해 보자. 자바에서는 main 메서드를 포함하고 있는 클래스가 실행 클래스가 되며 실행은 “java 클래스의 이름“으로 하고 있다. main 메서드를 포함한 코드는 다음과 같다.

Test3.java
    public class Test3 {
        public static void main(String[] args) {
            PERSON brother = new PERSON();
            brother.age =100;
            brother.height = 170L;
            brother.weight = 67.0F;
            System.out.println("age:" + brother.age);
            System.out.println("height:" + brother.height);
            System.out.println("weight:" + brother.weight);
        }
    }
    C:\examples\1.클래스의 개념>javac Test3.java
    C:\examples\1.클래스의 개념>java Test3
    age:100
    height:170
    weight:67.0

구조체와 클래스의 차이점은 현재의 자바 소스에서는 전혀 찾아 볼 수 없다. 아직 클래스의 장점들이 나타나고 있지 않기 때문에 별다른 차이점을 느끼지 못할 것이다. 하지만 그 차이점들이 객체 지향언어의 매력이라는 것을 미리 짐작 할 수 있을 것이다.

이제, 클래스와 구조체를 비교해 보자. 아래의 표는 클래스와 구조체의 비교를 잘 보여 주고 있다.

클래스와 구조체의 비교

클래스

구조체

종류 

클래스

클래스로 만든 데이터 타입

클래스 변수

상수

구조체

구조체로 만든 데이터 타입

구조체 변수

상수

무 존재

존재

실존


이 표에서 나타내고자 하는 것은 클래스와 구조체는 차이가 없다는 것이다. 클래스는 구조체의 복사 판일 정도로 그 개념은 비슷하다.

3.3 결론
결론적으로, 클래스는 구조체를 발전시켜 만든 것이라고 봐도 될 것이다. 여기서 클래스는 당연히 최고 상위에 존재하는 신적인 존재이며 객체 지향적인 개념에서 새로운 데이터 타입을 만든다는 것은 당연한 일이지만 고전 프로그래머에게는 약간 생소한 접근 방식일 수도 있다. 그렇다면 과연 차이점은 무엇일까? 그 차이점이 자바의 큰 힘이며 매력인 것이다. 다음 장에서는 클래스와 구조체의 차이점인 클래스만의 특징을 알아보자.

4 클래스만의 특징

4.1 클래스만의 특징 소개
구조체에는 없지만, 클래스에만 있는 특징이 바로 클래스와 구조체의 차이점이다. 클래스만의 특징은 아주 다양하게 열거할 수 있지만 구조체와의 차이점에서 찾아 볼 수 있는 단순하면서 중요한 개념들만 열거한다면 다음과 같다.
구조체와 다른 클래스만의 특징들
    - 선언과 메모리 할당
    - 데이터의 접근 방법(private와 public)
    - 멤버로 메서드 포함
    - 상속의 개념 적용

간단해 보이지만 자바 언어의 모든 특징을 전부 내포하고 있다. 메모리의 할당의 문제는 어차피 구조체이든 클래스이든 만들어지면 변수를 선언하고 메모리를 할당해야 하는 것은 마찬가지이다. 사용 방법만 약간 다를 뿐이다. 데이터의 접근과 메서드의 포함, 상속개념의 적용은 기존의 절차적 프로그래밍 기법에 반기를 드는 혁명적인 일이다. 클래스의 특징들을 알아보자.

4.2 클래스의 특징들
기본적으로 구조체에서는 메서드를 포함하지 않고 일반적인 데이터타입의 변수를 포함할 수 있다. 하지만 클래스는 한 단계 더 나아가 메서드까지 포함하고 있다. 그리고 구조체로 새로운 데이터 타입을 만들었다면 새로운 데이터 타입 내에 들어 있는 모든 요소들은 기본적으로 public이다. 하지만 클래스에서는 private와 public의 차원에서 접근제어를 구분하고 있다. 점찍고 값을 할당할 수 있다면 public이고 없다면 private이다. 마지막으로 상속의 개념은 클래스만의 막강한 힘을 주고 있다. 만들어져 있는 데이터 타입에 대한 재사용이란 측면에서 상속은 꿈의 기술이다.
C++ 언어의 창시자인 Bjarne Stroustrup은 여러 개의 변수를 조합하여 많은 양의 데이터를 담을 수 있는 새로운 데이터 타입을 만드는 방법을 제안하였으며, 그것을 확장하여 변수들의 관계를 정의하는 메서드를 포함시킴으로써 새로운 모델을 만들었는데 이것이 바로 클래스이다. 그리고 각각의 데이터 타입들간의 상속구조를 포함시키면서 Object Oriented Programming 기법의 발전된 모델을 제시하고 있다.

4.3 결론
클래스 내부에 접근제어, 메서드, 상속의 개념이 들어가면 그 규칙을 유지하고 지키기 위해서 보다 복잡한 객체개념이 들어가게 된다. 클래스 구조를 유지하기 위한 규칙을 배우는 것이 바로 자바 언어를 배우는 것으로 보아도 될 것이다. 앞으로 여러분들은 접근제어, 메서드 그리고 상속을 활용하여 새로운 클래스를 디자인하고 그 클래스를 잘 사용하는 방법, 즉 다른 사람들이 만들어 둔 클래스를 활용하여 자신의 클래스로 확장하는 방법을 배우게 된다.

5 클래스 변수를 생성하는 방법의 차이
5.1 서론
구조체와 클래스의 차이점 중 여기서는 변수를 생성하는 방법의 차이에 대하여 알아보자. 구조체와 클래스는 생성하는 방법에 있어서 차이점을 보인다. 아주 기본적인 사항이지만 클래스를 알겠다고 한다면 이것을 무시할 수는 없다.

5.2 클래스 변수를 생성하는 법
일단 구조체와 클래스의 생성의 방법의 차이점에 대해서 알아보자. 구조체와 클래스의 생성방법은 아래와 같다.

사용자 정의 데이터 타입의 생성하는 방법

구조체 변수의 생성 클래스 변수의 생성

PERSON brother;

PERSON brother =  new PERSON()

이 두 가지에 분명 다른 방법을 사용하고 있다. 구조체에서는 선언만 해 주었다. 하지만, 클래스에서는 new 연산자라는 것을 사용하고 생성자 메서드를 명시해 주어야 한다.

자바의 클래스 개념에서는 반드시 연산자로서 new 메모리를 생성하는 부분이 나와야 한다. 만약 “PERSON brother“처럼 단순히 선언만 해 준다면 절대 메모리는 생성되지 않는다. 이것은 기존의 C와 C++의 차이점이다.
참고로 C++ 언어에서는 new를 했다면 반드시 delete를 해서 메모리를 해제해 주어야 하지만 자바 언어에서는 이것을 쓰레기 수집기를 사용하여 메모리를 자동으로 해제 해 주기 때문에 delete 연산자는 사용하지 않는다.
생성자 메서드라는 것을 호출해 주어야 하는데 이 생성자 메서드는 무조건적으로, 반드시 호출해 주는 것을 원칙으로 한다. “PERSON()“이란 놈이 바로 생성자 메서드인데 여기서는 생성자 메서드라고만 언급하고 다음의 The Class에서 아주 심도 깊게 다루게 될 것이다. new와 생성자 메서드의 기능은 new 연산자를 이용하여 메모리를 생성하고 생성자 메서드를 이용하여 멤버필드의 초기화 작업을 해 주는 것이다. 자바에서 사용하는 클래스에 대한 변수선언을 하는 부분인 “PERSON brother =
new PERSON()“을 분해 해 보면 다음과 같다.
자바 클래스 데이터 타입의 변수 선언과 메모리 할당
    - PERSON : 클래스로 생성한 데이터 타입
    - brother : PERSON 데이터타입으로 선언한 변수
    - new : 메모리를 생성하는 연산자
    - PERSON() : 메모리 생성 후 초기화 작업을 담당하는 생성자

아주 간단하다. 하지만 보통의 책에서는 그냥 new라고 설명하고 있으며 생성자 메서드와 같이 사용 한다고 되어 있지만 그 내부의 의미는 아주 조직적이다. 이 부분은 뒤에 new 연산자와 생성자 메서드를 다룰 때 자세하게 언급하도록 하겠다.

5.3 결론
이 절에서는 클래스 변수를 만드는 방법에 대하여 알아보았다. 클래스는 변수이름만 주는 것이 아니라 new를 이용하여 메모리까지 생성 시켜주어야 한다는 것을 배워 보았다. 이점에서 클래스는 기존의 언어에서보다 메모리의 핸들을 보다 더 정확하게 하겠다는 의미를 내포하고 있다. 그리고 메모리가 있느냐 없느냐는 자바를 공부할 때 아주 중요한 부분을 차지한다. 프로그램할 때 가장 많이 접하게 되는 에러가 바로 메모리가 없다는 Null Point Exception이다. 이 에러는 객체에 메모리가 없는데 사용하였다는 에러이다. 이것은 프로그램을 보다 명확하게 해주는 역할을 한다.

6 마무리
자바의 가장 기본적인 원리인 데이터 타입의 이용, 변수의 선언, 메모리의 할당 그리고 초기화 작업을 한꺼번에 전부 보여주는 부분이 바로 “PERSON brother = new PERSON()“이라는 한 줄의 소스이다. 이 글에서 설명할 수 있는 클래스의 기초 개념 또한 포함하고 있기 때문에 여러분은 이 한 줄의 의미를 제대로 아는 것이 무엇보다 우선한다. 클래스의 특징인 선언과 메모리의 할당이라는 관점에서 클래스의 특징을 먼저 알아보았으며 다음 장으로 넘어가면서 데이터의 접근제어(private와 public), 멤버로 메서드 포함에 대해서 자세하게 알아본다. 구조체와 구별되는 클래스의 접근제어와 클래스내의 메서드 포함은 3장의 The Class에서 상세하게 다루게 될 것이며, 4장에서는 상속과 함께 클래스의 재사용이라는 측면에서 클래스의 개념을 배우게될 것이다. 3, 4장에서 진정한 클래스의 느낌을 얻어보자.

객체 지향 언어인 자바를 시작하면서 제일 먼저 접하게 되는 것은 바로 객체와 클래스라는 단어이다. 이 두 단어는 객체지향언어의 기본이며 가장 중요한 부분이기 때문에 올바른 클래스의 배경 지식 없이 접하게 된다면 자바는 점점 어려워진다.
먼저, 클래스의 개념을 파악하기 위해서는 데이터타입, 변수, 상수의 의미를 제대로 아는 것이 중요하다. 그리고 변수와 상수의 관계에서 나타나는 할당의 법칙을 이해함으로서 각각의 관계에 대하여 안다면 우리는 언어적인 기초를 가지고 있다고 할 수 있다. 이러한 면에서 지금부터 하는 내용은 아주 기초적인 사항들이다. 그 기초적인 개념들은 아래와 같다.
    - 데이터 타입
    - 변수
    - 상수
    - 할당의 법칙
각각의 내용들은 클래스의 개념 이해를 돕기 위한 언어적인 기초를 설명하고 있으며 이들을 이용해서 클래스와 객체라는 단어에 점차적으로 접근하고 있다. 클래스라는 것은 새롭게 탄생된 것이 아니라 기존 언어를 바탕으로 하여 보다 효율적인 방법론을 제시하고 있기 때문에 컴퓨터 언어의 배경지식을 습득한다면 클래스의 개념을 보다 효율적으로 이해할 수 있다.
어떻게 보면, 이것은 모든 컴퓨터 언어 설명서에서 가장 정확하게 설명하려고 하는 부분이다. 하지만 정확한 뜻을 파악하기 힘든 것은 언어적인 배경에 대하여 약간은 등한시하는 분위기가 있고, 이미 알고 있다는 전제 하에 설명이 이루어지고 있기 때문이다. 그래서 클래스라는 단어가 컴퓨터 언어에서 어떻게 만들어졌는지 밑바닥부터 따져 보고자 한다.


1 데이터 타입이란?

1.1 데이터 타입의 의미?

데이터 타입이란 자료의 형태를 의미한다. 현실 세계에 존재하는 모든 데이터들은 그 나름대로 의미가 있고 어느 정도 사람이 알 수 있는 구분이 있다. 이러한 실세계의 데이터들이 컴퓨터에 사용될 때에는 더 명확하게 구분된다. 데이터의 형태들이 모호하면 컴퓨터가 헷갈리기 때문이다. 데이터를 분류하는 방법이란 것은 컴퓨터 언어에 정의되어 있으며, 그 분류 원칙에 따라 데이터를 사용하게 된다. 컴퓨터 내에 데이터를 구분하는 방법을 제시해 주고 있는 것이 바로 데이터 타입이다. 그래서 데이터 타입을 자료에 대한 형태를 지정해주는 것이라고 부를 수 있으며, 영어 철자 그대로 Data Type이라고 부른다.


기본적인 데이터 타입들은 언어의 컴파일러를 만든 사람들이 구분 짓고 있다. 기본적인 구분은 수와 문자의 분류이며 수는 정수와 실수로 구분되고, 정수는 작은 수와 큰 수 그리고 실수는 정밀한 실수와 덜 정밀한 실수로 나누고 있다. 이러한 구분은 일반적으로 컴퓨터 내에서 하나의 데이터를 표현하기 위해서 어느 정도의 메모리를 사용하고 있느냐에 따라 분류된다. 그리고 각각의 구분법은 이미 언어 내에 정의되어 있으며 우리는 그 규칙을 지키면서 사용하여야 하다. 그렇다면 데이터 타입이 어떠한 역할을 하는지 정확하게 따져 보자.

1.2 데이터 타입의 역할

데이터라는 관점에서 두 가지 분류를 할 수 있다. 즉, 다음과 같이 데이터를 구분 짓는 데이터 타입과 데이터 자체로 나눌 수 있다.
    - 데이터 타입
    - 데이터
자바에서 사용되는 데이터 타입은 수를 표현하는 int, long, float, double 등, 문자를 표현하기 위한 char 그리고 참과 거짓을 표현하기 위한 boolean이 있다. 이러한 데이터 타입을 사용하는 것은 그렇게 어렵지 않다. 단지 어떤 식으로 사용하느냐가 문제이다. 간단하게 정의를 내린다면, 데이터 타입은 데이터의 형태가 이렇다고만 지정할 뿐 그 자체를 사용하는 것은 아니다. int 자체를 사용할 수는 없다. 데이터 타입은 저 혼자서 아무 일도 할 수 없다.
데이터는 보통 우리가 말하는 정보 그 자체이다. 예를 들어, 3은 데이터이다. 그리고 ‘a‘라는 문자 또한 데이터이다. 이러한 데이터를 구분 짓는 것이 바로 데이터 타입이다.
데이터타입의 쓰임새와 데이터의 관계는 다음과 같다.
    - 변수에 데이터의 형태를 지정한다.
    - 데이터 타입은 변수를 만드는 역할을 한다.
    - 데이터 타입이 지정되어진 변수에는 데이터를 넣을 수 있다.
데이터 타입은 모양만을 지정하기 때문에 데이터 타입 스스로 아무 일도 할 수 없다. 말 그대로 형태만 있을 뿐 보이지도 않고 스스로 존재할 수도 없는 아주 불쌍한 놈이다. 일단, 자바에서 사용되는 데이터 타입이 어떤 것이 있는가를 보고 넘어가자. 자바 언어에서 사용하는 대표적인 데이터 타입은 다음과 같다.

 

 정수형

실수형 

 문자형

 논리형

데이터 타입

int

long

float

double

char

boolean

데이터

0

0L

0.0f

0.0d

'a'

false

byte 수

4

8

4

8

2

1

이 이외에도 약간씩 변형된 기본 자료형이 몇 가지 더 존재한다. 위의 표에서 알 수 있듯이 데이터 타입은 데이터의 분류법이다. 그런데, 이상하게도 각각의 데이터 타입에 "byte 수"라는 것을 표시하고 있다. 이 의미는 “데이터 타입은 변수에 데이터의 형태를 지정한다. 데이터 타입은 변수를 만드는 역할을 한다”라고 말한 부분과 관련이 있다. 하나의 변수를 만드는데 그냥 만들 수는 없다. 즉, 컴퓨터내에 사용할 변수를 만드는데 그 변수에 어떠한 데이터가 들어 갈 수 있는지는 명시해야 하지 않을까 그래서 변수를 만들 때 어떠한 데이터가 들어가며 ? 메모리는 몇 바이트나 차지하는지를 명시해주는 것이다. 메모리를 차지하는 바이트 수는 데이터 타입에 따라 다르게 지정된다.
데이터 타입은 형태이기 때문에 모양만을 가지고 있다. 실제 사용하기 위해서는 다른 방법을 사용한다. 이미 설명했듯이 변수라는 것을 사용한다. 컴퓨터의 메모리 속에서 형태 그 자체만으로는 아무런 의미가 없다. 형태에 이름을 부여한다면 컴퓨터의 메모리 속에서 특정한 형태의 메모리가 생성되며 이 메모리를 가르키는 이름이 바로 변수가 된다. 그래서 데이터 타입은 변수를 만드는 일을 한다고 한 것이다.
정리를 해 보자. 데이터 타입은 형태만을 나타낼 뿐 메모리 속에서는 존재할 수 없다. 존재할 수 없다는 것은 답답한 일인데 이것을 존재하게 만들 수 있도록 만드는 방법은 바로 변수라는 것을 만들어 존재하게 한다. 이름을 주는 것이다. 데이터 타입이 하는 일은 바로 변수를 생성하는 일이다. 어떠한 모양의 변수를 만들지를 결정하는 것이 바로 데이터 타입을 결정하는 일이다. 아래의 예제에서 int a라고 한 부분에서, int는 데이터 타입이 된다. 그리고 a는 변수이다. 이렇게 하면, int 모양의 메모리를 가진 a라는 이름의 변수가 생성되어지고 이제부터 a에는 int 모양의 값을 넣을 수 있다. 데이터 타입에 관련된 간단한 예제를 하나 살펴보자.

1.3 Test.java
변수의 개념을 설명하기 위한 예제

    public class Test1{
        public static void main(String[] args) {
            int a = 1; // int type의 a 변수선언
            int b = 2; // int type의 b 변수선언
            int c = a + b; // int type의 c 변수선언
            System.out.println("a b 의 합은 : " + c); // c의 결과 출력
        }
    }

   이 예제를 컴파일 후 실행하면 다음과 같은 결과가 나올 것이다.

   a b 의 합은 : 3

이 예제는 데이터 타입이 존재하는 방식을 증명해 주고 있다. a, b, c는 int 형태의 데이터 타입이며 a, b, c라는 이름으로 메모리에 존재하게 되는 것이다. 이것은 아주 간단해 보이지만, 데이터 타입을 사용하는 방법을 잘 보여 준다. 먼저 변수 이름을 정하기 전에 타입을 명시해 준 후 개별적인 이름을 부여하고 있다. 이름은 어떻게 부여하느냐? 사소한 규칙 몇 가지만 지킨다면 이것을 만드는 사람 임의로 만들 수 있다. 그리고 int a라고 한다면, int 타입의 4바이트의 메모리가 a라는 이름으로 생성이 되었다는 것을 의미한다. 그리고 다시 b, c라고 했기 때문에 전체 12바이트의 메모리를 할당한것이다.

1.4 결론
결론적으로 데이터 타입 변수 데이터의 관계는 필연적인 관계이다. 데이터 타입은 변수를 생성하는일이다. 변수를 생성할 때 데이터 타입은 어떠한 형태의 변수를 지정할 지, 몇 바이트나 되는 메모리를 할당할 지를 결정하는 역할을 한다. 그리고 만들어진 변수에는 데이터를 넣는다.
데이터 타입에 대해서 자세하게 설명을 붙이는 이유는 다른데 있다. 지금까지는 만들어져 있는 데이터 타입만을 사용했다. 그런데, C++이후의 언어에서는 우리가 직접 만든 데이터 타입을 사용하게 된다. 이것을 사용자 정의 데이터 타입이라 부르며 자바에서는 클래스라고 부른다.
자바 프로그래머를 시작하는 대부분의 사람들이 데이터 타입의 역할을 이해 못하고 있고, 데이터 타입을 제대로 이해한다고 해도 많은 혼선을 경험하고 있기 때문에 데이터 타입에 대하여 정확한 설명을 붙이고 있다. 참고적으로, 이 데이터 타입의 의미는 모든 언어에 공통적으로 사용되는 아주 기본적인 사항이다. 이것만을 알고 들어가도 자바는 쉬워진다.


2 변수

2.1 변수란?
변수란 데이터를 담을 수 있는 그릇이다. 데이터 타입이 변수를 만든다면 변수는 그 속에 데이터 타입에 명시된 형태의 데이터를 담을 수 있다. 데이터 타입으로 변수를 만든다는 것은 메모리 속에 데이터 타입에서 명시한 모양의 메모리를 생성할 수 있다. 그리고는 그 메모리에 어떠한 데이터를 넣는데, 그 데이터는 데이터 타입에 명시된 데이터라야 된다는 것이다. 이것을 정리하면
    - 데이터 타입이 변수를 만들 수 있다.(변수 생성)
    - 변수가 만들어진다는 것은 메모리 생성의 의미이다. (변수 생성 = 메모리 생성)
    - 생성된 변수에는 해당 데이터 타입의 데이터를 넣을 수 있다.(할당)

이러한 방식으로 데이터, 데이터 타입의 중간자 역할을 하는 변수 그리고 데이터 타입으로 세분화시켜 볼 수 있다.

2.2 변수의 존재
변수는 데이터타입 없이는 홀로 존재할 수 없다. 즉, 데이터타입이 자신(변수)의 형태를 지정해 주기 때문에 존재하는 것이다. 이것은 반드시 지켜져야 되는 규칙이며, 이 규칙을 깨는 법은 절대 용납되어서는 안 된다고 생각하면 된다. 데이터타입의 허락을 얻어야만 하나의 변수로서 역할을 할 수 있으며, 변수는 메모리에 존재의 의미를 그대로 담고 있다. 데이터타입은 홀로 메모리를 생성 할 수 없는 불쌍한 놈이다. 자신이 존재하기 위해서는 변수라는 것을 통해서 자신의 형태를 존재하게 하는것이다.
철학적으로 정리를 해 보자. 데이터타입은 모양만을 가지고 있는 무존재이며, 변수는 데이터타입을 정해주면 메모리에 존재할 수 있는 존재의 의미를 담고 있다. 이것을 잊어버리면 거의 프로그램을 만든다는 의미는 없다고 봐도 과언이 아니다. 보통의 변수가 존재하는 법은 다음과 같다.

2.3 변수의 생성
    int x;
    int a, b;
    long z;
앞에서 언급한 것과 같이 데이터타입 변수명 의 “ “ 형식을 따르게 된다. 이러한 방식으로 데이터 타입과 변수를 사용하는 것이다. 한번 더 밝혀 두지만, 데이터타입 혼자서만은 아무 것도 할 수 없으며 변수가 존재하기 위해서는 반드시 데이터 타입을 지정해야만 한다. 이것은 불변의 규칙이다.

2.4 결론
변수를 만드는 이유는 데이터를 보관하기 위해서 이다. 데이터 타입으로 변수를 만들며, 변수는 데이터를 담을 수 있는 그릇의 역할을 하다. 변수에 아무 것도 넣지 않으면 필요가 없다. 그렇다면 뭔가를 변수에 넣어야 변수의 역할을 하게 된다. 데이터 타입은 단순히 해당하는 형태의 메모리를 생성할 뿐 더 이상의 일은 하지 않고, 변수는 데이터를 보관할 수 있는 일을 한다. 여기에 들어가는 데이터는 반드시 변수를 만들 때 명시한 데이터 타입에 맞는 데이터의 형을 넣어야 한다는 것이 핵심이다.
변수는 데이터타입의 주어진 형태대로 메모리를 생성한 후 컴퓨터 내에 존재하며, 변수가 생성 된 후에는 주어진 형태에 맞는 데이터를 넣을 수 있다. 그리고 변수를 아무리 많이 만들어도 어떠한 데이터를 넣지 않으면 필요가 없다. 이 데이터는 변수를 만들 때 사용한 데이터타입에 맞는 형의 데이터를 넣어야만 한다는 것은 모든 언어의 아주 기본적인 특징이다. 계속해서, 우리는 변수에 들어가는 데이터이라는 측면과 특정 데이터를 변수에 넣는 방법이라는 측면에서 상수와 할당이라는 것에 대해 자세히 알아보자.

3 상수

1.3.1 상수란?
상수는 그 자체가 데이터라는 것을 의미한다. 다른 말로 하면 상수는 항상 수, 항상 데이터라고 할 수 있다. 변수의 의미는 데이터를 보관하는 일이지만 데이터 그 자체를 말할 때 우리는 상수라는 단어를 사용한다. 상수가 데이터라고 한다면 당연히 자료의 구분 즉, 데이터 타입의 분류가 있다. 모든
자료는 데이터 타입의 관점에서 분류할 수 있으며 분류에 따른 표현법도 있다. 이러한 분류법과 표현법에 따라서 해당 데이터 타입에 관련된 각각의 상수들이 존재한다. 물론 이렇게 세분화시켜서 분류하는 이유는 바로 보다 인간보다 컴퓨터가 더 까다롭기 때문이다. 컴퓨터는 정확하게 가르쳐주지 않으면 모르는 바보이다.

3.2 상수의 분류와 표현
자료의 데이터 타입에 따른 분류와 표현은 아주 간단하다. 앞에서 배운 데이터 타입, 그 자체가 분류가 되며 그 분류에 따라서 표현되어지는 방법이 다르다. 이것을 구분 지어보면 다음과 같다.

데이터의 분류와 표현법

 

정수형

실수형

문자형

논리형

데이터타입

int

long

float

double

char

boolean

byte 수

4

8

4

8

2

1

표현법

0, 100

100L

0.0f

0.0d

'a', 'c'

false, true

 * float d = 0.0f; // f를 붙이지 않으면 디폴트로 double이 된다.

변수에 할당하는 상수의 표현
    - int : 10진수로 표현
    - char : 작은 따옴표로 묶는다.
    - long : 숫자 뒤에 l(영문자L)을 붙인다.
    - float : 숫자 뒤에 f를 붙인다.
    - double : 숫자 뒤에 d를 붙인다.
* int형과 long형 모두 1이라는 숫자를 포함하고 있다. 이러한 구분을 하기 위해서 상수 뒤에 형에 맞는 문자를 붙이게 된다. float형과 double형도 같은 원리에 의해서 구분된다.

위의 표에서와 같은 표현법을 사용해서 상수를 표시하고 그 상수를 적절한 데이터형에 맞는 변수에 넣어야만 프로그램 언어에서 컴파일할 때 에러가 나지 않는다. 이 형에 대한 컴파일러의 점검은 아주 엄격하며, 이 규칙을 무시하고 사용했을 때는 컴파일러는 언제나 그런 것처럼 무차별적으로 에러를 발생시킨다.
‘a’, ‘b’, ‘A’, ‘B’ 등의 아스키코드와 1, 100, 200등의 정수 그리고 0.01f와 같은 실수는 프로그램 상에서 인식할 수 있는 상수이다. 이러한 상수의 개념은 이미 만들어져 있는, 우리가 바꿀 수도 없다는 의미에서 상수라고 부르기도 한다.
상수의 진정한 의미에 대해 한번 생각 해 보고 넘어가자. 상수는 그 자체가 수이며 내가 만든 것이 아니라 이미 만들어져 있는 것이다. 이미 만들어져 있는 것이라는 의미는 내가 만든 것이 아니며 내가 바꿀 수도 없는 것이라고 생각하면 된다. “100은 내가 만든 것이 아니며, 이미 존재하는 것이며,
내가 바꿀 수 없다”라는 말은 참이다. 일반적으로 우리가 알고 있으며 바꿀 수 없는 그러한 데이터를 상수라고 한다.
컴퓨터의 컴파일러는 이미 이러한 상수의 개념을 가지고 있다. 당연히 1, 2, 3, 100, 1000, 같은 수를
이미 알고 있으며 이것을 사용하여 계산을 한다. 즉 상수는 그 자체가 데이터의 의미를 담고 있으며 이 데이터는 바꿀 수 없는 진리의 데이터를 말한다.
상수의 느낌은 다음과 같다. “나무“라는 데이터가 있다. 물론, 이것은 스트링형의 데이터이다. 이제부터 “나무“를 “바보나무“라고 하겠다고 한다면, 어떻게 될까? 아마 현실세계에 이렇게 주장하고 다닌다면, 정말 바보 취급을 받을 것이다. 100이라는 숫자 형태의 데이터가 있다. 지금부터 100을 1000이라고 하겠다고 주장한다면 이 또한 같은 일이 발생한다. 결론적으로, 상수는 절대 바꿀 수 없으며, 그 자체로 데이터의 의미를 담고 있으며, 미리 우리가 알고 있는 진리라고 할 수 있다. 바로 이러한 면이 상수의 느낌이다.
앞에서 이미 언급했지만 데이터 타입은 무 존재로서 결코 혼자서는 존재할 수 없으며 이것이 존재하는 방식은 변수의 방식으로 존재하게 된다 이 존재의 . 공간에 담을 수 있는 데이터를 우리는 상수라고 부르며 상수 자체는 이미 존재하고 있는 실존의 의미를 담고 있다. 이러한 원리를 아래의 표와
같다.

종류

 존재여부

데이터 타입

변수

상수

 무 존재

존재

실존

컴퓨터 언어를 배우면서 이러한 아주 단순한 원리를 거의 무시하기 때문에 처음 접하는 이들이 당황하고 결코 쉽게 느낄 수 없을지도 모른다.

3.3 결론
데이터 타입은 변수를 생성하여 존재하게 하고, 존재하는 변수의 빈 그릇에는 상수를 넣는 것, 이것을 다시 컴퓨터의 언어와 연결하여 나타내면 다음과 같다.

int a = 3; 에 대한 분류

종류

존재여부

예 

데이터 타입

변수

상수

무 존재

존재

실존

int

a

위의 표에 표시되어 있는 “int a = 3;“에서 우리는 데이터 타입과 변수, 상수의 사용을 정확하게 볼 수 있다. 데이터 타입 int라는 것으로 변수 x를 선언하였으며 x에는 3을 할당하고 있다.
이쯤에서, 우리는 변수와 상수사이의 또 다른 관계를 찾아 볼 수 있다. 변수에 데이터를 넣은 방법이라는 관점에서 본다면, 우리는 이것을 할당이라는 말을 사용한다.

4 할당의 법칙

4.1 할당이란
변수에 데이터를 넣는 것을 할당(assignment)이라고 한다. 할당의 법칙은 변수를 선언하고 난 후, 변수에 값을 넣는다라고 말할 수 있다. 이때 이용되는 연산자가 바로 “=“ 연산자이다. “=“ 연산자는 직접 할당의 의미를 가지고 있으며 이것은 변수에 값을 넣는다는 의미를 가지고 있지만 “=“ 자체에서 풍기는 맛은 바로 데이터 타입에 맞는 타입의 값을 할당해 달라는 의미를 가지고 있다.

4.2 할당의 기본 법칙
변수에 상수를 할당하는 방법론도 여러 가지 방식으로 가능하다. 이러한 방법을 알아보자.
가장 기본적인 방법론은 다음과 같다.
    - 오른쪽에서 왼쪽으로만 할당 가능하다.(절대적)
    - 변수끼리도 할당 가능하다.(오른쪽에서 왼쪽으로 할당)
    - 변수에 이미 상수가 존재하더라도 다른 것을 할당하면 마지막에 할당한 것이 할당된다.

우리는 쉽게 할당을 하지만 그 기본원리는 항상 있기 마련이다. 위의 규칙은 너무 단순하면서도 꼭 지켜지고 있는 규칙이다. 위의 규칙을 이용한 몇 가지 예를 살펴보자.

할당의 예
    - 선언과 할당을 동시에 : int a = 100
    - 선언과 할당을 분리 : int a; a=100
    - 여러 개를 동시에 선언과 할당 : int a=100, b=200;
    - 분리하여 여러 개를 동시에 선언과 할당 : int a, b; a=100, b=200;
    - 변수끼리의 할당 : int a=100, b; b=a;

위의 수식에서 우리는 지금까지 설명한 모든 것을 다 밝히고 있다. 선언하는 방법과 선언과 동시에 할당하는 방법 등.... 할당과 선언의 방법이 몇 가지 존재하지만 모두 같은 방식이며 일정한 규칙을 따르고 있다. 만약 다음과 같은 예를 본다면 할당의 완전한 법칙을 이해 할 수 있을 것이다.
할당의 기본 법칙의 예
    int sum = 100;
    sum = sum + 200 ;

위의 예에서 sum은 왼쪽과 오른쪽 모두 존재한다. 하지만 오른쪽에서 왼쪽으로 할당되기 때문에 “sum + 200“이 먼저 작업이 이루어진 뒤, 최종적으로 sum에 처리된 결과가 할당되는 것이다. 이러한 원리에 따라 처리하면 결과 값은 당연히 300으로 나오는 것을 짐작할 수 있을 것이다.

4.3 할당에 관련된 implementation
다음의 예제는 0부터 99까지의 합을 출력하는 프로그램이다. sum 변수와 i 변수의 역할을 지금까지 내용을 생각하며 관찰해 보자.
할당을 이해하기 위한 예제
    Test2.java
    public class Test2 {
        public static void main(String[] args) {
            int sum = 0;
            for (int i=0;i<100 ;i++ ) {
                sum = sum + i;
            }
            System.out.println("sum은 :" + sum);
        }
    }

sum은 :4950

4 마무리

데이터 타입(Datatype)이란 데이터에 대한 형태를 의미한다. 수많은 프로그래밍 도서등에서 같은 말을 반복하고 있지만 여전히 그냥 넘어가는 부분일지도 모른다. 데이터 타입, 변수, 상수의 관계를 확실히 이해한다면 자바 언어 자체를 편하게 이해 할 수 있을 것이다. 그 다음으로 변수와 상수에 대해 알아 보았으며, 마지막으로 변수와 상수의 관계에서 나타나는 할당이라는 것을 알아보았다.

이로써 클래스의 배경이 되는 몇 가지 기초 상식에 대해서 알아 보았다. 기초라고 해서 얕보기 쉬운데 약간의 자바 경험이 있다면 이 부분이 얼마나 무시하기 힘든 부분인지 정확하게 알게 될 것이다. 클래스의 배경에 대해서 설명하는 것은 클래스 그 자체를 설명하기 위해서는 데이터 타입과 변수, 상수, 할당의 개념을 반드시 이해해야 하는 내용이기 때문이다.

자바를 비롯하여 다른 어떤 언어를 시작한다고 해도 이 글과 다음 글에 있는 개념은 꼭 알려 주고 싶은 정보이다.

※ 정보보안기사에 나오는 법 종류

- 정보통신망 이용촉진 및 정보보호 등에 관한법률(줄여서 정보통신망법 또는 망법 / 개인 정보보호, 기타 정보보호에 관한 조항만)

-- 개인정보 기술적/관리적 보호조치 기준(2012/08/23) : 걍 참고만

- 정보통신기반 보호법

- 정보통신산업 진흥법

- 전자서명법

- 개인정보보호법

-- 개인정보의 안전성 확보 조치 기준(2014-229호)

- 우리나라 법률 정보는 국가법령정보센터(http://www.law.go.kr/main.html)에서 쉽게 열람가능!! PDF로도 추출가능

 



2. 정보보호 관련법규(6문제/20문제)

(1) 정보통신망 이용촉진 및 정보보호 등에 관한 법률(※ 개인정보보호, 기타 정보보호 관련조항에 한정)

1) 용어의 정의

- 정보통신망

- 정보통신서비스

- 정보통신서비스 제공자

- 이용자

- 전자문서

- 개인정보 : 생존하는 개인에 관한 정보로써(성명/주민번호 등), 특정한 개인을 알아볼수 있는 부호/문자/음성 등의 정보

-- 각각 정보 하나하나로 개인을 구분못해도, 다른 정보와 결합해 구분이 가능하면 그것도 개인정보

- 침해사고 : 해킹/바이러스 등으로 정보통신망 또는 관련된 정보시스템을 공격하는 행위

- 정보보호산업

- 전자적 전송매체


2) 정보통신망이용촉진 및 정보보호 등 시책

- 미창부장관 또는 방통위는 정보통신망 이용촉진 및 안정적 관리 운영과 이용자의 개인정보보호 등을 통해  정보사회의 기반을 조성하기 위한 시책을 마련해야 함

-- 정보통신망에 관련된 기술의 개발/보급

-- 정보통신망 표준화

-- 정보내용물 및 11조에 따른 정보통신망 응용서비스의 개발 등 정보통신망의 이용 활성화

-- 정보통신망을 통하여 수집/처리/보관/이용되는 개인정보 보호 및 그와 관련된 기술의 개발 보급

-- 정보통신망에서의 청소년 보호

-- 정보통신망의 안전성 및 신뢰성 제고

-- 그 밖의 정보통신망 이용촉진 및 정보보호 등을 위하여 필요한 사항

- 미창부장관과 방통위가 위에 제시한 시책을 만들 때, 국가정보화기본법 제6조에 따른 정보화 기본 계획과 연계되도록해야함


3) 개인정보보호 / 4) 정보통신망의 안정성 확보 / 5) 정보통신망 침해행위

- 개인정보보호법과 유사하지만 차별적인 요소가 있음

- 개인정보수집/이용 및 제공(22조)

-- 정보통신 서비스 제공자가 개인정보 이용을 위해 수집할 때, 알리고 동의받아야 하는 것

--- 개인정보의 수집 이용 목적

--- 수집하려는 개인정보의 항목

--- 개인정보의 보유이용기간

--- ※ 개인정보보호법에서는, 거부할 권한이 있다는것과 이에 따른 불이익도 알리고 동의받아야해

-- 다음은 동의없이도 수집이용가능

--- 정보통신서비스 제공에 관한 계약을 이행하기 위해 필요한 개인정보로서 경제적, 기술적은 사유로 통상적인 동의받는게 뚜렷하게 곤란할 때

--- 정보통신서비스 제공에 따른 요금정산을 위하여 필요한 경우

--- 이 법(망법) 또는 다른 법률에 특별한 규정이 있는 경우

- 개인정보수집 제한 등(23조)

-- 개인정보수집금지 : 사상/신념/가족 및 친인척관계/학력/병력 등 권리 이익이나 사생활을 뚜렷하게 침해할 우려가 있는 경우

-- 수집 허용 : 이용자의 동의나 다른 법률에 허용된 경우

-- 서비스 거부 : 이용자가 최소한의 개인정보 밖에 안알려줬다고 서비스 거부 안됨

- 주민등록번호 사용제한(23조의 2)

-- 다음의 경우를 제외하고 이용자의 주민등록번호를 수집/이용 불가

--- 본인확인기관

--- 법령에서 이용자의 주민등록번호의 수집/이용을 허용하는 경우

--- 주민등록번호의 수집/이용이 불가피한 정보통신서비스 제공자로서 방통위에서 고시한 경우

-- 주민등록번호를 수집/이용 가능하여도, 대체수단(주민번호말고 따른 인증수단)을 제공해야 함

--- 아이핀 / 공인인증서 / 원타임패스워드(OTP)

- 개인정보 이용제한(24조)

-- 수집한 개인정보를, 동의받지 않은 목적(이용목적)으로 이용해서는 안됨

-- 이용목적이 변경되었을 땐 다시 동의받아야 해

- 개인정보의 제공동의(24조의 2)

-- 개인정보를 제 3자에게 제공할 때, 다음의 내용을 이용자에 알리고 동의받아야 함

--- 개인정보를 제공받는 자

--- 개인정보를 제공받는 자의 개인정보의 이용목적

--- 제공하는 개인정보의 항목

--- 개인정보를 제공받는 자의 개인정보 보유 및 이용기간

- 개인정보취급위탁(25조)

-- 위탁은 걍 하청업체에다가 정보주고 너네 이부분 알아서해시키는거

-- 취급위탁의 경우에도 다음의 내용을 이용자에게 알리고 동의를 받아야 함

--- 개인정보 취급위탁을 받는자(수탁자)

--- 개인정보 취급위탁을 하는 업무의 내용

-- ※ 망법에서는 취급 위탁시 동의를 받아야 하지만 개인정보보호법에서는 고지만 함

- 개인정보의 양도 양수(26조)

-- 정보통신서비스 제공자 등이 영업의 전부나 일부가 양도/합병으로 개인정보를 타인에게 이전하는 경우 다음의 내용을 알려야함

--- 개인정보를 이전하려는 사실

--- 개인정보를 이전받는자의 성명(법인명) / 주소 / 전화번호 및 그 밖의 연락처

--- 개인정보의 이전을 원치않은 경우, 그 동의를 철회할 수 있는 방법과 절차

-- 인터넷 홈페이지의 게시 / 전자우편 등 대통령령으로 정하는 방법에 따라 이용자에게 알림(바로 아래 시행령에 정의)

-- 양도자가 개인정보의 이전 사실을 알린경우, 양수자는 할 필요는 X

- 개인정보 동의 받는 방법(동법 시행령 12조) : 바로 위의 개인정보 양도 양수할 때 알리는 방법

-- 인터넷 사이트에 게재하고 동의 여부를 표시하도록

-- 동의 내용이 기재된 서면을 이용자에게 직접 교부/우편/모사 전송 → 이용자가 동의 내용에 대해 서명날인 후 제출하도록

-- 동의 내용이 담긴 전자우편 발송해 이용자로부터 동의의 의사표시가 적힌 전자우편 받는 방법

-- 전화를 통해 동의 내용을 알리고 동의 얻기

- 개인정보 관리책임자 지정(27조)

-- 정보통신서비스 제공자 등은 개인정보를 보호하고 개인정보와 관련한 이용자의 고충을 처리하기 위해 개인정보 관리 책임자를 지정

--- 예외 : 인터넷으로 사업시 5명 미만 / 전년도 말 기준 직전 3개월 일일평균 이용자 1천명 이하

-- 자격 : 임원 / 개인정보와 관련해 이용자의 고충처리를 담당하는 부서의 장 이 될 수 있음

-- 지정안하면 사업주나 대표자가 개인정보 관리책임자

- 개인정보 취급방침의 공개(27조의 2)

-- 개인정보 취급방침은 인터넷 홈페이지 첫 화면 제일 하단에 '개인정보취급방침'이라고 볼드체, 다른 색상으로 표현

--- 인터넷 홈페이지가 없으면 점포나 사무실에 써 붙이거나 비치

-- 개인정보 취급방침의 내용

--- 개인정보의 수집/이용 목적, 수집하는 개인정보의 항목 및 수집방법

--- 제 3자에게 제공시, 제공받는 자의 성명(법인명) / 제공받는자의 이용목적 / 제공하는 개인정보의 항목

--- 개인정보의 보유 및 이용 기간 / 개인정보의 파기절차 및 파기 방법

--- 개인정보 취급위탁을 하는 업무의 내용 및 수탁자

--- 이용자 및 법정대리인의 권리와 행사방법

--- 개인정보를 자동으로 수집하는 장치의 설치/운영 및 거부에 관한 사항

--- 개인정보 관리책임자의 성명 / 개인정보보호 업무를 하는 부서의 명칭과 연락처

- 개인정보 누출 등의 통지 신고(27조 3)

-- 개인정보 털린사실(분실/도난/누출) 알고나면, 지체없이 다음 내용 이용자에게 알리고 방통위나 KISA에 신고

--- 분실/도난/누출이 된 개인정보 항목

--- 분실/도난/누출이 발생한 시점

--- 이용자가 취할 수 있는 조치

--- 정보통신서비스 제공자 등의 대응 조치

--- 이용자가 상담 등을 접수할 수 있는 부서 및 연락처

-- 물론, 확인된 내용만 우선적으로 신고/통지하고 이후에 알게 되자마자 바로 신고/통지

-- 정당한 사유가 있는 경우, 위의 내용을 인터넷 홈페이지에 30일 이상 게시함으로써 대체 가능

-- 천재지변이나 정당한 이유로 홈페이지가 불가능하면, 전국에 보급되는 둘 이상의 일반일간신문에 1회 이상 공고

-- 신고받은 KISA는 방통위에게 즉시 알려야 함

- 개인정보의 보호조치(28조)

-- 다음의 기술적/관리적 보호 조치를 해야 함

--- 내부관리계획수립시행 / 접근통제장치설치운영 / 접속기론위변조방지 / 전송저장 암호화 / 바이러스침해방지 / 기타 안정성 확보

- 개인정보의 파기(29조)

-- 개인정보는 목적을 달성하면 지체없이 복구/재생할 수 없도록 파기

-- 특별한 사유 없을 때, 보유기간은 최소 1년에서 3년

-- 개인정보 파기 통지는 30일전에 개인정보가 파기되는 사실과 언제 파기하는지 알림

--- 우편 / 서면/ 모사전송 / 전화와 같은 유사한 방법으로 알려야 함

- 개인정보 이용내역의 통지(30조 2)

-- 다음의 기준을 만족하는 정보통신서비스 제공자 등은 주기적으로 이용자에게 개인정보 이용내역을 통지해야 함

--- 전년도 말 기준 직전 3개월간 일일평균 100만명 이상

--- 정보통신서비스부분 매출액이 100억원 이상 정보통신서비스 제공자

-- 통지 내역

--- 수집/이용 목적 및 수집한 개인정보 항목

--- 개인정보를 제공받은 자와, 그 제공 목적 및 제공한 개인정보 항목

--- 개인정보 취급위탁을 받은자와 그 취급위탁을 하는 업무 내용

-- 통지 횟수 : 연 1회 이상 (우편 / 서면 / 모사전송 / 전화와 같은 유사한 방법으로)

- 손해배상 및 법정 손해배상청구(32조, 32조의 2)

-- 고의/과실에 따른 개인정보 분실/도난/누출의 경우, 이용자가 정보통신서비스제공자를 상대로 300만원 이하의 손해배상 청구 가능

--- 정보통신서비스 제공자는 고의나 과실 책임이 없음을 입증해야 함

- 정보보호 사전점검(45조 2)

-- 정보통신서비스 제공자가 새로  정보통신망을 구축하고나 제공하고자 할때, 정보보호와 관련된 사항을 고려해야 해

- 정보보호 최고 책임자의 지정(45조 3)

-- 정보통신시스템 등 보안 및 정보의 안전한 관리르 위해 임원급의 정보보호 최고책임자를 지정가능

--- 종업원 수, 이용자 수 등이 기준에 해당하면 필수로 지정하고 미창부장관에게 신고해야 함

-- 정보보호 최고책임자의 업무

--- 정보보호관리체계의 수립 및 관리/운영

--- 정보보호 취약점 분석/평가 및 개선

--- 침해사고의 예방 및 대응

--- 사전 정보보호대책 마련 및 보안조치 설계/구현 등

--- 정보보호 사전 보안성 검토

--- 중요 정보의 암호화 및 보안서버 적합성 검토

--- 그 밖의 정보보호를 위해 필요한 조치의 이행

- 정보보호관리체계(ISMS)(47조)

-- 미창부 장관은 ISMS를 수립/운영하고 있는 자에 대해 기준에 적합한지에 관하여 인증을 가능

-- 다음의 경우 중, 하나만 만족해도 무조건 ISMS 인증 받아야 해

--- 정보통신망서비스 제공하는 자

--- 직접정보통신시설 사업자

--- 전년도 매출액이 100억원 이상 / 전년도 말 기준  직전 3개월간 일일평균 이용자 100만명 이상

-- ISMS 인증의 유효기간은 3년임

-- 미창부장관은 KISA나 미창부장관이 지정한 기관(ISMS 인증기관)에게 인증을 수행하게 할 수 있음

--- ISMS 인증 심사 수행 기관 : KISA / 한국정보통신진흥협회

- 개인정보관리체계인증(PIMS)(47조 3)

-- ISMS와는 다르게 아직 의무사항이 아님(권고사항)

-- 이건 방통위가 인증하고, 따로 수행기관을 지정가능해

- 정보보호관리등급(47조 5)

-- ISMS 인증을 부여받은 기관이나 기업은 일괄적인 인증이 아니라, KISA로부터 정보보호 등급을 부여받을 수 있음

-- 미창부장관이 관리등급 부여하는거고, KISA가 대신 수행가능



(2) 정보통신 기반 보호법

1) 용어의 정의

- 정보통신기반시설

- 전자적침해행위

- 침해사고


2) 주요정보통신기반시설 보호체계

3) 주요정보통신기반시설의 지정과 취약점 분석

4) 주요정보통신기반시설의 보호 및 침해 사고의 대응

- 정보통신기반보호위원회(3조)

-- 정보통신기반시설의 보호에 관한 사항을 심의하기 위해, 국무총리 소속하에 정보통신기반보호위원회를 둠

-- 위원장 1인을 포함한 25인 이내의 의원으로 구성

--- 위원장은 국무조정실장

-- 효율적 운영을 위해, 공공분야와 민간분야를 각각 담당하는 실무 위원회를 둠

- 정보통신기반보호위원회의 기능(4조)

-- 주요 정보통신기반시설 보호정책 조정이나 제도개선에 대한 사항과 주요 정책

-- 위원장이 부의하는 사항을 심의

- 주요 정보통신기반시설보호대책의 수립(5조)

-- 주요 정보통신기반시설을 관리하는 기관은 정보통신기반시설보호대책을 수립/시행해야 함

--- 수립/시행의 결과를 관계주요행정기관의 장에게 제출해야 함

-- 관리기관의 장은 정보보호책임자를 지정해야 함

- 주요 정보통신기반시설보호대책 이행여부의 확인(5조 2)

-- 미창부장관과 국정원장은 관리기관에 대해 정보통신기반시설보호대책의 이행여부 확인가능

- 주요 정보통신기반시설 계획의 수립 등(6조)

-- 관계중앙행정기관의 장은 정보통신기반보호위원회에게 전년도 추진실적과 다음연도 계획을 제출하고 심의받아야 함

--- 취약성 평가분석 / 침해사고 복구대책 / 그 밖의 대책

- 주요 정보통신기반시설의 보호지원(7조)

-- 관리기관의 장은 미창부, 국정원장 등에게 정보통신시설의 대책, 침해사고 예방복구 등에 대한 기술지원 가능

--- 국정원장은 금융/정보통신기반시설에 개인정보가 저장된 모든 정보통신기반시설 기술지원은 X

---- 국정원도 안되는게 있구나



(3) 정보통신산업 진흥법

1) 지식정보보안컨설팅 전문업체

- 지식정보보안컨설팅 전문업체(33조)

-- 주요 정보통신기반시설의 취약점 분석/평가 업무나 보호대책 수립업무를 신뢰성 있게 수행할수있다고 인정받은 업체

-- 미창부장관이 지정하게 되네

-- 업체지정은 법인으로 한정되고, 3년간의 유효기간이 있음(재지정 받을수있지 당연히)

- 지식정보보안컨설팅 전문업체 결격 사유(34조)

-- 뭐...생략

- 지식정보보안컨설팅 전문업체의 양도/합병 등(35조)

-- 양수인이 자격도 있어야 되고, 미창부장관에게 신고해서 수리 받아야 지식정보보안컨설팅 전문업체의 지위를 승계받음

- 지식정보보안컨설팅 전문업체 휴/폐업, 재개(36조)

-- 휴업/폐업, 재개하려는 날의 30일전까지 미창부장관에게 신고

- 자료의 기록 보존(39조)

-- 주요 통신기반시설의 취약점 분석/평가 업무와 관련하여 작성한 기록 및 자료를 안전하게 보존해야함

--지식정보보안컨설팅 전문업체에서 취소되거나 폐업하면, 주요 통신기반시설의 장에게 자료를 반환하거나 폐기

- 지식정보보안산업협회 설립(40조)

-- 미창부장관의 인가를 받아 지식정보보안산업협회를 설립가능

-- 지식정보보안산업협회는 법인으로 함



(4) 전자서명법

1) 용어의 정리

- 전자문서

- 전자서명

- 공인전자서명

- 전자서명생성정보

- 전자서명검증정보

- 인증

- 인증서

- 공인인증서

- 공인인증업무

- 공인인증기관

- 가입자

- 서명자

- 개인정보


2) 전자서명의 효력

- 전자서명의 효력(3조)

-- 공인전자서명이 있는 경우에는, 당해 전자서명이 [서명자의 서명, 서명날인 또는 기명날인이고], 당해 전자문서가 전자서명된 후 그 내용이 변경되지 아니하였다고 추정


3) 공인인증기관

- 공인인증기관의 지정(4조)

-- 미창부 장관이 공인인증기관을 지정할 수 있어

-- 공인인증기관으로 지정받을 수 있는 건 국가기관 / 지방자치단체 / 법인에 한해

-- 현재 : 한국정보인증(주), (주)코스콤, 금융결재원, 한국전자인증(주), 한국무역정보통신

- 공인인증업무 준칙(6조)

-- 공인인증기관은 업무 개시전에, 공인인증업무준칙을 작성해 미창부장관에게 신고해야 함

--- 인증업무종류 / 인증업무의수행방법및절차 / 공인인증역무의 이용조건 / 기타 인증업무 수행에관하여 필요사항


4) 공인인증서

- 공인인증서 발급(15조)

-- 공인인증서를 발급받고자하는 자의 신원을 확인해야 함

-- 공인인증기관이 발급하는 공인인증서에는 다음의 내용이 포함되어야 함

--- 가입자의 이름(법인명)

--- 가입자의 전자서명검증정보

--- 가입자와 공인인증기관이 이용하는 전자서명 방식

--- 공인인증서의 일련번호

--- 공인인증서의 유효기관

--- 공인인증기관의 명칭 등 공인인증기관을 확인할 수 있는 정보

--- 공인인증서의 이용범위 또는 용도를 제한하는 경우 이에 관한 사항

--- 가입자가 제 3ㅈ라를 위한 대리권 등을 갖는 경우 또는 직업상 자격 등의 표시를 요청한 경우 이에 관한 사항

--- 공인인증서임을 나타내는 표시

- 공인인증서 효력소멸(17조???)

-- 공인인증서 유효기관이 경과한 경우

-- 공인인증기관의 지정이 취소된 경우

-- 공인인증서의 효력이 정지된 경우

-- 공인인증서가 폐지 된 경우

- 공인인증서의 효력정지(17조)

-- 가입자 또는 대리인의 신청이 있을 경우, 공인인증서의 효력을 정지하거나 정지된 공인인증서의 효력을 회복해야 함

-- 공인인증서 효력 회복의 신청은, 공인인증서 효력이 정지된 날로부터 6개월 이내여야 함


(5) 개인정보보호법

0) 걍 설명

- 2011년 9월 30일 제정되어 공공과 민간을 아우르는 일반법

- 정보통신망 이용촉진 및 정보보호 등에 관한 법률이 개인정보보호법 보다 우선

-- 정보통신망법에 특별한 규정이 있지 않은 이상, 개인정보보호법에서 정하는 바에 따름(6조)

- 대부분 공공기관과 준용사업자에게 적용되는 법률로, 광범위하게적용되는 개인정보보호관련 일반법

- 전반적으로 망법이랑 내용겹치는게 있어(몇 개 더 추가되고 그런거만 있찌..)


1) 용어의 정리

- 개인정보

- 처리

- 정보주체

-개인정보파일

- 개인정보처리자

- 공공기관

- 영상정보처리기기

- ※ 망법이랑 비교하면서 보기


2) 개인정보 보호위원회

- 개인정보 보호위원회(7조)

-- 개인정보 보호에 관한 사항을 심의/의결하기 위해 대통령소속으로 개인정보보호위원회를 둠

-- 위원장 1명, 상임위원 1명을 포함한 15명 이내의 위원으로 구성

--- 위원장은 공무원이 아닌사람으로 대통령이 위촉 / 임기 3년(1번 연임가능)

--- 상임위원은 정무직 공무원으로 임명

- 개인정보 보호위원회 기능(8조)

-- 허허ㅓ..


3) 개인정보의 수집, 이용, 제공 등 단계별 보호기준

- 개인정보의 수집/이용(15조)

-- 개인정보처리자는 개인정보 이용을 위해 수집할 때, 알리고 동의받아야 하는 것

--- 개인정보의 수집 이용 목적

--- 수집하려는 개인정보의 항목

--- 개인정보의 보유이용기간

--- 개인정보보호법에서는, 거부할 권한이 있다는것과 이에 따른 불이익도 알리고 동의받아야해

---- 이건 망법에 없는내용

- 개인정보 수집 제한(16조)

-- 동의를 받고 개인정보를 수집하더라도 최소한으로 수집해야 함

--- 최소한이라는 걸 입증할 책임도 개인정보처리자에게 있지

- 개인정보제공(17조)

-- 개인정보를 제 3자에게 제공할 때, 다음의 내용을 이용자에 알리고 동의받아야 함

--- 개인정보를 제공받는 자

--- 개인정보를 제공받는 자의 개인정보의 이용목적

--- 제공하는 개인정보의 항목

--- 개인정보를 제공받는 자의 개인정보 보유 및 이용기간

--- 동의를 거부할 권리가 있다는 사실 및 동의거부에 따른 불이익이 있는 경우 그 불이익의 내용

---- 망법에 없는 내용

- 업무위탁에 따른 개인정보의 처리제한(26조) ; 순서는 뒤에있지만 끌어다 왔어

-- 업무위탁시에는 반드시 문서로 해야되고, 위탁계약서에는 개인정보보호에 대한 역할과 책임을 명시해야 함

-- 업무위탁시에는 개인정보처리방침을 공개해야 함

-- 손해배상책임에서는 수탁자를 위탁자의 소속직원으로 보기에 관리감독 철저히!

- 개인정보취급자에 대한 감독(28조)

-- 개인정보처리자는 개인정보취급자에 대하여 적절한 관리/감독을 이행해야함

--- 개인정보취급자는 임직원부터 파견근로자, 알바, 인턴까지 개인정보처리자의 지후 감독하에 개인정보를 처리하는 자 모두

--- 정기적인 교육을 실시

- 개인정보의 이용/제공 제한(18조)

-- 개인정보를 제공하더라도 최소한의 제공하고 이용목적의 범위를 벗어나서는 안됨

-- 제 3자 제공시에는 반드시 개인정보처리방침을 통해 공개

- 정보주체 이외에서 수집한 개인정보 수집 출저 등 고지(20조)

-- 개인정보 처리자가 정보주체 이외에서 수집한 경우

정보주체의 요구가 있으면 수집출저, 개인정보처리목적, 처리정지를 요구할 권라가 있음을 알려야함

- 개인정보의 파기(21조)

-- 개인정보의 처리목적을 달성하면 지체없이 파기

--- 다른 법령에 보존근거가 있으면 그거에 따라야지

-- 개인정보를 파기하지 않고 보존하는 경우는, 다른 개인정보와 분리하여 저장관리


4) 고유 식별정보 처리제한

- 민감정보처리제한(23조)

-- 사상, 신념, 노동조합, 정당의 가입탈퇴, 정치적견해, 건강, 성생활 등에 관한 정보를 처리 못하게 함

-- 망법보다 더 구체적이고 넓어졌지

- 고유식별정보처리제한(24조)

-- 개인정보처리자는 다음의 경우 제외해고 고유식별정보를 처리 불가

--- 정보주체에게 모든 사항알리고 별도로 동의를 받은경우

--- 법령에서 구체적으로 고유식별정보의 처리를 요구하거나 허용한 경우

-- 공유식별정보 : 주민등록번호 / 여권번호 / 운전자면허번호 / 외국인등록 번호 등

- 주민등록번호의 처리제한(24조의 2)

-- 다음의 경우를 제외하고 주민등록번호 처리 불가

--- 법령에서 구체적으로 주민등록번호의 처리를 요구하거나 허용한 경우

--- 정보주체나 제 3자의 급박한 생명,신체, 재산의 이익을 위해 명백히 필요하다고 인정되는 경우

--- 주민등록번호 처리가 불가피한 경우로서 행정자치부령으로 지정하는 경우

-- 개인정보처리자가 불가피하게 주민등록번호를 수집했다면, 분실/도난/유출 등을 막기 위해 암호화 조치를 통해 안전하게 보관해야됨

-- 개인정보처리자가 주민등록번호 처리 가능하더라도, 주민등록번호가 아닌 방법으로 가입할 방법 제공해야 됨

- 주민등록번호 유출시 과징금 5억(32조 2)

-- 행정자치부장관은 개인정보처리자가 처리하는 주민등록번호가 분실/도난/유출 등을 당하면 5억원 이하의 과징금을 부과/징수 가능

--- 물론 필요한 조치를 다했다면 그러지 아니하대


5) 영상정보처리기기의 설치 제한

- 영상정보처리기기의 설치/운영 제한(25조)

-- 법령에서 허용되는 경우를 제외하고는 공개된 장소에 영상정보처리기기를 설치해서는 안됨

-- 공공기관에서 설치/운영하려면 공청회 거쳐야하고, 이해관계자의 의견은 수렴하는 절차까지만 하면됨

-- 설치할때는 가장 잘 보이는 건물 중앙에 설치

-- 녹음은 해서는 안되

-- 다른용도로 사용하면 X


6) 개인정보 영향평가제도

- 개인정보처리방침의 수립 및 공개(30조)

-- 개인정보처리자는 홈페이지 첫 화면 아래에 개인정보처리방침을 공개해야함

-- 볼드체, 색상을 다르게

-- 홈페이지 없으면 사무실에 잘보이게 비치

- 개인정보 보호책임자 지정(31조)

-- 개인정보처리자는 개인정보의 처리에 관한 업무를 총괄해서 책임질 개인정보 보호책임자를 지정해야 함

-- ...하는일들 생략

- 개인정보파일 등록 및 공개(32조)

-- 공공기관의 경우, 개인정보파일에 대한 자세한사항들을 행정자치부장관에게 신고해야함

-- 행정자치부장관은 신고받은 개인정보파일에 대한 자세한 사항들을 누구나 열람가능하도록 공개해야 함

- 개인정보 영향평가(33조)

-- 공공기관은 특정한 요건을 충족할 경우 개인정보영향평가를 의무적으로 받아야 함

--- 5만명 이상의 정보주체에 대한 민감정보나 고육식별정보를 처리함

--- 다른 개인정보파일과의 연계할때, 50만명 이상의 정보주체에 관한 개인정보를 처리

--- 100만명 이상의 정보주체에 대한 개인정보파일의 처리함

-- 민간은 아직까지 권고사항

-- 공공기관은 영향평가의 결과를 행정자치부장관에게 제출해야 함

--- 행정자치부장관이 지정한 평가기관 중에서 의뢰해야 함


7) 개인정보 유출사실의 통지/신고제도

- 개인정보유출통지(34조)

-- 개인정보가 유출되었을 때에는 지체없이 정보주체에게 알려야 함


8) 정보주체의 권리보장

- 개인정보의 열람(35조)

-- 정보주체는 개인정보처리자에게 자신의 개인정보 열람을 요구할 수 있음

-- 이것도 보여줘야 되는기간이 따로 있어(대통령령)

-- 물론, 개인정보의 열람이 타인에게 해를 끼치는 등의 영향이 있을것 같으면 제한하거나 거부가능

- 손해배상 책임(39조 2항)

-- 정보주체는 개인정보처리자가 법을 윟반한 행위로 손해를 입으면 손해배상 청구가능

--- 개인정보처리자는 고의나 과실이 없음을 입증해야 해야 책임 면함

-- 물론, 개인정보처리자가 의무를 준수하고 최선을 다했다면 감경받을 수있긴해


9) 개인정보 분쟁조정위원회

- 개인정보 분쟁조정위원호의 설치 및 구성(40조)

-- 개인정보에 관한 분쟁의 조정을 위해 개인정보 분쟁조정위원회를 둠

-- 위원장 1명을 포함한, 20명 이내의 위원으로 구성(그 中 1명은 상임위원)

-- 개인정보와 관련한 분쟁의 조정을 원하는 자는 분쟁조정위원회에 분쟁조정을 신청가능

--- 분쟁조정위원회는 해당 내용을 상대방에 알려야 함

--- 공공기관이 경우 별다른 사유업승면 분쟁조정에 응해야 함

-- 분쟁조정을 신청받은 날로부터 60이내에 이를 심사해 조정안을 작성해야 함

--- 물론 의결로 처리기간 연장가능(연잔시 신청자에게 이유와 함께 알려야 함)

-- 조정전에 합의를 권고가능

- 집단조정분쟁조정(49조)

-- 정보주체의 피해 또는 권리침해가 다수의 정보주체에게 같은거나 비슷한 유형으로 발생하는 경우에 신청가능


(6) 개인정보의 안정성 확보 조치 기준(안행부고시 제2014-229호)

- 내부관리 계획수립.시행(3조)

-- 망법처럼 개인정보보호법에서도 안정성확보 조치를 위해 내부관리계획을 수립해야 함

--- 실행가능하고 / 구체적이고 / 맞춤형

-- 물론, 소상공인은 안해도되

- 접근권한 관리(4조)

-- 개인정보 수집시에는 최소화하여 수집

-- 개인정보처리시스템에 접근할 때에도 접근권한을 차등부여하고 최소한의 범위로 설정

-- 접근권한의 부여 기록은 3년간 보관

-- 개인정보 취급자의 사용 계정은 공유해서 사용해서는 안됨

- 접근통제(5조)

-- 정보통신망을 통한 불법적인 접근과 침해사고의 방지를 위해 다음과 같은 기능을 시스템에 설치/운영해야 함

--- 접속권한을 IP주소 등으로 제한하여 접근제어

--- 접속한 IP주소 등을 분석하여 불법적인 개인정보 유출시도 탐지

--- IDS / IPS / Firewall를 말하는것 같음

-- 외부망에서 개인정보처리시스템에 접근시 VPN이나 전용선등 안전한 접속수단 적용해야 함

-- 주민등록번호 이용해 본인인증 외에도 추가 인증수단을 마련해야함

-- 개인정보처리자는 연 1회이상 취약점을 점검해야 함

-- 개인정보취급자가 공개된 무선망을 통해 개인정보를 처리하는 경우, 보안프로그램이나 SSL, VPN 등을 적용해야함

-- 개인정보처리에 이용되는 모바일 기기의 분실/도난 등을 예비해 비밀번호나, 잠금 기능의 조치를 해야 함

- 개인정보의 암호화(6조)

-- 암호화 대상 : 고유식별정보, 비밀번호 및 바이오정보

--- 비밀번호및 바이오정보는 암호화하여 저장하되, 비밀번호는 일방향 암호화해서 저장(해쉬값)

-- 정보통신망을 이용해 개인정보를 송수신할 떄에도 암호화를 해야함(SSL 등 사용)

- 접속기록의 보관 및 점검(7조)

-- 개인정보처리시스템의 접근 기록은 6개월 이상 보관해야 함

-- 위/변조를 방지하기 위해 안전하게 보관

-- 반기별로 1회 이상 점검

- 악성프로그램 등 방지(8조)

-- 백신 소프트웨어 설치/운영

--- 자동 업데이트 기능 사용하거나, 일 1회 이상 엔진 업데이트 해야 됨

--- 악성 프로그램관련 경보가 떳을 때에는, 사용하는 백신의 보안 업데이트 공지가 뜨면 업데이틀 통해 최신상태 유지해야 함

- 물리적 접근 방지(9조)

-- 전산실이나 자료보관실에 개인정보를 보관시에는, 출입통제 절차를 수립/운영해야 함

-- 서류와 보조저장매체는 안전한 곳에 보관

- 개인정보의 파기(10조)

-- 완전파괴 / 전용소자장비를 이용한 삭제 / 복원안되게 포맷 또는 덮어쓰기

1. 정보보호 관리

(1) 정보보관리 개념

1) 정보보호의 목적 및 특성

- 정보보호의 정의 : 정보의 수집, 가공, 저장, 검색, 송신, 수신 중 발생할 수 있는 정보의 훼손, 변조, 유출 등을 방지하기 위한 관리적/기술적 수단(정보보호시스템)을 마련하는 것을 말한다.(국가정보화 기본법)

- 정보보호 ≠ 정보보안 : 정보보안이 Site(공간)이라는 개념이 더 들어간, 넓은 개념이라고 생각하자

- 정보보호의 목적 : 기밀성 / 무결성 / 가용성 / 인증 / 부인방지 / 신뢰성 등


2) 정보보호와 비즈니스

- 정보보호와 비즈니스 : IT 인프라에 대한 정보보호는 비즈니스의 보호뿐만이 아니라 비즈니스 가치의 증가로 이어 짐

-- 한 조직의 정보 자산뿐만이 아니라 고객의 정보(개인정보)까지 보호해야 할 법적인 의무도 있고, 고객의 신뢰로 이어지니까

-- 향후 조직의 비즈니스에 큰 도움이 될 것은 자명해


3) 정보보호관리의 개념

- 정보보호관리(Information Security Management)

-- 조직의 정보자산을 외부로 부터의 유(노)출과 오용, 유실으로 부터 방어하고, 정보나 정보 시설을 방어하는데 관련된 모든 일련의 활동

- 정보보호관리를 위한 6단계 활동

-- 정보보호 정책 및 조직 수립 → 정보보호 범위 설정 → 정보자산의 식별 → 위험관리 → 구현 → 사후관리

- 위의 활동들을 지속적으로 하기 위해 체계화해서 만든게 정보보호관리체계(ISMS ; Information Security Management)

-- 그냥 한 번 정보보호 솔루션을 만들고 끝내는게 아니라, 비즈니스의 연속성과 함께 계속 지속되어야 되

-- 최근에는 매출이 크거나 고객이 많은 조직은 법적으로 갖춰야해



(2) 정보보호 정책 및 조직

1) 정보보호 정책의 의미 및 유형

- 정책(Policy) : 최고 경영진의 전략적인 사고를 문서화한 것

-- 정책 中, 가장 핵심적인 걸 "정책서"라고 함

-- 하향식 유형(Top-Down) : 상위 정책으로 부터 하위수준의 정책을 도출하는 방식

-- 상향식 유형(Bottom-Up) : 기존의 정책들을 종합해 새로운 정책을 수립하는 방식

- 정책이 가지는 특징과 가져야할 특징

-- 여러 다른 지침과 하위 수준간의 정책들이 일관성과 연관성이 필요함

-- 최상위 정책은 전사적인 정책을 모두 포함해야 함

-- 간결하고 명확 / 정보보호의 목표와 회사의 비전을 포함해야 함

-- 영향을 받는 임직원들에게 정책에 대한 설명 해야 함 / 간단한 내용과 이해하기 쉬운 표현

- 정보보호 정책서의 구성

- 정보보호 선언문 : 보통 1장에 심플하게 작성 / 정보보호전반에 대한 경영자의 의지 및 실천을 다짐하는 선언문

- 정책서 목적과 구성 / 기본 방침 / 정보보호계획수립 / 보안에대한 역할과 책임 / 정보자산의 보안 / 등


2) 정보보호 정책수립 절차

- 정보보호 정책 수립 : 조직 전반에 걸친, 최상위 수준의 정보보호정책을 수립하고, 조직내 책임을 설정

-- 정보보호 정책서 안에 포함되는 개념인듯

- 정보보호 정책 수립 과정

-- 경영목표를 지원하는 법적/규제적인 요건을 파악

-- 위험관리에 따른 전략적 정보보호 정책 수립

- 정보보호 정책서 작성 방안(정보보호 정책 수립도 여기에 들어가)

-- 목적 : 중요한 정보자산이 무엇인지 식별하여 선언

-- 적용 범위 : 정책이 적용되는 범위(전사이냐, 특정 부서이냐)

-- 정책의 내용 : 간단하고 명료하게

-- 책임 : 정책을 수행하기 전에, 기본적으로 책임사항을 정의해야함(경영진의 책임, 일반직원의 책임 등)

-- 문서승인 : 정보보호 정책의 승인은 최고 경영자(CEO)가 이 정책을 승인하고 지원의지를 알리는 것(반드시 승인받아야 해)

-- 정보보호위원회의 구성 : 정보보호정책 수립의 이행을 위해 만든 위원회(형식적인 위원회 구성이 아닌 실직적 운영을 위한)


3) 조직 체계와 역할/책임

- 정보보호 조직 : 정보보호 정책을 잘 수립하여 수행해 나갈 수 있는, 체계적인 역할과 책임을 가지는 조직

-- 위에서 언급했듯이, 정보보호 정책서에 책임사항을 정의한거랑 연계해서 생각해

- 일반적인 정보보호 조직체계

-- 정보보호 심의위원회 : 정보보호 활동계획 및 예산 심의 / 정보보호 정책 및 규정의 최종승인

--- 위원장 : 대표이사 / 위원 : 정보보호책임자 / 간사 : 정보보호 관리자

-- 정보보호 책임자 : 정보보호 조직의 구성 및 운영 총괄 / 정보보호 방침 및 계획 실무지침 수립 및 승인

-- 정보보호 관리자 : 정보보호 롸동의 계획 및 관리 / 정보보호방침의 유지, 이행

-- 정보보호 담당자

--- 정보보호 운영 담당자

--- 정보보호 대응 담당자



(3) 위험관리

- 정보보호관리체계(ISMS)의 5단계에서 위험관리의 위치

-- [정보보호 정책 수립 → 관리체계 범위설정 → 위험관리 → 구현 → 사후관리] 를 계속 반복함

 

- 위험관리 : 조직이 정보자산에 대한 위험을 수용할 수 있는 수준으로 유지하기 위해

정보자산에 대한 위험을 분석하고 이에 대한 비용대비 효과적인 보호 대책을 마련하는 일련의 과정

- 위험관리과정(5단계로 구성)

-- 위험관리전략 및 계획수립 → 위험분석 → 위혐평가(처리) → 정보보호 대책수립 → 정보보호 계획수립(다이렇게표현하는데?)

-- 위험관리전략 및 계획수립 → 위험분석 → 위혐평가(처리) → 보호대책 선정 → 이행계획 수립(내가 배울때는 이렇게 배움)

-- 위 그림같이 3단계로도 표하기도 하네

- 위험(Risk) : 원하지 않는 사건이 발생해 손실 또는 부정적인 영향을 미칠 가능성

- 위험의 요소

-- 자산(Assets) : 조직이 보호해야할 대상

-- 위협(Threats) : 원치 않은 사건의 잠재적인 원인이나 행위자

-- 취약성(Vulnerability) : 자산의 잠재적인 속성으로, 위협의 이용 대상

-- 정보보호대책(Safeguard) : 위협에 대응하여, 자산을 지키기 위한 대책


1) 위험관리 전략 및 계획수립

- 위험분석 접근법

-- 베이스라인 접근법(Baseline Approach)

--- 위험분석을 수행하지 않는 대신, 모든 시스템에 대해 표준화된 보호대책을체크리스트형태로 제공

--- 소규모조직이나, 대규모조직의 중요치 않은 일반 자산에 대하여 사용하는 접근법(화장실 청소 체크리스트??)

-- 비정형 접근법(Informal Approach ; 전문가 판단법)

--- 구조적인 방법론에 기반하지 않고, 전문가의 지식과 경험에 따라 위험을 분석

--- 작은 조직에서는 효과적

-- 상세 위험분석(Detailed Risk Analysis)

--- 구조적인 방법론에 기반해서 위험을 분석하는 것

--- 많은 시간(돈)과 노력(돈)이 필요하고 비정형 접근법과 같이 고급인력이 필요함(돈)ㅋ

--- 자산분석 → 위협평가 → 취약성평가 → 정보보호 대책평가 → 잔여 위협평가

-- 복합 접근법(Combined Approach)

--- 상세 위험분석을 수행하고, 그 외 다른 영역은 베이스라인 접근법만을 사용하는 방식

- 위험분석 방법론의 선정

-- 정성적 분석방법(Qualitative) : 위험을 매우높은, 높은, 중간, 낮은 등으로 표현

--- 델파이법 : 전문가 집단에게 설문조사를 실시해 의견을 정리하는 분석방법

---- 짧은 시간에 도출할 수 있지만, 전문가의 추정이라 정확도는 낮지

--- 시나리오법 : 어떤 사실도 기대대로 발생되지 않는다고 치고, 특정 시나리오를 통해 발생 가능한 위협의 결과로 순위를 매겨 도출

---- 전반적인 가능성을 추론가능하지만, 발생 가능성의 이론적 추축에 불과해 정확성이 낮지

--- 순위결정법 : 비교우위 순위 결정표에, 위험 항목의 서술적 순위를 결정하는 방식

---- 이것도 정확도 낮네(다 낮어 ㅅㅂ ㅋㅋㅋ)

-- 정량적 분석방법(Quantitative) : 위험을 손실액과 같은 숫자값으로 표현 / 주로 미국에서 사용하는 방식

--- 연간예상손실액(ALE) = 단일예상손실액(SLE) X 연간발생률(ARO)

---- 단일 예상손실액(SEL) = 자산의가치(AV) X 노출계수(EF)


2) 위험분석

- 위험의 3요소인 자산 / 취약성 / 위협을 분석(식별과 분류)

-- 어떻게 할껀지 방법론과 접근방법은 위에서 제시 함


2-1) 위험평가(기출내용엔 없지만, 걍 내가 만들었어)

- 목표 위험 수준 및 우선순위 설정 : 수용가능한 위험수준를 기반으로 우선순위를 결정

-- 수용가능한 위험수준(DOA)은 사전에 정의해야 일관성이 유지됨(위험관리 전략 및 계획수립 단계)


3) 정보보호 대책 선정 및 계획서 작성

- 위험관리의 마지막 순서로, 위험을 분석하고 순위를 매겼으니까 그에 대한 위험처리 방법을 선택하고 계획서 짜는 단계

- 위험처리 방법

-- 위험수용(Acceptance) : 해당 위험의 잠재 손실 비용을 감수
-- 위험감소(Mitigation) : 위험을 감소시킬 수 있는 대책을 채택하여 구현하는 것

-- 위험회피(Risk Avoidance) : 위험이 존재하는 프로세스나 사업을 수행하지않고 포기

-- 위험전가(Risk Transfer) : 보험이나 외주 등으로 잠재적 비용을 제3자에게 이전하거나 할당



(4) 대책구현 및 운영

1) 정보보호 대책 구현

- 정보보호 대책 : 위험을 감소시키기 위한 정보보호조치를 의미(장치 / 절차 / 기법 / 행위 등을 포함)


2) 정보보호 교육 및 훈련

- 수업에서 교수님이 진짜 사실이게 핵심이랬는데 ㅋ(아무리 대책잘짜면 뭐하냐고 상놈들이 실천안하는데)

- 그냥 말단직원부터 임원, 최고경영자까지도 전사적으로 싹다 교육시켜야되


3) 컴퓨터/네트워크 보안운영

- PC보안 / 네트워크 보안 / 매체보안(데이터의 보관과 폐기)



(5) 업무연속성 관리(Business Continuity Management)

1) 업무지속성 관리체계

- 업무연속성 관리 : 재난이나 재해, 테러 같은 예기지 못한 위기상황에서도 적시에 복구해 업무를 계속수행할 수 있는 위기 관리 능력

- 업무연속성 관리 단계

-- 1단계 시작단계 : 업무연속성 관리에 대한 정책의 수립 및 범위설정을 하는 단계

-- 2단계 전략수립단계 : 재해가 업무에 미치는 잠재적인 연향과 위험을 평가 / 위험감소를 위한 사항들을 파악 / 효과적인 전략 수립

-- 3단계 구현단계 : 업무가 지속적으로 이루어지기 위한 프로그램을 수립하는 단계(설비 구현 / 계획을 문서화)

-- 4단계 운영관리단계 : 수립된 업무연속성 전략 및 계획, 절차를 계속적으로 테스트 및 검토, 유지 보수 / 이에 대한 교육과 훈련


2) 업무연속성 계획수립(BCP ; Business Continuity Plan)

- 업무연속성 계획 5단계 방법론(4단계 / 5단계 / 6단계로 종류가 있지만 5단계가 출제됬었어...)

-- 1단계 프로젝트 범위설정 및 계획

-- 2단계 사업영향평가(BIA ; Business Impact Assessment)

--- 각 사업단위가 받게될 재정적 손실의 영향도를 파악해서 문서화

--- 주요 취지 : 핵심우선순위결정(프로세스간의 구별) / 중단시간 산정(얼마만에 복구?) / 자원요구사항(어디에 얼마나 자원할당?)

-- 3단계 복구전략개발

--- 사업영향평가에서 수집된 정보를 기반으로 어떻게 복구를 할 것인지 전략을 세움

-- 4단계 복구계획수립

--- 사업을 지속하기 위한 실제 복구계획의 수립단계 / 문서화는 필수

-- 5단계 프로젝트수행 및 테스트

--- 유지보수 활동을 포함한 이후에 있을 테스트 절차 등을 수립

- 업무연속성 관리 단계에 BCP가 포함되는건가??? 자세히는 모르겠네


3) 업무연속성 유지관리

- 지속적으로 유지보수, 테스트

-- 체크리스트 / 구조적점검 / 시뮬레이션 / 병렬테스트 / 전체 중단테스트


4) 재난복구계획(DRP ; Disaster Recovery Plan)(기출내용엔없는데 책과 기출에있네??)

- BCP는 전사적인 복구계획이라면, DRP는 기업의 세부 시스템 별 복구 계획(카더라...?)

- 재난복구계획 프로세스

-- 데이터 지속처리 계획(DPCP ; Data Processing Continuity Planning) : 재해를 예측하고 그에 대처하기 위한 계획수립

--- 가장 많이 사용되는 대체 처리 사이트(Site ; 공간의개념) 방식

---- Hot Site : 모든 컴퓨터설비를 완전히 갖추고 있는 공간 / 실제로 운영되고 있는 환경과 동일한 상태로 관리)

---- Warm Site : Hot Site와 Cold Site의 절충안(전원/컴퓨터 등은 갖춰져있지만 어플리케이션이 설치되거나 구성되지 않음)

---- Cold Site : 비상시 장비를 가져올 준비만 할 뿐, 어떤 컴퓨터 하드웨어도 공간에 존재하지않음

-- 데이터 복구 계획 유지 보수(Data Recovery Plan Maintenance) : 계획이 항상 적적하게 최신버전을 반영하도록 유지하는 프로세스



(6) 관련 표준/지침

1) 국제/국가 표준

- OECD 정보보호 가이드라인

-- 인식 / 책임 / 대응 / 윤리 / 민주성 / 위험평가 / 정보보호의 설계와 이행 / 정보보호 관리 / 재평가

- TCSEC(Trusted Computer System Evaluation Criteria)

-- 미국에서 1985년 최초로 만들어짐 / 오렌지 북으라고도 함

-- 정보제품을 몇가지 요구사항을 만족하는 수준에 따라 보안등급을 매김(A1, B3, B2, B1, C2, C1)

-- 기밀성, 무결성, 가용성 中, 기밀성을 중시함(무결성, 가용성은 다소 취약)

- ITSEC

-- 1991년에 미국의 TCSEC를 참조해서 만든 유럽 공통 평가기준

-- 기밀성 뿐만아니라 무결성, 가용성에 대한 평가기준도 수용함

- 보안성평가(CC ; Common Criteria) : TCSEC, ITSEC같이 나라/지역별로 서로 다른 평가기준을 하나로 표준화한 결과

-- 현재 3.1버전까지 공개

-- CCRA(Common Criteria Recognition Arrangement) : 정보보호 제품의 안정성을 회원국가간에 상호인정하는 국제 협약

--- CAP(인증서발행국) : 국내에서 발행한 정보보호시스템 평가 인증서가 해외에서도 인정받게됨

--- CCP(인증서수용국) : 정보보호 평가 인증서를 발행은 않하고 수용만 하는 국가

-- 우리나라는 CAP에 2006년에 가입함

-- CAP에 가입한 국가는 5년마다 재심사(2012년 11월에 있었음(일본과 프랑스가 심사))

http://www.cybersecurity.my/mycc/mutual.html

- 보안성평가에 있어서 국내기관과 역할

-- 정책기관 : 행정자치부

-- 인증기관 : 미래창조과학부

-- 평가기관 : 한국인터넷진흥원 + 기타 등등

- 보안성평가의 결과

-- 국제적인 표준은 EAL(Evaluation Assurance Level) 1부터 7까지 있음

http://en.wikipedia.org/wiki/Evaluation_Assurance_Level

-- 우리나라는 가(EAL 4), 나(EAL 3), 다(EAL 2)로 분류



2) 인증체계

- BS7797

-- 조직의 정보를 체계적으로 관리하고 정보보안사고를 예방하기 위해 영국에서 제정된 규정

- ISMS(Information Security Management System)

-- BS7797을 기반으로 국내 환경에 적합하게 작성

-- 구성요소 : 정보보호관리과정 / 정보보호대책 / 문서화

--- 정보보호관리과정 : 정보보호 관리체계 인증심사시 요구되는 필수 항목 / 지속적으로 유지관리되는 순환 주기의 형태

---- 정보보호정책 수립 및 범위설정 → 경영진책임 및 조직구성 → 위험관리 → 정보보호대책구현 → 사후관리

--- 정보보호대책 : 총 13개분야 92개 통제항목으로 구성

---- 시스템개발보안 / 암호통제 / 접근통제 / 운영보안 / 정보보호정책 / 정보보호조직

---- 외부자보안 / 정보자산분류 / 정보보호교육 / 인적보안 / 물리적보안 / 침해사고관리 / IT재해복구

 

+ Recent posts