JDBC란?

  • 데이터 베이스를 자바기반 어플리케이션에서 사용하기 위한 라이브러리.
  • Oracle, MS SQL, MySQL 등 각 언어마다 쿼리는 다르지만, 기능은 동일하다.
    • DB에 관계없이 자바 코드로 데이터 베이스를 작성할 수 있는 인터페이스이다.
  • Java DataBase Connectivity
  • 사용하는 데이터베이스를 교체해도 자바 코드를 바꾸지 않아도 된다.
  • JDBC가 실제 데이터 베이스를 동작시키기 위해 각 제조사에서 만들어놓은 JDBC Driver를 사용한다.
    • 실제 구동은 드라이버가 한다.

실행 과정

  1. 드라이버 로드하기
  2. 연결 생성
  3. 문장 실행
  4. 결과집합 사용하기

DB와 Driver 설치

현재 랩탑에 설치돼있는 mysql 8.0.25을 사용하겠다.

 

MySQL :: Download Connector/J

MySQL Connector/J 8.0 is highly recommended for use with MySQL Server 8.0, 5.7 and 5.6. Please upgrade to MySQL Connector/J 8.0.

dev.mysql.com

실습

데이터 조회

기본 코드 이해

  • 연결 단계
    • 이러한 순서로 진행된다.
      • new 연산자로 객체를 만들지 않는다.
    1. Class.forName("com.mysql.cj.jdbc.Driver");
      • 1번이 실행되면, 드라이버가 메모리에 올라간다.
    2. Connection con = DriverManager.getConnection(...);
      • 2번이 실행되면, 연결이 이루어진다. 드라이버 객체를 얻는다.
    3. Statement st = con.createStatement();
      • 3번이 실행되면, 쿼리를 실행한다.
        • 결과 집합이 만들어진다.
        • 레코드 단위로 한줄 씩 받아온다.
    4. ResultSet rs = st.executeQuery(sql);
    5. rs.next();
    6. String title = rs.getString("title");
      • 순회하면서 데이터를 얻는다.
public class Program {
    public static void main(String[] args) throws Exception {
        String url = "jdbc:mysql://localhost:3306/connectdb?useSSL=false&characterEncoding=UTF-8&serverTimezone=UTC";
        String sql = "SELECT * FROM employee";

        Class.forName("com.mysql.cj.jdbc.Driver");
        Connection con = DriverManager.getConnection(url, "connectuser", "connect123!@#");
        Statement st = con.createStatement();
        ResultSet rs = st.executeQuery(sql);

        rs.next();
        String name = rs.getString("name");
        System.out.println(name);


        rs.close();
        st.close();
    }
}

데이터 추가

public class Program2 {
    public static void main(String[] args) throws Exception {
        String url = "jdbc:mysql://localhost:3306/connectdb?useSSL=false&characterEncoding=UTF-8&serverTimezone=UTC";
//        String sql = "INSERT INTO employee VALUES(1111, 'Choi', 'programmer', 7788, '2019-12-22', 9999.99, 300.00, 10)";
        String sql = "INSERT INTO employee VALUES(?,?,?,?,?,?,?,?)";

        Class.forName("com.mysql.cj.jdbc.Driver");
        Connection con = DriverManager.getConnection(url, "connectuser", "connect123!@#");
//        Statement st = con.createStatement();
        PreparedStatement st = con.prepareStatement(sql);
        st.setInt(1, 1111);
        st.setString(2, "Choi");
        st.setString(3, "Pro");
        st.setInt(4, 7788);
        st.setString(5, "2019-12-22");
        st.setBigDecimal(6, BigDecimal.valueOf(9999.99));
        st.setBigDecimal(7, BigDecimal.valueOf(300.00));
        st.setInt(8, 10);

        int result = st.executeUpdate();

        st.close();
        con.close();
    }
}

데이터 수정

public class Program3 {
    public static void main(String[] args) throws Exception {
        String url = "jdbc:mysql://localhost:3306/connectdb?useSSL=false&characterEncoding=UTF-8&serverTimezone=UTC";
        String sql = "UPDATE EMPLOYEE SET job = 'CTO' WHERE name = 'Choi'";

        Class.forName("com.mysql.cj.jdbc.Driver");
        Connection con = DriverManager.getConnection(url, "connectuser", "connect123!@#");
        PreparedStatement st = con.prepareStatement(sql);

        int result = st.executeUpdate();

        st.close();
        con.close();
    }
}

데이터 삭제

public class Program4 {
    public static void main(String[] args) throws Exception {
        String url = "jdbc:mysql://localhost:3306/connectdb?useSSL=false&characterEncoding=UTF-8&serverTimezone=UTC";
        String sql = "DELETE FROM employee WHERE name = 'Choi'";

        Class.forName("com.mysql.cj.jdbc.Driver");
        Connection con = DriverManager.getConnection(url, "connectuser", "connect123!@#");
        PreparedStatement st = con.prepareStatement(sql);

        int result = st.executeUpdate();

        st.close();
        con.close();
    }
}

쿼리문만 바꿔서 데이터 CRUD를 할 수 있다.

어떤 조건을 걸때는 자바 단에서 하는 게 아니라 쿼리문에서 해주는 것이 시간,공간을 절약할 수 있다.

'Programming > 언어' 카테고리의 다른 글

[Kotlin] 표현식과 명령문  (0) 2023.02.12
Java 코드가 실행되는 과정  (0) 2021.12.26
Garbage Collector 찍먹하기  (0) 2021.12.26
객체지향에서 인터페이스란?  (0) 2021.12.26
Java 자잘한 실수 모음  (0) 2020.07.06

네트워크 기기

  • 라우터
  • 레이어2 스위치
  • 레이어3 스위치
    • 라우터 + 스위치, VLAN..

네트워크를 구성하는 기기들은 크게 3가지가 있다.

데이터를 받아, 이해하고 전송하는 역할을 한다.

  1. 데이터를 수신
    • 전기신호를 받아서 디지털 신호로 바꾼다.
  2. 데이터를 보낼 곳을 결정
    • 데이터에 있는 헤더 등 제어정보를 참조하여 전송할 곳을 결정한다.
  3. 데이터 전송
    • 데이터를 전기신호로 바꿔 전송한다.
    • 헤더를 고치기도 한다.

인터페이스

  • 각각의 기기에는 네트워크 기기나 PC등의 장치를 연결하기 위한 인터페이스라는 것이 있다.
    • 이더넷 인터페이스를 가장 많이 사용한다.
    • 이더넷 포트나, LAN포트라고도 한다.
  • 각 장치의 인터페이스끼리 연결을한다.
    • 연결선을 통해 전기신호가 전달된다. 유선뿐만아니라 무선링크도 존재한다.

이렇게 기기들이 연결되어 네트워크가 만들어진다.

'CS > 네트워크' 카테고리의 다른 글

SSL/TLS란? SNI, Intermediate-Chain  (1) 2023.10.22
HTTP 버전  (0) 2023.10.22
쿠키와 세션  (0) 2021.12.26
HTTP의 Stateless  (0) 2021.12.26
컴퓨터 네트워크 첫 걸음  (0) 2021.07.19
"그림으로 배우는 네트워크 원리" 책 참고.

컴퓨터 네트워크란 무엇인가?

컴퓨터 간의 정보를 주고받기 위한 통로의 집합, 망이다.

그 경로에 스위치 라우터 등의 기기가 있고 그 사이에 전송하는 방법과 규칙에 대해 배운다.

누구나 이용할 수 있는 네트워크가 인터넷이다. 회사나 단체 안에서만 사용하는 네트워크를 사설 네트워크라고 한다.

네트워크의 종류

LAN은 local area안에서의 네트워크를 말한다. 그 LAN안에서만 통신을 할 수 있다. 다른 local area와 통신하고 싶다면 WAN을 통해 연결할 수 있다.

WAN은 wide area이다. WAN은 통신사업자, 회사가 구축해서 서비스하는 상품이다.

 

https://www.truecable.com/blogs/cable-academy/wan-vs-lan

인터넷

인터넷은 세계적인 기업들이 관리한다. 예를 들어 google, amazon, NTT등이 있다. 이 기업들을 ISP(internet service provider)라고 한다.

이런 조직의 네트워크를 AS(Autonomous System, 자율적인 시스템)이라고 한다.

ISP의 상위 그룹을 Tier1이라한다. 중간 계층에서 서비스하는 ISP도 존재한다. 인터넷 상의 모든 ISP는 Tier1 기업들을 경유해서 연결되는 것이다.

https://www.slideshare.net/SmartenIT/2013-0916-sociallyaware-traffic-management

 

데이터를 주고받는 주체

클라이언트 서버 애플리케이션

클라이언트는 서버에 어떤 파일 전송 요청을 보내고, 서버는 요청을 받아서 응답을 해준다.

P2P(peer to peer) 애플리케이션

어떤 클라이언트가 서버를 통해 다운받은 파일을 가지고 있으면, 다른 클라이언트는 파일을 가지고 있는 클라이언트들을 통해 파일을 받을 수 있는 방식이다.

토렌트가 p2p방식이다.

통신 규칙

프로토콜

컴퓨터 통신에서 데이터를 주고받을 때 같은 기준을 이용해서 주고받아야 한다. 그 때 사용하는 규칙, 약속을 프로토콜이라고 한다.

TCP/IP

네트워크 아키텍처는 프로토콜의 집합이다. 네트워크 아키텍처로는 TCP/IP라는 아키텍처가 가장 널리 사용된다. 그 외에 OSI 등이 있다.

TCP/IP는 4계층으로 이루어져 있다.

https://has3ong.github.io/protocol-stack/

 

클라우드

서버를 직접 관리, 운용하지 않고 CSP(cloud service provider, 임의로 만든 말임)들이 만들어놓은 서버를 임대해서 사용하는 방식이다.

서버의 어느 부분을 사용자에게 제공하냐에 따라 3가지로 분류된다.

IaaS

네트워크를 통해 서버의 하드웨어 자원을 사용할 수 있게한다. OS와 DB등의 미들웨어, 어플리케이션을 직접 선택해서 사용한다.

gcp compute engine, aws ec2등이 여기에 해당한다.

PaaS

네트워크를 통해 서버의 플랫폼을 이용한다. 플랫폼이란 OS와 OS위에서 동작하는 데이터베이스 같은 미들웨어를 포함한 부분을 말한다.

gcp app engine, aws lambda, heroku 등이 있다.

SaaS

특정 소프트웨어 기능을 이용할 수 있게 만든 서비스이다. 예를 들어 스토리지 서비스가 있다. google drive, drop box등이 있다.

https://www.bmc.com/blogs/saas-vs-paas-vs-iaas-whats-the-difference-and-how-to-choose/

 

 

'CS > 네트워크' 카테고리의 다른 글

SSL/TLS란? SNI, Intermediate-Chain  (1) 2023.10.22
HTTP 버전  (0) 2023.10.22
쿠키와 세션  (0) 2021.12.26
HTTP의 Stateless  (0) 2021.12.26
네트워크의 구성요소  (0) 2021.07.19

Pull Request

Pull Request란?

Push권한이 없는 프로젝트에 기여할 때 사용한다. Fork를 이용해 새로운 Repository를 생성하여 작업하고 Pull Request를 하면 원본 프로젝트 관리자가 코드 변경내역을 확인하여 Merge여부를 결정한다.

의미 : 내가 작업한 코드를 있으니 검토후 병합해주세요

방법

Github와 GitKraken을 통해 PR하는 과정이다. 다른 방법이 존재할 수 있다. 
  1. Fork
  2. clone, remote 설정
  3. branch 생성
  4. 수정 작업 후 add, commit, push
  5. Pull Request 생성
  6. 코드리뷰, Merge Pull Request
  7. Merge 이후 branch 삭제 및 동기화

1. Fork

참여하고 싶은 프로젝트가 생기면 아마 그 프로젝트에 Push 할 권한은 없을 테니까 “Fork” 해야 한다. “Fork” 하면 GitHub이 프로젝트를 통째로 복사해준다. 그 복사본은 사용자 네임스페이스에 있고 Push 할 수도 있다.

타겟 프로젝트(참여/기여하고싶은 프로젝트)의 저장소를 자신의 저장소로 Fork한다.


여기서는 내 저장소를 Fork하는거라 pknu-wap repository로 Fork했음

 

지정한 저장소에 Fork 되었다.

2. clone, remote 설정

Fork로 생성한 본인 계정의 저장소에서 clone or download버튼을 누르고 URL을 복사한다.

 

깃 크라켄에서 클론을 해준다.

3. Branch 생성

새로 적용한 풀 리퀘스트를 이용한 흐름은 GitHub의 원격 저장소를 각자의 계정으로 Fork해 간 뒤에 fork 한 저장소를 클론 받아서 작업용 브랜치를 하나 만들어서 작업하고 이를 Fork 한 저장소에 푸시해서 풀 리퀘스트로 원격 저장소에 보내는 방식이다. 로컬에서 master 브랜치에 작업해도 되지만 이렇게 하면 풀 리퀘스트를 나누어서 작업하기 쉽지 않으므로 Pull Reqeust마다 새로운 브랜치를 만들어서 Fork 저장소에 푸시한다.

브랜치를 누르고 브랜치 이름을 정해준다.


4. 코드 작성 후 add, commit, push

 

코드를 작성/수정하고 add, commit, push 해준다.

push 시에 branch로 해주어야 한다.

5. Pull Request 생성

 

Fork를 한 저장소로 들어오면 Compare & pull request 버튼이 활성화된다.

PR을 작성해준다.

6. 코드리뷰, Merge Pull Request

원본 프로젝트의 Pull requests 페이지에 들어가면 comment를 달며 토론할 수 있다.

Merge pull requestConfirm merge 하면 원본프로젝트에 Merge된다.


git 초보를 위한 풀리퀘스트(pull request) 방법

Pull Request를 이용한 개발 흐름을 적용해 보고 나서... :: Outsider's Dev Story

+ Recent posts