Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Archives
Today
Total
관리 메뉴

KSI일기장

0501spring sql log출력, 본문

Spring

0501spring sql log출력,

MyDiaryYo 2023. 5. 1. 15:54

*sql log출력

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

CREATE TABLE "BOARD" (
	"BOARD_NO"	NUMBER		NOT NULL,
	"BOARD_TITLE"	VARCHAR2(150)		NOT NULL,
	"BOARD_CONTENT"	VARCHAR2(4000)		NOT NULL,
	"CREATE_DT"	DATE	DEFAULT SYSDATE	NOT NULL,
	"UPDATE_DT"	DATE		NOT NULL,
	"READ_COUNT"	NUMBER	DEFAULT 0	NOT NULL,
	"BOARD_ST"	CHAR(1)	DEFAULT 'N'	NOT NULL,
	"MEMBER_NO"	NUMBER		NOT NULL,
	"BOARD_CD"	NUMBER		NOT NULL
);


COMMENT ON COLUMN "BOARD"."BOARD_NO" IS '게시글 번호(시퀀스)';
COMMENT ON COLUMN "BOARD"."BOARD_TITLE" IS '게시글 제목';
COMMENT ON COLUMN "BOARD"."BOARD_CONTENT" IS '게시글 내용';
COMMENT ON COLUMN "BOARD"."CREATE_DT" IS '작성일';
COMMENT ON COLUMN "BOARD"."UPDATE_DT" IS '마지막 수정일';
COMMENT ON COLUMN "BOARD"."READ_COUNT" IS '조회수';
COMMENT ON COLUMN "BOARD"."BOARD_ST" IS '게시글 상태(정상N, 삭제Y)';
COMMENT ON COLUMN "BOARD"."MEMBER_NO" IS '작성자 회원 번호';
COMMENT ON COLUMN "BOARD"."BOARD_CD" IS '게시판 코드';

-- BOARD 테이블 제약조건 추가
ALTER TABLE BOARD
ADD PRIMARY KEY(BOARD_NO); -- 제약 조건명 생략(SYS_XXXXX)

ALTER TABLE BOARD
ADD CONSTRAINT "FK_BOARD_CD" -- 제약 조건명 지정
FOREIGN KEY("BOARD_CD") -- BOARD의 BOARD_CODE 컬럼에 FK 지정
REFERENCES "BOARD_TYPE"; -- 참조할 테이블

ALTER TABLE BOARD
ADD CONSTRAINT "CHK_BOARD_ST"
CHECK ("BOARD_ST" IN ('N', 'Y'));

-- UPDATE_DT  NULL 허용
ALTER TABLE "BOARD"
MODIFY "UPDATE_DT" NULL;


-- BOARD_NO용 시퀀스
CREATE SEQUENCE SEQ_BOARD_NO;


-- BOARD_TYPE 데이터 삽입
INSERT INTO BOARD_TYPE VALUES(1, '공지사항');
INSERT INTO BOARD_TYPE VALUES(2, '자유 게시판');
INSERT INTO BOARD_TYPE VALUES(3, '질문 게시판');

SELECT * FROM BOARD_TYPE;
SELECT * FROM BOARD;

-- BOARD 테이블 샘플 데이터 삽입(PL/SQL)
BEGIN
   FOR I IN 1..500 LOOP
      INSERT INTO BOARD 
      VALUES( SEQ_BOARD_NO.NEXTVAL,
              SEQ_BOARD_NO.CURRVAL || '번째 게시글',
              SEQ_BOARD_NO.CURRVAL || '번째 게시글 내용 입니다.',
              DEFAULT, DEFAULT, DEFAULT, DEFAULT, 1, 3
      );
   END LOOP;
END;
/

COMMIT;


SELECT * FROM MEMBER;

-- 공지사항 게시판 조회
SELECT COUNT(*) FROM BOARD WHERE BOARD_CD = 1;

-- 자유 게시판 조회
SELECT COUNT(*) FROM BOARD WHERE BOARD_CD = 2;

-- 질문 게시판 조회
SELECT COUNT(*) FROM BOARD WHERE BOARD_CD = 3;


-- 추가해주세요!
-- BOARD 테이블의 MEMBER_NO FK 연결 추가
ALTER TABLE BOARD
ADD CONSTRAINT "FK_BOARD_MEMBER" 
FOREIGN KEY("MEMBER_NO")
REFERENCES MEMBER; 



-- 게시판 이름 조회
SELECT BOARD_NM FROM BOARD_TYPE 
WHERE BOARD_CD = 2;


-- 특정 게시판의 전체 게시글 수 조회
-- (단, 삭제글은 제외)
SELECT COUNT(*) FROM BOARD
WHERE BOARD_ST = 'N'
AND BOARD_CD = 2;


-- 특정 게시판에서 일정한 범위의 목록 조회

-- ROWNUM이라는 가상의 행번호 컬럼은
-- WHERE절에 사용되는 경우 무조건 1부터 적용되야 된다.

SELECT * FROM(
   SELECT ROWNUM RNUM , A.* FROM(
      SELECT BOARD_NO, BOARD_TITLE, MEMBER_NICK, 
         TO_CHAR( CREATE_DT, 'YYYY-MM-DD' ) AS CREATE_DT, 
         READ_COUNT
      FROM BOARD
      JOIN MEMBER USING(MEMBER_NO)
      WHERE BOARD_CD = 1
      AND BOARD_ST = 'N'
      ORDER BY BOARD_NO DESC
   ) A
)
WHERE RNUM BETWEEN 11 AND 20;

SELECT * FROM ALL_CONSTRAINTS
WHERE TABLE_NAME = 'BOARD_IMG';

-- 게시판 이미지 테이블 생성
CREATE TABLE BOARD_IMG(
   IMG_NO NUMBER PRIMARY KEY,
   IMG_RENAME VARCHAR2(500) NOT NULL,
   IMG_ORIGINAL VARCHAR2(500) NOT NULL,
   IMG_LEVEL NUMBER NOT NULL,
   BOARD_NO NUMBER REFERENCES BOARD
);

COMMENT ON COLUMN BOARD_IMG.IMG_NO IS '이미지 번호';
COMMENT ON COLUMN BOARD_IMG.IMG_RENAME IS '이미지 저장 경로 + 변경명';
COMMENT ON COLUMN BOARD_IMG.IMG_ORIGINAL IS '이미지 원본명';
COMMENT ON COLUMN BOARD_IMG.IMG_LEVEL IS '이미지 위치 지정 번호';
COMMENT ON COLUMN BOARD_IMG.BOARD_NO IS '게시글 번호';


-- 이미지 번호 시퀀스 생성
CREATE SEQUENCE SEQ_IMG_NO NOCACHE;


DELETE FROM BOARD
WHERE MEMBER_NO != 1;

ALTER TABLE BOARD_IMG
DROP CONSTRAINT SYS_C007148;


-- 제약조건 추가 (BOARD -> MEMBER_S)
ALTER TABLE BOARD
ADD CONSTRAINT FK_BOARD_MEMBER_S
FOREIGN KEY(MEMBER_NO)
REFERENCES MEMBER_S
ON DELETE SET NULL;

-- 제약조건 추가 (BOARD -> MEMBER_S)
ALTER TABLE BOARD_IMG
ADD CONSTRAINT FK_BOARD_BOARD_IMG
FOREIGN KEY(BOARD_NO)
REFERENCES BOARD
ON DELETE SET NULL;


DELETE FROM BOARD_IMG
WHERE BOARD_NO NOT IN(
    SELECT BOARD_NO FROM BOARD
);


-- BOARD 테이블 샘플데이터
INSERT INTO BOARD VALUES(
    SEQ_BOARD_NO.NEXTVAL, '스프링 테스트', '테스트 내용 입니다.', 
    DEFAULT, DEFAULT, DEFAULT, DEFAULT, 1, 1
);


-- 이미지 샘플 데이터
INSERT INTO BOARD_IMG VALUES(SEQ_IMG_NO.NEXTVAL, '/resources/images/board/sample1.jpg', 'sample1.jpg', 0, SEQ_BOARD_NO.CURRVAL);
INSERT INTO BOARD_IMG VALUES(SEQ_IMG_NO.NEXTVAL, '/resources/images/board/sample2.jpg', 'sample1.jpg', 1, SEQ_BOARD_NO.CURRVAL);
INSERT INTO BOARD_IMG VALUES(SEQ_IMG_NO.NEXTVAL, '/resources/images/board/sample3.jpg', 'sample1.jpg', 2, SEQ_BOARD_NO.CURRVAL);
INSERT INTO BOARD_IMG VALUES(SEQ_IMG_NO.NEXTVAL, '/resources/images/board/sample4.jpg', 'sample1.jpg', 3, SEQ_BOARD_NO.CURRVAL);
INSERT INTO BOARD_IMG VALUES(SEQ_IMG_NO.NEXTVAL, '/resources/images/board/sample5.jpg', 'sample1.jpg', 4, SEQ_BOARD_NO.CURRVAL);

commit;

ALTER TABLE BOARD_IMG

DROP CONSTRAINT SYS_C007148;

 

쿼리스트링 = 검색 or 옵션 넣을 때 사용

-> /board/list?type=1 

/board/list/1 -> 요청 

 

인터셉터 : 컨트롤러와 dispatcher servlet 사이에서 가로채서 더 해서 돌려준다

요청(request)        ------------------------------------------------------------------------>          컨트롤러

                              filter    ->         dispatcher Servlet      ->      interceptor

                             <------------------------------------------------------------------------

                           filter (요청만 가능, 응답X)

전처리 perHandle

후처리 postHandle

 

 

 

 

-HandleInterceptor

package edu.kh.comm.common.interceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import lombok.extern.slf4j.Slf4j;

@Slf4j
public class BoardTypeInterceptor implements HandlerInterceptor {
	
	/*인터셉터가 요청을 가로채는 시기
	 * 1.preHandle(전처리) :컨트롤러 수행 전 
	 * 2.postHandle(후처리) :컨트롤러 수행 후, 컨트롤러 수행 후 결과값 참조 가능
	 * 3.afterCompletion(view단 처리 후) : 보통 자원 반환( close() )을 수행
	 * 단, 비동기요청(자바내부에서의 비동기요청(ajax X) )은 가로채지 않는다
	 */
	
	
	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
			throws Exception {
		log.info("전처리 수행");
		return HandlerInterceptor.super.preHandle(request, response, handler);
	}

	@Override
	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
			ModelAndView modelAndView) throws Exception {
		log.info("후처리 수행");
		HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
	}

	@Override
	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
			throws Exception {
		log.info("view처리 완료 후 수행");
		HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
	}

	
	
}