2024. 2. 18. 02:53ㆍSQL_MySQL&Heidi
오늘은 SQL 마지막 학습 시간이다.
내일부터 4일간의 휴식이 주어진다.
설 연휴를 앞두고 오늘도 파이팅 하기로 한다!!
첫 시간은 어제 배운 내용의 review로 시작하였다.
웹 페이지 내의 게시판을 만드는 데 있어서
사용자가 마땅히 받아야 할 서비스를
내가 서비스를 이용할 때와 반대의 입장에서 고려해야 한다고 하셨다.
나는 그 이야기를 들으면서 만들기 전 "구조도, 순서도"를 구성하고 시작해야
놓치는 부분 없이 제작 할 수 있을 것이라 예상이 되었다.
*어제 배운 내용
인터페이스의 코드로만 작성하기
리스트-리스트 = 뉴 어레이 리스트(리스트로 구현한 객체가 어레이 리스트)
Set set new hashtag
Set set new hashmap
자바는 최소한 편의점 수준의 언어
인터페이스를 구현하기 위해 구현객체를 바로 만들어서 DAO 역할을 할 수 있지만
DAO를 만들어서 구현객체가 Oracle 다오에게 정보를 주는 형태
DAO를 만든 후 구현객체하고 DAO랑 연계를 맺어줌 (기능 : 결과를 받아서 넘겨주는 일)
만약 혹시라도 DB에 특화된 특성이 있으면 그것을 조금 살려주고
여러개의 DB를 마음 껏 쓸 수 있는 아주 효율적인 방법입니다.
--리뷰--
interface 만들어놨던 것과 DAO와 연계하는 구현객체만 만들었음(어제)
application은 인터페이스에 있는 정의된 메소드를 사용 (MessageService 인터페이스 단)
/ DAO / ERD / ENTITY
MessageDAO 단: 2024-02-07 09:24:30 이럴 때
DB 조회 결과 : LocalDateTime.parse(구현객체로 만들고 싶을 때 사용하는 메소드)(“2024-02-07T09:24:30”);
중간에 T를 가져다 붙이기 79번째 줄 (Teacher GitHub)
Ex)
Message m = new Message(rs.getInt(1), rs.getString(2),
rs.getString(3), LocalDateTime.parse(rs.getString(4).replace(” “, “T”), 0);
MessageSeriveMySQLImpl 단
구현한 클래스 안에서는 어디서든지 쓸 수 있는 msgDao
mid 변수를 받아서 mid에 변수를 DAO에게 주고 결과를 받아서 결과를 데이터 저장소로 Application에 전달
getMessageListAll 몽땅 다 가져오는 것
getMessageListByWriter 작성자가 쓴 글만 가져오는 것
파라메터 없이 들어오는 것도 내가 파라메터 만들어서 데이터를 전달할 수도 있음
insert update delete는 받아서 정보를 던져주면 더 이상 할 것이 없음
형식에 맞는 코드를 입력해주면 저렇게 만들어져 있음
그것이 스프링 부트가 하는 일
저 방식이 스프링부트에서 구현할 방식이기 때문에 먼저 알고잇는 것이 도움됨
형식맞춰주는 코드 자꾸 보기
MessageTest를 DAO를 테스트하는 단
MessageMain은 어플리케이션
구현객체는 메세지 다오에 종속적 == 디펜던트하다
메세지 다오가 바뀌면 구현객체도 바뀌어야합니다.
그런데 나중에는 종속이라고 하는 의존성을 스프링이 자동으로 인셉션 해줍니다.
private Message Dao msg Dao = new MessageDao();
나중에는 이 코드가 이렇게 변화 ==> @Autowired private Message msgDao;
객체를 생성하지 않았지만 그런데 이렇게만 써 놓아도 구현객체가 msgDao를 쓸 수 있게됨
스프링이 구현객체를 만들어서 넣어줌
디펜던시 000 의존성 주입???
현상 발생 : MessageService messageService = new MessageServiceMySQLImpl();
앞으로 바뀔 코드 == 앞으로는 메인에서 웹 작업할 일 없음
@Autowired private MessageService messageService;
뒤에 무엇이 오든 코드가 바뀔 일이 없음
내 application은 무엇이 되던지 DB가 무엇이 되든간에 코드를 고칠 일이 없음
모든 DB에 같은 코드를 사용할 수 있게됨
인터페이스에서 알려준 코드를 사용
MessageMain은 바꿀 필요가 없게됨
데이터를 인터넷으로부터 받는 것만 달라짐 _ 어플리케이션이 대단한 것이 아님
DB를 쓸 것인데 CRUD를 어떻게 사용자화면으로 바꿔 줄 것인가가 중요함
bcrypt 라는 새로운 것 학습했습니다.
암호화(BCrypt)
1) 복원 가능한 암호화
- 평문을 비문으로 바꿀 수 있음, 비문을 평문으로 바꿀 수 있음
위와 같은 것이 복원 가능한 알고리즘임
- 공개키 알고리즘이라고 부름 (복원이 가능하려면 키를 두개를 가져야함)
- 개인키
- 공개키
암호화를 할 때 개인키와 공개키를 가지고 작업을 함 - 비복원 암호화
- 한쪽으로는 가능하나 비문을 평문으로 바꿀 수 없음
위와 같은 것을 비복원 암호화라고 함
대표적인 것이 로그인 작업임
로그인 가능한 패스워드를 입력할 때(암호화할 때) 암호를 설정한 것은 절대로 알 수 없음
평문 -> 비문
plain text cyper text ? cypher text?
-60$2a$10$Q1fxc6wTqDLL1s4YSLEfwOvgTXmvTnjYniZohteGi.rybAI.aM2FW
암호화된 코드는 char(60)
Correct id
Imbelled Uid
Incorrect Psw
세 가지의 경우가 있다 == 코드로 나타내면 이하와 같음
public static final int correct_login = 0;
public static final int WRONG_PASSWORD = 1;
public static final int USER_NOT_EXIST= 2;
1000건이 있다고 가정 : 3번쨰 페이지 라면;
내가 보아야 할 글자의 갯수는 10개일 때, count per page
offset =2
page = 3
page-1
int offset = page-1 * count per page 작성
오늘
CREATE DATABASE bbs; – bbs 파일 생성
오늘은 DAO, ERD, ENTITY, BCrypt, 공개키 알고리즘에 대하여 학습했습니다.
---------------------------------------------------------------------------------------------------------------------------------------------------------
오늘 과제 : 이클립스 사용법 익히기 (유용한 기능)
https://www.youtube.com/watch?v=yUru5Mk5mcI&t=2s
--설명 하신 내용--
새션이라는 메모리를 유지-누군가 사용하면
자바스페이스 자바에서 액세스할 수 있는 것 같이 등록되어 있는 것은 session이 가능함
현재 session의 사용자는 누구? (사용자의 이름은 무엇인가?)
기술적으로 보면 로그인이 별게 아님
session을 보고 로그인을 했다 안했다를 판별함
session을 파괴하는 것이 로그아웃임
http 라는 것 : ex 전화걸 때 다이얼링 - 상대가 받으면 -통화 - 통화 종료
메세지 카톡 : 아무 때나 보냄 - 상대가 언제 받을 지 모름 - 확인하면 답장옴
전화거는 것 - connection oriented 연결 위주 - 연결에 기반한 통신 방식
카톡 메세지 - connection list 연결이 없는 http가 connetion oriented 가 아니라 connection list 방식임
로그인 했다 안했다는 session으로 판단함 - 특별한 session의 유무로 가림
목록이 나오면 (erm에서) 게시글 목록이 나올 시 목록에 표시되어야 할 항목 :
아이디(있으나 없으나 상관 없음) , 타이틀[댓글수], 컨텐트X, 이름X 대신 uname(nickname), 조회수
id - title - uname - LocalDate/Time(지금 막 작성한 것) - 조회수
bid - title[replyCount] - uname - modTime - viewCount
+-------+ +----------+
| 검색창▼| | 검색단어 |
+-------+ +----------+
설연휴 끝나고 웹서버를 배우고 난 후 미니프로젝트 4일간의 분량 - 게시판 만들기 or 일정표 만들기
User.java 강의 중 화면
Heidi SQL CODE
-1. insert
INSERT INTO board VALUES
(DEFAULT, '첫번째 글', '첫번째 글입니다.', 'admin', DEFAULT, DEFAULT, DEFAULT, DEFAULT);
SELECT b.*, u.uname FROM board b
JOIN users u ON b.uid=u.uid;
-3. select
SELECT * FROM board b
JOIN users u ON b.
WHERE isDeleted=0
ORDER BY bid DESC
LIMIT 10 OFFSET 0;
// 위의 코드 활용
SELECT * FROM board b
JOIN users u ON b.uid=u.uid
WHERE b.isDeleted=0 AND title LIKE '%'
ORDER BY bid DESC
LIMIT 10 OFFSET 0;
// 조회수 Counting
UPDATE board SET viewCount = viewCount + 1 WHERE bid < 10;
SELECT b.*,u.uname FROM board b
JOIN users u ON b.uid=u.uid
WHERE b.isDeleted=0 AND uname LIKE '%'
ORDER BY bid DESC
LIMIT 10 OFFSET 0;
■ package /
■MySQL
■sec07_bbs
- ■ package /
- ■MySQL
- ■sec07_bbs
- ■appl
- ■BoardDaoTest.java
- ■UserTest.java
- ■dao
- ■BoardDao.jav
- ■ReplyDao.java
- ■User.java
- ■entity
- ■Board.java
- ■Reply.java
- ■User.java
- ■
- ■erd
- ■service
- mysql.properties
- ■appl
//reply 조회 코드
create database if not exists bbs;
use bbs;
SET SESSION FOREIGN_KEY_CHECKS=0;
/* Drop Tables */
DROP TABLE IF EXISTS reply;
DROP TABLE IF EXISTS board;
DROP TABLE IF EXISTS users;
/* Create Tables */
CREATE TABLE board
(
bid int NOT NULL AUTO_INCREMENT,
title varchar(256) NOT NULL,
content varchar(4000),
uid varchar(12) NOT NULL,
modTime datetime DEFAULT CURRENT_TIMESTAMP NOT NULL,
isDeleted int DEFAULT 0,
viewCount int DEFAULT 0,
replyCount int DEFAULT 0,
PRIMARY KEY (bid)
);
CREATE TABLE reply
(
rid int NOT NULL AUTO_INCREMENT,
comment varchar(256) NOT NULL,
regTime datetime DEFAULT CURRENT_TIMESTAMP,
uid varchar(12) NOT NULL,
bid int NOT NULL,
PRIMARY KEY (rid)
);
CREATE TABLE users
(
uid varchar(12) NOT NULL,
pwd char(60) NOT NULL,
uname varchar(16) NOT NULL,
email varchar(32),
regDate date DEFAULT (CURRENT_DATE),
isDeleted int DEFAULT 0,
PRIMARY KEY (uid)
);
/* Create Foreign Keys */
ALTER TABLE reply
ADD FOREIGN KEY (bid)
REFERENCES board (bid)
ON UPDATE RESTRICT
ON DELETE RESTRICT
;
ALTER TABLE board
ADD FOREIGN KEY (uid)
REFERENCES users (uid)
ON UPDATE RESTRICT
ON DELETE RESTRICT
;
ALTER TABLE reply
ADD FOREIGN KEY (uid)
REFERENCES users (uid)
ON UPDATE RESTRICT
ON DELETE RESTRICT
;
--오늘 학습 내용 정리--
새션이라는 메모리를 유지-누군가 사용하면
자바스페이스 자바에서 액세스할 수 있는 것 같이 등록되어 있는 것은 session이 가능함
현재 session의 사용자는 누구? (사용자의 이름은 무엇인가?)
기술적으로 보면 로그인이 별게 아님
session을 보고 로그인을 했다 안했다를 판별함
session을 파괴하는 것이 로그아웃임
http 라는 것 : ex 전화걸 때 다이얼링 - 상대가 받으면 -통화 - 통화 종료
메세지 카톡 : 아무 때나 보냄 - 상대가 언제 받을 지 모름 - 확인하면 답장옴
전화거는 것 - connection oriented 연결 위주 - 연결에 기반한 통신 방식
카톡 메세지 - connection list 연결이 없는 http가 connetion oriented 가 아니라 connection list 방식임
로그인 했다 안했다는 session으로 판단함 - 특별한 session의 유무로 가림
목록이 나오면 (erm에서) 게시글 목록이 나올 시 목록에 표시되어야 할 항목 :
아이디(있으나 없으나 상관 없음) , 타이틀[댓글수], 컨텐트X, 이름X 대신 uname(nickname), 조회수
id - title - uname - LocalDate/Time(지금 막 작성한 것) - 조회수
bid - title[replyCount] - uname - modTime - viewCount
+--------+ +----------+
|검색창 ▼| | 검색단어 |
+--------+ +----------+
설연휴 끝나고 웹서버를 배우고 난 후 미니프로젝트 4일간의 분량 - 게시판 만들기 or 일정표 만들기
몽땅다 생성자
기본 생성자
아이디 생성자 없는 생성자
board를 null;로 해놨으니 정보를 가져와야 함
제일 처음에 가져와야 할 것은 자료형이 int임 = (rs.getInt(1)) == 코드 구현
최종 코드 == board = new Board(rs.getInt(1), rs.getString(2), rs.getString(3),
rs.getString(4), LocalDateTime.palse(rs.getString(5),rs.getInt(6), rs.getInt(7), rs.getInt(8), rs.getInt(9));
다음 주 부터
Java EE perspective 를 사용할 예정
*about spell mistake
보드테이블에 집어넣는 값
title
content
uid
if you spelling miss = won't insert
test == Main
오후에는 reply 강의
package mysql.sec07_bbs.appl;
import mysql.sec07_bbs.dao.ReplyDao;
import mysql.sec07_bbs.entity.Reply;
public class ReplyDaoTest {
public static void main(String[] args) {
ReplyDao rDao = new ReplyDao();
String sessionUid = "james";
Reply r = new Reply();
r.setComment("댓글 1"); r.setUid(sessionUid); r.setBid(16);
16 이면 veiwCount가 하나 늘어나는 이상한 현상이 발생 ==> 12로 변경 (자신의 사정에 맞게 바꾸기)
--필드나 검색어를 아무것도 넣지 않으면 둘 중에 하나가 걸림--
- 필드값이 널이거나
- 필드값이 빈스트링
MySQL 강좌 오늘 종료
실전에서는
현재는 작업이 길어졌지만 스프링부트 배운 후에는 Dao 같은 것이 interface로 바뀜
코드작성이 아니라 인터페이스만 작성하면 됨
반복적인 작업은 없어짐
하지만 모르고 작성하면 의미가 없어짐
그러므로 그런 것들을 배우기 위한 시간으로 생각하면 됨
if 풀스텍 이라면 DB를 포함하는 작업이다. 필수!
program은 서로 유기적으로 얽혀있으니 foreign key 에 대한 개념 확립 필요!
--다음주 학습 예고--
localhost:8080/bbs/board?p=1&f=title&q=검색어 : 이런식으로 전달됨 == 페이지 / 필드 / 쿼리
다이나믹 웹 프로젝트
서블릿 : jsp or sublit page
자바에서 기본적으로 다루는 웹의 기술, 웹 화면쪽에서 보여주는 기본적인 기술을 배울 것
미니 프로젝트를 할 수 있도록 메이븐 프로젝트를 설명해 줄것임
둘 다 웹 서버를 사용하게 됩니다
아파치 톰캣을 사용하게 될 것임
화요일에는 아파치 톰캣을 설치 - 이클립스를 자바EE버전으로 change하고 향후 잘하려면 늦지말기
'SQL_MySQL&Heidi' 카테고리의 다른 글
2024.01.23 Heidi SQL(2) (2) | 2024.02.20 |
---|---|
2024.01.24 Heidi SQL(3) (0) | 2024.02.19 |
2024.01.21 Heidi SQL(1) (0) | 2024.02.15 |