목록(2019) 사이드 프로젝트/BoardWeb(게시판-MVC1,MVC2,스프링MVC) (27)
공부한것들을 정리하는 블로그 입니다.
프로젝트 별첨 https://drsggg.tistory.com/236 이번 실습8에서는, 기존에 실습7까지 작성했던 프로젝트(7. MVC Model1 아키텍처로 게시판)의 소스 및 구조를 MVC Model2 아키텍처 게시판으로 변경해보도록 하겠습니다. 기존 실습에서 진행했던 Model 1 아키텍처는 시스템의 규모가 크고 기능이 복잡한 엔터프라이즈 시스템에 적합하지 않습니다. Model 1 아키텍처가 엔터프라이즈 시스템에 적합하지 않은 이유는 자바 로직과 화면 디자인이 통합되어 유지보수가 어렵기 때문입니다. JSP파일에 자바 로직과 화면 디자인이 통합되어 있기 때문에, 자바 개발자와 디자이너 모두 어려움을 느낄 수 있습니다. 이러한 문제를 해결하기 위해 고안된 웹 개발 모델이 Model 2 아키텍처, 즉 ..
프로젝트 별첨 https://drsggg.tistory.com/233 1. index.jsp 및 getBoardList.jsp 2. BoardDAO.java 수정 3. 글 등록 화면 및 기능 추가 : insertBoard.jsp, insertBoard_proc.jsp 4. 글 수정 기능 추가 : updateBoard_proc.jsp 5. 글 삭제 기능 추가 : deleteBoard_proc.jsp 1. index.jsp 및 getBoardList.jsp - 기존에 페이징처리가 되지 않은 getBoardList.jsp 를 제거 - 페이징 처리가 완료 된 getBoardList2.jsp 를 getBoardList.jsp 로 대체 index.jsp 게시판 프로그램 로그인 (페이징)글 목록 바로가기 getBoa..
보호되어 있는 글입니다.
이번 실습에서는 페이징을 다뤄보도록 하겠습니다. 원래 페이징처리는 조금 나중에 다룰 예정이였습니다만, 아래의 이유로 인하여 먼저 포스팅하게 되었습니다. 먼저 2년전에 작성했던 페이징글이 너무 옛날 코드라서 최신코드로 수정이 필요했습니다. 2년전에 작성했던 페이징 관련 글( https://drsggg.tistory.com/35 ) 에서 사용했던 API가 바뀌어서 현행화 할 필요가 있었습니다.( 지난 코드들은 API변경으로 인하여 복붙으로는 사용불가 ) 본 실습(7단원) 이후에 해당 코드(servlet + jsp)들을 Spring MVC 혹은 Annotation을 이용하여 의존성주입 및 제어의 역전 실습을 진행 할 예정인데( 8단원 이후.. ), 페이징을 구글링 하였을때 보편적으로 출력되는 게시물들은 대개 ..
보호되어 있는 글입니다.
게시판 조회수 중복 방지를 위해서는 쿠키, 세션, ip 3가지 방법이 있습니다. 실제 업무에서는 대개 쿠키를 이용하지만, 현재 제 게시물 중 실습7-* 들은 MVC Model1을 기반으로 대부분 session 을 이용하여 단순히 값을 넘기는 정도로만 처리하고 있습니다. (자세한 설명은 실습8 이후에서 session을 대체할 수 있는 방법들을 소개하면서 진행하려 생각중입니다.) 따라서 이번 실습도 session을 이용한 조회수 중복 방지 처리(jsp)로 진행하도록 하겠습니다. BoardDAO.java - 글 조회수 카운트를 위한 updateBoardCnt() 메서드가 최하단에 추가되었습니다. package com.springbook.biz.board.impl; import java.sql.Connectio..
getBoard.jsp - 글 상세 조회를 특정 유저만 조회 할 수 있도록 하는 기능은 추후 실습에서 다룰 예정 - 글 상세 조회시 조회수(Cnt)가 증가하는 기능은 추후 실습에서 다룰 예정 - 글 등록 클릭 시 insertBoard.jsp 로 이동 - 글 삭제 클릭 시 deleteBoard_proc.jsp 실행 후 getBoardList.jsp 로 이동 - 글 목록 클릭 시 getBoardList.jsp 로 이동 글 상세 log out 제목 작성자 내용 등록일 조회수 글 등록 글 삭제 글 목록
getBoardList.jsp - login_proc.jsp에서 받은 id를 이용해 상단에 이용자의 id를 출력합니다. ex) **님 환영합니다 - boardDAO.getBoardList()를 실행하여 boardList 에 데이터를 리턴받은 후(Controller), 해당 데이터를 화면에 출력한다(View). - 페이징은 나중에 추가 할 예정이며 관련 글은 그때 설명드리도록 하겠습니다. - 글 검색 기능은 post보다는 get 방식이 자주 보입니다.(get은 가져오는 것이고 post는 수행하는 것입니다) 글 목록 님 환영합니다....log out 제목 내용 번호 제목 작성자 등록일 조회수 새 글 등록 BoardDAO.java - 기존에 진행했던 실습예제에서 getBoardList() 메서드에 수정이 있었..
login.jsp - 화면 상단에 errMsg를 받아와서 이를 출력 ex) 로그인 실패시 errMsg 출력 -> 추후 exceptionResolver 또는 Spring Security로 대체 예정 - ssesion을 초기화 시켜주는 부분 추가 -> 추후 @RequestParam 또는 @Annotation으로 대체 예정 login_proc.jsp - 처음에는 login.jsp에서 request.setAttribute() 를 사용하여 id 혹은 errMsg를 넘기려고하였으나 login.jsp에서 Attribute가 null로 확인됨 - 확인해보니 현재 MVC의 Controller의 역할을 하는 login_proc.jsp에서 response.sendRedirect()를 이용하여 페이지를 전환하고 있는데, 이 ..
MV패턴에 대해서는 생략하고 바로 진행하도록 하겠습니다. (MV패턴은 구글링하면 좋은 자료가 많습니다) 기능(서비스로직 구현) - 로그인 login.jsp, login_proc.jsp - 로그아웃 logout_proc.jsp - 글 목록 조회 getBoardList.jsp - 글 상세 조회 getBoard.jsp - 글 입력 insert.jsp, insert_proc.jsp - 글 수정 update.jsp, update_proc.jsp - 글 삭제 delete_proc.jsp 흐름 (request) ↓ login.jsp view ↓ 로그인 login_proc.jsp controller ↓ getBoardList.jsp v+c ↓ getBoard.jsp v+c ↓ insert.jsp v ↓ insert_p..
스프링에서는 트랜잭션 관련 설정을 앞에서 살펴본 AOP로 처리합니다. 그리고 추가로 트랜잭션을 제어하는 어드바이스를 설정하기 위해 스프링 설정 파일에 트랜잭션 관련 네임스페이스도 추가해야 합니다. 1. 트랜잭션 네임스페이스 등록 : Namespace에서 tx를 추가 2. 트랜잭션 관리자 등록 : 스프링 설정 파일에 DataSourceTransactionManager 클래스를 등록합니다. 이는 현재 우리가 가지고 잇는 두 개의 DAO 클래스가 모두 JDBC를 기반으로 동작하기 때문이데, 스프링은 어떤 기술을 이용하여 데이터베이스 연동을 처리햇느냐에 따라 트랜잭션 관리자가 달라집니다. 추후 Mybatis나 JPA를 이용하여 DAO 클래스를 추가로 구현 할 것이고, 당연히 그때 트랜잭션 관리자를 변경하게 될 ..
스프링 JDBC를 이용하기 위한 모든 설정이 마무리됐으면, 이제 JdbcTemplate 객체를 이용하여 DAO 클래스만 구현하면 됩니다. 그런데 DAO 클래스에서 JdbcTemplate 객체를 얻는 방법은 두가지 입니다. 1번째 방법. JdbcDaoSupprot 클래스를 상속하는 방법 2번째 방법. JdbcTemplate 클래스를 등록하고, 의존성 주입으로 처리 1번째 방법. JdbcDaoSupprot 클래스를 상속하는 방법 참고로 @Autowired 어노테이션은 주로 변수 위에 선언하는데 메소드 위에 선언해도 동작합니다. 메소드 위에 @Autowired를 붙이면 해당 메소드를 스프링 컨테이너가 자동으로 호출해주며, 이때 메소드 매개변수 타입을 확인하고 해당 타입의 객체가 메모리에 존재하면 그 객체를 인..
스프링 JDBC를 이용하면 DB연동에 필요한 자바코드를 스프링에서 대신 처리해주고, 개발자는 실행되는 SQL 구문만 관리할 수 있기 때문에 개발과 유지보수가 훨씬 편해질 수 있습니다. 스프링은 JDBC 기반의 DB연동 프로그램을 쉽게 개발할 수 있도록 JdbcTemplate클래스를 지원합니다. 1. 라이브러리 추가 2. DataSouce 설정 추가 기왕 만들거 프로퍼티 파일을 활용하도록 작성합니다. 스프링 JDBC를 위한 기본설정이 마무리됐으면 이제 JdbcTemplate 객체를 이용하여 DB연동을 간단하게 처리할 수 있습니다. queryForObject() 메소드는 SELECT 구문의 실행 결과를 특정 자바 객체로 매핑하여 리턴받을 때 사용합니다. 참고로 queryForObject() 메소드는검색결과가..
보호되어 있는 글입니다.
log4j.xml 파일의 하단에 위차한 root logger를 수정하면 로그레벨 등을 변경가능합니다. 가령 priority value를 trace로 수정하면, warn으로 설정하였을 때보다 더 많은 로그가 찍힌다(대부분 시스템 로그) ( 참고 : https://cofs.tistory.com/354 ) 또한 로그의 패턴도 수정이 가능합니다. web.xml에 log4j 관련부분 추가 web.xml에 log4j 관련부분은 따로 셋팅 할 필요없음(spring version 올라가면서 해당 클래스가 사라지고 통합됨) log4j.xml에서 셋팅 프로젝트를 실행해보면 지정해준 경로에 log파일과 로그 내역이 쌓이는 것을 확인 할 수 있습니다. 쓸데없는 로그가 너무 쌓여도 곤란하니 log4j.xml의 설정을 바꾸고 마..
이번 글에서는 LogAdvice를 Log4Advice로 교체해보도록 하겠습니다. 스프링 aop의 관심분리 덕분에, 횡단관심에 해당하는 log 파일 교체시에 핵심 관심인 BoardServiceImpl 등을 수정하지 않아도 됩니다. 1. applicationContext.xml에서 bean을 수정해준다 ( LogAdvice.java -> Log4Advice.java ) 2. applicationContext.xml을 AOP의 pointcut 엘리먼트를 활용하는 방법으로 수정하여 보자 ( pointcut 엘리먼트 실습 ) 3. AOP의 pointcut을 Spring에서 제공하는 annotation으로 작동하도록 수정해보자( XML설정 -> Annotation설정 ) 1. applicationContext.xm..
프로젝트 진행중에 Socket read interrupted, Authentication lapse 0 ms 에러가 발생하였습니다. 자세한 내용 및 해결방법은 본인의 다른 글(아래 링크)을 참고 바랍니다. https://drsggg.tistory.com/191 oracle error 해결 : Socket read interrupted, Authentication lapse 0 ms. 시간 흐름순으로 진행. 1. 프로젝트 실습중에 JDBC를 통한 oracle 접속에서 timeout 문제가 발생함 2. oracle sql developer를 통해 접속을 시도해 보았으나, 해당 계젱에서 timeout이 발생함. *당시에 출력된 에.. drsggg.tistory.com
비즈니스 컴포넌트 개발에서 가장 중요한 두 가지 원칙은 낮은 결합도와 높은 응집도를 유지하는 것입니다. 스프링의 의존성 주입(Dependency Injection)을 이용하면 비즈니스 컴포넌트를 구성하는 객체들의 결합도를 떨어뜨릴 수 있어서 의존관계를 쉽게 변경할 수 있습니다. 스프링의 IoC가 결합도와 관련된 기능이라면, AOP(Aspect Oriented Programming)는 응집도와 관련된 기능이라 할 수 있습니다. AOP는 관심분리를 통해 메소드마다 공통으로 등장하는 로깅이나 예외, 트랜잭션 처리 같은 횡단 관심에 해당하는 공통 코드를 독립적인 모듈로 분리해냄으로써 코드 분석과 유지보수를 쉽게 만들어줍니다. 관심분리 = 횡단관심 + 핵심관심 핵심관심 : 사용자의 요청에 따라 실제로 수행되는 핵..
지난 글에서 board 테이블 관련 비즈니스 컴포넌트를 추가했었다. 이번에는 users 테이블 관련 비즈니스 컴포넌트를 추가해보겠다. UserServiceClient 와 applicationContext.xml 외에는 전부 파일첨부로 넘어가겠다. package com.springbook.biz.user; import org.springframework.context.support.AbstractApplicationContext; import org.springframework.context.support.GenericXmlApplicationContext; import org.springframework.stereotype.Service; public class UserServiceClient { pub..
이번 글에서는 일반적으로 프로젝트에서 사용하는 구조로 비즈니스 컴포넌트를 구현하는 실습을 진행해보도록 하겠습니다. 1. BoardWeb 프로젝트의 설정파일 applicationContext.xml 수정 2. JDBC 드라이브 추가 및 maven 수정 + Marker탭에서 Problem 출력 해결 3. JDBCUtil, BoardVO, BoardDAO, BoardService, BoardServiceImpl,BoardServiceClient, BoardListVO 추가 1. BoardWeb 프로젝트의 설정파일 applicationContext.xml 수정 (*2020.01.03 : 오랜만에 와봤는데 코드블럭 내의 소스코드가 깨져있네요.. 티스토리 개편되면서 날라갔나봅니다. 정확히 기억이 안나는 관계로 우선..