[2023.10.16] 개발자 교육 16일 차 : 강의-복습, DB연동, API, try-catch [구디 아카데미/김승수 강사님]

DaramGee·2023년 10월 16일
0

오늘 정리

try-catch문? 예외가 발생할 수 있는 코드 블록을 감싸고, 예외가 발생했을 때 해당 예외를 처리하는 코드를 제공한다.

DB연동 과정? JDBC API를 사용하여 Oracle 서버와 통신하는 방법을 학습하였고, 이를 통해 DB연동 과정을 이해하게 되었다.

복습

  • 선언부, 생성부 다르게!!
    • 다형성, 재사용성, 이식성, 유연성

    • 기존의 코드를 변경, 사이드 이펙트 발생(부수효과)

    • 전역변수 - 클래스 중심 코딩 전개 - 사이드 이펙트가 발생 o - 람다식과 같은 함수형에서 사용x,

    • 지역변수 - 처리 시 메소드 안에서만 유지됨->사이드 이펙트가 발생 x - 안전 - 람다식 함수형 프로그래밍 지원 가능한 이유!

      List<JButton>   li          = new ArrayList<>();
      -------------   --                --------------
      인터페이스, 추상클래스 변수명 = new 구현체클래스();
  • 컬렉션 프레임워크
    • 자료구조를 API로 구현한것
    • 읽기, 쓰기, 검색 기능 가능
    • List는 row를 관리
    • 제네릭 타입은 컬럼에 해당하는 값을 관리하고, 멀티타입을 적을 수 없어서 2개 이상의 집합을 조인했을 경우, VO 타입 보다는 Map을 사용하는 것이 복잡도를 줄일 수 있음.
    • VO패턴과 Map타입을 사용할 수 있는데 VO타입에는 타입이 정확해서 형전환이 필요없지만, Map은 객체타입으로 받기 때문에 그 값을 가지고 연산(회계, 재고관리 등)을 할 때는 형전환을 해야한다. 여기서 casting exception이 다수 발생함.
  • 상속
    • 상속받거나, 구현체 클래스를 선언할 때 하위클래스를 상속받는게 더 많은 변수와 메소드를 사용할 수 있다.

강의 내용

  • Java API를 활용하여 오라클(동기화, 영속성 보장) 서버와 통신하기
    • java.sql.* → 커넥션 풀 사용 x
    • javax.sql.* → 앤터프라이즈 서버(중간에 미들웨어 관리 : EJB 기술-Spring을 통해 경량서비스 제공)가 제공하는 커넥션 풀 사용 o


  • DB연동 4단계
    1. 데이터베이스 드라이버 로드(연경통로 확보) : 프로그래밍 언어에 따라 데이터베이스와의 연결을 위해 해당 데이터베이스의 드라이버를 로드해야 합니다. 드라이버는 각각의 데이터베이스 시스템에 특화되어 있으며, 사용하는 데이터베이스에 맞는 드라이버를 선택하여 로드해야 합니다.
    2. 연결 생성: 로드한 드라이버를 사용하여 실제로 데이터베이스와의 연결을 생성합니다. 이 단계에서는 연결 정보(호스트, 포트, 사용자 이름, 암호 등)를 설정하고, 해당 정보를 기반으로 데이터베이스 서버와 통신할 수 있는 연결 객체(Connection Object)를 생성합니다.
    3. 쿼리 실행: 연결 객체를 사용하여 SQL 쿼리를 실행합니다. 이 단계에서는 CRUD(Create, Read, Update, Delete) 작업 또는 다른 유형의 쿼리 작업을 수행할 수 있습니다. 필요한 경우 매개변수 바인딩 등의 추가적인 처리도 수행할 수 있습니다.
    4. 결과 처리 및 자원 해제: 쿼리 실행 후 반환된 결과를 받아서 필요한 처리 작업을 수행합니다. 이 단계에서는 조회 결과를 읽거나 변경된 데이터의 영향 범위 등을 확인할 수 있습니다.
      데이터베이스 리소스 (연결, 문장 등)가 더 이상 필요하지 않은 경우에는 명시적으로 자원을 해제해야 합니다.

  • DB연동 로드맵 (숙달 순서)
    • JDBC API 연동 : 원시적, 생산성 낮음(반복코드 多, 일괄처리x ), 코드양 늘어남(오타)
      • 학습목표 : List, Map 활용 연습 + CRUD 포함(기본, 게시판 수준 8시간 이내 처리 가능한지)
    • ORM 솔루션(iBatis → MyBatis) : 전체 코딩량 30% 이상 줄어듦.
    • Spring : JPA API - Hibernate 사용(sql문 없음. but, 클래스 설계는 해야함) 업무 깊이가 깊어지면 조인 테이블이 4~5개 이상이 될 때 설계하기 어려움. (조인 숙지해야함)

  • JSON(JavaScript Object Notation)
    • 데이터를 표현하기 위한 경량의 데이터 교환 형식

    • 이름-값 쌍(attribute–value pairs), 배열 자료형(array data types)으로 구성(Map은 키-값)

    • 객체는 중괄호 ({})로 둘러싸여 있으며, 콜론(:)으로 구분

    • 배열은 대괄호 ([])로 둘러싸여 있으며, 쉼표(,)로 구분

    • 예)

      // JSON 객체
      {
        "name": "John",
        "age": 30,
        "city": "New York"
      }
      
      // JSON 배열
      [
        "apple",
        "banana",
        "orange"
      ]

  • 포스트맨& 네이버 개발자센터 사용 등록
    • 포스트맨 API 등록 방법
      • 포스트맨 앱 열기: 먼저, 포스트맨 애플리케이션을 엽니다.
      • 새로운 요청 생성: 왼쪽 상단의 "New" 버튼을 클릭하고, "Request"를 선택하여 새로운 요청을 생성합니다.
      • 요청 정보 입력: 요청에 대한 정보를 입력합니다. 이는 API의 엔드포인트(URL), HTTP 메서드(GET, POST 등), 헤더(Headers), 파라미터(Query Parameters 또는 Body) 등을 포함할 수 있습니다.
      • 헤더 설정: 필요한 경우, 요청에 헤더를 추가하거나 수정할 수 있습니다. 일부 공공 API는 인증 토큰이나 API 키를 헤더에 포함해야 할 수도 있습니다.
      • 파라미터 설정: 필요한 경우, 쿼리 파라미터나 요청 바디에 데이터를 추가합니다. 이는 API가 예상하는 데이터 형식과 맞춰야 합니다.
      • 요청 보내기: 모든 설정이 완료되면 "Send" 버튼을 클릭하여 해당 요청을 보냅니다.
      • 응답 확인: 서버에서 반환된 응답 결과가 나타납니다. 이는 응답 코드, 응답 본문(JSON 또는 기타 형식) 등으로 구성될 수 있습니다.

  • 이클립스에서 json파일 생성 및 사용하기
    • new - other - file-파일명.json으로 생성(moduleinfo.java 삭제 / 파일 여는 방법 → 구글- 크롬으로 열기)

  • JSON 파일 볼 수 있도록 설정
    • Gson 다운로드
    • 오라클 JDBC 드라이버 파일 연동
      • Oracle JDBC 드라이버는 Oracle 데이터베이스와의 연결을 제공하는 데 사용
      • Java 애플리케이션에서 Oracle 데이터베이스에 접근하고 데이터를 검색, 삽입, 갱신, 삭제할 수 있게됨
      • 복사하여 해당 현재 작업 중인 로컬폴더로 이동시키기
    • 이클립스 빌드패스!
      • 빌드패스 → add External jars → 추가한 두 파일 add

  • REST(Representational State Transfer) API
    • 인터넷에서 정보를 주고받는 방법
    • 웹 서비스 아키텍처 스타일 중 하나로, 분산 시스템에서 리소스를 표현하고 상태를 전송하는 데 사용되는 소프트웨어 아키텍처
    • 주요 특징(리소스/URI/HTTP 메소드(GET,POST,PUT,DELETE 등)/표현/상태없음/연결)

  • 계속 반복되는 코드를 찾아본다 - 개선의지
    • 드라이버 클래스 반복이다. - insert, update, delete, select에서 반복
      • DML에서 바뀌는 건 DML만 변경되고 컬럼명 변경됨
      • 상세조회라면 WHERE empno = 7566
      • 업무에 따라(재고관리, 부서관리 등등) 바뀌는건 집합이름과 컬럼명만 바뀌고 나머지는 다 그대로임. - syntax
    • 서버에 대한 URL : jdbc : oricle:thin(웹개발시사용):@172.16.2.66:1521:oracl11 - sid 이름
    • mysql : jdbc:mysql://172.16.2.66:3306/blog?serverTimezone=Asia/Seoul

  • 익명클래스 만들기 (Anonymous class)
    • 이름이 없는 클래스로, 클래스 정의와 동시에 인스턴스를 생성하는 방식 → 재사용성 높임, 코드 간결해짐

    • 익명 클래스는 주로 인터페이스나 추상 클래스를 구현하거나 확장하는 용도로 사용

    • 예(ActionListener 인터페이스를 구현한 익명 클래스를 생성하는 예제)

      button.addActionListener(new ActionListener() {
          @Override
          public void actionPerformed(ActionEvent e) {
              // 버튼 클릭 시 실행되는 로직 작성
          }
      });

  • 예외처리 시 사용되는 try-catch문
    • 예외가 발생할 수 있는 코드 블록을 감싸고, 예외가 발생했을 때 해당 예외를 처리하는 코드를 제공

    • 멀티블록이 가능함. 단, 하위에서 상위클래스로 처리함

      try {
          // 예외가 발생할 수 있는 코드
      } catch (예외_타입 변수) {
          // 예외 처리 코드
      }
      /* ***************************************************/
      int[] numbers = {1, 2, 3};
      
      try {
          int result = numbers[4]; // 잘못된 인덱스 접근
          System.out.println(result);
      } catch (ArrayIndexOutOfBoundsException e) {
          System.out.println("잘못된 인덱스입니다.");
      }

0개의 댓글