Spring

· Issue
문제 이슈Batch 프로그램을 개발하다가, 수동으로 Batch 실행 시, 파라미터를 입력받아 분기처리하는 로직이 있다.자동으로 Batch 실행 시, 해당 파라미터에는 Null 값이 들어와서 해당 파라미터를 분기하는 로직에서 NullPointerException이 발생하였다.문제 원인String agencyId = null; 일 때,if(agnecyId.equals("ALL"))이라는 구문이 존재였다.equals()함수를 사용할 때, null을 비교하면 NullPointerException이 발생하기 때문에 반드시 문자열이 앞으로 와야한다.기본이지만, 지키지 못하면 아주 치명적인 실수가 될 수 있다.String str1 = "test";String str2 = "test";boolean result = s..
· Spring
로그인 하지 않은 상태에서 사용자의 정보(이름, 비밀번호 등)를 바꾸려고 할 때, 세션에서 커맨드 객체 검사하는 코드 추가@GetMappingpublic String form(@ModelAttribute("command") ChangePwdCommand pwdCmd, HttpSession session) { AuthInfo authInfo = (AuthInfo) session.getAttribute("authInfo"); return authInfo == null ? "redirect:/login" : "edit/changePwdForm";}실제 웹 어플리케이션에서는 위와 같이 비밀번호 변경 기능 외에 더 많은 기능에 로그인 여부를 확인해야하고, 코드 중복이 발생한다.이렇게 다수의 컨트롤러에 ..
· Spring
@InitBinder 애노테이션컨트롤러 범위 Validator 설정 가능package controller;import javax.validation.Valid;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.validation.Errors;import org.springframework.validation.annotation.Validated;import org.springframework.web.bind.WebDataBinder;import org.springframework.web.bind.annotation.GetMapping;import org.s..
· Spring
글로벌 Validator 설정과 @Valid 애노테이션글로벌 Validator 적용방법설정 클래스에서 WebMvcCOnfigurer의 getValidator() 메서드가 Validator 구현 객체를 리턴하도록 구현글로벌 범위 Validator가 검증할 커맨드 객체에 @Valid 애노테이션 적용package config;import org.springframework.context.MessageSource;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.context.support.ResourceBundleM..
· Spring
Errors에 에러 코드를 추가하면 JSP 는 스프링이 제공하는 form:errors> 태그를 사용해서 에에 해당하는 메시지를 출력 : : : : "> form:errors> 태그의 path 속성에러 메시지를 출력할 프로퍼티 이름을 지정에러 코드에 해당하는 메시지 코드를 찾을 때의 규칙1) 에러코드 + . + 커맨드객체이름 + "." + 필드명2) 에러코드 + . + 필드명3) 에러코드 + . + 필드타입..
· Spring
Error 인터페이스가 제공하는 에러 코드 추가 메서드reject(String errorCode);reject(String errorCode, String defaultMessage);reject(String errorCode, Object[] errorArgs, String defaultMessage);rejectValue(String field, String errorCode);rejectValue(String field, String errorCode, String defaultMessage);rejectValue(String field, String errorCode, Object[] errorArgs, String defaultMessage);에러 코드에 해당하는 메시지가 {0} 이나 {1} 과..
· Spring
커맨드 객체의 값 검증의 중요성폼에 입력한 값을 검증하지 안흥면 잘못된 값이 시스템에 입력되어 어플리케이션이 비정상 동작할 수 있음에러 메시지를 제대로 보여주지 않으면 사용자는 서비스를 제대로 이용할 수 없음스프링이 제공하는 해결 방법커맨드 객체를 검증하고 결과를 에러 코드로 저장JSP에서 에러 코드로부터 메시지를 출력커맨드 객체 검증과 에러 코드 지정하기스프링 MVC에서 커맨드 객체의 값이 올바른지 검사하기 위해 사용하는 인터페이스org.springframework.validationValidatorErrors객체를 검증할 때 사용하는 Validator 인터페이스package org.springframework.validation;public interface Validator { boolean ..
· Spring
스프링 메시지 태그에서 인자를 처리하는 방법에 대해 알아보겠습니다.spring:message> 태그의 메시지 인자 처리properties 파일register.done={0}님, 회원 가입을 완료했습니다.{0} : 프로퍼티 값 부분인덱스 기반 변수 중 0번 인덱스(첫 번째 인덱스)의 값으로 대치되는 부분 표시MessageSource의 getMessage()는 인덱스 기반 변수를 Object 배열 타입의 파라미터를 사용String getMessage(String code, Object[] args, String defaultMessage, Locale loacle);String getMessage(String code, Object[] args, Locale locale);get..
· Spring
스프링은 로케일(지역)에 상관없이 일관된 방법으로 문자열(메시지)을 관리할 수 있는 MessageSource 인터페이스를 정의하고 있습니다.MessageSource 인터페이스의 정의특정 로케일에 해당하는 메시지가 필요한 코드는 MessageSrouce의 getMessage() 메서드를 이용해서 필요한 메시지를 가져와서 사용합니다.package.org.springframework.context;import java.util.Locale;public interface MessageSource{ String getMessage(String code, Obejct[] args, String defaultMessage, Locale locale); String getMessage(Strin..
· Spring
사용자 화면에 보일 문자열은 JSP나 html등에 직접 코딩하는 경우예를 들어 로그인 폼을 보여줄 때 '아이디', '비밀번호' 등의 문자열을 직접 삽입하는 경우이메일이메일 이라는 문자열을 사용하는 모든 JSP 파일을 모두 찾아서 변경해야하는 문제점다국어 지원 문제 : 전 세계대상 서비스의 경우 사용자의 언어 설정에 따라 이메일, E-mail과 같이 각 언어에 맞게 문자열을 표시해야하는 문제점해결법 : 뷰 코드에서 사용할 문자열을 언어별로 파일에 보관하고 뷰 코드는 언어에 따라 알맞은 파일에서 문자열을 읽어와 출력문자열을 담은 메시지 파일을 작성한다.메시지 파일에서 값을 읽어오는 MessageSource 빈을 설정한다.JSP 코드에서 태그를 사용해서 메시지를 출력한다.src/main/resources/m..