반응형
목록
Spring (68)
[꼼꼼한 개발자] 꼼코더
🔍 조회 페이지와 이동 게시물의 등록, 리스트 처리가 끝났다면 가장 중요한 틀은 완성되었다고 볼 수 있다. 다음은 목록 페이지에서 링크를 통해 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..
👷🏻♂️ 등록 처리와 테스트 BoardController에 POST 방식으로 처리되는 register()를 작성하면 아래와 같다. 👨🏻💻 BoardController 작성 register() 메서드는 조금 다르게 String을 리턴 타입으로 지정하고 RedirectAttributes를 파라미터로 지정한다. 이는 등록 작업이 끝나면 다시 목록화면으로 이동하기 위함인데 추가적으로 새롭게 등록된 게시물의 번호를 같이 전달하기 위해서 RedirectAttributes를 이용한다. 리턴 시에는 ‘redirect:’ 접두어를 사용하는데 이를 이용하면 스프링 MVC가 내부적으로 response.sendRedirect()를 처리해 주기 때문에 편리하다 👨🏻💻 BoardControllerTest 작성 테스트할 때 ..
💡 Controller의 작성 스프링 MVC의 Controller는 하나의 클래스 내에 여러 메서드를 작성하고 @RequestMapping 등을 이용하여 URL을 분기하는 구조로 작성하기 때문에 하나의 클래스에서 필요한 만큼 메서드의 분기를 이용하는 구조로 작성된다. 과거에는 이 단계에서 Tomcat(WAS)을 실행하고 웹 화면을 만들어 결과를 확인하는 방식의 코드를 작성해 왔었다. 하지만 시간이 오래 걸리고, 테스트를 자동화하기에 어려움이 많아 앞으로 할 예제에서는 WAS를 실행하지 않고 Controller를 테스트할 방법을 학습해 보자 🧐 BoardController의 분석 작성 전에는 ‘원하는 기능을 호출하는 방식에 대해 테이블로 정리 후 코드로 작성’하는 것 이 좋다. 테이블에서 From 항목은 ..
👷🏻♂️ 비즈니스 계층의 구현과 테스트(테스트 코드 작성) BoardMapper와 BoardService, BoardMapperServiceImpl에 대한 구조 설정이 완료되었으므로 테스트 클래스를 작성해 본다. 👨🏻💻 BoardServiceTests 작성 src/test/java → org.zerock.service → BoardServiceTests 클래스 작성 💁🏻♂️ 결과 BoardServiceTests의 첫 테스트는 BoardService 객체가 제대로 주입이 가능한지 확인하는 작업 정상적으로 BoardService 객체 생성 후 BoardMapper가 주입되었다면 아래와 같이 BoardServiceService 객체와 데이터 베이스 관련 로그가 같이 출력된다. 👨🏻💻 등록 작업의 구현과..
🧑🏻💼 비즈니스 계층 비즈니스 계층은 ‘고객의 요구사항을 반영하는 계층’이다. 프레젠테이션 계층과 영속 계층의 중간다리 역할을 하게 된다. 영속 계층은 데이터 베이스를 기준으로 설계를 나누어 구현하지만 비즈니스 계층은 ‘로직을 기준으로 해서 처리’하게 된다. 💁🏻♂️ 쇼핑몰에서 상품을 구매 예시를 들어본다. 해당 쇼핑몰의 로직은 ‘물건을 구매한 회원에게 포인트 적립’이라고 한다면 영속 계층의 설계는 ‘상품’과 ‘회원’으로 나누어 설계하게 된다. 반면 비즈니스 계층은 ‘상품 영역’과 ‘회원 영역’을 동시에 사용해서 하나의 로직으로 처리하게 되므로 다음과 같은 구조를 만들게 된다. 현제 예제는 단일한 테이블을 이용하고 있기 때문에 위와 같은 구조는 아니지만 설계를 할 때는 원칙적으로 영역을 구분해서 작성..