이번에는 직전 포스팅에서 간단하게 확인해본 Mapper.xml 파일의 각 엘리먼트들과 그 속성을 좀 더 자세하게 정리하려고 한다. 바로 들어가보자. 1. 엘리먼트는 데이터를 조회하는 SELECT 구문을 작성할 때 사용한다. 1) id 속성: 필수 속성으로, 반드시 전체 Mapper 파일들 내에서 유일한 아이디를 등록해야 한다. 그러나 다른 namespace에서는 동일한 id 값이 사용되어도 무관하다. 2) parameterType 속성: Mapper 파일에 등록된 SQL을 실행하려면 SQL 실행에 필요한 데이터를 외부로부터 받아야 한다. 이때 parameterType 속성을 사용하여 다음과 같이 작성한다. insert into board (seq, title, writer, content) values(..
Mybatis 프레임워크는 Spring 이나 Dynamic Web 프로젝트의 DB 연동 작업을 좀 더 쉽게 하기 위해서 탄생한 Apache에서 제작한 프레임워크이다. Mybatis의 가장 중요한 특징은 대표적으로 2가지가 있는데, 첫째는 한두 줄의 자바 코드로 DB 연동을 처리한다는 점이고, 둘째는 SQL 명령어를 자바 코드에서 분리하여 XML 파일에 따로 관리한다는 것이다. Mybatis 로 DB 연동을 처리하면, 시간을 굉장히 많이 잡아먹는 DB 관련 메서드 작성 시간을 획기적으로 줄일 수 있다. 즉, VO 객체와 SQL 명령어를 자동 맵핑까지 해준다는 것!! Mybatis는 xml 파일에 SQL 구문을 따로 관리하기 때문에, 이 구문에 어떤 오류가 있을 경우 IDE 는 에러를 찾을 수 없다는 단점이..
JSON은 JavaScript Object Notaion 의 약자로, 다른 시스템(다른 언어)와 어떤 정보를 교환하기 쉽도록 고안된 데이터 형식으로 다음과 같이 키:값 형태로 표현한다. { "seq":1, "title":"one" } 바로 확인해보자. 1. JSON 형식 1) Jackson2 라이브러리 설치 pom.xml 에 dependency 를 추가하여 라이브러리를 설치한다. ◎pom.xml com.fasterxml.jackson.core jackson-databind 2.7.2 2) HttpMessageConvertor 등록 일반적으로 브라우저에서 서블릿이나 jsp 파일을 요청하면, 서버는 클라이언트가 요청한 서블릿이나 jsp를 찾아서 실행한다. 그리고 그 실행 결과를 Http 응답 프로토콜 메시지..
Spring은 jsp 페이지를 다양한 언어로 지원할 수 있도록 할 수 있는 다국어 처리 기능 또한 가지고 있다. 1개의 페이지를 3가지 언어로 제작하려면, 언어별로 jsp 파일을 만들 필요가 없이 properties 파일을 사용하여 자동 맵핑하게끔 할 수 있다. 1. message 파일 작성 사용자가 원하는 언어로 메시지를 출력하려면 각 언어에 따른 메시지 파일을 작성해야 한다. 기본적이로 이 메시지 파일은 properties 파일을 이용하며, 해당 언어를 사용하는 Locale 정보를 결합하여 작성한다. (한글의 경우, txt 파일로 먼저 작성 후, properties 파일에 옮기면 STS 가 알아서 변환해준다.) 1) messageSource_ko.properties # login.jsp message..
일반적인 Dynamic Web 프로젝트에서 한번 파일 업로드/다운로드를 다룬 적이 있다. Spring 환경에서도 마찬가지로 이 기능들을 구현할 수 있는데, 다른 점은 apache 에서 제공하는 Common FileUpload 라이브러리를 사용하며, pom.xml 파일과 스프링 설정 파일을 조금 수정해줘야 한다는 점이다. 바로 들어가보자. 우선 View 에서 파일을 서버로 보낼 수 있게끔 수정해준다. ◎insertBoard.jsp 글 등록 Log-out 제목 작성자 내용 업로드 글 목록 가기 File 타입이 하나 더 생성되었으므로, VO 파일(Command 객체) 도 다음과 같이 수정한다. ◎BoardVO.java public class BoardVO { private int seq; private Str..
지금까지 Spring MVC 를 구현하면서 진행한 전체 작업을 "2-Layered" 아키텍쳐 스타일이라고 하며, 이를 그림으로 나타내면 다음과 같다. 이때, presentation-layer 에서 Controller 가 서비스를 스캔할 수 있도록하는 설정 파일인 "presentation-layer.xml" 파일이 /WEB-INT/config 폴더 내에 존재하며, Controller객체들이 생성되기 전에 먼저 사용할 비즈니스 컴포넌트들을 메모리에 생성하기 위한 "applicationContext.xml" 파일이 src/main/resources 폴더에 존재한다. Spring 초반부터 MVC 구현을 들어가기 직전까지 실습을 진행했던 DB. AOP 등과 같은 설정은 바로 이 applicationContext...
지금까지 Spring MVC 예제 구조를 구성하면서 Controller는 항상 DAO를 직접 사용했는데, 이는 DAO를 수정할 필요가 있을 때, 컨트롤러를 직접 다시 건드려야 하기 때문에, Spring MVC 구조에서 요구하는 바는 절대 아니다. 따라서 Spring 초반부에 실습했던 것 처럼 인터페이스를 활용하여 Controller에 의존성을 주입하는 방식으로 구성해야 한다. 이렇게 구성하는 또 다른 이유는 Service를 구현받은 Service 클래스가 없을 경우, 우리는 어드바이저를 구성할 수 없고, 이를 이용한 AOP 구성 또한 불가능해지기 때문이다. 이전에 한번 포스팅했던 내용이기 때문에 따로 자세한 설명은 생략하겠다. ◎BoardService(interface) package com.freefl..
@SessionAttribute는 수정 작업을 처리할 때, 유용하게 사용할 수 있는 어노테이션이다. 모든 Controller 메서드는 Command 객체(VO 객체)를 전달 받아서 자동으로 처리되는데, 이때 사용자가 입력하지 않은 값또한 VO 객체에 포함이 되어 있다면, null 값으로 입력되어 함께 전달되게 된다. 대부분의 경우, null 값을 함께 전달해도 별 문제가 되지 않지만, 따로 주의하지 않고 프로젝트를 짜는 경우, 이 null 값이 DB에 함께 저장되어 출력이 되는 경우가 간혹 생기곤 한다. 이런 문제를 방지하기 위해 Spring은 @SessionAttribute 어노테이션을 제공한다. 우선 @SessionAttribute는 기본적으로 @SessionAttribute("변수명") 형태로 사용..
이전 포스팅에서 Command 객체의 이름을 임의로 변경하기 위해서 @ModelAttribute 어노테이션을 한번 사용했었다. 그러나 이외에도 View 단에서 사용할 데이터를 미리 설정해놓는 용도로도 @ModelAttribute 어노테이션을 사용할 수 있다. 바로 확인해보자. 우선, BoardController 클래스의 다른 컨트롤러 매서드 상단에 다음과 같이 Map을 반환하는 매서드를 선언하여 상단에 @ModelAttribute 어노테이션으로 값을 등록한다. @ModelAttribute("conditionMap") public Map searchConditionMap() { Map conditionMap = new HashMap(); conditionMap.put("제목", "TITLE"); condi..
직전 포스팅에서 다뤘던 내용으로 충분히 어떤 웹 프로젝트를 구성하는데 아무런 문제가 없지만, 만약에 VO 객체 내에 없는 값을 jsp에서 요청하여 전달하려고 하면, VO 객체에 해당 값을 추가하는 불편함이 있다. 이 경우, @RequestParam을 사용하여 VO 객체를 수정하지 않고도 요청 값을 자동으로 전달받을 수 있다. 예를 들어, jsp 페이지 내에서 다음과 같이 VO 객체에 선언되어 있지 않는 값을 사용했을 경우, 제목 내용 ◎BoardController.java package com.freeflux.view.board; import java.util.List; import org.springframework.stereotype.Controller; import org.springframewor..
- 인천 구월동 맛집
- 파니노구스토
- 맛집
- react
- Async
- 정보보안기사 #실기 #정리
- 인천 구월동 이탈리안 맛집
- Promise
- javascript
- react-native
- redux
- 이탈리안 레스토랑
- await
- AsyncStorage
- redux-thunk
- Total
- Today
- Yesterday