5일차 MariaDB연결
새로운 프로젝트를 생성
데이터가 통신을 따라 들어오는데 프로토콜이 없으면 쓰레기다!
commit 영구히 기록한다는 의미
insert는 잠깐 데이터를 띄우는게 아니라 데이터를 기록하는것
프로토콜이 정의된 것을 드라이버라고 한다.
마리아디비는 프로토콜! 얘를 통해서 통신할거다. 프로토콜
그외 추가 설정은 다음과 같다(왜 필요한지는 아직 몰라도 됨)
설정을 다음과 같이 한다.
port 8000
viewresolver =jsp 사용
-tomcat-jasper
-jstl 1.2
model -> data변수 담고 -> el표현식으로 출력
/home 요청 -> home.jsp응답!!
나머지는 기존과 같이 설정 했더니, error뜸!
이유는? 아직 db연결을 안했기 때문에,, 우선 주석처리 해두자!
ctrl+shift+R 누르면 주석처리 됨
결과는??
이제 db연결해보자!!
어제 설치한 HeidiSQL 프로그램(->DB와 연결해주는 틀)을 열자
CPU는 한번에 퍼올릴수 있을만큼의 Bit를 가지고 있다.
64비트는 한번에 8바이트씩 퍼올린다. 64비트 컴퓨터는 데이터 이동할때 1비트 선이 64개 있는 것
CPU가 아무리 좋아도(64비트) 제공하는 프로그램이 32비트이면 퍼포먼스에 이상이 생김. CPU가 놀게 됨
CPU가 그럼 1초도 안쉬고 최고의 일을 하게 하려면??
하드디스크는 파일시스템이다.
파일 시스템은 인덱싱 방식으로 데이터를 잘 저장해놓고 데이터 요청시 잘 뽑아낼 수 있도록 안되어있다.
데이터 정렬이 안되어있으면 Fullscan해야함. 즉 파일 찾는데 느림. 그게 하드디스크는 안되어있음
RAM에는 영구히 저장이 안된다.
하드디스크에 DBS(데이터베이스 시스템)을 만들어둔다. DBS는 인덱싱이 되어있다(순차적 저장)
장점은? SELECT하기 쉽다.
SQL
DBS에 저장된 데이터를 찾으려면? 프로세스가 필요하다.
그 프로세스 이름이? DBMS이다. 우리 프로그램에는 MariaDB서비스가 떠있다. 3306번 포트로 계속 돌고있다.
여기에 접속해야 DBMS에 명령을 내릴수 있다. 3306번으로 접속만하면 된다.
이를 cmd창으로 계속 명령하는게 아니라, 툴을 통해서 3306번으로 DBMS에 접근한다. DBMS에 문자열을
날리는데, 바로 이해못하니까, 툴에 프로토콜이 있어서 해석해서 통신하게해준다.
JAVA프로그램이 DBMS에 붙으려면? 바이트스트림 선을 통해서 버퍼로 문자열을 쏜다.
이때 프로토콜이 필요하고 프로토콜을 담고 있는게 MariaDB Driver이다.
MariDB tool로 DBMS에 접근해서 테이블 먼저 만들어놓고! 자바 프로그램으로 통신할 예정임
툴이 인터페이스를 만들어주니까 거기에 적기만 하면 접근하기 쉬움
자바프로그램에는 툴이 없으니까,, 네가 잘 사용할 수 있게 JDBC(java database connection-> ex, mariaDB)를 줄테니까
내가 함수 하나 만들어줄께 conn( , , ) 함수 줄께! 그안에 넣기만 하면 돼
execute(SQL-insert) 함수 줄께! 그러면 내가 처리해서 알려줄께
executeupdate(SQL) 함수 줄께! commit해서 알려줄께
결과를 알아야하니까 잘 되면 1을 주고 안되면 -1을 줄께!
포트를 양끝단에 걸어서 포트로 통신하는게 소켓통신! 포트번호로 통신하는거
A가 서버에게 "B야 안녕" 이라고 보내면?
버퍼로 데이터 도착하면 String으로 도착하면?
서버가 응답할 수 있는 프로토콜을 만들어둠
1)"야" 앞에 있는 애(B)를 주소라고 생각하자
2)B야 안녕 이라고 날린다. B에게.
B가 "그래 안녕"하면 프로토콜에 없으므로 답을 못해준다. 그러니,
A야 안녕이라고 답한다. 이를 받은 서버가 A에게 안녕이라고 보내준다.
프로토콜이 없으면 컴퓨터가 일을 못한다.
소켓통신에서 처음 배워야하는게 프로토콜 숙지!!!
이처럼, tool과 DBMS가 통신, JAVA와 DBMS가 통신해야하는데, 이때 프로토콜이 필요함
Protocol : 약속
-대등한 관계의 약속이다 .
-http의 모든 것들은 프로토콜
Interface : 약속
-상하관계의 약속이다. 편리를 위해 약속해줌
A대학 안에 내부 프로토콜이 있고
B대학 안에 내부 프로토콜이 있는데
두 개의 대학간에 연결하고 싶다면??
프로토콜 재정의가 필요하다. RFC문서를 만듦
나중에 C대학도 연결을 원한다면? 2:1이므로,, 이런게 점점 늘어난다면???
나중에는 끼길 원하는 대학은 RFC문서를 참고해서 세팅해서 확장해나감.
완전 다른 프로토콜을 들고 있으면 끼기 어렵다.
다시 돌아가서...
프로토콜 공부하면 어떤 함수를 때려줘야하는지 알게됨
CPU를 놀지 않게하려면???
DBS에 데이터가 쌓여있다.
RAM은 용량이 작으니, 사과, 딸기 두개밖에 못둔다.
DBS에는 사과, 딸기.....100개 자료 저장
CPU가 딸기줘 하면? RAM에 있으니 엄청 빨리 답할 수 있다.
근데, 바나나줘 하면? RAM에 없으니 DBS에 와서 바나나를 찾는다.
메모리는 RAM에서 전기로 찾으니 빠른데,, 하드디스크 안에서 찾으면 오래걸린다.
찾았다면, RAM에 기존에 저장된 사과,딸기 중에 사과 데이터를 날리고 거기에 바나나를 넣어둔다.
그런데, 먹고 싶은게 딸기랑 바나나가 아니라 딸기랑 참외이면?
CPU가 참외줘 하면, RAM에 없으니 DBS에서 찾아서 RAM에 바나나 데이터를 참외로 바꾼다.
이러한 과정동안 Block이 된다. 멍때리게 됨!
그래서 DB할때는
예를들어, 쇼핑몰 프로그램을 만든다고 하자
결제, 장바구니 넣기, 페이지 들어가면 리스트들 보여주고,,, 등등이 실시간으로 일어난다.
이런게 자주 이용된다. 새벽시간에 오늘 하루 매출과 같은 전체 통계를 낸다. 왜?? 사용량이 많은 시간에
통계를 낸다라고 하면 DBS자료를 계속 끌어와서 CPU가 멍때리는 시간이 늘어난다.
RAM에는 지금 쓰고 있는 데이터들이 많이 적재되어있으면 좋다. DBS까지 가는걸 IO(input, output)이라 한다.
IO를 줄이는게 좋다. 되도록 DBS에 접근하지 않게 프로그램을 잘 짜야한다.
Web프로그램을 만들때 우리 프로그램에서 가장 많이 쓰는 기능을 생각해본다.
환불을 자주 사용하면? 환불에 필요한 데이터들을 RAM에 띄워놓는다.
session은??
session이 생겼다는 건, 이 사람을 허용해주겠다는 거!
집에 누가 문을 두드렸는데, 누구세요? 라고 하니, 친구야라고 답함. 둘만 아는 걸 말하면 세션이 생긴것!
그러면 문을 열어줌. 그리고 마음대로 왔다갔다 할 수 있음
DBMS시스템에 마음대로 왔다갔다 할 수 있게
3306번으로 받을 준비가 되어있다. 너를 열어줄 준비가 되어있다.
안에 누군가가 있어야 문이 열리겠죠
db는 listener를 들고 있다. 눈을 뜨고 지켜보고있는 사람. 즉 보초! listener 가 돌고 있어야함
3306번으로 들어오는애가 있는데 지켜보고 있는 것!
listen이라는 용어는 소켓통신에 나온다.
listener가 돌고있다가 들어오면 accept한다.
session인정해줄께 받아줄께! 하는 것. 그리고 서버 통신을 해야한다. listener는 자기일하고...서버도 자기일하고.. 들어온 사람과 통신하기 위해서 쓰레드를 만든다. 지금 총 3개의 쓰레드가 돌고있는 것.
통신하다가 클라이언트가 컴퓨터를 끄면 거기에 생긴 쓰레드는 반환된다.
10명이랑 통신하려면 총 쓰레드는 12개가 필요! 서버 쓰레드,리스너 쓰레드, 10명과 통신 쓰레드
CPU가 노는 시간이 생기니까 계속 쓰레드 만들어서 왔다갔다 일하는 것. 문맥교환하면서.
위에 암호에 korea1234 입력한다.
복습할 때, 개인 노트북 설정이 다름(암호 : koreait, 포트 : 3307)
리스너가 없다는건? 마리아디비 연결이 안되어있는거니까 연결해주면 된다.
//%는?? 외부 어디에서든 접근 가능하다는 의미
CREATE USER 'korea'@'%' IDENTIFIED BY 'korea1234';
//*은 모든 권한을 다 주겠다는 의미
GRANT ALL PRIVILEGES ON *.* TO 'korea'@'%';
//koreadb데이터 베이스 만든다.
CREATE DATABASE koreadb;
다음과 같이 한줄씩 마우스 우클릭-현재 쿼리 실행 을 한다!!
위 코드는 기억할 필요 없으니, spring파일에 저장해놓자
README.md 파일 생성한다.
Markdown Source 탭에서 다음과 같이 작성하자
```sql ->```뒤에 확장자명 적기
이제, application파일로!
application 파일 클릭 후, F2 누름
현존하는 중간계 언어중에 가장 가볍다! yml
<참고>
https://www.inflearn.com/questions/16184
yaml파일 이란 무엇인가요 - 인프런 | 질문 & 답변
안녕하세요 강사님 너무 질문이 많아서 죄송합니다. yaml파일 이라는 단어를 요 근래 많이 듣고 있는데 정확인 무슨 파일인가요 검색해 보지도 않고 무조건 질문을 드리는것 같아서 죄송하지만
www.inflearn.com
: 뒤에는 무조건 한칸 띄운다
server.po 까지 쓰고 밑에 뜨는거 enter
이제 MariaDB를 연결해보자!
먼저, pom.xml에 주석처리해둔 dependency 코드들 주석을 풀자!
위에 두칸 띄워서 시작!
/koreadb 는 데이터베이스 이름!
결과를 받을때, 5건이 select되었다면? 결과에 대한 커서를 받는다.
커서를 내리는걸 rs.next라고 한다. 커서를 옮겨서 하나씩 읽어들인다.
user table이면 user object를 자바에서 만들어서 모델링해서 arraylist로 담아두면 좋다!!
이 모든 것들을 JPA에서는 안해도 된다!!!
domain은? 범주!
범주가 있는 걸 만든다.
예를들어, 결제 도메인, 예약 도메인을 만드는 용도! 그래야 관리하기 편하다.
프로그램도 도메인을 나눠서 관리한다
User를 관리하고 싶으면 user테이블 하나 만들고 user도메인을 만든다.
domain에 new 패키지 만든다.
이름 뒤에 .user를 붙인다.
다시 new 패키지 만든다.
이름 뒤에 .user가 아닌, .post를 붙인다.
2개의 범주가 있다.
post와 user 2개!! 2개의 테이블을 만든다.
자바 클래스를 먼저 만들고 DB세상에 모델링을 할거다! 즉, 테이블을 만들어낼거다.
User클래스 코드 작성 저장후,
HeidiSQL에서 새로고침한다.
user테이블이 생성됨.