반응형
 ChatServer.java
package networkex;

import java.io.*;
import java.net.*;

//클라이언트에서 보내온 메세지를 전달받아 출력하는 서버프로그램
public class ChatServer {
	public static void main(String[] args) throws IOException {
		//서버 : 클라이언트의 요청을 받기 위한 준비를 한다.
		ServerSocket echoServer = new ServerSocket(4000);
		System.out.println("[message] Echo server Running...");
		BufferedReader in = null; //Buffered 일시적으로 공간을 늘려 누적 후 실행
		//클라이언트의 요청을 받아 들인다.
		//try~catch문이 없는 경우 서버에 오류가 발생하여 닫힐 수 있다.
		//try~catch > throws 책임감이 더 큼
		try {
			Socket socket = echoServer.accept();
			//클라이언트에서 서버의 ip,port입력해야 진행됨.
			//클라이언트가 보내온 메세지를 읽어들인다.
			//getInputStream() 클라이언트가 보내온 메세지가 없는 경우 스레드(작업은) 일시 중지가 된다.
			in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
			// in.readLine(); //클라이언트가 보낸 문자를 다 읽어들인다.
			
			String str = in.readLine();
			System.out.println("["+socket.getInetAddress().getHostAddress() + "]님이 보내온 메세지 >>" + str);
			
			socket.close();
		} catch (IOException e) {
			System.out.println("[error] 서버에 문제가 생겼습니다.");
		} finally {
			in.close();
			echoServer.close(); //통로만 끊김
		}
	}
}​
package networkex;

import java.io.*;
import java.net.*;

//키보드로 메세지를 입력받아 서버에 접속하여 전달하는 클라이언트 프로그램
public class ChatClient {
	public static void main(String[] args) throws IOException {
		BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter out = null;
		
		//socket객체 생성 : 서버에 접속 요청을 한다.
//		Socket socket = new Socket("자신의 ip주소 입력", 4000); //서버의 ip,port입력해야함
		Socket socket = new Socket("127.0.0.1", 4000);
		try {
			System.out.println("전달 메세지 입력 >> ");
			String message = in.readLine();
			
			//서버로 데이터를 보낼 (써서 담아둘) 객체 생성
			//socket.getOutputStream() socket에 보냄
			out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
			out.write(message); //메세지쓰기
			out.flush(); //메세지 내보내기, 버퍼 강제 비우기
		} catch (IOException e) {
			System.out.println("[에러] 서버에 접속할 수 없습니다.");
		} finally {
			out.close();
			in.close();
			socket.close();
		}
	}
}​
Server.java
package networkex;

import java.io.*;
import java.net.*;
import java.util.Scanner;

public class Server {

	public static void main(String[] args) throws IOException {
		System.out.println("서버가 실행되었습니다.");
		//서버 생성, 실행, 준비
		ServerSocket serverSocket = new ServerSocket(5000);
		//client의 접속을 허용(accept)
		
		BufferedReader bufReader = null;
		BufferedWriter bufWriter = null;
		try {
			Socket socket = serverSocket.accept();
			
			while(true) {
				//client가 보낼 데이터 담음
				bufReader = new BufferedReader (new InputStreamReader(socket.getInputStream()));
				String message = bufReader.readLine();
				System.out.println("클라이언트Message : " + message);
				
				//client에 데이터 전송
				Scanner sc = new Scanner(System.in);
				System.out.println("[서버 메세지] : ");
				String str = sc.nextLine();
				
				//client에 보낼 데이터를 담을 객체 생성
				bufWriter = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
				
				//클라이언트가 보낸 메세지가 "종료"라는 글자가 들어있으면 클라이언트로 "종료"글자 보내기
				if (message.contains("종료"))
					str = "종료";
				bufWriter.write(str);
				bufWriter.newLine();
				//클라이언트로 데이터 전송하기
				bufWriter.flush();
				if (message.contains("종료")) {
					socket.close();
					break;
				}
				
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			bufReader.close();
			bufWriter.close();
			serverSocket.close();
		}
	}
}​
package networkex;

import java.io.*;
import java.net.Socket;
import java.util.Scanner;

public class Client {
	public static void main(String[] args) throws IOException {
		System.out.println("클라이언트가 접속되었습니다.");
		//서버 접속
		Socket socket = new Socket("192.168.0.196", 7000);
		//	Socket socket = new Socket("localhost", 5000);
		//Server에 보낼 데이터
		BufferedWriter bufWriter = null;
		BufferedReader bufReader = null;
		try {
			bufWriter = new BufferedWriter (new OutputStreamWriter(socket.getOutputStream()));
			
			while (true) {
				// Server에 보낼 데이터를 담는 객체 생성
				
				Scanner sc = new Scanner(System.in);
				System.out.println("[클라이언트 메세지] : ");
				String str = sc.nextLine();
				bufWriter.write(str);
				bufWriter.newLine();
				
				//서버로 데이터 전송(버퍼 강제 비움)
				bufWriter.flush();
				
				//Server가 보낸 데이터를 담는 객체 생성
				bufReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
				String message = bufReader.readLine();
				bufWriter.newLine();
				System.out.println("333");
				
				System.out.println("서버Message : " + message);
				if(message.contains("종료")) {
					str = "종료";
					bufWriter.write(str);
					bufWriter.newLine();
					bufWriter.flush();
					break;
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			socket.close();
			bufReader.close();
		}
	}
}​

 

package networkex.chatting;

RDB ( Relational DataBase) 관계형데이터베이스
표도구의 데이터를 테이블이라는 구조화된 형식으로 저장, 변경, 삭제, 추가 검색 등을 지원하는 저장소

 
Management System
테이블 구조로 데이터를 저장, 변경, 삭제, 추가, 검색할 수 있는

데이터를 전반적으로 함께 관리할 수 있는 시스템
종류 : Oracle, 
데이터는 무조건 테이블 구조로 저장이 된다.
영구적으로 데이터가 반영이 된다(저장)

데이터의 공유
 

 

SQL(Structure Query Language)

직접적으로 데이터를 관리하는데 사용하는 명령문
SQL문장
- 명령문은 대/소문자를 구별하지 않는다.
- 하지만 값은 대/소문자를 구분한다.
- SQL 문장은 한 줄 또는 여러 줄에 나눠서 입력할 수 있다.
- SQL 문장의 끝은 반드시 세미콜론(;)로 끝을 맺는다.
 
DML (Data Manipulation Language) = 데이터 조작어
- 데이터를 조작하는 명령어 
- 데이터를 추가, 삭제, 변경, 검색(조회)
INSERT - 추가
DELETE - 삭제(데이터의 전체, 일부 제거)
UPDATE - 갱신(수정)
SELECT - 원본은 유지되지만 데이터를 검색해서 가져올때 변형해서 가져올 수 있다. (검색, 조회)
**반드시 영구적인 반영을 위해서는 TCL (확정(commit), 되돌리기(rollback))을 이용해야만 영구반영이 이루어진다.
 
DQL (Data Query Language) = 데이터 질의어
- 데이터의 가져오는 명령만 처리하는 명령문
SELECT문
 
DDL (Data Defination Language) = 데이터 정의어
- 데이터를 저장하는 구조를 정의, 수정, 제거하는 기능을 처리하는 명령어 
CREATE문 : 테이블, 계정, 뷰, 함수, 프로시저... 등을 생성
ALTER: 테이블..등을 수정, 변경, 이름을 변경
DROP : 테이블..등을 제거
TRUNCATE: 테이블의 구조만 제외하고 나머지를 모두 제거
(해당 테이블 내 데이터 전체삭제, 자동확정됨)
CREATE TATBLE 테이블명
CREATE USER IDENTIFIED PW;

DROP TABLE 테이블명 PURGE(완전제거);

DCL (Data Control Language) = 데이터 제어어
- 데이터를 제어하는 기능
GRANT : 계정에 권한 부여
REVOKE : 계정에 권한 회수
 
TCL(Transaction Control Language) = 트랜젝션 제어어
: 작업을 제어하는 명령어
commit : 데이터베이스 전체 데이터의 갱신결과를 영구적으로 확정
rollback : 갱신결과를 영구적으로 전체 되돌리기
checkpoint(savepoint) : rollback하는 곳의 시점을 지정하여 원하는 지점까지의 rollback
 

 

반응형

+ Recent posts