You are using an outdated browser. Please upgrade your browser to improve your experience.

11/03

다대 다 관계를 DBMS에서 통제할 방법이 없다. 유효성검사 불가능

값을 넣을 순 있다. 표현하고 말고의 문제가 아님.

DBMS에서 해결하지 못하는걸 자바에서 더 자세하게 다룰 순 있으나 DBMs자체가 뚤려버리면 아무런 의미가 없음. 그러니 다대다 관계를 꼭 해소해줘야한다. 꼭 관계테이블을 생성해줘야한다!!

create table pms_task(
  no int not null,
  content text not null,
  deadline date not null,
  owner int not null,   /* pms_member 의 PK 컬럼을 가리키는 외부키다*/
  project_no int not null, /*컬럼추가*/
  status int default 0
);

//fk추가
alter table pms_task
  add constraint pms_task_fk1 foreign key(owner) references pms_member(no);
  
  alter table pms_task
  add constraint pms_task_fk2 foreign key(project_no) references pms_project(no);
  
  위와같이 회원정보와 프로젝트 번호를 pms_member, pms_project  테이븛에 대해서 FK 설정하면
  프로젝트 회원이 아닌 경우에도 작업을 등록하는 문제가 있다.
  
  alter table pms_task
  add constraint pms_task_fk1 foreign key(owner, project_no) references pms_member_project(member_no, project_no);
 

class diagram

db model

둘은 80%정도 유사하나 20%정도 다르다. 둘의 구현상태가 다를수있음을 유념하자!

자바코드안에 sql넣기전에 터미널에서 테스트 먼저 해보고 자바코드안에 넣어야함!!! sql은 sql대로 따로 테스트해야한다.

sql을 사용하면서 도메인 클래스는 입출력할 데이터를 임시 보관하는 용도로 사용된다.

따라서 테이블과 똑같이 맞추려고 하지말고, 필요하다면 필드를 추가하고 제거하는 것을 자유롭게 하자.

어떤 방법을 선택하던 정답이 아닌건 단 하나 : 프로그램이 돌아가지 않는게 정답이 아님.

다만, ABC방법중에서 유지보수가 어느게 더 좋냐는 있을 수 있음. 그러나 셋다 프로그램이 돌아간다면 지장이 없는거임! 초보때는 이런고민을 하는것보다 일단 할수있는걸로 프로그램 돌리고 집에가서 자기계발해야함

board에도 무결성 제약조건을 걸어준다.

writer -> varchar에서 int로 변경, pms_member(no)에 fk를 걸어주었다.

create table pms_board(
  no int not null,
  title varchar(255) not null,
  content text not null,
  writer int not null,
  cdt datetime default now(),
  vw_cnt int default 0
);

alter table pms_board
  add constraint pms_board_pk primary key(no);

alter table pms_board
  modify column no int not null auto_increment;
  
  alter table pms_board
  add constraint pms_board_fk foreign key(writer) references pms_member(no);

요즘은 게시글에 사진도 같이 출력되므로 writer필드를 String대신 사진도 받을 수 있도록 Member로 바꾼다.

11/4 - DBMS패스워드 암호화

persistent = Dao

DAO를 만들때는 출력을 고민하지 말고 그 테이블의 모든 정보를 출력하도록 한다. 다만 암호는 출력하지 않도록 한다!!

데이터베이스에서 select했을때 패스워드가 떠버리면 해킹의 위험이 있다. 그래서 인코딩해서 출력되야한다.

암호는 무조건 단방향해야한다. 즉, 암호는 복호화가 불가능해야한다. 관리자도 몰라야함!

q비대칭암호 : 잠글때 사용한 암호와 풀때 사용하는 암호가 다른것(public key와 private키가 다름)

- private key : 열때 사용하는 암호
- public key : 잠글 떄 사용하는 암호

대칭암호 : public key와 private키가 같음

List와 forEach()

반복문을 내부적으로 돌리게한다. consumer를 구현함

oop패키지 ex12 Exam0900~

단순 반복출력할때 쓰기 좋은 메서드….

DAO끼린 서로 종속되지 않는 동료관계이다.