maria db JDBC PROGRAMMING4 장종원 phobos90@naver.COM
회원관리 프로그램 회원 정보를 입력하고 수정, 삭제가 가능한 프로그램 ID(PK) PWD NAME TEL ADDR BIRTH TABLE NAME : TB_MEMBER ID(PK) PWD NAME TEL ADDR BIRTH Varchar(20) Varchar(13) Varchar(100) Varchar(8) JOB GENDER EMAIL INTRO Varchar(50) Varchar(1) Varchar(1000)
MVC(Model View Controller) 디자인 패턴 소프트웨어 공학에서 사용되는 소프트웨어 디자인 패턴이다. 어플리케이션의 역할을 세가지로 구분한 개발 방법론 사용자가 View를 통해 명령을 취하게 되면 Controller로 호출되고 입력된 명령어를 판단하고 행동한다. 이 행동에 따라 Model을 통해 data를 저장 및 불러온다 Model 애플리케이션이의 정보(데이터)를 나타냄 일반적으로 데이터베이스를 지칭 View 클라이언트 화면(GUI) 웹에서의 html, css, javascript 등 Controller 사용자의 요청사항을 파악해 그에 맞는 데이터를 Model에 의뢰하고 View에 반영해 사용자에게 전달
MVC에서 Model은 3가지로 나눌 수 있음 DTO(Data Transfer Object) 계층간 데이터 교환을 위한 객체(데이터를 주고받을 포맷) Database(Model)에 접근하는데 이용(데이터베이스의 레코드를 매핑하기 위한 객체) 로직을 가지고 있지 않고 data와 그 data에 접근하기 위한 getter/setter 메소드만 가지고 있음 DB에서 Data를 얻어 Service 나 Controller 로 보낼 때 사용하는 객체 DAO(Data Access Object) 데이터 접근 객체 DB를 사용해 데이터를 조작하는 기능을 담당하는 것들을 DAO라고 부른다 DB 처리(select, insert, update, delete) 비즈니스 로직이나 DB와 관련 없는 코드들을 분리하기 위해 사용 Service 비즈니스 로직이 들어가는 부분 비즈니스 로직이란 업무에 필요한 데이터처리를 수행하는 응용프로그램의 일부를 말한다. 예를 들어) DB에는 부가세가 포함되지 않고 저장되어 있는데, 최종적으로 사용자에게는 부가세를 포함하여 자료를 보여주어야 할 때, 이를 처리하는 과정을 의미한다고 할 수 있음 Controller 에게 요청을 받아 해당되는 비즈니스 로직을 처리 DAO로 DB에 접근, DTO로서 데이터를 전달받은 다음 해당 일을 처리한 후 반환한다.
제작할 Class Member_List – 회원 리스트 출력 GUI MemberProc – 회원가입 창, 회원정보 수정 창 GUI MemberDAO – 데이터베이스 접근 객체 MemberDTO – DB에 접근하기 위한 한 명의 회원 정보를 저장 Main – 메인함수의 역할
PreparedStatement vs Statement 가독성과 유지보수가 좋다 객체를 생성할 때 인자 값으로 실행할 SQL문을 지정하는데, 값을 동적으로 지정해야 할 때 ?기호로 대체할 수 있음 Statement 구문같은 경우 “와 String값의 짝을 맞춰줘야 하는데 실수로 인한 오류가 잦음 PreparedStatement는 값 부분을 ?기호로 대체하여 아래에서 set메소드를 이용해 ?자리의 값을 지정 쿼리 실행계획이 재사용된다 PreparedStatement는 효율을 높이기 위해 parse과정을 최초 한번만 수행하고 이후에는 생략함. parse 과정을 거친 후 생성된 결과는 메모리에 저장해두고 필요할 때 사용하며, 자주 변경되는 부분을 ?로 두고 필요한 값을 바인딩하여 사용 SQL 인젝션 취약점을 보완할 수 있음 예를 들어, 게시판에서 select로 유저의 정보를 가져오는 곳에서 Statement 구문 사용시 select * from user where id = ‘1’ and pwd = ‘22’; 라고 한다면 select * from user where id = ‘ ‘ or 1=1 –- ‘ and pwd=‘null’; 식으로 모든 유저의 정보를 가져올 수 있다. PreparedStatement는 parse 과정을 최초 1번만 수행하고 이후에는 생략하기 때문에 바인딩 데이터는 문법적 의미를 가질 수 없기에 안전하다. Statement 구문 PreparedStatement 구문
MemberDTO
MemberDAO
MemberDAO
MemberDAO
MemberDAO
MemberDAO
MemberDAO
Member_List
Member_List
Member_List
Member_List
Main
MemberProc 첨부파일 다운 받아주세요. GUI 부분이 대부분이고 코드가 너무 길어 따로 첨부합니다.
과제 메인 화면의 누락된 리스트를 정상적으로 출력하게 변경하세요. DB에서 TB_MEMBER를 2개의 Table로 분해하세요 MemberDAO에서 getMemberList, insertMember, updateMember함수를 정상적으로 고치세요. 현재 Id, pwd, name, tel만 입력되므로, 나머지 값들도 정상적으로 입력되게 하세요. DB에서 TB_MEMBER를 2개의 Table로 분해하세요 CREATE TABLE TB_STAFF(id varchar(12) NOT NULL, pwd varchar(12) NOT NULL, name varchar(16) NOT NULL, PRIMARY KEY(id)); CREATE TABLE TB_STAFF_INFO(id varchar(12) NOT NULL, tel varchar(13), addr varchar(100), birth varchar(8), job varchar(50), gender varchar(1), email varchar(50), intro VARCHAR(4000), PRIMARY KEY(email), FOREIGN KEY(id) REFERENCES TB_STAFF(id)); MemberDAO에서 TB_MEMBER를 새로운 테이블로 변경 후 JOIN을 이용한 SELECT와 INSERT, DELETE SQL로 변경하세요.