Flamme Dev
  • IntroduceMyself
  • GOAL
    • 2021년 목표
    • 회고록
      • 2020년
  • COMMON
    • 자료구조
      • 시간복잡도
      • 스택/큐
    • 코드리뷰/스터디/세미나
      • Semina
        • Version control -1 (SVN/GIT)
        • Version control - 2 (GIT)
        • PostMan
        • JMeter
      • 스터디
        • 2021년
          • EffectiveKotlin
          • 이펙티브자바
        • 2020년
          • JPA Study
            • Chap1
            • Chap3
            • Chap4
            • Chap5
            • Chap6
            • Chap7
            • Chap8
            • Chap9
            • Chap10 -1
            • Chap10-2
            • Chap10-3
            • Chap12
            • Chap 13. 웹 애플리케이션과 영속성 관리
            • Chap14
      • 코드리뷰
        • Page 1
        • 개발 생각
        • APNs 라이브러리 교체
        • 파일 삭제 분투기
        • 신입 코드리뷰
          • 2020-09-02
          • 2020-09-03
          • 2020-09-10
        • Repository
          • Repositroy(20201124)
          • Repositroy(20201123)
          • Repositroy(20201120)
          • Repositroy(20201119)
          • Repositroy(20201117)
    • 개발 서적 / 동영상 강의
      • 동영상 강의
        • 진행 중
        • 완주한 것
      • 개발 서적
        • 읽은 것
          • 손에 잡히는 10분 SQL
            • 인덱스
            • 정리 본
        • 진행 중
          • 폴리글랏 프로그래밍
          • DDD-START
            • Chapter5 리포지터리의 조회 기능
            • Chapter4 리포지터리와 모델 구현
            • Chapter3 애그리거트
            • Chapter2 아키텍쳐 개요
            • Chapter1 도메인 모델의 시작
  • INFO
    • 유스콘 준비
    • intellij
      • Command line is too long.
    • 프로그래밍의 종류
      • Async Await
      • Reactive Programming
      • Imperative Programming
      • Functional Programming
        • Naver D2 함수형 프로그래밍 강의
      • Object Oriented Programing
        • 객체지향에 대해서 알아보는 영상
      • ProcedureOriented Programming
      • RX(ReactiveX)
      • OOP VS FP
      • Declarative Programming
    • Language
      • Kotlin
        • 박재성님 강의
        • Kotlin Spring CGLIB Error
        • Kotlin의 사용
        • coroutine
        • Kotlin JVM
      • JavaScript
      • JAVA
        • DefaultNonnull
        • effective78
        • Exception
        • JsonUnWrappers
        • 명명짓기
        • @JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
        • Enc Key
        • ServiceLoader
        • Annotation
        • JVM(Java Virtual Machine)
        • Java8
          • Functional 사용
          • Optional
          • Invalid Key size
        • Java13
          • Text Block
        • Basic
          • Generic
          • JVM
          • Interface, Implements
    • Framework
      • NodeJs
      • Xamarin
      • Vert.x
        • vert.x in action
        • eventbus
      • blockedthreadchecker
      • Why.. not root run..
      • Spring
        • Spring Test
        • Kotlin
        • ControllerAdvice 정리
        • JsonAnnotation
        • Spring Data R2DBC
        • SpringWebFlux
          • login
          • SpringWebFlux란?
        • JPA
          • QueryDSL 객체 주소값 확인할 것
          • SpringData-JPA에서 Save, SaveAll
          • @CompositeKey에 ManyToOne JoinColumn이 있을 경우
          • QueryDSL N+1 문제(@OneToOne)
          • QueryDSL설정
          • CreationTimestamp
          • Enum(@enumerated vs @convert)
        • SpringSecurity
          • aopAlliance
          • csrf 방어
          • antMatcher vs mvcMatcher
          • SpringSecurity를 왜 써야할까?
          • CoreSpringSecurity
            • AuthenticationProvider
            • AuthenticationManager
            • Authentication Flow
            • SecurityContextPersistenceFilter
            • SecurityContextHolder, SecurityContext
            • Authentication
            • 필터 초기화와 다중 보안 설정
            • DelegatingProxyChain, FilterChainProxy
            • 사이트 간 요청 위조 - CSRF, CsrfFilter
            • 예외 처리 및 요청 캐시 필터 : ExceptionTranslationFilter, RequestCacheAwareFilter
            • 인가 API - 권한 설정 및 표현식
            • SessionManagementFilter, ConcurrentSessionFilter
            • 동시 세션 제어 / 세션고정보호/ 세션 정책
            • AnonymousAuthenticationFilter
            • RememberMeAutheticationFilter
            • Logout,LogoutFilter
            • UsernamePasswordAuthenticationFilter
            • Form인증
            • 인증 API - 사용자 정의 보안 기능 구현
            • 인증 API - 스프링 시큐리티 의존성 추가
        • SpringMVC
          • Spring Bean Q&A
          • HttpServletRequest
          • @ControllerAdvice
          • Service와 ServiceImpl은 꼭 있어야할까?
          • SpringMVC-1
          • SpringMVC - validator와 Errors
          • SpringMVC - DispatcherServlet의 URL
          • Spring MVC - 기본설정(2) 및 HandlerInterceptor
          • SpringMVC-3
          • Spring MVC - ViewResolver
          • Spring MVC - XML/JSON
          • Spring MVC - Field Injection & Constructor Injection
        • SpringEtc
          • Transactional
          • @Atowired NullPointer
          • CircleReference
          • Mybatis
            • IBatis - sql에 Map
            • 1:1 Mapping시 Null
            • auto_Increment, selectKey
          • @Transactional
          • JacksonAnnotation
        • SpringAOP
        • SpringDI
    • Server
      • PM2
      • Tomcat
        • jks
        • Virtual Host(Port)
    • OS
      • Window
        • Active directory
      • IOS
      • Linux
        • samba/keroberos
        • Linux
          • unlimit / socket backLog
          • nohup
          • ; , & , &&, {}
          • 쉘
          • rc.local
          • ps aux | grep 프로세스이름
          • Vim
          • Su, Sudo
          • File Directory
        • IdConfig
        • 유용한 커맨드
        • 리눅스 대소문자
        • 소프트링크와 하드링크의 차이
        • ln -Tfs
        • //와 / 의 차이
        • Linux(202003)
          • rm
          • diff
          • cp
          • mv
          • tar 압축 시 어떻게 심볼릭 링크도 같이 압축할까?
          • tar 명령어
          • ln -s 심볼릭 링크
    • Network
      • API Architectural Styles
      • 포트 확인
      • HeartBeat Protocol
      • SSO(Single Sign On)
      • Cookie and Session
      • Tcp HandShake
      • WireShark
        • WireShark 옵션
        • WireShark 패킷분석
    • DataBase
      • DB락에 대해서 알아보기
      • Redis
      • MYSQL
        • Mysql TimeOut 설정
        • MysqlLog
        • SlowQuery Analyzing
        • PushNotification Stress Test
      • MSSQL
      • 데이터베이스 식별자 선택 전략
    • ETC
      • 이름 짓기
      • FFProbe
      • Talk
      • Untitled
Powered by GitBook
On this page

Was this helpful?

  1. INFO
  2. Framework
  3. Spring
  4. SpringMVC

SpringMVC - validator와 Errors

요번 시간에는 validator와 Errors입니다.

내가 보고 있는 책에서는 이렇게 써져있다.

웹 개발에서 입력 폼의 값이 올바른지 검증하는 것은 매우 중요한 작업이다.

오청 파라미터 값을 확인하지 않고 그대로 사용한다면 데이터베이스에 잘못된 데이터가 들어갈 가능성이 많다.

요청 파라미터 값을 검사할 떄에는 크게 두가지 방법을 이용한다고 한다.

웹 브라우저 : 자바 스크립트를 이용해서 데이터를 웹 서버에 전송하기 전에 미리 검사

웹 서버 : 전달받은 요청 파라미터의 값을 검사, 올바르지 않을 경우 에러 코드를 응답하거나 재입력을 위한 폼 화면을 웹 브라우저에 전송한다.

일단 valid 메세지부터 보겠다.

valid 메세지를 출력하려면

메세지를 읽어올 때 사용할 MessageSource를 스프링 설정에 등록한다.

잠깐, 여기서 프로퍼티 설정, 메시지 설정에 대해서부터 알고 넘어가려고 한다.

이 책은 같이 설명해주면 좋을 것을... 프로퍼티설정 및 메시지 설정을 앞으로 빼놔서 책을 다시 앞으로 넘겨야됐다.

그리고 나는 지금 프로퍼티에 대한 설명이 부족하여 여기서 짧게 정리하자.

어플리케이션을 개발하다보면 동일한 코드를 사용하면서 일부 정보만 변경하고 싶은 경우가 흔히 발생한다.

이렇게 일부 정보만 변경하게 만드는 방법 중에 하나가 Environment이다.

Enviroment는 프로퍼티 통합관리, 프로필을 이용해서 선택적으로 설정 정보를 사용할 수 있는 방법을 제공한다고 한다.

그 중 프로퍼티 값을 제공하는 기능에 대해 말해보려고 한다.

스프링은 시스템 프로퍼티와 한경 변수를 사용하는 두개의 PropertySource를 기본적으로 사용한다.

이 중에서 시스템 프로퍼티가 우선 순위가 가장 높다.

그러면 프로퍼티는 어떻게 설정하는가?

<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
		<property name="basenames">
			<list>
				<value>classpath:/egovframework/message/message-common</value>
				<value>classpath:/egovframework/rte/fdl/idgnr/messages/idgnr</value>
				<value>classpath:/egovframework/rte/fdl/property/messages/properties</value>
			</list>
		</property>
		<property name="cacheSeconds">
			<value>60</value>
		</property>
	</bean>

-egovframework

<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource" 
		p:basenames="kr.or.flamme.msg.message"
	/>

-MyProject

properties 파일에

NotBlank={0}누락
Length={0} 길이({1}~{2})확인
Email=이메일주소확인
NotNull={0}널을 허용하지 않음.
Min={0}대한 최소값 {1}
Pattern={0}형식{1} 확인

써주고 <form:errors path="Notblank"> 써주면 된다.

이제 익셉션 처리이다.

Exception처리에서는 @ExceptionHandler와 @ControllerAdvice 그리고 @ResponseStatus를 통한 익셉션 처리가 있다.

@ExceptionHandler는 RequestMapping 메서드를 실행하는 과정에서 익셉션이 발생할 때 직접 그 익셉션 처리를 하고 싶으면 ExceptionHandler를 써주면 된다.

즉 @ExceptionHandler에 AritihmeticException를 써놨을때 이 클래스에서 ArithmeticException이 뜨면 ExcptionHandler를 등록해놓은 에러페이지로 이동한다.

그다음에는 @ControllerAdvice이다.

ControllerAdvice는 ExceptionHandler를 공통적으로 사용하기 위해서 만든 것이다.

코드는 이렇다.

@ControllerAdvice("kr.or.flamme")
public class CommonExceptionHandler{
	@ExceptionHandeler(RuntimeException.class)
    public String handleRuntimeException(){
    	return "error/commonException"
    }
}

즉 kr.or.flamme 밑에 있는 하위 패키지들이 RuntimeException이 발생했을때 handleRuntimeException 클래스를 탄다는 것이다,

이제는 @ResponseStatus를 이용한 익셉션이다.

ResponseStatus는 익셉션 클래스에 직접 에러 응답코드를 설정하고 싶을 때 사용한다.

throw new NoFileInfoException();

@ResponseStatus(HttpStatus.NOT_FOUND)
public class NoFileInfoException extends Exception{

}

이렇게 HttpStatus.NOT_FOUND를 걸어준다.

이 놈은 꼭 컨트롤러 영역에서 발생시키는 익셉션 코드에만 사용해야 한다. (UI영역에 의존하는 결과를 만들기 때문이다.)

PreviousSpringMVC-1NextSpringMVC - DispatcherServlet의 URL

Last updated 4 years ago

Was this helpful?