2019/01/29 - [Programming/Spring Boot 시작하기] - Spring Boot 에서 messages.properties 을 이용한 다국어 처리 (3) 쿠키로 관리되고 매개변수로 그 값을 변경하는 것이 완벽히 이해가 안된다면 간단한 예제 프로그램을 만들어 보는 것이 좋습니다. 각자 편한 대로 Spring Boot 프로젝트를 만듭니다. 이 때 Web 와 Thymeleaf 만 선택합니다.호출할 간단한 Controller 을 만듭니다. 앞 선 예제와 같이 MessageConfig 와 WebMvcConfig 도 만들어줍니다.다국어 출력을 위해 Thymeleaf 기반의 HTML 하나와 messages.properties, messages_ko_KR.properties, messages_en..
Spring Boot 에서 사용할 수 있는 다국어 처리(i18n)에 대해서 몇 가지만 이야기 하려고 합니다. Spring Boot 에서 다국어를 처리하는 가장 쉬운 방법은 src/main/resources 디렉토리에 messages.properties 파일을 이용하는 방법입니다.기본 제공할 언어에 대해서 messages.properties 에 정의하고 messages_ko.properties, messages_en.properties 와 같이 파일을 생성하면 해당 언어에 따른 메세지를 별도로 관리할 수 있습니다. 물론 messages_ko_KR.properties, messages_en_US.properteis 와 같이 언어 뿐만 아니라 국가에 따른 분류 파일도 추가로 설정할 수 있습니다.이를 쉽게 관리..
대부분 Spring 을 이용한 프로그래밍을 할 때에는 MVC, 요즘에는 WebFlux 을 많이 이용할 것이기 때문에 Spring Boot Starter 에서 제공하는 기능만으로도 시작 시 추가적인 동작이 필요하지 않는 경우가 대부분입니다. 하지만, 특정한 동작을 위해 서버 시작 시 어떠한 명령을 실행해야 한다던가, 반대로 종료 시 어떤 동작을 해야하는 경우는 분명 생길 수 있습니다. 가장 쉽게 생각해볼 수 있는 것은 생성자와 소멸자입니다. 그리고 jar 파일을 직접 실행할 때에는 main() method 내에 추가로 구현할 수도 있습니다. 하지만, Spring Boot 에서는 몇 가지 다른 방식으로 처리할 수 있습니다. 먼저 CommandLineRunner 나 ApplicationRunner 인터페이스를..
보통 많은 운영 환경에서 Web Server(정적인 파일 서비스)와 WAS 을 연동해서 서비스하는 경우가 많습니다. Tomcat 으로 서비스되고 있는 환경에서조차 내부에 경량 Apache HTTPd 가 내장되어 있기 때문에 별도의 Web Server 없이도 괜찮은 속도로 정적인 파일을 서비스 할 수 있지만, 몇 가지 이유(납득되는 것도 있고, 그렇지 않은 것들도 있지만) 때문에 여전히 기존 방식을 이용하는 곳도 많습니다. 개인적으로 생각할 때 가장 납득이 가는 경우는 "파일 업로드" 기능 때문입니다. 업로드된 파일을 다시 사용자가 내려받아야 할 경우라면 파일 원본 그 자체를 잘 보관하고 있다가 다른 영향 없이 다시 다운로드가 가능해야 합니다. 물론 파일 다운로드 시 권한 체크를 정교하게 한다거나 다운로드..
Java 가 Web 개발에서 두각을 나타내면서 WAS(Web Application Server) 라는 용어를 널리 사용하게 만들었습니다. 처음의 의도와 달리 WAS 을 지칭하는 의미는 점차 확대되었고, Java 에서는 Apache Tomcat(이하 Tomcat) 이라는 WAS 가 널리 보급되면서 온라인 상에 유통되는 대부분의 WAS 에 관한 것은 Tomcat 일 정도가 되었습니다. Tomcat 은 Java 로 만들어져 이식성이 좋고, Full Spec 의 J2EE 을 지원하진 않지만 Spring Framework 의 탄생으로 인해 J2SE Servlet 지원 만으로도 Enterprise 급의 프로그램을 개발할 수 있게 되면서 현재까지 널리 사용되고 있습니다. 그래서 Java 에서 Web Page 개발에 ..
Spring 에서 제공하는 RestTemplate 을 이용하면 다른 URL 을 호출하고 결과를 받아오는 코드를 쉽게 작성할 수 있습니다. 기존에는 Apache Commons 의 http 을 많이 이용했으나, Spring 에서 제공하는 RestTemplate 의 사용빈도가 점점 늘어나고 있습니다. 그런데, RestTemplate 을 기본 설정대로 사용하는 경우도 있지만, 추가적인 설정이 필요한 경우가 있습니다. 크게 두 가지라고 생각되는데, 하나는 HttpClient 설정을 별도로 하기 위한 것이고, 다른 하나는 로깅 때문입니다. 어떻게 이 두 가지를 적용하는지 알아보겠습니다. 먼저 설정을 하기 위해 @Configuration 애노테이션을 이용해 Class 을 하나 만듭니다. 그리고 그 안에 RestTem..
Spring MVC 에서는 REST API 을 지원하기 위해 Jackson 라이브러리를 이용하여 response 을 Json 형태로 변경하여 제공하는 기능을 포함하고 있습니다. 또한 @RequestBody 을 이용해 @RequestMapping 으로 선언된 method 의 매개변수로 Json 으로 된 body 을 POJO 로 받을 수도 있습니다. 이러한 처리를 위해 Spring 은 Json 혹은 XML 등의 여러 형태의 값을 자동으로 처리하기 위해 MessageConverter 을 등록해두는데, HttpMessageConverter 인터페이스를 구현한 것을 개발자가 상속받아 변경하여 사용할 수 있습니다. Jackson 은 MappingJackson2HttpMessageConverter 을 제공하는데, 이..
Spring Boot 에서 Json 을 처리하기 위해 Jackson 라이브러리가 기본적으로 의존성 관계를 가지고 내려받게 되어 있습니다. 이를 Gson 으로바꿔서 사용하는 분들도 계시겠지만, Jackson 은 성능이나 기능에서 훌륭한 편이기 때문에 그대로 사용해도 좋습니다. Spring Boot 의 application.properties 에서 Jackson 의 설정을 아래와 같이 일부 할 수 있습니다. [출처] https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html # JACKSON (JacksonProperties) spring.jackson.date-format= # Date fo..
Spring 에서 @Async 을 이용해서 쉽게 비동기 method 을 만들 수 있습니다. 대략 다음과 같이 method 정의를 먼저 할 수 있을 겁니다. @Async public CompletableFuture async(String param1, int param2) { return CompletableFuture.completedFuture(param1 + " : " + param2); } 그리고 이를 다음과 같이 사용할 수 있겠죠. CompletableFuture result = service.async("status", 100); 하지만, 이렇게 그냥 사용할 경우 @Async 는 SimpleAsyncTaskExecutor 을 기본 TaskExcutor 로 이용하기 때문에 async method ..
- Total
- Today
- Yesterday
- 워드프레스
- docker
- manjaro
- paging
- NoSQL
- 페이징
- Spring MVC
- 프로젝트 규모
- 도입기
- Spring
- Spring Boot
- 시니어 프로그래머
- KDE
- OracleJDK
- Phabricator
- jooq
- 엘지
- 외장 WAS
- git
- couchbase
- Nas
- java config
- 내장 WAS
- Redmine
- 클라우드플레어
- SI
- boot
- proxmox
- RestTemplate
- messages.properties
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |