반응형
목록
java (139)
[꼼꼼한 개발자] 꼼코더

❗️ 인덱스와 오라클 힌트(hint) 웹 페이지의 목록은 주로 시간의 역순으로 정렬된 결과를 보여준다. 최신 데이터가 가장 중요하기 때문이다. (개발자 입장에서는 정렬을 하지 않는 select문을 실행하고 싶지만 말이다..) 오라클은 select문을 전달할 때 ‘힌트(hint)’라는 것을 사용할 수 있다. 말 그대로 데이터베이스에 ‘지금 내가 전달한 select문을 이렇게 실행해 주면 좋겠습니다.’라는 말이다 특이하게도 select문을 어떻게 처리하는지에 대한 이야기일 뿐이므로 힌트 구문에서 에러가 나도 전혀 SQL 실행에 지장을 주지 않는다. 따라서 힌트를 이용하여 select문 작성 시 실행 계획을 통하여 개발자가 원하는 대로 SQL이 실행되는지 확인하는 습관이 필요하다. 가장 많이 사용하는 힌트는 ..

🔑 order by 보다는 인덱스 이전에 ‘데이터가 많은 상태에 정렬 작업은 문제가 된다.’를 알아봤다. 이 문제를 해결하려면 일반적으로 ‘인덱스(index)를 이용한 정렬 생략 방법’이 있다. 결론부터 말하자면 ‘인덱스’라는 존재가 이미 정렬된 구조이므로 이를 이용해서 별도의 정렬을 하지 않는 방법을 일컫는다. 자세한 건 뒤에서 살펴보고, 우선 위와 같은 상황에서 다음과 같은 SQL을 실행해 보자. 결과를 보면 전체 테이블을 조사하고 정렬하는 것은 이전과 차이가 없이 동일하지만 실행시간의 차이는 매우 크게 확인할 수 있다. 가장 중요한 점은 SQL의 실행 시간이 거의 0초로 나온다는 점이다 실행 계획은 아래와 같다. 주의해서 봐야 하는 부분은 1) SORT를 하지 않았다 2) TBL_BOARD를 바로 ..

💁🏻♂️ 게시물의 수정/삭제 처리 수정 작업은 일반적으로 아래와 같은 방식을 많이 사용한다 1) 조회 페이지에서 직접 처리하는 방식 2) 별도의 수정/삭제 페이지를 만들고 그 페이지에서 수정과 삭제를 처리하는 방식 최근에는 조회 페이지에 댓글 등에 대한 처리가 많아지면서 수정과 삭제는 별개의 페이지에서 하는 것이 일반적이다. 조회 페이지에서는 GET 방식을 처리되는 URL을 통해서 수정/삭제 버튼이 존재하는 화면을 볼 수 있게 제작해야 한다. 수정 혹은 삭제 작업은 POST방식으로 처리되고 결과는 다시 목록 화면에서 확인할 수 있는 형태로 제작한다. 👉🏻 수정/삭제 페이지로 이동 BoardController에서 수정/삭제가 가능한 화면으로 이동하는 것은 조회 페이지와 같다. 따라서 기존 get() 메서..

🚨 뒤로 가기의 문제 동일한 페이지 내에서 ‘목록 페이지’와 ‘조회 페이지’의 이동은 정삭적으로 처리된 것 같아 보이지만 한 가지 문제가 있다. 등록 → 목록 → 조회 까지는 순조롭지만 ‘뒤로 가기’를 선택 시 다시 게시물의 등록 결과를 확인하는 방식으로 동작하는 문제가 발생한다.(모달창) 위에 과정을 아래 그림을 통해 한 번 더 표현해 보았다. 등록 후 모달창 확인 → 목록페이지로 이동 → 게시글 제목 클릭 후 조회 페이지 이동 → 브라우저에 뒤로 가기 클릭 → 등록 시 나타나는 모달창 노출 이러한 문제는 ‘뒤로 가기’, ‘앞으로 가기’ 클릭 시 서버를 다시 호출하는 게 아니라 과거의 모든 테이터를 재활용하기 때문이다 따라서 브라우저에서 조회 페이지와 목록 페이지를 여러 번 ‘앞으로 가기, 뒤로 가기 ..

🔍 조회 페이지와 이동 게시물의 등록, 리스트 처리가 끝났다면 가장 중요한 틀은 완성되었다고 볼 수 있다. 다음은 목록 페이지에서 링크를 통해 Get방식으로 특정한 번호의 게시물을 조회할 수 있는 기능을 작성하자. 👨🏻💻 조회 페이지 작성 조회 페이지는 입력 페이지와 거의 유사하지만 게시물 번호(bno)가 출력된다는 점과 모든 데이터가 읽기 전용으로 처리된다는 점이 가장 큰 차이이다. 게시물 조회는 BoardController를 보면 get() 메소드로 작성하였다. 👨🏻💻 get.jsp 작성 views/board → get.jsp 생성 게시물 번호를 보여줄 수 있는 필드를 추가하고 모든 데이터는 readonly로 작성한다. 수정/삭제 페이지로 이동하거나 원래 목록 페이지로 이동할 수 있는 버튼을 추가..

🔀 재전송(redirect)처리 등록 과정에서 POST 방식으로 데이터가 처리되는 과정을 그림으로 표현하면 다음과 같다 BoardController에서 register() 메서드는 ‘redirect:/board/list’를 전송하는데 브라우저는 이를 통보받고 /board/list로 이동한다. 이 같은 재전송을 사용하지 않으면 ‘새로고침’을 통해 동일한 내용을 계속 서버에 등록할 수 있기에 (흔히 도배) 문제가 발생된다. 따라서 등록, 수정, 삭제 작업은 처리가 완료된 후 다시 동일한 내용을 전송할 수 없도록 브라우저의 URL로 이동하는 방식을 이용한다. 또 중요한 부분은 등록, 수정, 삭제 작업 결과를 바로 알 수 있게 피드백을 줘야 한다 경고창이나 를 이용하는 모달창을 이용해서 이러한 작업을 처리한다...

👉🏻 등록 입력 페이지와 등록 처리 게시물의 등록 작업은 POST 방식으로 처리하지만 화면에서 입력을 받아야 하니 GET 방식의 입력페이지를 확인하는 메소드를 추가해 보자 👨🏻💻 BoardController 코드 추가 register() 는 입력 페이지를 보여주는 역할이므로 별도의 처리가 필요 없다 views 폴더에 includes를 적용한 입력 페이지를 작성한다. 👨🏻💻register.jsp 추가 views 폴더 → board 폴더 → register.jsp 추가 register.jsp 페이지에서는 태그를 이용해서 필요한 데이터를 전송한다. 이나 태그의 name 속성은 BoardVO 클래스의 변수와 일치시켜 준다 💁🏻♂️ 결과(1) 브라우저에 /board/register 화면이 제대로 출력되는지 ..

📺 화면 개발 지금까지 처리와 테스트를 모두 마쳤다 만일 에러가 발생한다면 화면 관련 에러일 것이다. 화면 개발은 JSP, JavaScript(jQuery), CSS, HTML을 이용해서 작성한다. 화면을 개발하기 전에는 반드시 화면 전체 레이아웃이나, 디자인이 반영된 상태에서 개발하는 것을 추천한다. 화면을 나중에 처리하다가는 두 배의 시간을 드리는 결과가 나타날 수 있다. 웹 디자이너가 없다면 유행하는 BootStrap을 이용한 무료 디자인들을 찾아보자 (http://startbootstrap.com/template-categories/all/) 예제에서 사용할 디자인은 ‘SB Admin2’를 사용한다. (http://samara.computer/531_adaptive/startbootstrap-ma..