728x90

학습(구)/Spring 요약 18

프로필과 프로퍼티 파일

프로필 개발 환경과 실제 서비스 환경을 구분하기 위해 환경 단위를 프로필로 구분하여 사용합니다. 프로필은 설정 클래스 작성 시 @Profile 어노테이션을 사용해서 지정할 수 있습니다. 특정 프로필을 선택하기 위해서는 컨테이너를 초기화 하기전 getEnvironment()메소드를 통해 Environment를 가져오고 setActiveProfiles를 이용해 사용할 프로필을 선택할 수 있습니다. 반드시 설정 정보를 전달하기 전 프로필을 지정해야 합니다. 만약 설정 정보가 먼저 전달이 되면 익셉션이 발생하게 됩니다. 프로필 지정시 두개의 프로필을 지정할 수도 있습니다. 중첩 클래스를 이용하여 한 클래스 안에 여러 개의 설정 클래스를 작성할 수 있는데 바깥 클래스와 내부 클래스는 각 클래스별로 @Configu..

JSON 응답과 요청 처리

API사용시 HTML 뿐만 아니라 JSON이나 XML을 사용하여 응답하는 경우도 있습니다. JSON(JavaScript Object Notation) JSON은 간단한 형식을 갖는 문자열로 데이터 교환에 주로 사용합니다. {"이름":"값"}의 형태로 객체를 표현합니다. 배열은 ["값", "값"]으로 ","로 구분한 값 목록으로 표현합니다. Jackson Jackson은 자바객체와 JSON 형식 간 변환을 처리하는 라이브러리입니다. Jackson을 사용하기 위해선 pom.xml에 Jackson을 의존 설정 해주어야 합니다. Jackson은 프로퍼티의 이름과 값을 JSON객체의 (이름,값)으로 사용합니다. 프로퍼티 타입이 배열이나 List이거나 배열인 경우 JSON배열로 변환됩니다. @RestControll..

간단한 웹 어플리케이션 구조

간단한 어플리케이션 구성요소 Dispatcher Servlet -> 컨트롤러 -> 서비스 -> DAO 프론트 서블릿(Dispatcher Servlet) 요청 경로를 분석하여 알맞은 컨트롤러에 전달 합니다. 컨트롤러 + 뷰(JSP) - 컨트롤러 : 클라이언트가 요구한 기능을 실행하고 응답결과를 생성하는데 필요한 모델생성과 응답결과를 생성할 뷰를 선택합니다. - 뷰 : 응답 결과 생성 및 클라언트에게 전달합니다. 서비스 실질적인 기능의 로직을 구현합니다. DAO DB관련 데이터 CRUD를 수행합니다. 서비스의 구현 콘솔,윈도우,웹 등 상관없이 서비스는 동일한 로직을 수행합니다. 서비스 메소드는 트랜잭션 단위로 수행되며 실행도중 실패할 경우 롤백하고 모두 성공해야 커밋됩니다. ex) 비밀번호 변경 - 비밀번호..

날짜 값 변환, @PathVariable, 익셉션 처리

날짜 값 변환 가입일자를 기준으로 select하는 회원 검색 기능은 DB관련 MemberDao에서 selectByRegdate()메소드를 작성합니다. from,to를 매개변수로 받아 해당 날짜 사이의 데이터를 select하고 결과로 나온 ResultSet을 RowMapper를 이용해 객체로 만들어 List를 반환합니다. from과 to 파라미터는 커맨드 객체를 이용하여 표현합니다. 파라미터는 모두 String 타입이지만 기본 타입의 변환은 핸들러 어댑터에서 수행시켜주므로 해당 필드에 @DateTimeFormat 어노테이션을 사용하여 pattern을 지정하면 핸들러 어댑터가 자동으로 지정한 패턴에 따라 LocalDateTime으로 변경시켜줍니다. 커맨드 객체 생성은 WebDataBinder가 수행하고 요청..

세션, 인터셉터, 쿠키를 사용한 로그인 구현

세션 : 사용자와 연결 지속 인터셉터 : 가로채기 쿠키 : http프로토콜 요청에 대해 응답이 일회성이 므로 이를 연결 시켜줌 사용자 인증을 위해 로그인을 합니다. 이 로그인을 지속시키기 위해 세션과 쿠키를 이용하고 인터셉터를 통해 로그인이 되어있지 않으면 연결 시켜주지 않고 로그인 되어져있으면 해당 요청을 수행합니다. 이때 로그인 유지는 세션을 통해 구현하고 쿠키를 이용해 확인할 수 있습니다. 로그인 수행 먼저 로그인 요청을 수행할 컨트롤러를 작성합니다. 이때 Get일 경우 로그인 폼페이지를 보여주고 Post일 경우 로그인 성공 페이지를 보여줍니다. Post방식의 처리 메소드에는 커맨드 객체와 Error객체를 사용하여 Validator 검증을 수행하여 발생한 에러에 대해서 Error객체에 넣습니다. 에..

Spring - 검증 객체와 에러코드

Validator를 직접 구현하여 객체를 수동 생성하여 동작 검증 객체를 커맨드 객체별로 따로 생성합니다. Vaildator 인터페이스를 구현하는 객체를 생성하는데 supports()메소드는 해당 커맨드 객체를 검증할 수 있는지 없는지 구분하는 메소드입니다. 하지만 수동으로 생성할 경우 개발자가 직접 넣기 때문에 확인이 필요 없습니다. vaildate()메소드는 커맨드 객체를 검증하는 메소드입니다. 여러개의 객체 검증을 위해 Object 와 에러코드를 담기 위한 Error를 매개변수로 가집니다. Object로 커맨드 객체를 받아와 메소드 내부에서 다운 캐스팅하여 사용합니다. 각 커맨드 객체의 프로퍼티들을 검사하여 올바르지 않다면 error객체의 rejectValue()메소드를 통해 문제있는 프로퍼티와 에..

Spring - 메시지 처리

내용 설정시 두가지 방법이 있습니다. 1. Model 객체 안의 내용을 request 객체를 사용하여 직접 사용 2. Model 객체로 컨트롤러에서 제공하는 것이 아닌 것들을 하드코딩하지 않고 로 처리 보통 스프링에서 메시지 처리는 다국어 처리때 많이 사용됩니다. 먼저 언어별로 번들파일을 언어코드를 붙여 프로퍼티스 파일로 만들고 번들파일을 관리하는 폴더 생성합니다. 이 번들파일을 를 사용하여 가지고 오는데 이 태그는 MessageSource Bean객체를 사용하여 가져옵니다. 우선 스프링 설정 클래스에서 MessageSource를 Bean 객체로 등록 합니다. MessageSource 객체는 ResourceBundleMessage 객체를 사용해 basepackage와 인코딩을 설정합니다. basepack..

Spring - 커맨드 객체

커맨드 객체를 이용한 요청 파라미터 처리 커맨드 객체는 요청 파라미터가 담긴 데이터 객체입니다. 요청 파라미터가 많을 수록 코드가 길어지기 때문에 커맨드 객체를 사용합니다. 커맨드 객체는 요청 파라미터를 받을 수 있게 setter를 포함하는 객체이며 스프링은 이 setter를 이용해 요청 파라미터를 전달합니다. 커맨드 객체가 요청 매핑 어노테이션이 적용된 요청 처리 메소드의 파라미터에 존재하면 요청 파라미터의 이름과 커맨드 객체의 프로퍼티 이름이 같은 것들에 대해 setter를 이용해 핸들러 어댑터가 자료형 변환을 시켜 set 시켜줍니다. 뷰 페이지에서 커맨드 객체 이용 스프링 MVC는 커맨드 객체를 자동적으로 Model 객체에 넣습니다. 이때 키 값은 커맨드 객체의 이름에 첫글자를 소문자로 한 값이 됩..

Spring - 요청 경로 매핑과 요청 파라미터, 리다이렉트

요청 매핑 어노테이션을 이용한 경로 매핑 @Controller 를 이용한 컨트롤러를 통해 요청을 처리하는데 요청 매핑 어노테이션을 사용해 수행할 요청 경로를 지정합니다. @RequestMapping, @GetMapping, @PostMapping을 사용합니다. 여러개 사용이 가능하며 경로가 겹칠 경우 @RequestMapping으로 공통 경로를 지정한 후 각각 메소드에서 세부적으로 지정하여 따로 관리할 수 있습니다. 요청의 구분(Get,Post) 스프링 MVC는 별도 설정이 없으면 @RequestMapping에 지정된 경로를 매핑하고 @GetMapping/@PostMapping의 경우에는 해당 요청 방식에 대해서 처리합니다. 같은 경로여도 요청방식에 따라 다른 메소드를 수행 시킬 수 있습니다. 같은 경로..

Spring - MVC

스프링 MVC 설정 파일 설정이므로 @Configuration과 mvc설정인 @EnableWebMvc를 설정합니다. WebMvcConfigurer를 구현하는 클래스로 정의합니다. 이때 여러 디폴트 메소드들이 구현되어져 있으며 필요한 메소드만 재정의하여 사용합니다. 기본적으로 configureDefaultServletHandling메소드와 ConfigureViewResolvers메소드를 구현합니다. 전자는 매핑경로가 '/'일때 html/css 등을 처리해주기 위해 디폴트 서블릿을 설정하고 후자는 컨트롤러의 실행 결과를 보여주기 위해 뷰 리졸버에 관련된 설정을 해줍니다. web.xml WAS안에서 dispatcher가 생성될 때 같이 스프링 컨테이너도 생성이 됩니다. 이때 스프링 컨테이너 생성시 필요한 정보..