테이블 형태로 구성 (릴레이션)
SQL : 관계형 데이터베이스 관리 시스템에서 사용하는 쿼리용 언어
JDBC : 관계형 데이터베이스에 저장된 데이터를 접근, 조작할 수 있게 하는 API
세션관리자 ) 파일 탭에 있음 / 사용자와 암호, 포트 잘 확인하기!!
사용자관리자 ) 도구 탭에 있음 / 사용자 이름과 권한 설정
테이블 만들기 ) 키 선택
Create / Read / Update / Delete
데이터 생성, 조회, 수정, 삭제 등 전체 흐름을 다루는 프로그램 만들기
프로젝트 생성 -> Build Path -> Configure Build Path -> Libraries -> ClassPath -> Add External JARs -> jar 파일 선택
JDBC 드라이버 로드
jar 파일이 classpath에 포함되어 있다면 생략 가능
데이터베이스 연결 (Conncetion)
DriverManager 통해 실제 데이터베이스와 연결
conn = DriverManager.getConnection(url, user, password);
String sql = "INSERT INTO user (no, id, name, dept) VALUES (?, ?, ?, ?)";
//?을 이용한 값 바인딩으로 SQL 인젝션 공격 방어
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, 1);
pstmt.setString(2, "12345");
pstmt.setString(3, "짱구");
pstmt.setString(4, "컴퓨터공학과");
pstmt.executeUpdate();
결과처리 (Result Set)
자원 해제 (Close)
자원이 자동 해제되는 try-with-resources 사용 권장
try() 괄호 안에 선언된 리소스는 자동으로 close( ) 가 호출되고, 예외가 발생되더라도 finally 없이 자원 정리 가능
-> 코드가 깔끔하고 오류 처리도 쉬움

Service와 DB를 나누어서 코드 작성해보기
StudentService



DBManager

StudentService에 각각에 기능에 대한 코드를 차근히 적어나가다보니 크게 어렵지 않았다. try-catch를 사용해야할 부분과 사용하지 않아도 될 부분을 구분하는게 아직 서툴렀다. sql에 관한 코드들은 반복해서 사용하다보니 점점 적응이 되었다
확실히 Service와 DB를 구분하여 작성하니까 보기도 편하고 기능이 나누어져 있어 수정 및 관리하기도 편했다
SOLID 원칙 지켜서 클래스 분할하기!
<역할>
View - 입력/출력만! : 학번/이름/학과 입력 받기
Controller - 흐름 제어 / Service 호출 : 메뉴 선택 기능!!!
Service - 로직 처리 : 검증, 조건 분기 등등
DAO - DB 작업 수행 : SQL 실행

분할 중에 자꾸 오류 발생함。。
아직 예외 처리를 확실하게 못하는 것 같고 스스로 클래스 분할하는 것에 미흡한 것 같다. SOLID 원칙 확실하게 생각해보면서 위에 작성하기 2를 바탕으로 작성하기 3 더 생각하고 실습해보기