본문 바로가기

전체 글

(149)
day43 - 0926 파일 업로드 (DB를 이용하지 않고) 1. 파일 전송 태그의 enctype 속성 - 폼 데이터를 서버로 보낼 때 해당 데이터가 인코딩되는 방식을 명시 application/x-www-form-urlencoded default 값으로, 모든 문자들을 서버로 보내기 전에 인코딩됨을 명시 text/plain 공백 문자(space)는 “+” 기호로 변환, 나머지 문자는 모두 인코딩하지 않음을 명시 multipart/form-data 모든 문자를 인코딩하지 않음을 명시한다. 이 방식은 요소가 파일이나 이미지를 서버로 전송할 때 주로 사용한다. - multipart/form-data 에는 여러 content-type의 이 여러 개 들어갈 수 있다 서로 다른 content-type의 데이터가 하나의 HTTP Requ..
day42 - 0923 테이블 조인(Table Join) - 둘 이상의 테이블에서 공통 필드를 기반으로 데이터 또는 행을 결합하는 것 - 두 테이블은 기본키(Primary Key, PK)와 외래키(Foreign Key, FK) 관계로 연결되어있어야 한다 -- 테이블 조인 select [열 목록] from [첫 번째 테이블] [JOIN의 종류] [두 번째 테이블] ON [조인 조건] [WHERE 검색 조건]; 내부 조인(Inner Join) - 조인 조건을 만족하는 행(교집합)만 조회 - null을 갖는 행(조인 조건을 만족하지 못하는 행)이 나올 수 없다 - INNER JOIN을 JOIN이라고 써도 INNER JOIN으로 인식한다 외부 조인(Outer Join) 1) Left Outer Join - 조인 조건을 만족하는 행 뿐..
day41 - 0922 댓글(Reply) - 게시판(Board)과 같은 controller를 사용한다 테이블 생성 댓글(Reply) - 댓글 번호(reply_no) : 숫자, 기본키, 시퀀스로 부여 - 댓글 내용(reply_content) : 문자, 3000byte, 반드시 입력 - 댓글 작성자(reply_writer) : 문자, 회원(Member) 테이블의 회원 아이디(member_id)가 되도록, 회원 탈퇴시 null - 댓글 작성시간(reply_writetime) : 날짜, 기본값이 현재 시간이 되도록, 반드시 입력 - 댓글 원본글 번호(reply_origin) : 게시판(Board) 테이블의 게시글 번호(board_no)가 되도록, 게시글 삭제시 댓글 삭제 -- REPLY 테이블 생성 create table reply ..
day40 - 0921 계층형 게시판 - 게시글과 답글이 계층 관계(종속 관계)를 갖는 게시판 - 계층형 게시판의 모든 글은 게시글 또는 답글 중 하나이다 - 계층형 게시판의 모든 글은 기본적인 게시글의 필드 외에 그룹(group), 상위글(parent), 차수(depth)를 추가로 갖는다 - 계층형 게시판에 모든 글은 상위글(parent)과 차수(depth)에 의해 게시글과 답글로 구분된다 1) 그룹(group) - 게시글일 경우 게시글의 번호 - 답글일 경우 답글이 달린 게시글의 번호 2) 상위글(parent) - 게시글이라면 상위글이 없으므로 null - 게시글에 달린 답글이라면 해당 게시글의 번호 - 답글에 달린 답글이라면 해당 답글의 번호 3) 차수(depth) - 게시글이라면 상위글이 없으므로 0 - 게시글에 달린 ..
day39 - 0920 페이징(Paging) 1) 현재 페이지 게시글 rownum의 시작과 끝 번호 관련 - Top N Query를 이용하여 작성일 기준 내림차순(최신순) 조회 결과의 갯수를 제한하여 View에 표시한다 - Top N Query의 rownum rn의 범위에 들어갈 바인드 변수의 값은 startRow()와 endRow() 메소드의 반환값으로 한다 - 현재 페이지의 첫 게시글 rownum과 마지막 게시글 rownum은 각각 startRow(), endRow()의 반환값과 같다 - 현재 페이지의 번호(page)와 페이지에 표시할 게시글의 수(size)에 대하여 startRow, endRow와의 관계는 다음과 같다 - startRow = endRow - (size - 1) - endRow = p * size ** 2)..
day38 - 0919 Interceptor를 이용하여 권한에 따른 게시판 접근 처리 1. 회원(관리자)만 게시글 작성, 수정, 삭제 페이지에 접근할 수 있도록 2. 공지 사항은 관리자만 작성하도록 3. 회원은 자기 자신이 쓴 게시글만 수정 및 삭제할 수 있도록 4. 관리자는 모든 게시글을 삭제할 수 있도록 (수정은 불가능) 1. 회원(관리자)만 게시글 작성, 수정, 삭제 페이지에 접근 InterceptorConfiguration 설정 추가 - 게시판 전체(/board/**)에 대한 접근을 제한한다 - 게시글 목록(/board/list)과 게시글 상세(/board/detail)에 대한 접근만 허용한다 @Configuration public class InterceptorConfiguration implements WebMvcC..
day37 - 0916 - 하루동안 게시판을 구현하는 과제가 있었음 (수업 X) - 해당 내용은 0919의 게시판 구현 부분임 게시판 구현 테이블 생성 게시판(board) - 회원이 작성하는 글 정보 - 회원 정보가 외래키로 존재해야함 - 회원이 탈퇴하면 작성한 글의 작성자를 제거 구성요소 - 글 번호(board_no) - 유일한 식별키, 시퀀스로 부여 - 작성자(board_writer) - 회원의 아이디 정보, 외래키로 설정 - 제목(board_title) - 글의 제목 (한글 100자 기준으로 설정) - 내용(board_content) - 글의 내용, 가능한 최대로 설정 (4000byte) - 작성일(board_writetime) - 작성된 시점의 데이터베이스 시각 - 수정일(board_updatetime) - 수정된 시점..
day36 - 0915 VO 활용 2. 관리자 페이지에 재생수가 많은 순서로 Top 10 출력 - 2가지 방법이 있다 1. 재생수를 기준으로 내림차순 정렬한 전체 조회 결과 중 일부만 View에 표시 (전체 조회 결과를 가져오기 때문에 성능이 떨어진다) 2. Top N Query를 사용 Top N Query를 사용하는 방법 MusicDao public interface MusicDao { // 추상 메소드 - 음원 Top 10 List selectTopTen(); } MusicDaoImpl @Repository public class MusicDaoImpl implements MusicDao { // 의존성 주입 @Autowired JdbcTemplate jdbcTemplate; // 추상 메소드 오버라이딩 - 음원 Top 1..