전체 글

전체 글

    [오라클]CASCADE 제약조건 추가하기

    게시글과 댓글을 구현하면서 , 댓글테이블에 외래키로 게시글테이블의 BNO를 설정했다. 그 후, 게시글을 삭제하려고 하니 무결성 제약조건 위배로 삭제가 안되고 500에러가 나왔다. 찾아보니 delete cascade 제약조건을 설정해놔야 부모테이블 삭제시 자식테이블도 같이 삭제되는 방법을 찾았다. alter table 자식테이블명 add constraint 설정할제약조건명 foreign key (외래키로 설정할 키) references 부모테이블명(외래키로 설정할 키) on delete cascade; alter table MP_FILE add constraint MP_FILE_DELETE foreign key (BNO) references MP_BOARD(BNO) on delete cascade; alt..

    [스프링] 다중 게시판 구현 (CRUD)

    [스프링] 다중 게시판 구현 (CRUD)

    이번엔 다중 게시판을 구현해보려고 한다. 순서는 먼저 게시판테이블에 BGNO 라는 게시판 구분용 속성을 추가한다. 게시판 테이블은 여러개 만들지 않고, 하나의 테이블을 사용하는 방식으로 구현하려고 한다. 커뮤니티의 BGNO = 1 , Q&A = 2, 포럼 = 3 이런식으로 그룹을 나눠서 구별한다. 새로운 속성이 추가되고, 게시글을 전부 나눠줘야 하기 때문에, 조회, 삽입, 수정 ,삭제 모두 백과 프론트단을 전부 수정해줘야 한다. 일단 게시판테이블(MP_BOARD)에 BGNO를 추가한다. alter table MP_BOARD add BGNO NUMBER NOT NULL; UPDATE MP_BOARD SET BGNO = 1; 현재 지금 있는 글들의 BGNO를 1로 갱신해준다. MAPPER SELECT BNO..

    [스프링]게시판 이전글 다음글 구현

    [스프링]게시판 이전글 다음글 구현

    오늘은 이전글 다음글을 구현해보려고 한다. 글 이동은 게시글내용(게시글상세보기) 뷰에서 할 것이므로, 처음에는 bno(게시글PR)로 게시글 구분을 하니, 버튼에 onclick= "location.href='상세페이지링크/bno=${bno -1}'" 로 bno값을 불러와 +1, -1하면 되지 않나...라고 떠올렸지만, 구현해보니 삭제된 글 때문에 문제가 되었다.. 1000번 글에서 이전글을보면 999번으로 가는데 999번글은 삭제해서 페이지가 제대로 나오지 않는다. 그래서 게시물 목록을 만들때 처럼, ROW_NUMBER()로 정렬한 select한 결과를 서브쿼리로 select해서 이전글 다음글을 만들어야하나 생각하다가, 검색을 통해 더 간단한 방법을 찾았다. [속성], LEAD([속성],[이동값],[이동후..

    [스프링] ajax 댓글 에디터 및 이미지 삽입 구현

    저번글의 에디터 적용을 활용해서 비동기 댓글창에도 에디터를 적용해주고 , 에디터를 이용해서 이미지 삽입 및 서버에 저장이 가능하도록 만들었다. 먼저 댓글작성시 파일첨부를 하면 업로드가 될 수 있도록 만든다. 새로 댓글파일첨부 테이블을 만들어서 댓글로직을 따로 처리할 수도 있지만, 여차피 게시글과 같은 로컬에 저장 할 것이고, 댓글PR인 RNO를 댓글을 구현하면서 VO(getter&setter)로 쉽게 받아올 수 있게 만들어놨기 때문에, 게시글과 같은 파일첨부테이블을 사용한다. 먼저 원래의 파일첨부테이블에 RNO (댓글PR)을 추가해준다. alter table MP_FILE add column RNO number; !! NULL값을 허용해야 한다. (NOT NULL X) SELECT MP_REPLY_SEQ..

    Current request is not of type [org.springframework.web.multipart.MultipartHttpServletRequest]: org.apache.catalina.connector.RequestFacade@ // new FormData()의 사용

    오류 : java.lang.IllegalStateException: Current request is not of type [org.springframework.web.multipart.MultipartHttpServletRequest]: org.apache.catalina.connector.RequestFacade@ ajax 비동기방식 작성시 multipart값을 받지 못했다. 기존 동기방식의 게시글 작성페이지에서 첨부파일 기능을 추가했었다. 그 후 첨부파일 백단을 조금 손봐서 , ajax를 사용하는 비동기 방식의 댓글 작성에서 첨부파일 기능을 구현하려 했는데, 클라이언트 보낸 multipart 인코딩타입의 첨부파일데이터를 서버에서 받을 수 있도록 처리해주는 multipart라이브러리의 인터페이스인 M..

    [스프링]게시판 글작성 에디터 적용과 파일미리보기,이미지 미리보기

    [스프링]게시판 글작성 에디터 적용과 파일미리보기,이미지 미리보기

    저번글에서 다중첨부파일의 crud 기능을 구현하고 이번엔 글작성페이지의 내용부분에 에디터 적용, 첨부파일 미리보기, 에디터에서 이미지첨부를 위한 컬럼 수정을 해봤습니다. 게시판 글쓰기 중, 내용부분에 에디터를 적용해봤다. 네이버 에디터나 다른 오픈소스 에디터를 적용하려고 해봤으나 부트스트랩 기반으로 프론트를 구성한 내 경우는 충돌이 심해 적용방법은 간단하지만 제대로 먹히질 않았다.. 그 와중에 summernote 에디터의 lite 버전을 사용하면 충돌없이 사용할 수 있는 것을 확인했다. 해당 코드를 body안에 추가해준다 (본인은 폼태그 뒤쪽에 넣어줌) 다른 폴더를 넣어줄 필요 없이 위쪽의 cdn코드를 넣어주고 아래의 스크립트 코드를 넣어준다. 그 후 에디터를 넣고 싶은 위치에 연결시켜주면 된다. $('..

    [스프링] 첨부파일 다중파일 구현, 수정,삭제 로직의 설명(4)

    이부분은 꽤 복잡해서 뒤쪽에 전체적인 흐름을 적어놨습니다.. 궁금하신분은 한번 읽어보시고 글을 읽는 것을 추천해드립니다. Mapper에 추가 UPDATE MP_FILE SET DEL_GB = 'Y' WHERE FILE_NO = #{FILE_NO} update문이지만 삭제여부를 판별하는 DEL_GB로 기본값인 'N'을 Y로 바꿔서 화면에 표시가 되지 않도록 한다. 데이터베이스에는 그대로 남아있다. 데이터베이스까지 아예 삭제하고싶다면 delete문을 이용해서 FILE_NO를 이용해 삭제하는 방식을 사용하면 되겠다. ex) delete from MP_FILE where FILE_NO = #{FILE_NO} 파라미터를 받아오는 방식은 동일하니 어렵지 않다. 이번글에선 다중첨부파일과 게시글 수정, 삭제를 구현하는..

    [스프링]게시판 첨부파일 다운로드 (3)

    mapper 작성 SELECT STORED_FILE_NAME, ORG_FILE_NAME FROM MP_FILE WHERE FILE_NO = #{FILE_NO} 파일번호를 기준으로 파일테이블의 파일이름을 검색합니다. function fn_fileDown(fileNo){ var formObj = $("form[name='readForm']"); $("#FILE_NO").attr("value", fileNo); formObj.attr("action", "/board/fileDown"); formObj.submit(); } 다운로드를 요청하는 게시글 상세페이지 뷰의 script 태그 사이에 해당 함수를 넣어준다. 전 포스팅에서 만들어놓은 onclick 함수와 input hidden태그를 사용해서, 다운로드를 실..

    [스프링] 게시글 첨부파일 조회 구현 설명(select) (2)

    SELECT FILE_NO, ORG_FILE_NAME, ROUND(FILE_SIZE/1024,1) AS FILE_SIZE FROM MP_FILE WHERE BNO = #{BNO} AND DEL_GB = 'N' ORDER BY FILE_NO ASC 먼저 Mapper를 작성해준다. 필요한 파라미터는 BNO(게시글 PR)이기 때문에 파라미터 타입을 int로 받고, 결과값은 첨부파일의 파라미터인 Map으로 넘긴다. 파일사이즈는 1024당 1로 나누어 kb로 계산하고 삭제여부가 N인 파일을 FILE_NO(파일PR)을 기준으로 오름차순으로 정렬한다. DAO작성 BoardDAO public List selectFileList(int bno) throws Exception; BoardDAOImpl @Override p..

    [스프링]게시판 첨부파일 업로드 구현 설명(insert) (1)

    오라클,스프링프레임워크 기준입니다. 먼저 파일추가에 필요한 테이블을 추가해준다. CREATE TABLE MP_FILE ( FILE_NO NUMBER, BNO NUMBER NOT NULL, ORG_FILE_NAME VARCHAR2(260) NOT NULL, STORED_FILE_NAME VARCHAR2(36) NOT NULL, FILE_SIZE NUMBER, REGDATE DATE DEFAULT SYSDATE NOT NULL, DEL_GB VARCHAR2(1) DEFAULT 'N' NOT NULL, PRIMARY KEY(FILE_NO) ); CREATE SEQUENCE SEQ_MP_FILE_NO START WITH 1 INCREMENT BY 1 NOMAXVALUE NOCACHE; COMMIT; 첨부파일 기..