자바 암호 프로그래밍 Java Cryptography Programming\ 2. 자바 프로그래밍 기초 2017. 3. 중부대학교 정보보호학과 이병천 교수
차례 1. 강의 개요 2. 자바프로그래밍 기초 3. 자바 네트워크 프로그래밍 4. 자바 GUI 프로그래밍 5. JCA/JCE 소개 6. 해시함수, MAC, 패스워드 기반 키생성 7. 대칭키 암호, 파일 암호화/복호화 8. 공개키 암호 9. 전자서명 10. 인증서와 공개키기반구조(PKI) 11. 암호 알고리즘/프로토콜 구현
2. 자바프로그래밍 기초
자바의 역사 1991년 그린 프로젝트(Green Project) 목적 2009년에 선마이크로시스템즈를 오라클에서 인수 선마이크로시스템즈의 제임스 고슬링(James Gosling)에 의해 시작 가전 제품에 들어갈 소프트웨어를 위해 개발 1995년에 자바 발표 목적 플랫폼 호환성 문제 해결 기존 언어로 작성된 프로그램은 PC, 유닉스, 메인 프레임 등 플랫폼 간에 호환성 없음 소스를 다시 컴파일하거나 프로그램을 재 작성해야 하는 단점 플랫폼 독립적인 언어 개발 모든 플랫폼에서 호환성을 갖는 프로그래밍 언어 필요 네트워크, 특히 웹에 최적화된 프로그래밍 언어의 필요성 대두 메모리 사용량이 적고 다양한 플랫폼을 가지는 가전 제품에 적용 가전 제품 : 작은 량의 메모리를 가지는 제어 장치 내장형 시스템 요구 충족 2009년에 선마이크로시스템즈를 오라클에서 인수
자바의 특징 WORA(Write Once Run Anywhere) WORA를 가능하게 하는 자바의 특징 한번 작성된 코드는 모든 플랫폼에서 바로 실행되는 자바의 특징 C/C++ 등 기존 언어가 가진 플랫폼 종속성 극복 OS, H/W에 상관없이 자바 프로그램이 동일하게 실행 네트워크에 연결된 어느 클라이언트에서나 실행 웹 브라우저, 분산 환경 지원 WORA를 가능하게 하는 자바의 특징 바이트 코드(byte code) 자바 소스를 컴파일한 목적 코드 CPU에 종속적이지 않은 중립적인 코드 JVM에 의해 해석되고 실행됨 JVM(Java Virtual Machine) 자바 바이트 코드를 실행하는 자바 가상 기계(소프트웨어)
플랫폼 종속성(platform dependency) 플랫폼 = 하드웨어 플랫폼 + 운영체제 플랫폼 인텔 CPU를 가진 리눅스 환경에서 개발 프로그램의 플랫폼 호환성 없는 이유 기계어가 CPU마다 다름 운영체제마다 API 다름 운영체제마다 실행파일 형식 다름 C/C++ 응용 프로그램 실행 실행되지 않음 실행되지 않음 인텔 CPU + 윈도우 노트북 인텔 CPU + 리눅스 Apple 사의 MAC PC
자바의 플랫폼 독립성, WORA Write Once !! Run Anywhere!! 자바 응용 프로그램 실행 실행 실행 자바 가상 기계 자바 가상 기계 인텔 CPU + 윈도우 노트북 인텔 CPU + 리눅스 자바 가상 기계 Apple 사의 MAC PC
자바의 실행 환경 바이트 코드 자바 가상 기계(JVM : Java Virtual Machine) 자바의 실행 자바 가상 기계에서 실행 가능한 바이너리 코드 바이트 코드는 컴퓨터 CPU에 의해 직접 실행되지 않음 자바 가상 기계가 작동 중인 플랫폼에서 실행 자바 가상 기계가 인터프리터 방식으로 바이트 코드 해석 클래스 파일(.class)에 저장 자바 가상 기계(JVM : Java Virtual Machine) 각기 다른 플랫폼에 설치 동일한 자바 실행 환경 제공 자바 가상 기계 자체는 플랫폼에 종속적 자바 가상 기계는 플랫폼마다 각각 작성됨 예) 리눅스에서 작동하는 자바 가상 기계는 윈도우에서 작동하지 않음 자바 가상 기계 개발 및 공급 자바 개발사인 오라클 외 IBM, MS 등 다양한 회사에서 제작 공급 자바의 실행 자바 가상 기계가 클래스 파일(.class)의 바이트 코드 실행
자바와 오픈 소스 오픈 소스란? 오픈 소스의 장점 오픈 소스의 단점 오프 소스 소프트웨어 사례 소프트웨어 제작자의 권리를 보존 누구나 액세스할 수 있도록 소스 코드를 무상 공개한 소프트웨어 오픈 소스의 장점 공개된 소스 코드를 참조함으로써 개발 시간 및 비용 단축 공개된 소프트웨어를 다수의 인원이 참여 개량, 우수한 품질의 소프 트웨어 개발 오픈 소스의 단점 무단으로 상용 소프트웨어에 사용할 경우 저작권 침해 발생 다양한 개량 버전의 소프트웨어로 인한 호환성 문제 오프 소스 소프트웨어 사례 Linux, OpenOffice, Open Solaris, Mozilla, Apache, GNU, WebKit 등 2006년 11월, 선마이크로시스템즈는 자바를 GPL 라이선스로 소스 오픈 http://sourceforge.net : 오픈 소스 사이트
자바의 배포판 종류 오라클은 개발 환경에 따라 다양한 자바 배포판 제공 Java SE Java ME Java EE 자바 표준 배포판(Standard Edition) 데스크탑과 서버 응용 개발 플랫폼 Java ME 자바 마이크로 배포판 휴대 전화나 PDA, 셋톱박스 등 제한된 리소스를 갖는 하드웨어에서 응용 개발을 위한 플랫폼 가장 작은 메모리 풋프린트 Java SE의 서브셋 + 임베디드 및 가전 제품을 위한 API 정의 Java EE 자바 기업용 배포판 자바를 이용한 다중 사용자, 기업용 응용 개발을 위한 플랫폼 Java SE + 인터넷 기반의 서버사이드 컴퓨팅 관련 API 추가
Java SE 구성 출처: http://download.oracle.com/javase/8/docs/
JDK와 JRE JDK(Java Development Kit) JRE(Java Runtime Environment) 자바 응용 개발 환경. 개발에 필요한 도구 포함 컴파일러, JRE (Java Runtime Environment), 클래스 라이브러리, 샘플 등 포함 JRE(Java Runtime Environment) 자바 실행 환경. JVM 포함 자바 실행 환경만 필요한 경우 JRE만 따로 다운 가능 JDK와 JRE의 개발 및 배포 오라클의 Technology Network의 자바 사이트에서 다운로드 http://www.oracle.com/technetwork/java/index.html JDK의 bin 디렉터리에 포함된 주요 개발 도구 javac - 자바 소스를 바이트 코드로 변환하는 컴파일러 java - jre의 bin 디렉터리에도 있는 자바 응용프로그램 실행기 jar - 자바 아카이브 파일 (JAR)의 생성 및 관리하는 유틸리티 jdb - 자바 디버거 appletviewer - 웹 브라우저 없이 애플릿을 실행하는 유틸리티
JDK 설치 후 디렉터리 구조 자바 개발, 실행하는데 필요한 도구와 유틸리티 자바로 DB 응용프로그램을 개발하는데 필요한 도구 자바 프로그래밍 예제와 소스 코드 네이티브 코드 프로그래밍에 필요한 헤더 파일 자바 런타임 환경. JVM, 클래스 라이브러리 등 실행에 필요한 파일 JDK의 기본 라이브러리 외 추가 클래스 라이브러리와 개발 도구에서 필요로 하는 여러 파일 자바 프로그램 샘플 소스 코드 자바 API 클래스들에 대한 자바 소스
자바 API 자바 API(Application Programming Interface)란? 자바 패키지(package) JDK에 포함된 클래스 라이브러리 주요한 기능들을 미리 구현한 클래스 라이브러리의 집합 개발자는 API를 이용하여 쉽고 빠르게 자바 프로그램 개발 API에서 정의한 규격에 따라 클래스 사용 자바 패키지(package) 서로 관련된 클래스들을 분류하여 묶어 놓은 것 계층구조로 되어 있음 클래스의 이름에 패키지 이름도 포함 다른 패키지에 동일한 이름의 클래스 존재 가능 자바 API(클래스 라이브러리)는 JDK에 패키지 형태로 제공됨 필요한 클래스가 속한 패키지만 import하여 사용 개발자 자신의 패키지 생성 가능
자바 온라인 API 문서 http://docs.oracle.com/javase/8/docs/api/
자바 통합 개발 환경–이클립스(Eclipse) IDE(Integrated Development Environment )란? 통합 개발 환경 편집, 컴파일, 디버깅을 한번에 할 수 있는 통합된 개발 환경 이클립스(Eclipse) 자바 응용 프로그램 개발을 위한 통합 개발 환경 IBM에 의해 개발된 오픈 소스 프로젝트 http://www.eclipse.org/downloads/ 에서 다운로드
자바 응용의 종류 : 데스크톱 응용프로그램 가장 전형적인 자바 응용프로그램 PC 등의 데스크톱 컴퓨터에 설치되어 실행 JRE가 설치된 어떤 환경에서도 실행 다른 응용프로그램의 도움이 필요 없이 단독으로 실행
자바 응용의 종류 : 애플릿 응용프로그램 애플릿(applet) 웹 브라우저에 의해 구동되고 실행이 제어되는 자바 프로그램 애플릿은 사용할 수 있는 자원 접근에 제약 있음
자바 응용의 종류 : 서블릿 응용프로그램 서블릿(servlet) 애플릿과 반대로 서버에서 실행되는 자바 프로그램 서버 클라이언트 모델에서 서블릿과 애플릿이 각각 통신하면서 실행 데이터베이스 서버 및 기타 서버와 연동하는 복잡한 기능 구현 시 사용 사용자 인터페이스가 필요 없는 응용 웹 서버에 의해 실행 통제 받음 웹 브라우저 웹 서버 서버 JVM 인터넷 … servlet 서버
자바 응용의 종류 : 모바일 응용프로그램 Java ME 모바일 기기를 위한 자바 배포판 유럽, 미국 시장에 출시되는 대부분의 모바일 단말기에 탑재 노키아, 삼성, LG, 소니 에릭슨, 모토롤러 등 단말기 제조사
자바 모바일 응용 : 안드로이드 앱 안드로이드 구글의 주도로 여러 모바일 회사가 모여 구성한 OHA(Open Handset Alliance)에서 만 든 무료 모바일 플랫폼 개발 언어는 자바를 사용하나 JVM에 해당하는 Dalvik은 기존 바이트 코드와 호환성이 없어 변환 필요
자바 개발환경 구축 JDK 설치 (Java SE Development Kit 8) Eclipse 설치 http://www.oracle.com/technetwork/java/javase/downloads/jdk 8-downloads-2133151.html Eclipse 설치 https://www.eclipse.org/downloads/ 한글 API 도움말 사용하기 Eclipse에서 JRE System Library -> rt.jar 파일의 등록정보에서 Javadoc location을 한글 API 문서로 등록 한글 API: http://www.changki.net/APIs/J2SE_1.8_API_Korean/ 영문 API: https://docs.oracle.com/javase/8/docs/api/ 예제 프로그램 Hello world
실습과제 #1 난수 생성을 이용하는 게임 만들기 예측 불가능한 난수 생성 기능을 이용하여 게임 만들기 사례: 가위바위보, 묵찌빠, 사다리타기, 윷놀이, 섯다, 슬롯머신 등 ppt 형식의 보고서를 작성하여 코드와 함께 제출 보고서에는 과제의 목적, 설계, 수행결과, 참고자료, 팀내 협력 등 필요한 내용을 기술 제출기한: 3.26(일) 자정까지 과목 카페 과제게시판에 제출