반응형
목록
Spring/코드로 배우는 스프링 웹 프로젝트 (45)
[꼼꼼한 개발자] 꼼코더
🔍 페이지 번호 1,2의 데이터 한 페이지당 10개의 데이터를 출력한다고 가정하고 ROWNUM 조건을 WHERE 구문에 추가하여 다음과 같이 작성할 수 있다. /* tbl_board 테이블을 bno의 역순으로 접근 후 한 페이지당 10개의 데이터를 출력(힌트 사용) / select /+ INDEX_DESC(tbl_board pk_board) */ rownum rn, bno, title, content from tbl_board where rownum 10 and rownum 10 데이터들을 찾게 된다. 문제는 TBL_BOARD에 처음으로 나오는 ROWNUM의 값이 1이라는 것이다. TBL_BOARD에서 데이터를 찾고 ROWNUM 값이 1이 된 데이터는 where 조건에 의해서 무효화된다.( > 10) 이..
🛼 ROWNUM과 인라인뷰 페이징 처리를 위해 역순으로 게시물의 목록 조회를 성공했다면 이제는 전체가 아닌 필요한 만큼의 데이터를 가져오는 방식을 알아보자 ROWNUM이라는 특별한 키워드를 사용하여 데이터에 순번을 붙여 사용해 보자 👇🏻 ROWNUM ROWNUM은 SQL 실행결과에 넘버링을 해주는 것이다. 쉽게 말 해 데이터 수집 순위를 매기는 것!(테이블에서 먼저 ACCESS 되는 순으로 매겨짐) 모든 SELECT문에 적용 가능하다 실제데이터가 아니므로 상황에 따라 매번 값이 달라질 수 있다. 👨🏻💻 ROWNUM 실습 우선 아무 조건을 적용하지 않고 tbl_board 테이블에 접근하고 각 데이터에 ROWNUM을 적용하면 다음과 같이 작성할 수 있다. SQL에 아무런 조건이 없으니 데이터는 테이블에 섞..
❗️ 인덱스와 오라클 힌트(hint) 웹 페이지의 목록은 주로 시간의 역순으로 정렬된 결과를 보여준다. 최신 데이터가 가장 중요하기 때문이다. (개발자 입장에서는 정렬을 하지 않는 select문을 실행하고 싶지만 말이다..) 오라클은 select문을 전달할 때 ‘힌트(hint)’라는 것을 사용할 수 있다. 말 그대로 데이터베이스에 ‘지금 내가 전달한 select문을 이렇게 실행해 주면 좋겠습니다.’라는 말이다 특이하게도 select문을 어떻게 처리하는지에 대한 이야기일 뿐이므로 힌트 구문에서 에러가 나도 전혀 SQL 실행에 지장을 주지 않는다. 따라서 힌트를 이용하여 select문 작성 시 실행 계획을 통하여 개발자가 원하는 대로 SQL이 실행되는지 확인하는 습관이 필요하다. 가장 많이 사용하는 힌트는 ..
🔑 order by 보다는 인덱스 이전에 ‘데이터가 많은 상태에 정렬 작업은 문제가 된다.’를 알아봤다. 이 문제를 해결하려면 일반적으로 ‘인덱스(index)를 이용한 정렬 생략 방법’이 있다. 결론부터 말하자면 ‘인덱스’라는 존재가 이미 정렬된 구조이므로 이를 이용해서 별도의 정렬을 하지 않는 방법을 일컫는다. 자세한 건 뒤에서 살펴보고, 우선 위와 같은 상황에서 다음과 같은 SQL을 실행해 보자. 결과를 보면 전체 테이블을 조사하고 정렬하는 것은 이전과 차이가 없이 동일하지만 실행시간의 차이는 매우 크게 확인할 수 있다. 가장 중요한 점은 SQL의 실행 시간이 거의 0초로 나온다는 점이다 실행 계획은 아래와 같다. 주의해서 봐야 하는 부분은 1) SORT를 하지 않았다 2) TBL_BOARD를 바로 ..
📄 오라클데이터 베이스 페이징 처리 현재 가장 미숙한 부분은 목록 페이지이다. 기본적으로 페이징(pagination) 처리가 필요하다. (수많은 데이터를 한 페이지에 보여주면, 처리 성능에 영향을 미치기 때문) 페이징 처리는 크게 ‘번호’를 이용하거나 ‘계속보기’의 형태로 구현된다. 번호를 이용한 페이징 작업 : 과거 웹 초기부터 이어오던 방식 계속보기를 이용한 페이직 작업 : Ajax와 앱이 등장한 이후에 ‘무한 스크롤’이나 ‘더 보기’와 같은 형태로 구현. 예제는 전통적인 번호를 이용하여 처리한다. 오라클에서 페이징 처리하는 것은 MySQL에 비해 추가적인 지식이 필요하므로 이에 대한 학습을 선행해야 한다. 🚨 order by의 문제 데이터의 양이 많을수록 프로그램을 이용해 정렬이라는 작업을 사용한다..
💁🏻♂️ 게시물의 수정/삭제 처리 수정 작업은 일반적으로 아래와 같은 방식을 많이 사용한다 1) 조회 페이지에서 직접 처리하는 방식 2) 별도의 수정/삭제 페이지를 만들고 그 페이지에서 수정과 삭제를 처리하는 방식 최근에는 조회 페이지에 댓글 등에 대한 처리가 많아지면서 수정과 삭제는 별개의 페이지에서 하는 것이 일반적이다. 조회 페이지에서는 GET 방식을 처리되는 URL을 통해서 수정/삭제 버튼이 존재하는 화면을 볼 수 있게 제작해야 한다. 수정 혹은 삭제 작업은 POST방식으로 처리되고 결과는 다시 목록 화면에서 확인할 수 있는 형태로 제작한다. 👉🏻 수정/삭제 페이지로 이동 BoardController에서 수정/삭제가 가능한 화면으로 이동하는 것은 조회 페이지와 같다. 따라서 기존 get() 메서..
🚨 뒤로 가기의 문제 동일한 페이지 내에서 ‘목록 페이지’와 ‘조회 페이지’의 이동은 정삭적으로 처리된 것 같아 보이지만 한 가지 문제가 있다. 등록 → 목록 → 조회 까지는 순조롭지만 ‘뒤로 가기’를 선택 시 다시 게시물의 등록 결과를 확인하는 방식으로 동작하는 문제가 발생한다.(모달창) 위에 과정을 아래 그림을 통해 한 번 더 표현해 보았다. 등록 후 모달창 확인 → 목록페이지로 이동 → 게시글 제목 클릭 후 조회 페이지 이동 → 브라우저에 뒤로 가기 클릭 → 등록 시 나타나는 모달창 노출 이러한 문제는 ‘뒤로 가기’, ‘앞으로 가기’ 클릭 시 서버를 다시 호출하는 게 아니라 과거의 모든 테이터를 재활용하기 때문이다 따라서 브라우저에서 조회 페이지와 목록 페이지를 여러 번 ‘앞으로 가기, 뒤로 가기 ..
🔍 조회 페이지와 이동 게시물의 등록, 리스트 처리가 끝났다면 가장 중요한 틀은 완성되었다고 볼 수 있다. 다음은 목록 페이지에서 링크를 통해 Get방식으로 특정한 번호의 게시물을 조회할 수 있는 기능을 작성하자. 👨🏻💻 조회 페이지 작성 조회 페이지는 입력 페이지와 거의 유사하지만 게시물 번호(bno)가 출력된다는 점과 모든 데이터가 읽기 전용으로 처리된다는 점이 가장 큰 차이이다. 게시물 조회는 BoardController를 보면 get() 메소드로 작성하였다. 👨🏻💻 get.jsp 작성 views/board → get.jsp 생성 게시물 번호를 보여줄 수 있는 필드를 추가하고 모든 데이터는 readonly로 작성한다. 수정/삭제 페이지로 이동하거나 원래 목록 페이지로 이동할 수 있는 버튼을 추가..