ㅁ sql developer에서 계정 생성
- db가 먼저다.
create user spring identified by spring;
grant connect, resource to spring;
ㅁ 샘플 스크립트 실행
- 실수로 관리자 계정에 설치하면 오라클 다시 설치해야 한다.
삭제구문 때문이다. ~ 테이블들이 많이 있다.
-----------------삭제------------------
--접속유저의 모든테이블 및 제약조건 삭제
BEGIN
FOR C IN (SELECT TABLE_NAME FROM USER_TABLES) LOOP
EXECUTE IMMEDIATE ('DROP TABLE '||C.TABLE_NAME||' CASCADE CONSTRAINTS');
END LOOP;
END;
/
--접속유저의 모든 시퀀스 삭제
BEGIN
FOR C IN (SELECT * FROM USER_SEQUENCES) LOOP
EXECUTE IMMEDIATE 'DROP SEQUENCE '||C.SEQUENCE_NAME;
END LOOP;
END;
/
--접속유저의 모든 뷰 삭제
BEGIN
FOR C IN (SELECT * FROM USER_VIEWS) LOOP
EXECUTE IMMEDIATE 'DROP VIEW '||C.VIEW_NAME;
END LOOP;
END;
/
---------------------------------------
--------------------------------------------------
-------------- MEMBER 관련 ------------------
--------------------------------------------------
CREATE TABLE MEMBER (
USER_NO NUMBER PRIMARY KEY,
USER_ID VARCHAR2(30) NOT NULL UNIQUE,
USER_PWD VARCHAR2(100) NOT NULL,
USER_NAME VARCHAR2(15) NOT NULL,
EMAIL VARCHAR2(100),
GENDER VARCHAR2(1) CHECK (GENDER IN('M', 'F')),
PHONE VARCHAR2(13),
ADDRESS VARCHAR2(100),
PROFILE_URL VARCHAR2(400),
SIGNUP_DATE DATE DEFAULT SYSDATE,
MODIFY_DATE DATE DEFAULT SYSDATE,
STATUS VARCHAR2(1) DEFAULT 'Y' CHECK(STATUS IN('Y', 'N', 'A'))
);
CREATE SEQUENCE SEQ_UNO NOCACHE;
COMMENT ON COLUMN MEMBER.USER_ID IS '회원아이디';
COMMENT ON COLUMN MEMBER.USER_PWD IS '회원비밀번호';
COMMENT ON COLUMN MEMBER.USER_NAME IS '회원이름';
COMMENT ON COLUMN MEMBER.EMAIL IS '회원이메일';
COMMENT ON COLUMN MEMBER.GENDER IS '회원성별';
COMMENT ON COLUMN MEMBER.PHONE IS '회원전화번호';
COMMENT ON COLUMN MEMBER.ADDRESS IS '회원주소';
COMMENT ON COLUMN MEMBER.PROFILE_URL IS '프로필이미지경로';
COMMENT ON COLUMN MEMBER.SIGNUP_DATE IS '회원가입날짜';
COMMENT ON COLUMN MEMBER.MODIFY_DATE IS '회원수정날짜';
COMMENT ON COLUMN MEMBER.STATUS IS '회원상태값';
INSERT INTO MEMBER
VALUES (SEQ_UNO.NEXTVAL, 'admin01', '1234', '관리자', 'admin@br.or.kr', 'F', '010-1111-2222', '서울시 강남구 역삼동', NULL, '20220101', '20220101', 'A');
INSERT INTO MEMBER
VALUES (SEQ_UNO.NEXTVAL, 'user01', 'pass01', '홍길동', 'user01@br.or.kr', 'M', '010-3333-4444', '서울시 양천구 목동', NULL, '20220201', '20220201', DEFAULT);
INSERT INTO MEMBER
VALUES (SEQ_UNO.NEXTVAL, 'user02', 'pass02', '김말똥', 'user02@br.or.kr', 'F', '010-5555-6666', '서울시 강서구 마곡', NULL, '20220301', '20220301', DEFAULT);
----------------------------------------------------
---------------- NOTICE 관련 -----------------
----------------------------------------------------
CREATE TABLE NOTICE (
NOTICE_NO NUMBER PRIMARY KEY,
NOTICE_TITLE VARCHAR2(30) NOT NULL,
NOTICE_WRITER NUMBER NOT NULL,
NOTICE_CONTENT VARCHAR2(200) NOT NULL,
REGIST_DATE DATE DEFAULT SYSDATE,
FOREIGN KEY (NOTICE_WRITER) REFERENCES MEMBER ON DELETE CASCADE
);
COMMENT ON COLUMN NOTICE.NOTICE_NO IS '공지사항번호';
COMMENT ON COLUMN NOTICE.NOTICE_TITLE IS '공지사항제목';
COMMENT ON COLUMN NOTICE.NOTICE_WRITER IS '공지사항작성자';
COMMENT ON COLUMN NOTICE.NOTICE_CONTENT IS '공지사항내용';
COMMENT ON COLUMN NOTICE.REGIST_DATE IS '공지사항작성날짜';
CREATE SEQUENCE SEQ_NNO NOCACHE;
INSERT INTO NOTICE VALUES (SEQ_NNO.NEXTVAL, '관리자 공지', 1,
'공지서비스를 게시합니다. 많이 이용해 주세요',
'20220401');
INSERT INTO NOTICE VALUES (SEQ_NNO.NEXTVAL, '공지서비스 오픈 환영', 1,
'드디어 오픈되었군요. 많이 이용하겠습니다.',
'20220403');
INSERT INTO NOTICE VALUES (SEQ_NNO.NEXTVAL, '공지서비스 이용 안내', 1,
'공지서비스는 회원만 이용할 수 있습니다. 회원 가입하세요.',
'20220415');
COMMIT;
----------------------------------------------------
---------------- BOARD 관련 -----------------
----------------------------------------------------
CREATE TABLE BOARD(
BOARD_NO NUMBER PRIMARY KEY,
BOARD_TITLE VARCHAR2(100) NOT NULL,
BOARD_WRITER NUMBER NOT NULL,
BOARD_CONTENT VARCHAR2(4000) NOT NULL,
COUNT NUMBER DEFAULT 0,
REGIST_DATE DATE DEFAULT SYSDATE,
STATUS VARCHAR2(1) DEFAULT 'Y' CHECK (STATUS IN('Y', 'N')),
FOREIGN KEY (BOARD_WRITER) REFERENCES MEMBER ON DELETE CASCADE
);
COMMENT ON COLUMN BOARD.BOARD_NO IS '게시글번호';
COMMENT ON COLUMN BOARD.BOARD_TITLE IS '게시글제목';
COMMENT ON COLUMN BOARD.BOARD_WRITER IS '게시글작성자';
COMMENT ON COLUMN BOARD.BOARD_CONTENT IS '게시글내용';
COMMENT ON COLUMN BOARD.COUNT IS '게시글조회수';
COMMENT ON COLUMN BOARD.REGIST_DATE IS '게시글올린날짜';
COMMENT ON COLUMN BOARD.STATUS IS '게시글상태값';
CREATE SEQUENCE SEQ_BNO NOCACHE;
INSERT INTO BOARD
VALUES(SEQ_BNO.NEXTVAL, '관리자 게시글', 1,
'저희 사이트를 이용해 주셔서 감사합니다.',
DEFAULT, '20220503', DEFAULT);
INSERT INTO BOARD
VALUES(SEQ_BNO.NEXTVAL, 'MVC Model2 패턴이란', 2,
'웹 애플리케이션 설계 방식 중 하나입니다.',
DEFAULT, '20220507', DEFAULT);
INSERT INTO BOARD
VALUES(SEQ_BNO.NEXTVAL, '설계방식 2', 2,
'웹 애플리케이션 설계 방식 중 두번째 방식은 각 서블릿 구동 앞에 Front Controller 를 두는 것입니다..',
DEFAULT, '20220603', DEFAULT);
INSERT INTO BOARD
VALUES(SEQ_BNO.NEXTVAL, '설계방식3', 2,
'웹 애플리케이션 설계 방식 중 세번째 방식은 Front Controller 다음에 연결되는 컨트롤러들을 서블릿이 아닌 자바 클래스로 작성해서 연결하는 방식입니다.',
DEFAULT, '20220615', DEFAULT);
INSERT INTO BOARD
VALUES(SEQ_BNO.NEXTVAL, 'MVC Model1 패턴', 3,
'웹 애플리케이션 설계 방식 중 JSP 파일이 뷰와 컨트롤러 두가지 다를 처리하는 방식입니다.',
DEFAULT, '20220618', DEFAULT);
INSERT INTO BOARD
VALUES(SEQ_BNO.NEXTVAL, 'JSP란', 3, 'Java Server Page 를 말합니다.',
DEFAULT, '20220621', DEFAULT);
INSERT INTO BOARD
VALUES(SEQ_BNO.NEXTVAL, 'Servlet 이란', 1, '서버에서 구동되는 웹 규약이 적용된 Java EE 모듈이 제공하는 서비스 처리용 클래스입니다.',
DEFAULT, '20220701', DEFAULT);
INSERT INTO BOARD
VALUES(SEQ_BNO.NEXTVAL, 'JSP Elements 들', 1,
'Derective(지시자) 태그, Decleation(선언) 태그, Scriptlet 태그, Expression 태그가 있습니다.',
DEFAULT, '20220714', DEFAULT);
INSERT INTO BOARD
VALUES(SEQ_BNO.NEXTVAL, 'HTML5', 3,
'새로운 웹 표준기술로 모든 디바이스 장치와 브라우저에서 동일하게 작동되는 웹 페이지를 만들기 위한 기술을 제공합니다.',
DEFAULT, '20220723', DEFAULT);
INSERT INTO BOARD
VALUES(SEQ_BNO.NEXTVAL, 'CSS3', 2, '웹 페이지를 꾸미기 위한 스타일시트로 HTML5 버전에 맞추어 속성들이 업그레이드 되었습니다.',
DEFAULT, '20220730', DEFAULT);
INSERT INTO BOARD
VALUES(SEQ_BNO.NEXTVAL, 'JavaScript 란', 3, '웹 표준 2.0 에서 새로 추가된 강력한 API 들을 제공합니다.',
DEFAULT, '20220803', DEFAULT);
INSERT INTO BOARD
VALUES(SEQ_BNO.NEXTVAL, 'jQuery 란', 1,
'자바스크립트 오픈 소스 라이브러리의 하나로 html 요소들을 css 선택자를 이용하여 쉽게 선택할 수 있는 기능들을 제공합니다.',
DEFAULT, '20220807', DEFAULT);
INSERT INTO BOARD
VALUES(SEQ_BNO.NEXTVAL, 'AJAX 란', 1, 'Asynchronos Javascript And Xml 의 줄임말로 서버의 서블릿과 직접 통신하는 자바스크립트 기술입니다.',
DEFAULT, '20220808', DEFAULT);
INSERT INTO BOARD
VALUES(SEQ_BNO.NEXTVAL, '필터(Filter) 란', 3, '클라이언트 요청한 서비스가 서블릿으로 전달되기 전에 먼저 구동되는 클래스입니다.',
DEFAULT, '20220809', DEFAULT);
INSERT INTO BOARD
VALUES(SEQ_BNO.NEXTVAL, '래퍼(Wrapper) 란', 2, '필터가 낚아챈 요청에 대한 데이터 처리를 담당하는 클래스입니다.',
DEFAULT, '20220810', DEFAULT);
----------------------------------------------------
--------------- ATTACHMENT 관련 -------------------
----------------------------------------------------
CREATE TABLE ATTACHMENT(
FILE_NO NUMBER PRIMARY KEY,
FILE_PATH VARCHAR2(100),
FILESYSTEM_NAME VARCHAR2(200),
ORIGINAL_NAME VARCHAR2(200),
UPLOAD_DATE DATE DEFAULT SYSDATE,
REF_TYPE CHAR(1) CHECK(REF_TYPE IN ('N', 'B')),
REF_NO NUMBER
);
CREATE SEQUENCE SEQ_ANO NOCACHE;
----------------------------------------------------
--------------- REPLY 관련 -------------------
----------------------------------------------------
CREATE TABLE REPLY(
REPLY_NO NUMBER PRIMARY KEY,
REPLY_CONTENT VARCHAR2(400) NOT NULL,
REF_BNO NUMBER NOT NULL,
REPLY_WRITER NUMBER NOT NULL,
REGIST_DATE DATE DEFAULT SYSDATE,
STATUS VARCHAR2(1) DEFAULT 'Y' CHECK (STATUS IN ('Y', 'N')),
FOREIGN KEY (REF_BNO) REFERENCES BOARD ON DELETE CASCADE,
FOREIGN KEY (REPLY_WRITER) REFERENCES MEMBER ON DELETE CASCADE
);
COMMENT ON COLUMN REPLY.REPLY_NO IS '댓글번호';
COMMENT ON COLUMN REPLY.REPLY_CONTENT IS '댓글내용';
COMMENT ON COLUMN REPLY.REF_BNO IS '참조게시글번호';
COMMENT ON COLUMN REPLY.REPLY_WRITER IS '댓글작성자아이디';
COMMENT ON COLUMN REPLY.REGIST_DATE IS '댓글작성날짜';
COMMENT ON COLUMN REPLY.STATUS IS '댓글상태값';
CREATE SEQUENCE SEQ_RNO NOCACHE;
INSERT INTO REPLY
VALUES(SEQ_RNO.NEXTVAL, '첫번째 댓글입니다.', 1, 1, '20220813', DEFAULT);
INSERT INTO REPLY
VALUES(SEQ_RNO.NEXTVAL, '첫번째 댓글입니다.', 13, 2, '20220813', DEFAULT);
INSERT INTO REPLY
VALUES(SEQ_RNO.NEXTVAL, '두번째 댓글입니다.', 13, 3, '20220814', DEFAULT);
INSERT INTO REPLY
VALUES(SEQ_RNO.NEXTVAL, '마지막 댓글입니다.', 13, 1, '20220816', DEFAULT);
COMMIT;
- attachment 테이블은 비어있다.
- 첨부파일 테이블에 board랑 만 아니라 notice랑도 참조할 수 있어서 참조할 타입, 그때 글 번호를 보관할 컬럼을 뒀다.
ㅁ db 구축이 끝났으면 프로젝트 작업을 하면 된다.
- 우클릭 - new - 스프링 레거시 프로젝트
- MV Prjocet 템플릿 선택.
- 베이스 패키지는 com.br.spring
이제부터 컨텍스트 패스는 /spring이다. (스프링에선 자동으로 베이스패키지이ㅢ 3번째가 커넥스트패스가됨)
ㅁ 프로젝트 세팅
- https://moca7.tistory.com/297 <- 이거대로 세팅했다.
ㅁ BoardDto 변경
- BoardDto의 boardWriter 필드를 String으로 뒀다.
ㅁ AttachDto
- 다른거 없음.
ㅁ
ㅁ
ㅁ
ㅁ PageInfoDto 생성
- 위에처럼 있는데 아래로 변경한다. 아디비번을 sbatis에서 spring으로 변경.
- 위에처럼 있는데 아래로 변경한다. com.br.file.service~를 com.br.spring.service~로 작성.
ㅁ 페이징 처리
- util 패키지에 PagingUtil 클래스를 만든다.
마이바티스꺼에서 복사해와도 되지만 복습삼아 다시 만든다.
- 어차피 모든 필드에 값을 담을거라 모든 필드에 대한 매개변수 생성자를 이용해도 된다.
그냥 build를 배워봤으니까 써본다.
- 이전에는 static 메소드로 뒀었는데 이제는 Spring 프레임워크를 쓰기 때문에 스프링에 한번 빈으로 등록만 하면 된다.
- @Component 일반 클래스
ㅁ util에 FileUtil 클래스를 복사해서 붙여넣기한다.
- 복붙하면 알아서 맨 위의 패키지 선언부가 현재 패키지로 수정되어 있다.
ㅁ 다른클래스파일들도 열어보기
ㅁ 화면 구현 파일들, 이미지 파일들
ㅁ 구조
ㅁ 서버 실행해보기
- 서버 클린, 서버 톰캣 클린, 프로젝트 클린, 프로젝트 메이븐 업데이트 + 재부팅 + 서버 삭제 후 다시 추가
- 그러다보니 오류가 바뀌었는데 memberserviceImpl에 @Service가 없어서 서버 스타트시 오류난듯.
'Spring' 카테고리의 다른 글
[웹프로젝트] 3. 단위테스트? 멤버 mapper (0) | 2024.10.25 |
---|---|
[웹프로젝트] 2. 헤더, 푸터, 메인페이지, 에러페이지 (0) | 2024.10.25 |
파일업로드(11) 분할 (0) | 2024.10.25 |
파일업로드(10) 분할 (0) | 2024.10.25 |
[Spring] 파일 업로드(9) 에디터로 파일업로드 (0) | 2024.10.25 |