2023.05.23 수업
교육을 들으며 기록한 내용입니다.
잘못된 내용이 있으면 댓글로 알려주시면 감사하겠습니다:)
* 서버를 동작시키는 DB
- MySQL 활용
* 웹크롤링
원하는 자료만 추출해서 사용하는 것
오픈API 활용
* IP(Internet Protocol)
- IP4 / IP6 차이 확인법
* DNS : Domain Name System
인터넷 주소를 숫자체계로 사용하면 잘 기억하기 쉽지않다
사람은 문자열에 익숙하므로 단어를 사용하는 주소체계가 쉽다
- www.naver.com 등
-> IP를 이용하여 서버에 접속할 필요 없음
* DNS 서버
IP <----> DNS 사이에 주소를 자동으로 변환해주는 역할을 하는 컴퓨터
이 역할을 메인으로 하는 서버를 Name Server라고 함
웹브라우저를 통해서 특정 웹사이트에 방문할 수가 있는 것은 DNS서버를 통해서 이름주소(DNS)를 IP주소로 변경하여 그 IP주소를 방문하는 것
* MariaDB를 사용하려면 IP주소나 DNS주소가 필요
우리는 로컬컴퓨터(우리가 작업중인 컴퓨터)에서 일단 작업할 것
로컬컴퓨터의 IP주소는 127.0.0.1
로컬컴퓨터의 DNS주소는 locahost
이제 컴퓨터를 찾았다면 실제 컴퓨터상에서 동작하는 MariaDB 프로그램과 연결되어야함
이때 각 프로그램과 네트워크로 연결하는 것을 포트에 접속한다고 함
IP(건물) DNS(건물이름) 포트(입구/문)
-> 실제 건물에 들어가려면 문을 통과해야함
MariaDB 포트 : 3306
MariaDB에 연결하려면 127.0.0.1 / 3306 포트로 접속해야함
* MySQL -> MySQL Workbench
- MySQL Workbench : 상용MySQL 관리툴
* MariaDB -> HeidSQL
- HeidSQL : 오픈소스 범용 데이터베이스 개발용 IDE -> MariaDB에 포함
* STS(Eclipse) -> DBeaver
- DBeaver : 오픈소스 범용 데이터베이스 관리툴
* 오픈소스 개발시 라이선스에 주의
GPL
① 컴퓨터 프로그램을 어떤 목적으로든지 사용할 수 있다.
② 컴퓨터 프로그램의 복사를 언제나 프로그램의 코드와 함께 판매 또는 무료로 배포할 수 있다.
③ 컴퓨터 프로그램의 코드를 용도에 따라 결정할 수 있다.
④ 변경된 컴퓨터 프로그램 역시 프로그램의 코드와 함께 자유로이 배포할 수 있다.
LGPL
* 완전 무료 3가지
MIT
APACHE
BSD
폰트 이미지 사운드 공유 안내 - 한국저작권위원회
https://gongu.copyright.or.kr/
● Java와 데이터베이스 연결하기 - MariaDB
2023.05.14 - [백엔드/데이터베이스] - 데이터베이스 설치
데이터베이스 설치
2023.05.10 수업 교육을 들으며 기록한 내용입니다. 잘못된 내용이 있으면 댓글로 알려주시면 감사하겠습니다:) * 데이터베이스 종류 H2 MySQL / MariaDB Oracle XE * 습득기술 - 자바스프링, 데이터베이스
dustj0824.tistory.com
2023.05.23 - [백엔드/데이터베이스] - MySQL Workbench설치
MySQL Workbench설치
● MySQL Workbench설치 https://www.mysql.com/ MySQL Over 2000 ISVs, OEMs, and VARs rely on MySQL as their products' embedded database to make their applications, hardware and appliances more competitive, bring them to market faster, and lower their cost
dustj0824.tistory.com
▷ STS 데이터베이스화면 접속
1. 새데이터베이스 연결
MariaDB 선택 > next > 설정화면에서 비밀번호 설정하기 > test connection > 알림창 확인
1-1. 만약 안된다면 이전에 깔았던 제품과 충돌이 일어난 것(이전에 작업한 자료 백업하기)
- 설정 창 > 앱 > 설치된 앱(정렬 - 이름순)에 들어가서
MySQL~~
MariaDB~~ 관련 모두 제거하고 다시 다운로드하기(이전 글 참고)
2023.05.14 - [백엔드/데이터베이스] - 데이터베이스 설치
데이터베이스 설치
2023.05.10 수업 교육을 들으며 기록한 내용입니다. 잘못된 내용이 있으면 댓글로 알려주시면 감사하겠습니다:) * 데이터베이스 종류 H2 MySQL / MariaDB Oracle XE * 습득기술 - 자바스프링, 데이터베이스
dustj0824.tistory.com
2. 데이터베이스 입력하기(sts)
- CRUD 활용 하여 테이블 생성 연습( 소스코드 생략 )
1) localhost > SQL 편집기 > 새 SQL 생성
2) Database > Create New Database
● 이론
* SQL이란? 데이터베이스의 언어
- DBMS 데이터베이스 관리 시스템 - 관계형
- 데이터베이스에서는 row(행)와 colunm(열)으로 표현
○ SQL 명령어 종류
1) DDL - Data Definition Language (데이터 정의 언어)
CREATE, DROP, ALTER, RENAME, TRUNCATE
TRUNCATE : 휴지통 비우기(DELETE에 조건이 없는 ver) - 되돌릴 수 없음
2) DML - Data Manipulation Language (데이터 조작 언어)
INSERT, UPDATE, DELETE, SELECT
3) DCL - Data Control Language (데이터 제어 언어)
GRANT, REVOKE, COMMIT, ROLLBACK, SET TRANSACTION, BEGIN, SAVEPOINT, LOCK
데이터의 무결성 보장
-> 보안관련(권한 - 인가)
○ SELECT 문장을 이용하여 원하는 데이터 출력하기
- Projection : 원하는 column만 가지고 오는 방법
- Selection : 원하는 row만 가지고 오는 방법
* DESC 명령은 특정 테이블에 어떤 칼럼이 있는지 조회하는 명령어(구조 확인)
● 데이터베이스 연결하는 소스코드 쪼개기 (STS)
* CRUD
Connection / DAD / VO(DTO) 활용
다중 interface(App) 활용
-> 클래스 4개로 쪼개어서 관리
1. Connection 클래스 만들기
* 내가 만든 connection 라이브러리
package model.connect;
// connection 라이브러리 만들기
import static model.util.MyIO.*;
import java.sql.Connection;
import java.sql.DriverManager;
public class DBConnection {
// MuSQL jdbc 설정 상수
private static final String MYSQL_DRIVER = "com.mysql.cj.jdbc.Driver";
private static final String MARIADB_DRIVER = "org.mariadb.jdbc.Driver";
private static final String JDBC_MYSQL_URL = "jdbc:mysql://127.0.0.1:3306/java1";
private static final String JDBC_MARIADB_URL = "jdbc:mariadb://127.0.0.1:3306/java1";
private static final String USER = "root";
private static final String PASS = "mariadb";
// db connection 변수
private Connection connection;
}
* MuSQL jdbc 설정 상수
- MYSQL_DRIVER / MARIADB_DRIVER
상위호환 관계이나 접속 URL이 달라서 구분해서 사용하는 것이 더 좋음
-> 하나만 해도 상관 없음
* MYSQL_URL
jdbc:mysql(프로토콜 이름)
:// (서버구분기호)
-> jdbc:mysql://127.0.0.1:3306/java1
- mysql workbench에서 만든 파일 이름 맨 마지막에 붙이기
* MARIADB_URL
-> jdbc:mariadb://127.0.0.1:3306/java1
* 드라이버 (라이브러리)
- 메소드를 활용하여 드라이버 접속
// 생성자(객체의 초기화-멤버변수의 값이 할당됨)
public DBConnection() {
try {
Class.forName(MARIADB_DRIVER);
pl("MySQL 드라이버 가져오기 성공!");
// 데이터베이스서버와 연결이 됨
connection = DriverManager.getConnection(JDBC_MARIADB_URL, USER, PASS);
pl("MySQL 서버접속 성공");
} catch(Exception e) { // 일반적 예외
e.printStackTrace();
}
}
// 메소드
public Connection getConnection() {
return connection;
}
* 드라이버 다운로드(jar 파일)
1). MariaDB Java Client
-> 3.1.4는 불안정하므로 2.7.9 ver으로 다운받기 권장
최신버전은 오류가 많이 발생하여 단계 낮춰 다운로드
- 2.7.9ver 다운하여 C:\app\java\lib에 붙여넣기
- sts에서 jar파일 등록
-> 라이브러리에 2.7.9남기고 제거(mariadb, myaql)
2). MySQL Connector/J
-> 최신버전 다운로드
3). 다운 받은 파일 라이브러리 등록
BuildPath > libraries > 오른쪽탭 > Add ExternalJARs...
2. HelloMariaDBApp
2-1. DBConnection 객체를 이용해서 마리아 서버(MySQL 서버)에 접속
2-2. MySQL 워크벤치로 테이블 만들기
2-3. JDBC기술을 이용하여 SELECT 쿼리를 DB로 전송 - 결과 화면 출력
2-4. 더 이상 DB와 연결이 필요하지 않으면 DB연결종료
2) MySQL 워크벤치로 테이블 만들기 - mysql workbench 접속
2-1) 스키마 만들기
2-1-1) schemas > 오른쪽마우스 > Create Schema.. 클릭
- 스키마 이름작성
- utf8은 대소문자 구분 하지 않기 때문에 utf8mb4로 설정
2-1-2) 명령어로 작성
* 명령어
create schema java1;
① 상단의 SQP + 버튼 눌러 작업화면을 열기 > 명령어 작성 후 블럭잡아서 번개버튼 누르기 > schema에서 refresh
② 현재줄을 실행 : ctrl enter
-> 블럭잡지 않아도 됨
-> 긴 줄은 세미콜론 윗 줄에서 실행
* 스키마 = 데이터베이스
2-2) 명령어 작성
drop schema java1; -- 중복시 삭제
create schema java1; -- schema 만들기
-- 스키마 자원을 선택하는 명령어 USE
use java1;
create table register ( -- 테이블 만들기
id int not null,
first varchar(20),
last varchar(20),
age int,
primary key(id)
);
insert into register -- 데이터 넣기
(id, first, last, age)
values
(101, 'Zara', 'Ali', 18),
(102, 'Mahnaz', 'Fatma', 25),
(103, 'Zaid', 'Khan', 30);
-- 현재 레코드의 개수
select count(*) 레코드수
from register;
* use java1;
- connection과 유사한 기능
*(참고) h2는 파일형db라서 보안에 위험이 큼
● STS 접속
1) DBConnection 객체를 이용해서 마리아 서버(MySQL 서버)에 접속
Connection conn = new DBConnection().getConnection();
- 임시객체(익명객체)
3) JDBC기술을 이용하여 SELECT 쿼리를 DB로 전송 - 결과 화면 출력
String sql = """
SELECT id, age, first, last
FROM
register;
""";
try {
Statement stmt = conn.createStatement(); // 운송차량 생성
ResultSet rs = stmt.executeQuery(sql); // ResultSet 열거형 객체
while(rs.next()) {
int id = rs.getInt("id");
int age = rs.getInt("age");
String first = rs.getString("first");
String last = rs.getString("last");
MemberVO memberVO =
new MemberVO(
id,
age,
first,
last
);
p("id : " + memberVO.getId());
p("age : " + memberVO.getAge());
p("first : " + memberVO.getFirst());
pl("last : " + memberVO.getLast());
}
} catch(SQLException e) {
e.printStackTrace();
}
※ 디버그
중단점 : Connection conn = new DBConnection().getConnection();
* 드라이버에는 항상 컨넥션(Connection) 객체가 만들어져있어야함(계속 통신하고 있어야 함)
- Connection 영역 개념
- Statement 실제 데이터(요청내용)가 있는 공간
예시)
App 테블릿
드라이버 핫스팟
DB 서버
* ResultSet : 요청한 데이터가 저장될 공간을 만듦
- 기본적으로 데이터가 있는 영역의 밖에 커서가 있음(-1)
1) sql count
2) 커서 이용 rs.next()
3) 메타데이터 이용
3. Value Object(VO) 만들기
package model.vo;
public class MemberVO {
// 테이블의 컬럼에 해당하는 멤버변수 4개 선언
private int id;
private int age;
private String first;
private String last;
// 전체 멤버변수를 초기화 하는 생성자
public MemberVO(int id, int age, String first, String last) {
this.id = id;
this.age = age;
this.first = first;
this.last = last;
}
public int getId() {
return this.id;
}
public void setId(int id) {
this.id = id;
}
public int getAge() {
return this.age;
}
public void setAge(int age) {
this.age = age;
}
public String getFirst() {
return this.first;
}
public void setFirst(String first) {
this.first = first;
}
public String getLast() {
return this.last;
}
public void setLast(String last) {
this.last = last;
}
}
- 캡슐화하여 정보보호
** 의문점
생성자에 trycatch를 담는 이유는 ?
- 에러 직접 처리한 것
- throws로 최상위 객체에 던저주기도 가능
'백엔드 > 데이터베이스' 카테고리의 다른 글
오라클 - 기본 문법 (0) | 2023.06.27 |
---|---|
오라클 설치 (0) | 2023.06.27 |
MySQL Workbench설치 (0) | 2023.05.23 |
데이터베이스 - 자바와 연결하기(JDBC) (1) | 2023.05.21 |
데이터베이스 - INSERT, ALTER (2) | 2023.05.19 |