본문 바로가기

개발자 취업 프로젝트[일지]

💻개발자가 되기 위한 프로젝트(82)💻

05.31.2023 - 학습 일지

 

1. AM 09:00 ~ PM 18:00분 : BE(백엔드 KDT)

   - [AM 09:00 - 11:50, PM 13:00 - 18:00]

 

[특강] Java - SQL문법

✔ [학습 내용]

 

   DB의 정의와 종류

      1. [DB 정의]

          - 특정한 조직이나 목적에 따라 체계적으로 정리된 데이터의 집합

          - 데이터의 중복을 최소화, 데이터의 일관성과 무결성을 유지, 데이터의 검색과 수정을 쉽게 할 수 있도록 도움을 줌

      2. [DB 종류]

          - RDB[관계형 데이터베이스]

            → 데이터를 테이블로 저장, 테이블 간의 관계를 사용하여 데이터를 관리함, 가장 일반적인 데이터베이스 유형임

          - NoSQL

            → RDB와 달리 데이터를 테이블에 저장하지 않음, 대량의 데이터를 저장하거나 유연한 데이터 모델을 필요로 하는  응용 프로그램에 적합함

          - SQL

            → 관계형 데이터베이스를 관리하기 위해 사용되는 프로그래밍 언어임, 데이터베이스에서 자료의 검색과 관리, 데이터베이스 스키마 생성과 수정, 데이터베이스 객체 접근 조정 관리 등을 위해 고안함

 

  SQL의 기본 문법

       1. DDL[데이터 정의 언어]

           - 데이터베이스 개체(테이블, 인덱스, 제약조건 등)의 정의를 생성, 삭제, 변경하는 명령어(CREATE, DROP, ALTER)가 있음

       2. DML[데이터 조작 언어]

           - 데이터베이스에 저장된 데이터를 조회, 삽입, 수정, 삭제하는 명령어(SELECT, INSERT, UPDATE, DELETE)가 있음

       3. DCL[데이터 제어 언어]

           - 데이터베이스에 접근하고 사용할 수 있는 권한을 부여하거나 회수하는 명령어(GRANT, REVOKE)가 있음

[특강] Java - SQL문법(실습)
       - DB Tool → "SQLite"

Java - SQL문법을 사용하여 결과까지 출력해봄

[특강] Java - SQL문법(실습후기)

    - SQL문법을 계속해서 이론도 배우고 DB정의와 종류에 대해서 이론적으로 학습하고, 실습을 통해서 SQL문법을 사용해보면서 익숙해지도록 만들고, DDL, DML, DCL에 해당하는 각 명령어에 대해서도 어떤의미로 사용되어지고 PK, Auto_Increment의 의미, not null은 어떤의미인지도 상세히 설명해주셔서 너무 좋았고, 물론 이전에 SQL문법 배우긴 하였지만, 확실하게 SQL문법을 사용해보기 보다는 copy정도라 의미는 알지만 직접적으로 생성해보고 출력까지 해보는 것은 오랜만이고 명령어의 쓰임새와 의미에 대해서도 상세하게 배우니 되게 기억에 많이 남는 시간이었다. 그리고 유의할 점이 delete, drop명령문을 사용시 최대한 지양하고, 반드시 사용해야한다면 delete문은 where절을 이용하여 pk, column명을 호출하여 삭제하도록 권고하셨다. drop문은 최대한 지양하라고 하셨고, 오전은 SQL문법을 실습을 통해서 JDBC들어가기 전 단계라서 그런지 즐거웠다. 

 

[특강] Java - JDBC

 

✔ [학습 내용]

 

   JDBC란?

      - 자바 응용 프로그램이 관계형 데이터베이스에 접속하기 위한 Java Standard API함

      - Sun Microsystems Inc에서 만든 이 스펙(specification)은 JDBC Vendor로 하여금 표준을 구현 및 확장하도록 가이드를 제공함

      - Java를 이용한 데이터베이스 접속과 SQL 문장의 실행, 그리고 그 결과로 얻어진 데이터의 핸들링을 제공하는 방법과 절차에 대한 규약임

      - 개발자는 MySQL, Oracle, MS-SQL Sever 데이터베이스 등에 독립적으로 표준화된 하나의 API 사용방법만 숙지하면 됨

 

   JDBC의 구조

      - DriverManager : 드라이버 리스트를 저장하고 요청된 URL에 해당하는 드라이버를 애플리케이션에 제공함

      - Connection : 하나의 논리적 데이터베이스 트랜잭션을 나타내는 클래스임

      - Statement : SQL 구문의 실행을 담당하는 클래스임

      - ResultSet : 데이터베이스 질의에 의해 얻어진 데이터의 행을 대표하는 객체임

 

   JDBC DB접속 단계

      - DriverManager에 사용할 데이터베이스 드라이버를 등록함

      - DB 연결함

      - SQL문 실행함

      - DB 연결을 종료함

[특강] Java - JDBC(실습)
   - Tool : Intellj(IDE), SQLite(DB)

[특강] Java - Intellj IDE 환경에서 JDBC 사용하는 방법과 SQLite를 연결하고 생성하여 TDD환경에서 DB가 실제로 잘 연결되었는지 확인함

[특강] Java - JDBC(실습후기)

    - JDBC란 무엇인지, JDBC구조, DB와 Connection하기 위한 단계별 과정들을 실습하면서, 첫 고비가 MySQL은 그래도 쉽게 Connection을 하였는데, SQLite는 잘 안되었고, 나와 동일한 에러사항을 커뮤니티를 통해서 빠르게 해결을 하였고, 그 이유가 SQLite.jar 파일을 libraray에서 경로 설정을 잘못해줘서 jdbc connection이 되지 않았던 것이었다. 항상 유의하여 library를 확인하고 경로에 맞게 다운받아주는 습관을 키워야 겠고, try-catch-finally를 사용하여 db Connection시 에러사항을 항상 try에서 처리하게 하여 에러가 날 수 있는 부분을 방지하고 finally에서는 db connection을 종료해주는 method를 따로 만들어 종료가 되도록 설정한다. 그리고 이번에도 main method에서 모든 db connection refatoring한 부분을 각 DAO에 맞게 분리를 하여 main Class에서는 extend(상속)받게 하여 호출시에 사용이 되도록 하는 방식을 택하여 진행하였고, 오히려 이전에 학습한 것 보다 코드도 간결하고 상속을 통해서도 이해가 되었고, TDD를 하기 위해 Test Class를 생성하고 어노테이션을 사용하여 각 어떤 Test를 하는 것인지 원래는 주석으로 표기를 하였지만, Test 어노테이션에서 testName이라는 것을 지원하는 것을 찾아서 알아낸 뒤로 주석 부분을 @Test에서 어떤 부분의 Test를 하는 코드인지를 명시하여 훨씬 보기 좋게 수정하여 마무리를 지었다. 강사님께서 시킨것도 가르쳐주신 것도 아니지만 매번 주석다는 것 보다 Test 어노테이션에서 주석을 대처하는 것이 있을 것 같아서 찾아보니 나와서 바로 적용하였더니 훨씬 더 어떤의미의 Test인지 명확하게 알아 볼 수 있어서 좋다! 이렇게 스스로 찾아서 적용해보니깐 너무 즐겁고 뿌듯하다. 

 

KDT 학습내용 용어정리

2. KDT 학습내용중 기본개념 및 용어정리

 - Java - Optional,NPE → 노션

KDT 학습내용 용어정리(노션내용 일부)

[Java] Optional,NPE 정리

마무리

   - DB의 정의,구조, SQL문법을 실습해보고, JDBC 단계별 설정을 하면서 많은 것을 학습하였지만, 너무나도 재밌고, Data를 직접 생성하고 DB table도 create하여 column을 설정할때에도 어떻게 값을 받아오는 table이고 column들인가를 명시할때에도 예전에는 따라치기 바빴지만, 다시한번 더 이론부분도 반복해서 학습하면서 어떤 의미로 table을 생성하고 column들을 만들어야하고 insert를 할때에도 어떻게 사용해야하고 SQL문법을 이용하고 흐름을 이해하면서 진행하다보니 그리고, delete 부분도 왜 그냥 delete table name; 해서 삭제하는 것과 where절 뒤에 column명, pk등을 통해서 삭제해야하는지를 혼자서 실험해봤고, 바로 이해가 되었고 왜 delete table name;을 지양해야하는지를 알게되었고, jdbc db connection을 하면서 첫 단계부터 잘 안되었지만, 그래도 해결하면서 단계별 의미와 사용하는 법을 익히고 Refatoring을 통해 각 메서드의 의미를 줘서 호출만 하여 사용되도록 구조를 바꾸고 한 Class에 몰아서 코드를 끝내는 것이 아니라 각 메서드의 의미별로 class를 생성하여 상속받도록 작업하고 TDD를 통해서 정말 DB Connection이 제대로 일어나는가를 직접 확인하면서 @Test 어노테이션의 기능중 testName = ""을 활용하여 어떤 Test의 기능인지를 명시하여 좀 더 Test의 의미를 부각시켜주는 작업을 구글링 하여 직접 부여하고 수업 내용중 중요한 핵심만 노션에 따로 정리하여 한번 더 되새기므로써 내일도 JDBC를 이어서 할텐데 한번 더 상기 시켜서 실무에도 문제없이 사용할 수 있게 만들 것이다. 되게 백엔드 작업이 힘들 것이라는 걸 잘알지만, 계속해서 반복하면서 흐름을 타기 시작하다보니 재밌고, 오히려 스스로 더 딥하게 지식을 쌓고 기능들을 찾아가면서 채워나가다 보니 즐겁다. XD