개발자의 오르막

SW 심화교육 11일차 본문

교육과정 ( SW 개발자 심화과정 )/Java

SW 심화교육 11일차

계단 2019. 7. 25. 10:30

# 서버 파일

  

 

# 클라이언트 파일

  

 

- 한 번에 많은 트래픽이 들어왔을 때 어떻게 처리하는지

- 하나의 CPU를 가상의 여러 공간으로 나눈 다음에 들어오는 트래픽을 분산처리

- 가상의 CPU : Thread (서버의 필수 사항 : 공정한 서비스)

 

 

# Thread

 

 

- 오버라이딩 할 때 throws Exception 같은거 붙여서는 재정의 못함
   (조상에서 선언된 대로만 재 정의해야 한다.)

- new Thread() 하면 가상의 CPU를 OS에서 할당받는다. (분신)
- 할당받은 CPU 는 생성자에 넘겨진 포인터를 물고간다.
- start() 호출 시에 준비과정을 거쳐 새로운 가상 CPU가
   rb.run() 을 호출한다.

   * 쓰레드 이용방법
   1. Runnable 상속받은 클래스 선언
   2. new Thread 하면서 1의 인스턴스의 포인터를 넘긴다.
   3. Thread:: start()를 호출하면 가상 CPU (쓰레드) 가 Run 호출

 

- Program : executable file . 
- Process : a running program  
- Thread : a light-weighted process (독자 행동을 하지만 조금 다르다) 
   쓰레드는 프로세스 안에서만 존재가 가능하다. 
   쓰레드간 메모리를 공유할 수 있다. 
   프로세스 간은 메모리 전달(복/붙)은 가능해도 공유는 불가능하다 
   프로세스 간의 대표적인 메모리 전달 방법 : socket   
   (복/붙도 메모리 전달로 볼 수 있지만 이건 윈도우에서 국한된 개념) 
   포르세스 종료 == 프로세스가 가진 모든 쓰레드의 종료 
   (인간을 생각하면 이해하기 쉬움 : 뇌, 위장, 척추) 
   쓰레드는 독자적으로 운용된다. 모든 쓰레드가 종료되어야 프로세스 종료

 

 

- 결과를 보면 각각의 Thread 가 동시에 작동하는 것을 알 수 있음

   즉, 쓰레드는 각각 독자적으로 돌아가는 프로그램이 된다는 것을 알 수 있다.

   쓰레드는 독자적으로 돌아가는 프로그램이기에 이런일은 얼마든지 가능

 

 

- 하나의 인스턴스를 두개의 쓰레드가 공유하면서, 작업 순서가 엉킴
- 싱크로나이제이션, 동기화 (쓰레드가 순차적으로 실행될 수 있도록 잠금)

 

 

 

# Sleep 구현

 

 

- 쓰레드는 동작이 끝나는 순간 죽는다.

- JOIN : 쓰레드를 여러개 생성하고 다 끝난 후 최종 정리가 필요할 때 사용

 

# Join

 

- server.close(), socket.close() 는 모든 다운로드가 끝났을 때 사용되어야 함으로 Join 함수가 필요하다.

 

 


# mysql - java

- C:\javawork\mysql-connector-java-5.1.7-bin.jar

  클래스 파일이 담겨있다. (java 로 개발된) - 클래스 압축파일 : .jar

 

- classpath를 한다. java-classpath

  java -classpath .;mysql-connector-java-5.1.7-bin.jar Test099

  (.jar 파일이 현재 .java 파일과 같은 디렉터리에 있을 때)

 

- C:\Program Files\Java\jre1.8.0_191\lib\ext

  C:\Program Files\Java\jdk1.8.0_191\jre\lib\ext

  mysql-connector-java-5.1.7-bin.jar 파일을 각각 넣어야함.

  그러면 따로 컴파일 할 때 classpath를 안해도 java 동작함

 

 

 

- Statement 는 conn 줄을 타고 오가는 바구니를 연상하면 된다.

  executeUpdate 함수의 리턴값은 변경된 레코드의 갯수이다.

  select 는 레코드를 변경하지 않는다.

  해서 executeUpdate 는 insert / delete / update 문장에 사용한다.

 

- conn.close() 는 신중하게 해야 한다. (줄을 끊는 것을 의미)

  statement.close() 도 신중하게 해야 한다. (바구니 내리는 것을 의미)

 

  conn 형성 - stmt 형성 - 작업 - stmt.close() - conn.close() 이 순서를 지켜야한다.

 

 

- java의 Connection에서 (ip,port,id,pwd)를 소캣에 sql 문을 보냄

- insert, update, delete 는 변경된 데이터의 갯수를 반환한다.

- statement.close()를 통해 데이터 반환, connection.close()를 통해 연결 종료

- 반드시 위의 순서대로 인스턴스 생성과 .close() 함수 호출이 이뤄줘야함.

 

 

 

- Connection, Statement 모두 인터페이스이다.
- DriverManager.getConnection 안에서는 Connection 을 상속받은
  모종의 클래스의 인스턴스를 리턴한다.
  그것은 Mysql 에 접속할 수 있는 기능을 구현하고 있다.
- 모종의 클래스를 세탕하는 코드가 Class.forName("com.mysql.jdbc.Driver");

 

- 커서(서버사이드커서) : sql문장으로 jdbc 에 보내고 생겨난 결과물을 커서라고 부른다.

                                이 때 결과물에 접속할 수 있는 접속 가능한 정보가 생성됨.

 

 

STID / NAME   ← 포인터의 값 (next 이후 포인터가 내려가게됨)

101  홍길동

102  김정인

103  전재형

 

- 현재 가르치고 있는 필드의 데이터 값을 리턴하게 된다.

- 셀렉트된 결과값은 데이터베이스 서버 쪽에 생성된다.

  그 결과값을 자바쪽으로 돌려주는데, 이때 커서가 생성되고,

  커서의 접속정보를 동시에 생성한다.

  자바쪽에 커서가 돌아왔을 때 해당 정보를 읽을 수 있다.

 

- 커서 안의 정보를 역순으로 데이터를 읽을 수 없다.

 

* Connection 은 빨리 끊어줘야 한다.

  길게 점유하고 있으면 다른 신호를 처리하지 못함으로 회선의 비효율성이 증가

 

- ResultSet 은 CURSOR (SELECT 결과 ) 에 접근 가능한 정보

  CURSOR 는 서버에 생긴다.

  connection 이 끊기면 ResultSet은 사용 불가능하다.

  ( Connection 닫기 전에 사용 끝나야 한다. )

  Connection 은 비싼 자원이며 제한적이다. (Oracle 같은 경우 비용 ↑)

  따라서 접속 후에 빨리 끊어주는 것이 바람직하다. ( ex) 콜센터 )

  * 정보를 읽기 전에 connection 을 끊어주면 ResultSet에 정보가 없다.

 

# O-R Mapping 규칙

 

 

- O-R Mapping 규칙 ( Golden Rule, Rule Of Thumb )
- field → property → 멤버변수를 이야기함
                            멤버변수는 getter/setter 를 이용하고 private 하게 선언
- table → class
- record → instance

 

* 위의 코드는 밑의 2가지 조건을 이상적으로 구현하고 있음

  1. Connection 은 살아 있을 때 모든 기능을 다 동작해야 한다.

  2. Connection 은 빨리 끊어야 한다.

 

- Vo 란?

  : ValueObject 의 약자 - 값을 담는 객체

  - 테이블 구조와 동일하게, 레코드 하나를 인스턴스에 담을 수 있는 역할

  - DTO (Data Transfer Object)

    Entity 등을 사용하는 경우도 있지만 모두 같은 의미이다.

 

- Oracle

  : ojdbc14.jar 파일 다운 및 경로 설정

 

 

- JDBC의 장점 : mysql 의 코드와 거의 틀린점이 없다.

  Connection, Statement 를 상속한 Oracle 과 연동 가능한 클래스를 OracleDriver에서

  DriverManager 에 세팅해주면 Oracle에 맞추어 개발된, Connection Statement ResultSet

  등을 상속받은 클래스가 공급되는 구조이다.

 

'교육과정 ( SW 개발자 심화과정 ) > Java' 카테고리의 다른 글

SW 심화교육 15일차  (0) 2019.07.29
SW 심화교육 12일차  (0) 2019.07.26
SW 심화과정 D-9  (0) 2019.07.24
SW 심화교육 9일차  (0) 2019.07.23
SW 심화교육 8일차  (0) 2019.07.22
Comments