Spring은 Locale에 따라 다국어 메시지 처리를 위해 MessageSource라는 이름의 전략 인터페이스를 제공해준다. 이번 글에서는 MessageSource를 이용해 다국어 처리를 하는 방법을 알아보자 MessageSource Spring이 메시지를 가져올 때 사용하는 MessageSource의 구현체는 아래 두 가지가 있다. ResourceBundleMessageSource: 리소스 번들(properties 파일)로 부터 메시지를 읽는다. ReloadableResourceBundleMessageSource: 리소스 번들이 수정되면 애플리케이션을 재시작하지 않고 다시 로딩하여 메시지를 읽는다. Spring에서 MessageSource 객체를 사용하기 위해선 아래와 같이 "messageSource..
스프링은 애플리케이션 전 계층에서 도메인 객체를 검증할 수 있는 인터페이스를 제공한다. 이번 글에서는 spring의 bean validation을 통해 어떻게 controller의 파라미터를 controller에 비즈니스 로직을 추가하지 않고 검증할 수 있는지 알아보자. Validator interface Spring은 도메인 객체를 검증할 수 있도록 Validator 인터페이스를 도입했다. Validator 인터페이스는 객체를 검증하는데 실패하면 Errors 객체에 에러를 등록함으로써 동작한다. Validator 인터페이스는 아래의 두가지 메서드를 가지고 있다. supports(Class): 매개변수로 전달된 클래스를 검증할 수 있는지 여부를 반환 validate(Object, org.springfra..
Vue를 하며 웹팩 설정을 간단하게 정리해 놓는다. 웹팩은 모듈 번들러로서 서로 의존성이 있는 것들끼리 하나로 묶어주는 역할을 한다. 따라서 여러개의 파일을 브라우저에서 로딩하지 않아도 된다. 번들링을 시작할 지점(entry), 번들된 결과물을 놓을 위치(output)을 정하고, 파일을 어떤 로더로 부를지, 어떤 플러그인으로 결과물을 처리할 지 정할 수 있다. webpack js파일 module.exports에 entry, output, loader, plugin을 정의하여 사용한다. 예시로는 아래 코드와 같다. const path = require('path'); const UglifyJSPlugin = require('uglifyjs-webpack-plugin'); const webpack = req..
프론트엔드와 백엔드를 나눠서 관리하기 위해 여러개의 모듈로 이루어진 Maven 프로젝트를 구성하는 방법을 알아봤다. Maven에서 다중 모듈을 사용하기 위해선 아래처럼 modules 태그를 사용하면 된다. frontend backend 위와 같이 frontend, backend 모듈 두개를 만든다면 아래 그림 1과 같이 프로젝트 폴더가 구성될 것이다. 이 때 빌드를 하면, pom.xml에서 modules에 넣은 모듈 순서대로 빌드가 된다. 각 모듈의 pom.xml에서 artifactId가 그 모듈의 이름이 되므로 주의하자.
404, 500 등 에러가 발생했을 때 처리할 페이지를 만드는 방법을 알아보자. web.xml에 URL 매핑에러가 발생했을 때 어떤 URL로 redirect 할 것인지 web.xml에 작성할 수 있다. Servlet 버전 3.0 이상이어야 이용 가능한데, 요즘엔 걱정 안해도 될 것 같다. 혹시라도 그 아래 버전을 사용하고 있다면 다른 방법을 찾아보자.아래처럼 error-page 태그 하위에 어떤 에러인지, 어디로 매핑할지를 작성할 수 있다. /errors 위와 같이 작성하면 default로 사용할 에러 처리 URL을 만든 것이다. 만약 404, 500을 따로 처리하고 싶다면 아래처럼 에러 종류와 함께 error-page 태그를 여러개 작성하면 된다. 404 /error/no-resource 500 /er..
이미지 또는 파일을 리턴하고 싶을 때가 있다. 예를 들어 사용자가 http://도메인/api/images/1 같은 경로로 요청을 보냈을 때 이미지를 리턴하도록 만들어보자.@ResponseBody@ResponseBody 어노테이션을 사용함으로써 HTTP response body에 데이터를 그대로 담아서 전송할 수 있다. 이 어노테이션이 없다면 Spring은 View resolver를 통해 view 파일을 찾으려 할 것이다.직렬화된(byte[]) 이미지나 파일을 리턴하기 위해 @ResponseBody 어노테이션을 Request Mapping 할 메소드에 붙이도록 하자. @GetMapping("/get-text") public @ResponseBody String getText() { return "Hello..
Maven으로 스프링 프로젝트를 개발하다가 src/main/webapp 경로에 보관된 이미지를 제공하는 API를 만들일이 있어서 경로를 얻는 방법을 적는다. Controller에서 HttpServletRequest 객체를 파라미터로 받은 뒤, request.getServletContext().getRealPath(""); 를 이용하면된다. 위 호출로 나온 경로는 src/main/webapp 까지의 경로로, 만약 resources/image/img123.png 식으로 보관했다면, @RestController public class ImageController { @Autowired ImageService imageService; @GetMapping(value = "/image/{imageName}.{ex..
MVC 패턴에는 두가지 종류가 있다. MVC1과 MVC2인데 아래 그림과 같다. MVC1은 JSP가 요청을 받아서 EJB의 JavaBean으로 DB와 통신하여 JSP에 적절한 값을 넣은 후 응답을 브라우저에 반환하는 형식이다.MVC2는 이보다 발전하여 JSP가 요청을 받지 않고 Servlet이 대신 요청을 받아서 DB와 통신하여 JSP에 값을 넣고 그것을 반환한다. Servlet은 서버에 매칭되는 URL마다 하나 씩 존재하며 init -> service(요청 마다 반복) -> destory의 생명주기를 가진다. Servlet은 WAS의 Servlet Container에 존재하며 사용자가 요청하면 해당되는 URL(web.xml 등으로 설정)에 매핑되는 Servlet의 함수(service -> doGet, ..
- Total
- Today
- Yesterday
- Bean
- spring
- @Bean
- Barycentric coordinates
- JavaScript
- nodejs
- npm
- @Qualifier
- Bin
- Tasklet
- Express
- @Component
- unity
- mybatis
- thymeleaf cannot resolve
- MySQL
- spring batch
- Closure
- chunk
- thymeleaf 변수 인식
- 클로저
- Check point within polygon
- @Autowired
- Linux
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |