@ExceptionHandler 해당 어노테이션을 사용하면 특정 예외를 잡을 메서드를 정의해줄 수 있다. 코드로 살펴보자. 아래는 일반적인 컨트롤러 구성이다. @AllArgsConstructor @RestController public class DemoController { DemoService demoService; @PostMapping("/demo") public ResponseBase demo(@RequestBody RequestBase request) { try { return ResponseBase.of(demoService.update(request)); } catch (Exception e) { return ResponseBase.of(null); } } } 위의 코드를 @Exceptio..
하나의 커다란 서비스와 저장소로 구성된 기존의 모놀로식 아키텍쳐 환경은 여러 문제점들이 있었다. 하나의 모듈이 변경되어도 전체 서버를 배포해야 했다. 작은 기능의 문제점도 곧 서버 전체의 문제점이 되었다. 이러한 단점을 극복하기 위해 MSA( Microservice Architecture )가 탄생했다. ( Netflix에서 처음 도입하면서 유명해짐 ) 하나의 커다란 서비스는 독립적인 작은 단위의 모듈로 쪼개지게 되었고, 기능의 추가나 확장은 모듈을 통해서 이루어졌다. 그런데 모놀로식 아키텍쳐 환경이 MSA 환경으로 변화하면서 새로운 문제가 생기기 시작했다. 기존의 모놀로식 아키텍쳐 환경에서는 스레드 풀을 이용해 동기식 프로그래밍의 blocking을 감당할 수 있었고, 단일 애플리케이션 내부에서 정보 교..
Profile이란? Spring 3.1부터 포함된 기능으로 환경을 구분지어줄 때 사용한다. (여기서 환경은 일반적으로 DB 환경을 말함) 예) 개발 환경에 사용될 DB와 실제 환경에서 사용할 DB를 구분지어 주고 싶을 때. Profile 설정하기 Profile을 설정하기 위한 방법으로는 3가지가 있다. 1.JVM 프로퍼티로 등록 gradle.properties 파일에 jvm argument를 등록한다. org.gradle.jvmargs=-Dspring.profiles.active=develop, production 또는 아래처럼 GUI로 설정할 수도 있는데, IntelliJ에서 [Run/Debug Configuration]에서 어떤 profile로 실행을 해주면될지를 설정한다. 2. 디폴트 프로퍼티 파일..
커맨드 객체의 값 검증 폼에서 넘어온 파라미터의 값이 정상적인 값인지 검증하는 작업이 필요하다. (이를 Validation 체크라 한다.) 스프링 MVC에서는 이를 위해 2가지 인터페이스를 지원한다. org.springframework.validation.Validator org.springframework.validation.Errors Validator 인터페이스는 다음과 같다. public interface Validator { boolean supports(Class clazz); // Validator가 검증할 수 있는 타입인지 확인한다. void validate(Object target, Errors errors); // target을 검증한 후, 에러값이 있다면 errors에 담는다. } 위..
정적 자원 매핑 - 태그 maven으로 프로젝트를 진행할때 정적 자원은 /src/main/webapp/resources/ 아래에 위치시킨다. .jsp와 같은 뷰 파일은 /src/main/webapp/WEB-INF/views/ 아래에 위치하는데, 뷰에서 정적 자원을 가져오기 위해 경로는 어떤 식으로 작성해야할까? /src/main/webapp/WEB-INF/views/home.jsp 뷰가 있을 때, 해당 뷰에서 정적 자원을 가져오고 싶다면 아래처럼 작성할 수 있다.
태그로 메시지 출력하기 사용자 화면에 보일 문자열을 JSP에 직접 코딩한다고 해보자 이메일 이메일과 같은 문자열은 로그인 폼, 회원가입 폼, 회원정보 수정 폼에서 반복해서 사용된다. 이렇게 문자열을 JSP에 하드코딩하면 2가지 문제가 발생한다. 동일 문자열을 변경할 때 (예를 들어, 폼에서 사용할 이메일을 이메일 주소로 변경하고 싶다면?) 다국어 지원 (영어권 나라에서 웹에 접속했을 때는 '이메일'이 아니라 'E-mail'로 표시하고 싶다면?) 위 문제를 해결하는 방법은 뷰 코드에서 사용할 문자열을 언어별로 파일에 보관하고 뷰 코드는 언어에 따라 파일에서 문자열을 읽어와 출력하는 것이다. 문자열을 별도 파일에 작성하고 JSP 코드에서 이를 사용하는 방법은 다음과 같다. 문자열을 담은 메시지 파일을 작성한..
[Spring Web MVC] ModelAndView (Controller에서 View에 데이터 전달하기)
2019.11.14
1. Model을 통해 Controller에서 View에 데이터 전달 컨트롤러 -> 뷰로 데이터를 전달하면 뷰에서는 전달받은 데이터를 사용할 수 있다. "/survey" 경로로 요청이 들어오면 "/survey/surveyForm" 뷰에서 전달받은 데이터를 이용해 폼을 작성해보자. 일단 VO 객체 하나를 만들고 public class Question { private String title; private List options; public Question(String title, List options) { this.title = title; this.options = options; } public Question(String title) { this(title, Collection.emptyList..
다음 4가지의 폼 정보를 서버에 전송한다고 해보자 email name password confirmPassword 폼 전송 요청을 처리하는 컨트롤러는 각각의 요청 파라미터를 가져오기 위해 다음과 같은 코드를 사용할 수 있다. @PostMapping("/register") public String handleRegister(HttpServletRequest request) { String email = request.getParameter("email"); String name = request.getParameter("name"); String password = request.getParameter("password"); String confirmPassword = request.getParameter..
JdbcTemplate 객체 JDBC 프로그래밍은 아래와 같은 코드를 사용한다. 위의 구조적인 반복을 줄이기 위해 스프링은 템플릿 메서드 패턴과 전략 패턴을 엮은 JdbcTemplate 클래스를 제공한다. JdbcTemplate 객체를 사용하면 DB 조회(SELECT)를 위한 위의 코드를 아래와 같이 수정할 수 있다. List results = jdbcTemplate.query( "select * from MEMBER where EMAIL = ?", new RowMapper() { @Override public Member mapRow(ResultSet rs, int rowNum) throws SQLException { Member member = new Member( rs.getString("NAME"..
[Spring MVC] @EnableWebMvc 애노테이션과 WebMvcConfigurer 인터페이스
2019.09.14
1. DispatcherServlet과 스프링 컨테이너 스프링 MVC에서 모든 요청의 흐름을 관리하는건 DispatcherServlet이라고 정리했었습니다. DispatcherServlet은 전달받은 설정 파일을 이용해서 스프링 컨테이너를 생성합니다. 2. @EnableWebMvc - 설정이 완료된 여러 스프링 빈을 추가 DispatcherServlet이 스프링 컨테이너를 생성하기 위해선 입력으로 받는 설정 클래스에는 HandlerMapping 빈과 HandlerAdapter 빈이 등록되어있어야 합니다. 하지만 설정 클래스에 @EnableWebMvc 애노테이션을 추가해주면 해당 빈을 자동으로 추가해줍니다. @Configuration @EnableWebMvc public class MvcConfig { ...
1. Spring Web MVC란? 웹 개발을 하기 위한 Spring Framework의 모듈 중 하나입니다. 우선 Spring Web MVC의 핵심 구성 요소와 각 요소 간의 관계는 다음과 같습니다. Spring Web MVC에서 Front Controller라고 가장 앞 단에서 요청을 제일 먼저 받는 서블릿이 있는데, 이를 DispatcherServlet이라고 합니다. 위의 그림을 보면 알겠지만, DispatcherServlet이 요청의 모든 흐름을 관리합니다. DispatcherServlet은 요청을 올바른 객체에 전달해주는 역할만 합니다. Spring MVC는 크게 4가지의 핵심 구성 요소를 가집니다. HandlerMapping HandlerAdapter ViewResolver View 2. Ha..