본문 바로가기
Backend

06월 17일 월 | SW활용 01 - 운영체제(OS)와 쓰레드, 네트워크

by 구라미 2019. 6. 17.

1. 운영체제(OS)와 쓰레드, 네트워크

운영체제의 특징

 

운영체제는 사용자로 하여금 컴퓨터의 하드웨어를 보다 쉽게 사용할 수 있도록 인터페이스를 제공해 주는 소프트웨어이다. 하드웨어는 컴퓨터의 장치를 제어하고 데이터를 처리 하는 중앙 처리 장치, 데이터를 저장하는 기억 장치, 외부와의 통신을 담당하는 통신 장치 그리고 데이터 입력과 출력을 담당하는 입출력 장치 등으로 구분될 수 있다. 즉, 운영체제
는 사용자 편의성을 위한 인터페이스인 동시에 다양한 자원을 관리하는 자원 관리자이다.

 

OS

Windows

Linux

Unix

MacOS

 

 

 

운영체제 기본 명령어 활용

 

1) 윈도우즈 운영체제

CLI (Command Line Interface)

명령어 입력으로 프로그램을 실행시키는 방식

CMD로 Command창을 호출해서 실행시키기.

 

GUI (Graphic User Interface)

윈도즈 내에서 파일을 이동하고 프로그램을 실행하는 것 등 모든 것이 GUI 명령에 해당한다. 

메모리나 디스크 제어 등이 필요할 경우에는 제어판에서 필요 기능을 선택하여 명령을 내릴 수 있다.

 

2) 리눅스/유닉스 계열 운영체제의 기본 명령어

리눅스 유닉스 명령어는 Shell로 입력할수 있다.

Shell이란 컴퓨터 내부를 관리하는 Kernel과 사용자 간을 연결하는 Command 창이다.

Shell의 기능은,

- 세션 별 변수를 설정, OS를 사용자가 원하는 상태로 설정하도록 지원

- 사용자 요청에 기반한 명령렬 작성

- 백그라운드 처리, sub Shell 생성

- 일련의 명령어를 묶어 처리하는 스크립트 기능 지원

 

1. CLI(Command Line Interface) 기본 명령어
리눅스는 최상위 유저를 CLI 환경에서 #으로 표시하며 일반 유저를 $로 표시한다. 명령어에 대한 도움말은 -help, -h, #man을 명령어 뒤에 붙임으로써 확인할 수 있다. 모든 명령 어에는 다른 옵션값들이 존재한다. 예를 들어 #mkdir는 디렉터리를 생성하는 명령어이며, -p옵션을 사용하면 하위 디렉터리까지 한 번에 생성할 수 있다. #cp는 파일 복사 명령어 있데, -i는 덮어쓰기, -r는 하위 디렉터리 및 파일 모두 복사, -v는 명령어 실행 과정을 보여 주는 옵션값이다.

 

 

시험평가 기준

 


 

자바의 쓰레드

동작하고 있는 프로그램을 프로세스(Process)라고 한다. 보통 한 개의 프로세스는 한 가지의 일을 하지만, 

이 쓰레드를 이용하면 한 프로세스 내에서 두 가지 또는 그 이상의 일을 동시에 할 수 있게 된다.

프로세스는 운영체제로부터 작업을 할당받는 작업의 단위이고, 

쓰레드는 프로세스가 할당 받은 자원을 이용하는 실행의 단위이다.

쓰레드는 하나의 프로그램이나 하나의 메소드가 CPU자원을 전부 점유하는 것을 막을 수 있다.

 

쓰레드는,

동시에 여러가지 작업을 동시에 수행할 수 있게하는것이다.

자바에서 Thread를 만드는 방법은 크게 Thread클래스를 상속받는 방법과 Runnable인터페이스를 구현하는 방법이 있다.

 

1. 쓰레드를 사용하지 않는 경우.

한 줄 한 줄 다 순차적으로 실행

package oop0617;

class MyThread1 {
	private int num;
	private String name;
	
	public MyThread1(){}
	public MyThread1(int num, String name) {
		this.num = num;
		this.name = name;
	}
	
	public void run(){
		for(int a = 0; a<num; a++){
			System.out.println(name+":"+a);
		}
	}//run end
	
	public void start(){
		run();
	}//start end
	
}//class end


public class Thread {

	public static void main(String[] args) {
		// 쓰레드
		//-> 하나의 프로그램이나 하나의 메소드가 CPU자원을 전부 점유하는 것을 막을 수 있다.

		//1) 쓰레드를 사용하지 않는경우
		MyThread1 t1 = new MyThread1(100,"★");
		MyThread1 t2 = new MyThread1(100,"★★");
		MyThread1 t3 = new MyThread1(100,"★★★");
		
		t1.start(); //★ 하나가 0~99까지 나옴
		t2.start(); //★★ 가 0~99까지 나옴
		t3.start(); //★★★ 가 0~99까지 나옴
		
	}
}//class end

 

결과값:

★:0
★:1
★:2
★:3

.......

★★★:98
★★★:99 이런 식의 결과

 

 

2. 쓰레드를 사용하였을 경우

Runnable 이용해서 구현 많이 한다.

Start 함수를 통해서 run을 부름.

 

package oop0617;

class MyThread2 extends Thread {

	private int num;
	private String name;
	public MyThread2() {}
	public MyThread2(int num, String name) {
		this.num = num;
		this.name = name;
	}
	@Override
	public void run() {
		for(int a =0; a<num; a++){
			System.out.println(name+":"+a);
		}
	}//run() end
}//class end

public class Test02_Thread {

	public static void main(String[] args) {
		// 2) 쓰레드를 사용하는 경우
		MyThread2 t1 = new MyThread2(100,"★");
		MyThread2 t2 = new MyThread2(100,"★★");
		MyThread2 t3 = new MyThread2(100,"★★★");
		
		t1.start(); 
		t2.start(); 
		t3.start(); 
		
	}//main end
}//class end

 

결과값:

★:0
★★★:0
★★:0
★★★:1
★:1
★★★:2

....

★:99
★★:99

 

이런 식으로 뒤섞인 결과가 나온다.

자바가상머신이 쓰레드 관리자를 갖고 있는데 그것이 관리하는 것.

채팅프로그램 만들 때 필요하다.

 

3) Runnable 인터페이스 이용하기

package oop0617;

class MyThread3 implements Runnable { //구현
	
	private int num;
	private String name;
	public MyThread3() {}
	public MyThread3(int num, String name) {
		this.num = num;
		this.name = name;
	}
	@Override
	public void run() {
		for(int a =0; a<num; a++){
			System.out.println(name+":"+a);
		}
	}//run() end
}//class end

public class Test03_Thread {

	public static void main(String[] args) {
		//3) Runnable 인터페이스를 이용한 경우
		// -> JVM이 쓰레드 관리자에 등록하고 
		// -> start() 메소드가 run()을 호출한다
		
		//다형성
		//Runnable target = new Thread()
		Thread t1 = new Thread(new MyThread3(1000,"★"));
		Thread t2 = new Thread(new MyThread3(1000,"★★"));
		Thread t3 = new Thread(new MyThread3(1000,"★★★"));
		
		t1.start();
		t2.start();
		t3.start();
		
	}//main end
}//class end

 

 

4) 영화티켓 구매 예제

 

synchronized 키워드

쓰레드가 여러 개 실행될 때 즉, 멀티쓰레드 환경에서는 쓰레드 간에 손발이 착착 맞아야하는 경우가 많다.

쓰레드 간에 실행 순서를 맞춰 모순이 발생하지 않게 하는 것을 쓰레드 동기화라고 한다.

메소드에 사용된다. 메소드에 synchronized라는 키워드가 지정되면 특정쓰레드에 의해 그 메소드가 실행되는 도중에 다른 쓰레드가 그 메소드를 호출할 수 없다.

 

package oop0617;

class Data{
	private int movieTicket = 0; //좌석번호
	public Data(){}
	
	public synchronized String ticket(){
		String str = ""; //결과값
		if(movieTicket<100){
			movieTicket=movieTicket+1;
			str="영화 좌석번호: "+movieTicket;
		}//if end
		return str;
	}//ticket() end
	public synchronized int getMovieTicket(){ //private으로 막은 movieTicket 가져오는 메소드
		//좌석번호 리턴
		return this.movieTicket;		
	}//getMovieTicket
}//class end


public class Test04_Ticket extends Thread { //main에서 상속받았다.
	
	String where; //현장구매, 모바일, 인터넷
	Data data;
	public Test04_Ticket(){}	
	public Test04_Ticket(String where, Data data) {
		this.where = where;
		this.data = data;
	}

	@Override
	public void run() {
		while(true) {
			if(data.getMovieTicket()>=100){
				break;
			}//if end
			System.out.println(where+"-"+data.ticket());
		}
	}//run() end
	
	public static void main(String[] args) {
		// 티켓 예매 프로그램
		//-> 예매종류: 현장구매, 모바일, 인터넷
		
		Data data = new Data();
		
		Test04_Ticket ticket1 = new Test04_Ticket("현장구매", data);
		ticket1.start();
		Test04_Ticket ticket2 = new Test04_Ticket("모바일", data);
		ticket2.start();
		Test04_Ticket ticket3 = new Test04_Ticket("인터넷", data);
		ticket3.start();
		

	}//main end
}//class end

 

결과값:

현장구매-영화 좌석번호: 3
모바일-영화 좌석번호: 1
인터넷-영화 좌석번호: 2
모바일-영화 좌석번호: 5
현장구매-영화 좌석번호: 4

.....

모바일-영화 좌석번호: 99
현장구매-영화 좌석번호: 96
모바일-영화 좌석번호: 100
인터넷-영화 좌석번호: 98

 

이렇게 쓰레드가 중간에 끼어들기 때문에 랜덤으로 출력되는 것처럼 보인다.

 


 

네트워크

우리가 만든 것을 서버로 올려서 통신할 수 있게

컴퓨터 2대 이상간의 교류. 그런데 이 컴퓨터들 간에는 서버와 클라이언트라는 관계가 형성된다.

서버는 서비스를 제공하는 컴퓨터를 의미하며 클라이언트는 서비스를 이용하는 컴퓨터를 의미한다.

 

LAN : Local Area Network, 근거리 네트워크 - 한 건물 또는 작은 지역을 커버하는 네트워크이다.

 

1. 주요 네트워크 관련 명령어 

  1) ipconfig
     내컴퓨터의 IP 주소를 확인하는 명령어
     서브넷 마스크 : 같은 네크워크를 사용하는지 식별할수 있음
     게이트웨이 : 외부에 나가는 통로. 허브 IP

     >ipconfig

     좀더 자세한 정보
     >ipconfig/all

     물리적주소(Mac Address) : 앞의 3자리는 제조사
                               뒤의 3자리는 시리얼 넘버

  2) ping
     서버의 IP정보도 확인하고 통신이 원할한지 파악하기 위해 사용.

     >ping 172.16.83.254      허브와 통신을 하고 있는지 확인
     >ping mbc.com            외부와 통신
     >ping goole.com          외국사이트
     >ping daum.net           악용하는 사례가 많이 있어서 대부분 막아놓음
                              ping에 답변하는라 속도가 느려지기 때문에 대부분 포털사이트 막아놓음

  3) nslookup
     네임서버(도메인주소로 매핑)를 조회하는 명령어

     >nslookup
     >google.com   대형사이트는 서버를 여러대 준비해 놓고 쓰는 경우가 많음
                   한대가 장애가 생기더라도 서비스를 원할히 하기 위해서 속도를 분산하기 위함도 있음.
     >daum.net
     >naver.com

  4) netstat
     NETwork STATus, 네트워크 상태 정보
     TCP 프로토콜 : 인터넷에서 컴퓨터와 컴퓨터가 연결된 상태에서 서로 데이터를 주고 받은 통신 방법
     UDP 프로토콜 : 연결이 끊어진 상태에서도 일방적으로 데이터를 주속 받는 방식
     172.16.83.100:55050 port번호 0~65535중에서 서비스당 1개의 포트를 제공함
     내컴퓨터와 연결된 컴퓨터들을 알수 있다

     >netstat
     >netstat -n   좀더 자세한 정보

  5) tracert
     서비스 경로 추적
     서버까지 가기 위한 중간 경로를 보여줌
     >tracert google.com   구글까지 가는 중간 경로롤 보여줌
                   

  6) arp
     IP address와 Mac Address 같이 조회

     >ipconfig/all    물리적주소(Mac Address) : 랜카드의 고유번호
                      DHCP 사용 : 자동IP. 가정용 인터넷
     >arp -a

 

 

2. 프로토콜(Protocol)

프로토콜은 제반 규칙, 약속이다.

  1) 프로토콜
    - 서로 다른 컴퓨터 간의 의사소통을 위한 통신 규약
    - 운영체제도 다를수 있고, 모바일 장비와 PC, 다양한 하드웨어와 다양한 운영체제간에 서로 데이터를 주고받으려면
      미리 약속을 해야 함
    - 컴퓨터끼리 정보를 주고받을 때의 통신방법에 대한 약속
 

  2) 프로토콜의 종류
     TELNET : 텍스트 기반의 원격접속 서비스
     IP (Internet Protocol)
     TCP(Transmission Protocol)
     UDP(User Datagram Protocol)         - 방송국
     FTP(File Transfer Protocol)         - 파일 전송
     SMTP(Simple Mail Transfer Protocol) - 이메일
     POP3(Post Office Protocol)          - 이메일
     DHCP(Dynamic Host Control Protocol) - 유동IP
     ARP(Address Resolution Protocol)    - IP 주소를 물리적 주소로 변환

     HTTP(Hyper Text Transfer Protocol)
     - 웹서비스. 웹브라우저에서 hyper text 문서를 교환하기 위한 프로토콜
     - 인터넷에서 하이퍼텍스트(hypertext) 문서를 교환하기 위하여 사용되는 통신규약이다.
       하이퍼텍스트는 문서 중간중간에 특정 키워드를 두고 문자나 그림을 상호 유기적으로 결합하여 연결시킴으로써,
       서로 다른 문서라 할지라도 하나의 문서인 것처럼 보이면서 참조하기 쉽도록 하는 방식을 의미한다.
       Server에 저장되어 있는 데이터를 사용자가 요청하면 그때마다 데이터를 보여주기 위해 사용 되는 Protocol이다

 

     HTTPS(HyperText Transfer Protocol over Secure Socket Layer)
     - 월드 와이드 웹 통신 프로토콜인 HTTP의 보안이 강화된 버전이다.

 

*이클립스에서 HTML 불러오기

package oop0617;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.*;

public class Test05_Network {

	public static void main(String[] args) {
		//네트워크 관련 클래스
		//HTTP Protocol 관련된 내용
		
		try{
			InetAddress ip = InetAddress.getByName("www.soldesk.com");
			System.out.println(ip.getHostName());
			System.out.println(ip.getHostAddress()); //ip확인
			System.out.println(ip.getLocalHost());//내 pc ip확인
			
			//HTML문서 내용 가져오기
			String address = "http://www.soldesk.com";
			URL url = new URL(address); //url이 내용갖고 있다.
			BufferedReader br = new BufferedReader(new InputStreamReader(url.openStream()));
			
			while(true){
				String line = br.readLine();
				if(line==null){
					break;
				}//if end
				System.out.println(line);
			}//while
			
			
		} catch(Exception e){
			System.out.println("오류"+e);
		}
		
		
		
	}//main end
}//class end

 

*웹페이지 파일로 가져오기

package oop0617;

import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.*;
import java.net.URL;


public class Test06_Network {

	public static void main(String[] args) {
		//웹페이지문서 저장하기
		
		try{
			//HTML문서 내용 가져오기
			String address = "http://www.soldesk.com";
			URL url = new URL(address); //url이 내용갖고 있다.
			InputStream in = url.openStream();
			FileOutputStream out = new FileOutputStream("d:/java0514/workspace/basicNetwork/soldesk.html");
			
			while(true){
				int data = in.read();
				if(data==-1){
					break;
				}//if end
				out.write(data);
			}//while
			in.close();
			out.close();

		} catch (Exception e){
			System.out.println("오류"+e);
		}

		
		
	}//main end
}//class end

 

 

 



  3) TCP와 UDP

     TCP : 연결된 상태에서 데이터를 전송함. 데이터가 정확히 전달되지 않으면 재전송해야 함
     UDP : 연결되지 않은 상태에서 일방적으로 데이터 전달

  4) IP(Internet Protocol) Address와 Mac Address

     IP Address   : 172.16.83.100
     MAC Address  : 90-2B-34-66-F7-41
                    16진수 12자리로 구성, 앞의 3세트는 제조사 고유코드
                    나머지 3세트는 장치 일련 번호로 구성됨

3. IP and Port의 이해

  1) IP Address. . . .  . : 172.16.203.31 
   - 접속 위치를 나타내는 프로토콜

   - IP는 항구와 같은 위치 정보에 해당하며 컴퓨터를 구분하는 용도로 사용.

   - Port는 항구에서 짐을 싫어 나르는 부두(port)와 같으며 네트워크로 접속되는 
     지점을 말합니다. 
     전산에서는 하나의 IP에 할당된 여러개의 네트워크 프로그램을 구분하는 
     용도로 사용. 
     하나의 포트는 하나의 프로그램과 매핑(연결)됨.

   - IP 하나당 사용 가능한 포트 : 0 ~ 65535 (2Byte)

   - 알려진 사용할 수 없는 포트 
     20, 21 : FTP(File Transfer Protocol), 파일 전송 
     22 : Secure Shell 접속 
     23 : Telnet, 원격 접속  -putty.exe
     25 : SMTP, 메일 전송 
     80 : HTTP, Apache, IIS등 웹서버, 인터넷 웹 페이지 서비스 
     3306 : MySQL 기본 포트, DBMS 
     1521 : Oracle 기본 포트, DBMS 
     8080 : Apache, 기타 웹 서버 
     1433 : MS-SQL 기본 포트, DBMS

   - 1500번 이하는 시스템이 사용하는 포트가 많음으로 1500번 이상 사용을 
     권장합니다.

 

4. 네트워크 원리

  1) 이더넷 어댑터 로컬 영역 연결:

   연결별 DNS 접미사  : 
   링크-로컬 IPv6 주소: fe80::892d:f52a:9e66:3181%11 
                        A   B  C  D   
   IPv4 주소          : 172.16.10.254 <- 0 ~ 255: 1 ~ 254 
   서브넷 마스크      : 255.255.0.0 
   기본 게이트웨이    : 172.16.0.1    <- NAT: 고정 IP로 연결

  2) 고정: 전세계 어디서나 접근 가능

  3) 사설: 기관, 회사, 단체에서만 한정해서 접근 가능 
   10.0.0.1, 127.0.0.1, 192.0.0.1, 172.0

  4) 서브넷 마스크: 255.255.0.0, 파일/프린터공유, 원격 컴퓨터접근등 
   11111111 1111111 00000000 00000000 
   172      16      10       254 
   ----------------------------------- 
   172      16       0       0 <- 네트워크 주소 
    
   11111111 1111111 00000000 00000000 
   172      16      10       10 
   ----------------------------------- 
   172      16       0       0 <- 네트워크 주소 
  
   11111111 1111111 00000000 00000000 
   172      16      1        1 
   ----------------------------------- 
   172      16       0       0 <- 네트워크 주소

 

5. DNS(Domain Name Service)

   IP Address와 Domain Name을 연결시켜 주는 서비스
   >nslookup
   >nate.com   IP 복사후 브라우저에 붙여넣으면 자동으로 도메인 네임으로 매핑됨

 

 

 

[Server]

- web server

- database server

- mail server //관리비용이 더 들어서 보통 유명 기업의 서비스 이용함 (naver, google, daum 등)

  그렇지만 기업용으로 도메인에 고유도메인/기관명을 넣고 싶을 때 호스팅해야함. 예) kim0101@soldest.co.kr

 

원격접속(Telnet)

-putty.exe

 

파일전송(FTP)

File Transfer Protocol

 

 

 

 

댓글