Springframework에서 DB를 사용할 때 마다 JDBC 드라이버를 로드, 커넥션 생성, DB연결, SQL실행, 자원해제를 해야한다. 이렇게 반복적인 작업으로 코드의 중복이 많이 일어난다. 우리는 Spring 빈을 이용하여 코드를 간소화 할 수 있다. 

프로젝트안에 pom.xml에서 <dependencies> </dependencies>안에

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-jdbc</artifactId>

<version>${org.springframework-version}</version>

</dependency>

을 추가해준다. 이제 데이터베이스 설정이 완료되었다.


프로젝트 파일 src/main/webapp/WEB-INF/spring/appServlet/ 의 servlet-context.xml에서 <beans:beans>에 




Controller 클래스안에 JdbcTemplate set해주고


Constant 클래스를 하나 만들어 JdbcTemplatae을 어디든지 사용할 수 있게 해준다.


그 뒤 Dao 클래스에서 Dao 클래스 생성자에 template = Constant.template을 해주어 template을 사용할 수 있게 한다.

이제 Dao 클래스에서 template을 사용하면 된다. Jdbctemplate의 CRUD는 다음에 포스팅하겠다.

웹어플리케이션에서 데이터의 유효성을 검사하기 위한 방법으로 Front단에서 Javascript를 이용해 사용하는 방법이 있고, Back-end에서 Validator 객체를 사용하는 방법이 있다.

커맨드 객체의 유효성을 검사하기 위해 Validator 인터페이스를 사용하는 방법에 대해서 알아보겠다.


먼저 Student 클래스를 만들어 필요한 데이터들을 클래스화 해준다.


먼저 Validator를 인터페이스한 클래스를 하나 만들어준다.

Validator 을 인터페이스에서 검색 한 후 2번째에 있는 것을 클릭해준다.


Validator 인터페이스를 받은 클래스는 다음과 같이 2가지 메소드가 자동으로 오버라이딩된다. 첫 번째 supports 메소드는 검증할 객체의 클래스 타입 정보를 명시해준다.

두 번째 validate 메소드는 parameter 객체를 두 개 받는데 첫 번째 파라미터는 무엇이 들어올지 모르기때문에 Object로 받는다. 두 번째 파라미터는 에러객체이다.


이제 Controller 에서 Validator을 사용하면 된다. 검증 시 에러가 있으면 로그인 되지 않고 에러가 없으면 로그인 성공 페이지로 이동한다.



ValidationUtils.rejectIfEmptyOrWhitespace(errors,"name","trouble");

Spring이 제공해 주는 메소드이다. 비어있거나 공백이면 에러에 name,trouble 값을 넣어준다.


================================================================================================================================================


이제 @Valid 어노테이션을 사용해 간단하게 유효성 검사하는 법을 알아보자.

제일 먼저 pom.xml 파일에서 dependency를 추가해야한다.

버젼은 5.2.4.Final 해도 된다. 


커맨드 객체 앞에 @Valid를 추가해주고 밑에 initBinder 메소드를 추가하면 알아서 spring이 알아서 에러를 찾아준다.


Spring framework GET/POST @RequestMapping에 대해서 알아봅시다.



GET과 POST 형식으로 데이터를 받을 때 간단히 RequestMapping 부분에 GET과 POST만 따로 적어주면된다.



----------------------------------------------------------------------------------------------------

@ModelAttribute 어노테이션을 이용하면 커맨드 객체의 이름을 바꿀 수 있다.


-----------------------------------------------------------------------------------------------------


리다이렉트(redirect)

서버안에서 redirect 를 할 수 있고


http:// 로 redirect 할 수있다.



Spring framework form 간에 데이터 이동 - ①HttpServletRequest 클래스를 이용한 방법


controll 클래스에 해당 경로를 매핑 해준뒤에 httpServletRequest로 GET이나 POST 형식으로 데이터를 불러와 그것을 다시 model 객체를 이용해 view페이지로 이동시켜 준다.


------------------------------------------------------------------------------------------------------------------------


Spring framework form 간에 데이터 이동 - ②RequestParam 어노테이션을 이용

controll 클래스에서 RequestParam으로 GET이나 POST로 넘어온 데이터를 받는다. 그것을 다시 model 객체를 이용해 view로 넘겨준다.

------------------------------------------------------------------------------------------------------------------------


이와 같은 2가지 방법을 통해 데이터를 폼간 폼으로 이동할 수 있지만 데이터량이 많으면 매우 복잡하고 가독성이 떨어 질 수 있다. 

이것을 개선하기 위해 데이터(커맨드) 객체를 이용한다.



Member 클래스에 데이터들을 getter setter 해준다음 그 클래스를 커맨드 객체(Member)를 바로 넣어준다.

jsp에서 바로 불러와 처리를 할 수 있게 시스템 내에서 해준다.


Spring framework MVC 모델에서 Controller에 대해서 알아보자



@Controller 으로 어노테이션 해주면 이 클래스가 컨트롤러 클래스라는 것을 명시하는 설정이 된다.

@RequestMapping("경로")를 어노테이션 해주면 요청 경로로 지정되고 리턴으로 뷰페이지로 반환된다.


데이터를 이동할 때 model 객체를 이용하면 손쉽게 뷰페이지로 데이터를 이동 시킬 수 있다. 위에 방식은 파라미터로 데이터를 받는것이다


ModelAndView 타입의 메소드는 위와 같이 사용한다. ModelAndView 는 생성자와 뷰내임을 동시에 가지고 있기 때문에 반환하는 값을 객체로 만들었던 그 값을

반환해주면 된다.


클래스 위에 RequestMapping을 하면 메소드 위에 매핑한것과 경로를 더한뒤에 값을 찾아간다.

즉, 클래스 위 @RequestMapping("/board")   메소드 위 @RequestMapping("/write") 이면 두개의 조합 /board/write 로 경로를 요청한다.

Spring Framework 한글 적용

web.xml 파일에 들어가서

각 jsp 파일마다 

<%@ page pageEncoding="UTF-8" contentType="text/html; charset=UTF-8"%> 

적어주면 된다.


'프로그래밍 > Spring Framework' 카테고리의 다른 글

Spring framework form 간에 데이터 이동  (0) 2018.08.07
자바 Spring framework MVC 모델 - Controller  (0) 2018.08.06
자바 Spring framework MVC 모델  (0) 2018.08.06
Spring AOP  (0) 2018.08.03
Spring Environment 객체  (0) 2018.08.02

스프링 MVC 모델의 전체적인 동작이다.


Client에서 DispatcherServlet으로 보내고 DispatcherServlet은 servlet-context.xml로 보낸다.


servlet-context.xml에서 controller로 보내는데 context에서 base-package를 스캔하게 된다.

모든 /로 들어온것은 전부 가로채는데 그 중에 <resources mapping~ />은 가로채지않게 된다.

'프로그래밍 > Spring Framework' 카테고리의 다른 글

자바 Spring framework MVC 모델 - Controller  (0) 2018.08.06
자바 Spring Framework 한글 적용  (0) 2018.08.06
Spring AOP  (0) 2018.08.03
Spring Environment 객체  (0) 2018.08.02
스프링 생명 주기와 범위  (0) 2018.08.01

AOP는 aspect-oriented programming의 약자로 관점 지향 프로그래밍을 뜻한다. 즉, JAVA 코드를 바꾸지 않고 밖에서 지켜보겠다는 의미를 가지는 기법을 얘기한다.


하나의 예로 들자면 사용자가 어떤 행동을 하는지 궁금할때 사용자의 로그를 확인 하고 싶어질 것이다. 이렇게 된다면 JAVA코드안에서 사용자의 로그를 확인하는 출력을 하나씩 다 넣어 줘야한다. 이런 것을 간단히, 또한 어떤 클래스에만 적용시키고 싶을 때 이 AOP 기법을 쓴다.


사용하는 방법은 밑에서 알아보고 AOP에 대한 정의에 대해 조금 알아보자.


스프링에서 AOP를 구현하는 방식에는 XML을 이요한 구현과 @Aspect 어노테이션 기반의 구현이 있다. 

AOP와 관련해서 용어가 몇가지 있는데 aspect , advice , jointpoint , pointcut , weaving에 대해 조금씩 알면 되겠다. 자세한 건 실습을 하면서 익히면 더욱 쉽다.




1.Spring의 pom.xml 파일에서 의존 설정을 한다. 의존 설정을 하고 저장을 하면 관련 configuration file들을 자동으로 다운받게 된다.

2. 공통 기능 클래스를 만든다. 공통 기능이라고 하면 로그찍기, 시간재기 등이 있겠다.

3. XML 파일 설정을 한다. xml 파일의 namespaces에 들어가 aop를 체크하면 자동으로 schema를 포함하는 코드가 생성된다.  여기서 bean을 설정하고, aspect에서 logAop(공통 기능 클래스)를 참조하고 pointcut에서 어떤 패키지에 있는 메소드들을 공통 기능을 적용시킬 것인지 설정, around에서 사용할 공통 기능 메소드를 설정하면 끝이 난다.


이것으로 XML을 이용한 AOP 구현이 끝났고 어노테이션을 이용한 AOP 구현에 대해서 알아보겠다.

=========================================================================================================================

어노테이션을 이용한 AOP 구현은 XML을 이용한 AOP 구현에 보다는 최근에 나온 방법이고 더 쉽게 사용가능하다.


 Environment 객체는 외부 IP나 외부에서 필요한 값들을 설정하기 위해 사용하는 객체를 말한다. 즉, 설정값들을 관리하기 위해 사용하는것이다.

외부 설정할 값들을 추가 해주고 마지막까지 찾을 때까지 검색한다. 


classpath만 자신이 원하는 설정한 텍스트 파일로 지정을 해주고 addLast 해주면 env.getProperty로 원하는 설정값을 가져올 수 있다. 모든 저장 되있는 설정 값을 처음 부터 끝까지 찾아 주기 때문에 쉽게 사용 가능하다.


다음은 xml에서 bean 설정을 한뒤 Enviroment 객체가 생성 될때 그 값을 인터페이스한 클래스에서 사용해 변수값 설정을 초기에 해주는 방식이다.

======================================================================================================================

프로퍼티 파일을 직접 사용하여 설정하는 법에 대해서 알아보자.





여기서는 xml 파일의 context classpath가 핵심이다. 이외에도 어노테이션을 이용한 설정방법이 있다.

또 설정을 개발환경, 실제배포 환경에 맞는 IP를 설정하기 위한 환경설정 방법도 있다.

https://www.youtube.com/watch?v=9cDHggH0ENA&list=PLieE0qnqO2kTyzAlsvxzoulHVISvO8zA9&index=71

'프로그래밍 > Spring Framework' 카테고리의 다른 글

자바 Spring framework MVC 모델  (0) 2018.08.06
Spring AOP  (0) 2018.08.03
스프링 생명 주기와 범위  (0) 2018.08.01
스프링을 이용한 객체 생성과 조립(DI 설정)  (0) 2018.08.01
Spring 이란?  (0) 2018.07.31


JSP의 전체적인 흐름에 대해서 정리해 보려고 한다. 

  맨 처음에는 사용자(클라이언트)가 화면에서 동작을 하면 FrontController로 들어가게 된다. FrontController는 사용자의 입력을 구분하는 하나의 다리라고 생각하면

  파일은 Servlet으로 만들며 경로를 *.do로 지정해 모든 .do입력들을 받아오게 된다. 



받아온 값들을 GET이나 POST 둘다 actiondo라는 메소드로 연결하여 받아온 url 값을 잘게 잘라 어디의 동작을 받아왔는지 확인 한 후 이벤트를 실행하게 된다.

각각 받아온 값들을 구분 한뒤 FrontController 서블릿이 작업을 직접 처리 하지 않고, 해당 클래스가 처리하도록 하는데 이것이 Command 패턴이 되겠다. 각 Command는 하나 이상의 동작을 수행해기 위해서 하나의 공통된 클래스를 인터페이스하여 사용하면 깔끔하게 사용할 수 있다. 


여러 개의 클래스가 기능 별로 생성 될 것이고 이 클래스들 안에서 이제 진짜 기능을 수행하는 Dao 객체를 만들게 된다.

DAO는 데이터베이스에 접속해서 데이터 추가,삭제,수정 등의 작업을 하는 클래스로서 일반적인 JSP 혹은 Servlet 페이지내에 로직을 함께 기술할 수 도 있지만, 유지보수 및 코드의 모듈화를 위해 별도의 DAO 클래스를 만들어 사용하는 것이 일반적이라고한다.


이렇게 DAO 클래스에서는 DAO 생성자에 ORACLE 데이터베이스에 접근하는 로직을 넣어 모든 클래스 메소드가 사용할 수 있게 하는 것이 편리한 방법이다. 각 메소드들은 Command로부터 받은 pharameter 들을 활용해 사용자가 원하는 데이터를 반환해 준다. 이 때 DTO를 거치는 것도 잊지 않아야 한다. DTO는

DAO클래스를 이용하여 데이터 베이스에서 데이터를 관리할 때 데이터를 일반적인 변수에 할당하여 작업 할 수도 있지만, 해당 데이터의 클래스를 만들어 사용하는 것이 MVC 모델의 가장 기본이기 때문에 MVC모델에서 M(Model)을 담당하고 있는 부분이 되겠다.

+ Recent posts