250x250
Notice
Recent Posts
Recent Comments
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Tags more
Archives
Today
Total
관리 메뉴

개린이 개발노트

국비지원 JAVA(자바) 프로그래밍(네트워크,OSI7계층,클라이언트,서버 동작과정, ) 본문

국비지원(국비교육) 웹 개발자 과정

국비지원 JAVA(자바) 프로그래밍(네트워크,OSI7계층,클라이언트,서버 동작과정, )

개린이9999 2022. 12. 12. 09:02
728x90

네트워크

클라이언트(사용자,브라우저)와 서버의 관계 

 

OSI 7 계층

네트워크에 관련된 장비, 규약 - 회사마다 다 다름(유지보수가 힘듦)

그래서  OSI 7 계층만들어서 표준을 맞춤.

 

1계층-물리계층(기계,전기,기능을 케이블로 전송할 때)

단순히 주고받기만함 ex) 장비: 리피터, 허브 등

 

2계층-데이터 링크 계층 

정보의 전달(오류검출)

정부를 주고 받는단위: 프레임

ex) 장비: 브리지, 스위치  

 

3계층-네트워크 계층(ip계층) 

안정성이 올라감, 속도가 빠름 

ip를 가지고 주소 결정, 경로 설정 등을 함

ip할당(127.0.0.1 컴퓨터의 주소)

 

4계층- 전송계층

통신이 활성화되는 계층

TCP(TCP란? 상호간 신뢰적인 연결지향 서비스 제공) 프로토콜(프로토콜이란? 통신규약)을 사용 

패킷손실가능성이적다, 중복,순서가 변경되는경우가 없음 

연결<->비연결:TCP에 반대되는 비연결->UDP 신뢰성이 낮음, 비연결성 일대다의 환경에 적합

 

5계층 세션계층

통신을 위한 논리적 연결

 

6계층 표현계층

 

7계층 응용계층

서비스 제공


ip

port 번호 

정확한 ip와 port번호를 알아야 클라이언트와 서버를 연결할 수 있다. 

socket (연결해주는 장치)

 

서버와 클라이언트 부분은 따로따로 작업함.

 

서버 동작 과정

1.소켓 생성이 첫번쨰

2.ip,port를 지정

3. 클라이언트 요청대기 

4. 클라이언트의 요청을 승인하고 데이터 송수신에 대한 소켓 생성

5. 송수신 

6. 연결 종료 

 

클라이언트

1. 소켓 생성

2. 서버한테 요청 연결

3. 송수신 

4. 연결종료 


 

 

package 주소;

import java.net.InetAddress;

public class Sample01 {

	public static void main(String[] args) {

		// ip 주소 뽑아내기
		try {
			InetAddress local = InetAddress.getLocalHost();
			System.out.println("내컴퓨터 ip 주소: " + local.getHostAddress());

			InetAddress[] iaArr = InetAddress.getAllByName("www.naver.com");
			for (InetAddress r : iaArr) {
				System.out.println("네이버 ip 주소" + r.getHostAddress());
			}
		} catch (Exception e) {
		
		}
	}
}

결과값 :

내컴퓨터 ip 주소: x비밀x
네이버 ip 주소223.130.200.104
네이버 ip 주소223.130.195.95

 

 


Url

Http:// Ip.port

DNS

도메인네임서비스  IP를 가지고 접속하기 힘들어서 DNS 이용

 

요청방식

post 방식은 로그인 같은것

get 방식은 보안을 중요시 하지않는 일반 검색 같은 것

 

ServerSocket

ip,port 1~65550

 

Socket

 

package 소켓연결;

import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {

   public static void main(String[] args) {
      ServerSocket serverSocket = null;

      try {
         serverSocket = new ServerSocket();
         serverSocket.bind(new InetSocketAddress("localHost", 50003));

         while (true) {
            System.out.println("[연결대기]");
            Socket socket = serverSocket.accept();

            InetSocketAddress isa = (InetSocketAddress) socket.getRemoteSocketAddress();
            System.out.println("[연결수락] : " + isa.getHostName());

            byte[] bytes = null;
            String message= null;
            
            InputStream is= socket.getInputStream();
            bytes = new byte[100];
            int readByteCount = is.read(bytes);
            message = new String(bytes,0,readByteCount,"utf-8"); 
            System.out.println("[데이터 받음]"+message);
            
            OutputStream os= socket.getOutputStream();
            message = "hi Client";
            bytes = message.getBytes("utf-8");
            os.write(bytes);
            os.flush();
            System.out.println("[데이터 전송함]");
            
            is.close();
            os.close();
            socket.close();
         }
      } catch (Exception e) {
         System.out.println("[연결실패]");
      }
      if (!serverSocket.isClosed()) {
         try {
            serverSocket.close();
         } catch (Exception e) {

         }
      }
   }

}

연결대기]
[연결수락] : 127.0.0.1
[데이터 받음]hi Server
[데이터 전송함]
[연결대기]

package 소켓연결;

import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.net.Socket;

public class Client {

   public static void main(String[] args) {
      Socket socket = null;
      
      try {
         socket=new Socket();
         System.out.println("[연결 요청]");
         socket.connect(new InetSocketAddress("localhost",50003));
         System.out.println("[연결 성공]");
         
         byte[] bytes = null;
         String message = null;
         
         OutputStream os = socket.getOutputStream();
         message = "hi Server";
         bytes= message.getBytes("utf-8");
         os.write(bytes);
         os.flush();
         System.out.println("[데이터 전송함]");
     
         InputStream is= socket.getInputStream();
         bytes = new byte[100];
         int readByteCount = is.read(bytes);
         message = new String(bytes,0,readByteCount,"utf-8");
         System.out.println("[데이터 받음]"+message);
      
         os.close();
         is.close();
         
      }catch (Exception e) {
      }
      if(!socket.isClosed()) {
         try {
            socket.close();
         }catch (Exception e) {
         }
      }
   }

}

[연결 요청]
[연결 성공]
[데이터 전송함]
[데이터 받음]hi Client



구글에 mariadb 검색하고 제일 첫번째 꺼 다운로드

마리아디비 데이터베이스시스템 다운로드 

마리아디비와 자바를 연동하는 커넥트 제이 라이브러리

오라클 같은경우는 따로 설치할 필요없음! 

이 파일은 따로 자기가 작업하는 이클립스워크스페이스에 저장!!

마리아디비 본파일 설치방법 

설치할때비밀번호 안까먹게 조심하자!! 

전부 선택 

 

인스톨 클릭! 

설치완료되면 다음과 같이 폴더가 뜹니다.


데이터베이스

데이터베이스 관리 시스템-DBMS, 오라클 등 

 

데이터베이스 언어

테이블- 표

레코드- 행 

필드- 열 

데이터정의어(DDL) - 테이블 생성create, 삭제drop, 수정 alter 

데이터조작어(DML) - 테이블 안에 데이터들을 삽입insert, 삭제delete , 수정update ,검색(조회)select

데이터 제어어 (DCL)-  rollback(복구) commit(저장,갱신기능)

데이터베이스란? - YouTube 참조

 

학원 -> 학원관련 DB 

직원 관련 표

수강생 관련 표 

과목 관련 표

과목별 수강료 표

이러한 것들을 통으로 묶어서 관리하는것을 데이터베이스

 

먼저 간단한 INSERT 문입니다. 보기엔 간단해 보이지만 사용 방법에 따른 종류도 많습니다.

1. INSERT INTO [테이블명] ([컬럼명1],[컬럼명2]....) VALUES ('값1','값2',...)

기본적으로 위의 쿼리문처럼 사용을 하는데요. 컬럼명1은 값1의 위치라는 점. 즉, 첫번째 위치의 값은 첫번째 값으로, 해당하는 위치에 값을 넣어 주어야 저장이 됩니다.

2. INSERT INTO [테이블명] VALUES ('값1','값2',...)

2번의 경우는 앞에 컬럼명을 생략한 경우입니다. 위와같이도 사용이 가능합니다.

보통의 경우 테이블의 변동이 없고 항목이 적을 때 주로 사용을 합니다.

대신 테이블 생성시 혹은 SELECT 문을 사용하였을때 보이는 전체 컬럼의 순서대로 값을 넣어주어야 합니다.

주의사항으로 만약에 첫번째 컬럼의 속성이 IDENTITY(자동증가값)일 경우에는 해당 값은 INSERT로

넣을 수 없으니 해당 컬럼은빼고 나머지 데이터만 입력합니다

예) 첫번째 컬럼의 속성이 IDENTITY인 경우

INSERT INTO [테이블명] VALUES ('값2','값3',...)

3. INSERT INTO [테이블명1] ([컬럼명1],[컬럼명2]..) SELECT '값1','값2'.. FROM [테이블명2]

3번의 경우 INSERT 문과 SELECT 문을 합친 것으로, 단순히 값을 하나씩 직접 넣는 것에서 필요한 값을 특정 테이블에서 가져와서 넣는 것입니다. 마찬가지로 컬럼명1에는 값1이 저장되게 되므로 저장시 값이 이상하다면 위치를 잘 확인해 보셔야 됩니다. 물론 테이블명 뒤에 사용할 수있는 WHERE 절이나 GROUP 등 모든 절을 사용하실 수 있습니다.

사용 용도는 저 같은경우에는 주로 똑같거나 비슷한 구조의 테이블에 데이터를 복사하는 용도로 사용합니다.

4. INSERT INTO [테이블명1] SELECT '값1','값2'.. FROM [테이블명2]

마찬가지로 컬럼명은 생략이 가능합니다.

 

728x90