개발자의 오르막
SW 심화교육 11일차 본문
# 서버 파일
# 클라이언트 파일
- 한 번에 많은 트래픽이 들어왔을 때 어떻게 처리하는지
- 하나의 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 |