JAVA 네트워크 통신과 DBMS

#JAVA_020 #네트워크 통신과 DBMS
Jan 19, 2024
JAVA 네트워크 통신과 DBMS
 

🍒 네트워크 통신과 DMBS 구조도

네트워크 통신과 DMBS의 기본 관계도
notion image
위 그림은 네트워크 통신과, 데이터베이스 관리 시스템 (DBMS) 그리고 서버 클라이언테 아키텍처를 좀 더 쉽게 이해하기위해서 만든 그림이다. 이런 개념이 코드작성 전에 탑재가 되어있어야 좀 더 원활하게 일하며 가독성이 높은 구조를 짤 수가 있다.
 
 
클라이언트 코드 예시
public class BankApp { public static void main(String[] args) { Connection conn = DBConnection.getInstance(); try { String insert = "insert into account_tb(password, balance, created_at) values(?,?,now())"; String delete = "delete from account_tb where number = ?"; String update = "update account_tb set balance = balance + ? where number = ?"; // 쿼리용 버퍼 PreparedStatement PreparedStatement pstmt = conn.prepareStatement(delete); pstmt.setInt(1,1); pstmt.executeUpdate(); int num = pstmt.executeUpdate(); System.out.println(num); } catch (Exception e) { throw new RuntimeException(e); } } }
 
 
서버 코드 예시
public class DBConnection { public static Connection getInstance() { String username = "root"; String password = "1234"; String url = "jdbc:mariadb://localhost:3306/cosdb"; // 프로토콜이 적용된 소켓 try { Connection conn = DriverManager.getConnection(url, username, password); System.out.println("db connect success"); return conn; } catch (Exception e) { throw new RuntimeException(e); } } }
 
 
DBMS 코드 예시
CREATE DATABASE cosdb; USE cosdb; CREATE TABLE account_tb( number int PRIMARY KEY auto_increment, password varchar(100) not null, balance int not null, created_at timestamp not null ) ENGINE=INNODB DEFAULT CHARSET=UTF8MB4;
💡
이 단계 이전에 MariaDB Gradle을 적용해야된다. 아래 링크를 클릭하면 적용하는 방법이 있다.
 
 

🥝 클라이언트 요청 단계

notion image
  • 클라이언트에서 DBMS와 연결하기 위해서는 몇가지 필수 절차가 있다.
 
 
 

1️⃣ 클라이언트에서 서버 LISTENING 포트 연결 시도

클라이언트가 서버랑 연결을 시도할 때 필요한 것이 IP주소 , Port번호 , Protocol방식 이다. 서버와 통신을 할려면 무조건 알아야되는 정보라고 할 수 있다. 이를 위해서 URL을 사용한다. 자세히 살펴보면 우리가 익히들었던 URL이 우리에게 필요한 모든 정보를 담고 있다.
  • URL (Uniform Resources Location) 구성요소
    • // URL 구조 "jdbc:mariadb://localhost:3306/cosdb" //구성요소 ↓↓↓↓ "프로토콜//아이피주소:포트넘버/DB이름"
      1. 스키마 (프로토콜) :
          • http : 하이퍼텍스트 프로토콜
          • https : 보안된 http 프로토콜
          • ftp : 파일 전송 프로토콜
          • jdbc:mariadb : MariaDB DBMS 프로토콜
      1. IP 주소 :
          • 또는 도메인 이름
      1. 포트번호 :
          • 포트가 80이라면 생략된다. 기본포트이기 때문이다.
 
 

2️⃣서버에서 연결 후 DB까지 접속할려면 ID, Passwords도 필요하다.

//DiverManger클래스를 통해 Url 과 인가를 받을 수 있는 ID와 비번을 함께 전달한다.// Connection conn = DriverManager.getConnection(url, username, password);
  • Connection클래스를 통해서 클라이언트으로부터 요청된 내용을 바탕으로 통신을 위한 소켓이 Connection 클래스의 객체로 생성된다.
  • 연결이 완료가 되면 클라이언트는 서버의 리스너 포트를 비워주고 새로 생성된 소켓과 연결 한다.
    • notion image
 
 

3️⃣ 소켓 연결이 완료가 되면 스트림을 통한 정보교환이 시작된다.

notion image
  • 그림안에 보이는 숫자 번호대로 정보가 요청되고 응답된다.
 
 
  • MariaDB에서 사용하는 버퍼스트림 클래스는 이름이 자바랑 틀리다.
    • // 쿼리용 버퍼스트림 PreparedStatement PreparedStatement 변수명 = 소켓명.prepareStatement(); // 클라이언트 측에서 버퍼Writing을 할때 쿼리 문법 -> int값을 리턴한다. PreparedStatement.executeUpdate();
    • excuteUpdate() 메소드를 실행하면 MariaDB에서 표현되는 영향을 받은 행 : 정수 가 반환된다.
      • notion image
      • 0을 반환하면 영향을 받은 행이 없다.
      • 1을 반환하면 영향을 받은 행이 하나이다.
      • -1을 반환하면 정상적으로 처리가 되지 못했다는 뜻이다.
 
 
  • DBMS에서 자료들을 테이블로 보관하고 있기 때문에, 정보는 각 타입이 혼합된 테이블로 받는 일이 흔하다.
    • 그러므로 대부분의 경우 클라이언트는 정보를 받기위한 객체, class를 준비해야 된다.
    • 타입이 같다면 vector로 arrayList에 담아도 된다.
    • 문자열로 받는다면 따로 파싱할 필요는 없다.
 
 
  • 한 클라이언트 마다 한 소켓이 배정이 된다고 생각하면 된다.
    • 즉, 3명의 클라이언트가 접속이 되었다면 서버는 4개의 스레드가 돌아가고 있다.
      • 한개는 전체 스레드를 관리하는 메인스레드, 나머지 3개는 소켓용 스레드
       
       
  • 클라이언트가 DBMS에 요청하는 쿼리는 주로 4가지가 있다.
    • SECECT : 데이터 조회
    • INSERT : 새로운 데이터 삽입
    • UPDATE : 기존 데이터를 수정한다.
      • 내부적으로 찾아서 select
      • 그다음 delete
      • 그 다음 insert
      • UPDATE안에 이 세가지 행동이 묶어져 있다.
    • DELETE : 데이터를 삭제한다.
      • DBMS가 delete를 write한다는 개념이다.
      • 즉, write라는 것은 변경한다는 뜻.
 
 
💡
선생님이 전해주신 지혜들..
  • 하드디스크랑 IO는 애플리 케이션이 아니다. 개발자는 그것만 알면된다.
  • DBMS는 각 잡고 공부해야 된다. 쿼리만 다뤄서는 알 수 없다.
  • 테이블을 설계할 수 있는 능력이 있어야 된다.
  • 인증을 통해서 문이 열리면 세션이 만들어 졌다고 표현한다.
  • 세션이 만들어 졌다는 말은 연결이 되었다는 말이다.
Share article

AI_Nomads