분류 전체보기
-
[Java강의노트] 2. 변수와 리터럴, 기본 타입2009.08.14
-
[Java강의노트] 1. Java 소개2009.08.13
-
리눅스 프로세스 잘 관리하는 비법 - "프로세스 관리 명령 세트 메뉴"2009.05.15
-
Frame-Relay 구성 실습 문제 (1)2009.05.14
-
복잡한 네트워크 경로 지정 쉽게 풀어보기 (정적 경로)2009.05.13
[Java강의노트] 2. 변수와 리터럴, 기본 타입
변수와 리터럴
변수는 한 마디로 그릇입니다. 그리고 그 그릇에 담기는 값을 리터럴이라고 합니다.
int i = 10;
위의 구문을 풀어보면 변수 'i'를 선언하는데 변수의 타입은 'int'이며 정수(Integer)를 의미합니다. 그리고 변수 'i'에 초기값으로 '10'을 담고 있습니다. '='를 '대입연산자'라고 하며 변수에 값을 담을 때 사용하는 연산자입니다.
변수를 사용할 때는 다음 2가지 원칙을 지키도록 합니다.
- 변수를 사용하기 전에 반드시 선언해야 한다.
int i; - 선언된 변수는 초기화를 한다. 선언된 변수에는 쓰레기 값이 들어 있으므로 그대로는 사용할 수 없습니다.
i = 0;
위의 설명처럼 2행에 걸쳐 선언과 초기화를 해도 되지만 보통은 처음 예처럼 선언과 동시에 초기화를 해줍니다.
데이터 타입
Java의 데이터 타입은 크게 기본 타입(primitive type)과 참조 타입(reference type)으로 나눌 수 있습니다. 기본 타입은 논리값, 정수값 등의 데이터 타입을 말하며, 참조 타입은 나중에 배우게 될 객체를 가리키기 위한 데이터 타입입니다.
기본 타입은 다음과 같이 구분할 수 있습니다.
타입 | 예약어 | 크기 | 범위 |
---|---|---|---|
논리형 | boolean | 1 bit | true, false |
문자형 | char | 2 byte | 0 ~ 65535 (유니코드 값) |
정수형 | byte | 1 byte | -128 ~ 127 |
short | 2 byte | -32,768 ~ 32,767 | |
int | 4 byte | -2,147,483,648 ~ 2,147,483,647 | |
long | 8 byte | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 | |
실수형 | float | 4 byte | -3.4E38 ~ 3.4E38 |
double | 8 byte | -1.7E308 ~ 1.7E308 |
[Java강의노트] 1. Java 소개
Java의 세계에 첫 발걸음을 해주신 여러분을 환영합니다!
Java는 1991년 경 Sun Microsystems(썬 마이크로시스템즈)의 연구원인 James Gosling(제임스 고슬링)의 주도하에 Oak(오크)라는 이름의 가전제품을 제어하기 위한 목적의 언어로 탄생되었습니다. 하지만 WWW(월드와이드웹)이라는 새로운 패러다임의 탄생으로 Java는 웹사이트를 개발하기 위한 주 언어로써 자리를 잡았고 오늘날 가장 거대한 시스템을 안정적으로 지원하는 기술로 자리매김을 하게 되었습니다.
Java는 다음과 같은 특징을 갖습니다.
플랫폼 독립성
Java는 윈도우와 리눅스, 유닉스 등 다양한 운영체제에 이식되어 "Write Once, Use Anywhere(한 번 작성하면 어디서든지 사용할 수 있다.)"를 실현하고 있습니다.
객체지향 언어
프로그램을 안전하고 체계적으로 개발하기 위해 구조적 프로그래밍 언어의 개념이 나왔다면 거대한 규모의 프로그래밍을 안정적으로 지원하기 위한 목적으로 객체지향 언어라는 개념이 개발되었습니다. 객체지향 언어는 객체를 기반으로 작성되는 프로그래밍 언어로써 실세계에 가까운 개념의 프로그래밍 작성을 가능하게 해줍니다. 구조적 프로그래밍이 코드의 재사용을 편리하게 해준다면 객체지향 프로그래밍은 객체의 재사용을 통해 좀 더 강력하고 유연한 재사용과 다양한 특성을 제공합니다.
가비지 컬렉션
같은 객체지향 언어인 C++의 경우 메모리의 할당과 해제에 대한 관리는 전적으로 프로그래머에게 맡겨집니다. 따라서 프로그래머의 실수나 버그로 인해 메모리의 해제가 정상적으로 이뤄지지 않아 메모리 소모가 발생하게 됩니다. Java의 경우 메모리의 해제를 가상머신이 자동으로 해주기 때문에 더이상 프로그래머는 메모리 해제를 신경쓰지 않아도 됩니다.
멀티쓰레드
Java는 멀티쓰레드 개념을 도입하여 태스크보다 더 작은 실행 단위들을 동시에 실행시킬 수 있으므로 네트워크 서비스에 좀 더 최적화된 서버용 프로그램을 작성할 수 있도록 지원합니다.
이밖에서 Java는 다양한 기능들을 제공하여 다양한 작업을 손쉽게 할 수 있도록 프로그래머에게 강력한 코딩 능력을 지원합니다.
리눅스 프로세스 잘 관리하는 비법 - "프로세스 관리 명령 세트 메뉴"
프로세스 관리 명령
1. ps
현재 시스템에서 실행 중인 프로세스 목록을 출력한다.
사용형식
ps [옵션]
사용옵션
-A : 모든 프로세스 출력.
-e : -A와 동일.
T : 현재 터미널에서 실행된 프로세스만 출력.
-a : 현재 세션 사용자에 의해 모든 터미널에서 실행된 프로세스 출력.
a : 모든 프로세스를 BSD 스타일로 출력. 명령과 함께 사용된 파라메터도 출력. x와 함께 사용시 제어 터미널없이 실행된 프로세스까지 함께 출력.
-d : 현재 세션 사용자에 의해 실행된 모든 프로세스를 제어 터미널 유무와 상관없이 전부 출력.
r : 현재 실행중인 프로세스만 출력.
x : 제어 터미널 없이 실행된 프로세스만 출력. a 옵션과 보통 함께 사용.
f : pstree와 같은 형식으로 ASCII art 방식으로 출력.
-F : 모든 항목을 다 출력.(full format)
-f : UNIX 스타일로 모든 항목 출력.
j : 부모 프로세스를 포함한 jobs 형식으로 출력.
-j : jobs 형식.
l : BSD 스타일의 자세한 항목 출력.
-l : long format. -y옵션과 함께 사용하면 플래그 정보를 표시하지 않는다.
u : UID를 포함하여 출력.
v : 가상 메모리 정보를 포함하여 출력.
-Z : 보안 컨텍스트 정보 출력.(SELinux에 해당.)
h : 헤더 없이 출력.
w, -w : wide format으로 줄바꿈하여 모든 항목 출력.
일반적으로 1개의 옵션만을 사용하기 보다는 관련있는 옵션을 묶어서 사용한다. ps 명령의 실행 예는 다음과 같다.
모든 프로세스를 표준적인 방법을 출력하는 예:
$ ps -e
$ ps -ef
$ ps -eF
$ ps -ely
프로세스 트리를 출력하는 예:
$ ps -ejH
$ ps axjf
스레드 정보를 표시하는 예:
$ ps -eLf
$ ps axms
보안 정보를 출력하는 예:
$ ps -eo euser,ruser,suser,fuser,f,comm,label
$ ps axZ
$ ps -eM
root 사용자에 의해 실행된 모든 프로세스 출력하는 예:
$ ps -U root -u root u
출력 필드
- USER : 프로세스 소유자의 계정.
- PID : 프로세스 식별자.
- RSS : 프로세스에 의해 사용되는 실제 메모리 사용량.(Kbyte)
- SZ : 프로세스 자료와 스택의 크기.(Kbyte)
- TIME : 현재까지 사용된 CPU 시간.(분, 초)
- TTY : 프로세스의 제어 터미널.
- %CPU : 전체 프로세스를 대상으로 CPU가 해당 프로세스를 실행한 CPU 시간의 백분율.
- %MEM : 프로세스가 사용한 실제 메모리의 백분율.
- START : 프로세스 시작 시간.
- COMMAND : 명령어 이름.
프로세스의 상태코드(STAT)
- D(disk wait) : 디스크 입출력 대기같은 인터럽트 할 수 없는 대기 상태.
- R(running or runable) : 프로세스가 실행중이거나 실행큐에 들어있는 실행 가능 상태.
- S(sleep) : 인터럽트 가능한 대기 상태.
- T(stopped) : 프로세스가 ^Z나 트레이스 명령 등으로 멈춘 상태.
- W(paging) : 가상 메모리 사용 중.(2.6버전 커널부터 사용하지 않음.)
- X(dead) : 실행 종료. 이후 나타나지 않음.
- Z(zombie) : 좀비 프로세스.
BSD 포맷에 의한 추가 상태 코드
- < : 실행 우선 순위 높음.(다른 사용자의 nice 명령에 의한 우선 순위 변경 안됨.)
- N : 실행 우선 순위 낮음.(다른 사용자의 nice 명령에 의해 우선 순위 변경 가능.)
- L : 실시간 실행이나 사용자 입출력에 의해 메모리 락이 걸림.
- s : 세션내에서 실행됨.
- l : 멀티 스레드.
- + : 포그라운드 실행.
2. pstree
프로세스 정보를 트리 형태로 출력.
사용 옵션
-n : PID 순으로 정렬.
-p : 프로세스 명과 PID를 함께 출력.
3.kill
지정된 프로세스에게 종료 시그널을 전송한다.
사용형식
사용옵션
-s : 전송할 시그널의 이름이나 번호 지정.
-p : 전송할 시그널을 출력만 한다.
-l : 시그널 목록 출력.
SIGNAL 종류
- SIGHUP(1) : 제어 터미널이 멈추거나 제어 프로세스가 죽음.
- SIGINT(2) : 키보드로부터의 인터럽트 시그널.
- SIGQUIT(3) : 키보드로부터의 종료 시그널(quit).
- SIGABORT(6) : abort로부터의 중단.
- SIGKILL(9) : kill 시그널. 강제 종료.
- SIGTERM(15) : 프로그램 종료 시그널.
3. top
프로세스의 CPU와 메모리 사용량 등 정보를 실시간으로 모니터링한다.
4. bg
^Z로 중지된 프로세스를 백그라운드 작업으로 변경한다. 명령 실행시 '&'를 함께 실행하면 실행시 백그라운드 작업으로 실행된다.
5. jobs
백그라운드 작업 목록을 표시한다.
6. fg
백그라운드 작업 목록에서 프로세스를 포그라운드 작업으로 되돌린다.
Frame-Relay 구성 실습 문제 (1)
Frame-Relay 설정 예제
다음 토폴로지를 보고 전체 네트워크가 연결될 수 있도록 설정해 봅시다.
그림. 네트워크 토폴로지
풀이
그림. Packet Tracer 실습
R1 라우터 설정
Router> enable
Router# configure termanal
Router(config)# hostname R1
R1(config)# interface Loopback0
R1(config-if)# ip address 192.168.0.1 255.255.255.0
R1(config-if)# exit
R1(config)# interface Serial0/0
R1(config-if)# encapsulation frame-relay
R1(config-if)# frame-relay lmi-type ansi
R1(config-if)# exit
R1(config)# interface Serial0/0.12 point-to-point
R1(config-subif)# ip address 192.168.2.1 255.255.255.0
R1(config-subif)# frame-relay interface-dlci 102
R1(config-subif)# interface Serial0/0.13 point-to-point
R1(config-subif)# ip address 192.168.3.1 255.255.255.0
R1(config-subif)# frame-relay interface-dlci 103
R1(config-subif)# interface Serial0/0.14 point-to-point
R1(config-subif)# ip address 192.168.4.1 255.255.255.0
R1(config-subif)# frame-relay interface-dlci 104
R1(config-subif)# exit
R1(config)# ip route 192.168.20.0 255.255.255.0 192.168.2.2
R1(config)# ip route 192.168.30.0 255.255.255.0 192.168.3.2
R1(config)# ip route 192.168.40.0 255.255.255.0 192.168.4.2
R2 라우터 설정
Router> enable
Router# configure terminal
Router(config)# hostname R2
R2(config)# interface loopback0
R2(config-if)# ip address 192.168.20.1 255.255.255.0
R2(config-if)# exit
R2(config)# interface Serial0/0
R2(config-if)# ip address 192.168.2.2 255.255.255.0
R2(config-if)# encapsulation frame-relay
R2(config-if)# frame-relay lmi-type ansi
R1(config-if)# frame-relay interface-dlci 201
R2(config-if)# exit
R2(config)# ip addr 0.0.0.0 0.0.0.0 192.168.2.1
R3 라우터 설정
Router> enable
Router# configure terminal
Router(config)# hostname R3
R3(config)# interface loopback0
R3(config-if)# ip address 192.168.30.1 255.255.255.0
R3(config-if)# exit
R3(config)# interface Serial0/0
R3(config-if)# ip address 192.168.3.2 255.255.255.0
R3(config-if)# encapsulation frame-relay
R3(config-if)# frame-relay lmi-type ansi
R3(config-if)# frame-relay interface-dlci 301
R3(config-if)# exit
R3(config)# ip route 0.0.0.0 0.0.0.0 192.168.3.1
R4 라우터 설정
Router> enable
Router# configure terminal
Router(config)# hostname R4
R4(config)# interface loopback0
R4(config-if)# ip address 192.168.40.1 255.255.255.0
R4(config-if)# exit
R4(config)# interface Serial0/0
R4(config-if)# ip address 192.168.4.2 255.255.255.0
R4(config-if)# encapsulation frame-relay
R4(config-if)# frame-relay lmi-type ansi
R4(config-if)# frame-relay interface-dlci 401
R4(config-if)# exit
R4(config)# ip route 0.0.0.0 0.0.0.0 192.168.4.1
복잡한 네트워크 경로 지정 쉽게 풀어보기 (정적 경로)
정적 경로 종합문제 (1)
다음 topology를 보고 각 PC가 서로 통신이 되도록 정적 라우팅 설정을 하세요. (시리얼 클럭 동기 무시)
그림. 네트워크 토폴로지
라우터 R1 설정하기
Router> enable
Router# configure terminal
Router(config)# hostname R1
R1(config)# interface fastethernet 0/0
R1(config-if)# ip address 192.168.0.1 255.255.255.0
R1(config-if)# no shutdown
R1(config)# interface fastethernet 0/1
R1(config-if)# ip address 192.168.100.9 255.255.255.252
R1(config-if)# no shutdown
R1(config-if)# exit
R1(config)# interface serial 0/0
R1(config-if)# ip address 192.168.100.1 255.255.255.252
R1(config-if)# no shutdown
R1(config-if)# exit
R1(config)# ip route 192.168.10.0 255.255.255.0 192.168.100.10
R1(config)# ip route 192.168.100.4 255.255.255.252 192.168.100.2
R1(config)# ip route 192.168.20.0 255.255.255.0 192.168.100.2
R1(config)# end
R1#
라우터 R2 설정하기
Router> enable
Router# configure terminal
Router(config)# hostname R2
R2(config)# interface fastethernet 0/0
R2(config-if)# ip address 192.168.100.5 255.255.255.252
R2(config-if)# no shutdown
R2(config)# interface serial 0/0
R2(config-if)# ip address 192.168.100.2 255.255.255.252
R2(config-if)# no shutdown
R2(config-if)# exit
R2(config)# ip route 192.168.0.0 255.255.255.0 192.168.100.1
R2(config)# ip route 192.168.100.8 255.255.255.252 192.168.100.1
R2(config)# ip route 192.168.10.0 255.255.255.0 192.168.100.1
R2(config)# ip route 192.168.10.0 255.255.255.0 192.168.100.6
R2(config)# end
R2#
라우터 R3 설정하기
Router> enable
Router# configure terminal
Router(config)# hostname R3
R3(config)# interface fastethernet 0/0
R3(config-if)# ip address 192.168.100.10 255.255.255.252
R3(config-if)# no shutdown
R3(config)# interface fastethernet 0/1
R3(config-if)# ip address 192.168.10.1 255.255.255.0
R3(config-if)# no shutdown
R3(config-if)# exit
R3(config)# ip route 192.168.0.0 255.255.255.0 192.168.100.9
R3(config)# ip route 192.168.100.0 255.255.255.252 192.168.100.9
R3(config)# ip route 192.168.100.4 255.255.255.252 192.168.100.9
R3(config)# ip route 192.168.20.0 255.255.255.0 192.168.100.9
R3(config)# end
R3#
라우터 R4 설정하기
Router> enable
Router# configure terminal
Router(config)# hostname R4
R4(config)# interface fastethernet 0/0
R4(config-if)# ip address 192.168.100.6 255.255.255.252
R4(config-if)# no shutdown
R4(config)# interface fastethernet 0/1
R4(config-if)# ip address 192.168.20.1 255.255.255.0
R4(config-if)# no shutdown
R4(config-if)# exit
R4(config)# ip route 192.168.0.0 255.255.255.0 192.168.100.5
R4(config)# ip route 192.168.100.0 255.255.255.252 192.168.100.5
R4(config)# ip route 192.168.100.8 255.255.255.252 192.168.100.5
R4(config)# ip route 192.168.10.0 255.255.255.0 192.168.100.5
R4(config)# end
R4#
디폴트 게이트웨이를 사용하여 라우팅 테이블 단순화하기
라우터 R1 설정하기
Router> enable
Router# configure terminal
Router(config)# hostname R1
R1(config)# interface fastethernet 0/0
R1(config-if)# ip address 192.168.0.1 255.255.255.0
R1(config-if)# no shutdown
R1(config)# interface fastethernet 0/1
R1(config-if)# ip address 192.168.100.9 255.255.255.252
R1(config-if)# no shutdown
R1(config-if)# exit
R1(config)# interface serial 0/0
R1(config-if)# ip address 192.168.100.1 255.255.255.252
R1(config-if)# no shutdown
R1(config-if)# exit
R1(config)# ip route 192.168.10.0 255.255.255.0 192.168.100.10
R1(config)# ip route 0.0.0.0 0.0.0.0 192.168.100.2
R1(config)# end
R1#
라우터 R2 설정하기
Router> enable
Router# configure terminal
Router(config)# hostname R2
R2(config)# interface fastethernet 0/0
R2(config-if)# ip address 192.168.100.5 255.255.255.252
R2(config-if)# no shutdown
R2(config)# interface serial 0/0
R2(config-if)# ip address 192.168.100.2 255.255.255.252
R2(config-if)# no shutdown
R2(config-if)# exit
R2(config)# ip route 0.0.0.0 0.0.0.0 192.168.100.1
R2(config)# ip route 192.168.10.0 255.255.255.0 192.168.100.6
R2(config)# end
R2#
라우터 R3 설정하기
Router> enable
Router# configure terminal
Router(config)# hostname R3
R3(config)# interface fastethernet 0/0
R3(config-if)# ip address 192.168.100.10 255.255.255.252
R3(config-if)# no shutdown
R3(config)# interface fastethernet 0/1
R3(config-if)# ip address 192.168.10.1 255.255.255.0
R3(config-if)# no shutdown
R3(config-if)# exit
R3(config)# ip route 0.0.0.0 0.0.0.0 192.168.100.9
R3(config)# end
R3#
라우터 R4 설정하기
Router> enable
Router# configure terminal
Router(config)# hostname R4
R4(config)# interface fastethernet 0/0
R4(config-if)# ip address 192.168.100.6 255.255.255.252
R4(config-if)# no shutdown
R4(config)# interface fastethernet 0/1
R4(config-if)# ip address 192.168.20.1 255.255.255.0
R4(config-if)# no shutdown
R4(config-if)# exit
R4(config)# ip route 0.0.0.0 0.0.0.0 192.168.100.5
R4(config)# no shutdown
R4(config)# end
R4#