본문 바로가기

Spring29

[Spring] 두 개의 레이어로 나눈 2-Layered 아키텍처 일반적으로 프레임워크 기반의 웹 프로젝트를 보면 아래와 같이 두 개의 레이어로 나누어 시스템을 개발한다. 이를 '2-Layered' 아키텍처 스타일이라고 한다. ConextLoaderListener 등록 Listener는 Servlet이나 Filter 클래스와 마찬가지로 web.xml 파일에 등록한다. 태그 하위에 2023. 4. 29.
[Spring] Controlle가 직접 DAO 객체의 메서드를 호출하면 안되는 몇가지 이유에 대해서 Controller는 매개변수를 통해 전달된 DAO 객체를 이용해 사용자가 요청한 로직 처리 아래 코드를 살펴보자. @Controller @SessionAttributes("board") public class BoardController { @RequestMapping("/insertBoard.do") public String insert(BoardVO vo, BoardDAO boradDAO) { boradDAO.insertBoard(vo); return "redirect:getBoardList.do"; } @RequestMapping("/updateBoard.do") public String updaate(@ModelAttribute("board") BoardVO vo, BoardDAO boardDA.. 2023. 4. 29.
[Spring] AOP(Aspect Oriented Programming)에 대해서 AOP란? AOP를 이해하는데 가장 중요한 핵심 개념이 바로 관심 분리이다. AOP에서는 메서드마다 공통으로 등장하는 로깅이나 예외, 트랜잭션 처리 같안 코드들을 횡단 관심이라고 한다. 이에 반해 사용자의 요청에 따라 실제로 수행되는 핵심 비즈니스 로직을 핵심 관심이라고 한다. 만약 이 두 관심을 완벽하게 분리할 수 있다면, 개발자가 구현하는 메서드에는 실제 비즈니스 로직만으로 구성할 수 있으므로, 더욱 간결하고 응집도 높은 코드를 유지할 수 있다. AOP 용어 간략 정리 조인포인트(Joinpoint) 클라이언트가 호출하는 모든 비즈니스 로직을 말함. 포인트컷으로 설정될 수 있는 메서드라고 이해하면 쉽다.( 포인트컷 대상 혹은 포인트컷 후보) 포인트컷(Pointcut) 필터링된 조인포인트를 의미한다. 포.. 2023. 4. 11.
[Spring] @SessionAttribute / null 업데이트 방지 / 세션에 저장해서 사용하기 @SessionAttribute는 수정 작업을 처리할 때, 유용하게 사용할 수 있는 어노테이션이다. 예를들어, 상세 화면에서 게시글을 수정한다고 가정해보자. 사용자가 수정한 제목과 내용 정보 등을 가지고 "/update"와 같은 요청을 한다. 이때 사용자가 입력한 정보 외에 작성자 정보는 전달되지 않는다. 즉, Command 객체인 BoardTO에 writer 정보가 저장되지 않는다. 개발자에 따라 다르겠지만, 만약 작성자 컬럼까지 수정되도록 돼있다면 작성자(writer) 파라미터 정보가 전달되지 않으므로 null로 수정될 것이다. update board set title = ?, writer = ?, content = ? where seq = ? 이런 문제를 해결하기 위해서 사용된다. @Controll.. 2023. 3. 6.
[Spring] @ModelAttribute / 두가지 컬렉션을 View로 보내기 / @RequestMapping 어노테이션보다 먼저 실행되는 메서드 만들기 두가지 기능을 가진 @ModelAttribute @ModelAttribute를 Controller 메서드의 매개변수로 선언된 Command 객체의 이름을 변경할 때 사용할 수 있다고 배웠다. 추가로, View(JSP)에서 사용할 데이터를 설정하는 용도로도 사용할 수 있다. @ModelAttribute가 설정된 메서드는 @RequestMapping 어노테이션이 적용된 메서드보다 먼저 호출된다. 그리고 @ModelAttribute 메서드 실행 결과로 리턴된 객체는 자동으로 Model에 저장된다. 따라서 리턴된 객체를 View 페이지에서 사용할 수 있다. 두개의 컬렉션을 리턴 예를 들면, 다양한 검색 조건이 저장된 Map을 리턴해준다고 하자. 아래 코드와 같이 총 2개의 컬렉션을 사용할 수 있다. @Model.. 2023. 3. 6.
[Spring] @RequestParam / Command 객체 사용시 DTO(Data Transfer Object) 클래스에 명시되지 않은 변수를 포함하고 싶은 상황 / DTO에 없는 멤버 변수의 파라미터 정보 Command 클래스에 없는 파라미터 Command 객체를 이용하면 클라이언트에서 넘겨준 요청 파라미터 정보를 받아낼 수 있다. 하지만 이를 위해서는 반드시 요청 파라미터와 맵핑될 멤버변수와 Setter 메서드가 Command 클래스에 선언되어 있어야 한다. 그런데 Command 객체에는 없는 파라미터를 Command 클래스에서 사용하려면? Spring MVC에서는 HTTP 요청 파라미터 정보를 추출하기 위해서 어노테이션을 통해 기능을 제공한다. 물론, 어노테이션을 사용하기 싫다면 멤버변수에 추가, Setter/Getter 메서드를 추가해서 사용하면 된다. 사용자가 글 목록 화면에서 검색 조건과 검색 키워드를 입력하고 검색 버튼을 클릭하면 "/getBoardList.do"와 매핑된 getBoardList.. 2023. 3. 6.