오라클에서 인덱스 관련
게시판 생성
- BoardController의 list 메서드로 받은 List를 list.jsp에서 받아서 출력함
- 작성일이 외국표기법으로 출력되므로 변경 예정
작성일의 출력을 yyyy.MM.dd로 변경
- fmt 접두사가 있어야 fmt로 시작하는 태그들을 사용할 수 있음
- formatDate의 value는 Date 객체를 가짐
- formatDate의 pattern는 출력 방식을 설정함(yyyy.MM.dd hh시 mm분 ss초)
- 년/월/일 로 할때 . 이나 - 이나 상관 없음
- 월은 대문자 M 사용, 분이 소문자 m
인덱스 설정
- 기존의 설정된 primary key 인덱스
- 최신글일수록 번호가 클것이므로 내림차순 정렬, 주글은 오름차순 정렬!
- 주글 밑에 답글, 답글에 답글의 방식으로 사용 예정
- 코드 실행 후 계획 설명을 눌러서 보면 인덱스가 어떻게 작동했는지, 어떤 인덱스가 사용되었는지를 볼 수 있음
- 인덱스를 거쳐서 검색을 하는게 풀 스택보다 훨씬 빠름
- ORDER BY는 과부하를 일으키므로 INDEX를 활용하는게 좋음
게시판 페이징 쿼리
- WHERE 조건절에서 직접 언급하는 방식
- RANGE SCAN은 범위를 좁혀서 검색을 했다는 의미
- 범위 주석에 +를 붙이면 + 다음에 인덱스를 사용해서 SELECT를 해달라는 의미
- 범위 주석에 +를 붙이면 주석으로 작동하지 않지만, 컬럼처럼 취급되지도 않음
- WHERE절을 사용해서 지정해줘야 작동함
- 범위지정 출력도 작동 잘 됨
- ROWNUM이 기본적으로 FROM 다음 WHERE 절에서 가져올 행이 선택될 때 최초로 1번이 매겨짐
- 여기서 또 최초로 1번이 매겨지지만 찾는 번호가 1이 아니라면 해당하지 않아 폐기됨
- 실행 순서가 레드 박스 안에서 실행이 된 후 바깥 구문 실행!
- 레드박스 안에서 1~20까지 번호를 매긴 후 바깥 구문을 통해 11~20을 출력함
- ORDER BY를 쓰지 않는것이 포인트!
10씩 끊어서 페이징하는 코드추가
- 페이지 번호와 글 개수를 관리하는 클래스 Criteria를 com.example.domain에 생성
- Criteria는 페이지 번호와 한 페이지당 글 개수를 지정함
- BoardMapper.java에 추상 메서드 getListWithPageing추가
- BoardMapper.xml에 코드 추가
- BoardService에 getList
- 기존의 getBoards 대신 getList를 사용
- 게시판 확인, 10개씩 출력됨
- 주소의 pageNum에 따라 게시글의 번호가 맞게 출력됨
주소창에 list?pageNum=2&amount=10 이렇게 쳐서 들어갈 수 있는게 컨트롤러 때문인게 맞나요?
네 맞아요~
PageDTO 작성
- com.example.domain에 페이지를 만들 때 기준 정보를 담을 PageDTO를 생성
- endPage는 getPageNum을 실수로 나눈 후 Math.ceil로 올림 시켜서 int로 정수화시킨 후 5를 곱한다.
- ceil은 소수점 첫째자리에서 올림함
- statrPage는 구한 endPage에서 5(우린 5개씩 볼 예정)에서 1을 뺀 값을 뺀다.
- 실제 끝 페이지 값인 realEnd 선언
BoardController 수정
- 전체 글 가져오기 위해 사용했던 getBoards 대신 정확한 getList로 변경
- pageDTO 인스턴스 생성
- pageMaker와 pageDTO 사용
boardList.jsp 수정
- totalCount를 pageMaker.total로 변환
- Pagination 코드를 수정함
- Pagination 코드의 prev, next 이벤트 설정