스프링 5부터 Spring Webflux를 통해 reactive 개발이 가능하게 됐습니다. 요청당 스레드가 하나씩 차지했던 기존의 패러다임과 달리 Webflux는 non-blocking 시스템이 가능하게 해줍니다. 하지만 non-blocking을 지원하지 않는 blocking persistence API (ex. jdbc)를 쓰는 경우에는 어떻게 해야할까요? non-blocking을 지원하는 nosql 데이터베이스를 사용하거나 r2dbc를 사용하는 것이 방법이 될 수 있겠으나 아직까진 mysql 등의 rdbms는 지원되지 않습니다. 이번 글에서는 Spring Webflux + JDBC 환경에서 어떤식으로 개발을 해야되는지에 대해 살펴보겠습니다. 일반적인 웹 구조인 controller -> service ..
구성 - spring-boot-starter-webflux (2.1.0.RELEASE) - springfox-swagger2 (3.0.0-SNAPSHOT)우선 pom.xml에 관련 dependency들을 추가해 줍니다. org.springframework.boot spring-boot-starter-parent 2.1.0.RELEASE UTF-8 UTF-8 1.8 3.0.0-SNAPSHOT org.springframework.boot spring-boot-starter-webflux io.springfox springfox-swagger2 ${swagger.version} io.springfox springfox-swagger-ui ${swagger.version} io.springfox springfo..
Spring MVC에서 Last-Modified와 If-Modified-Since 헤더를 통한 캐싱방법을 살펴보겠습니다. 웹 캐싱에 대한 이론적인 부분과 종류들은 다른 설명 글들이 많기 때문에 자세한 내용은 생략하도록 하겠습니다 (링크).캐싱의 순서는 다음과 같이 이루어집니다. 브라우저에서 필요한 리소스를 서버에 최초로 요청합니다. 서버에서 응답헤더에 Last-Modified 헤더를 셋팅하여 요청한 리소스와 함께 내려보내면, 브라우저는 해당 리소스의 복사본을 생성하여 저장합니다. 브라우저에서 해당 리소스를 재요청할 경우에는 서버에서 Last-Modified 헤더에 설정한 값을 If-Modified-Since 헤더에 포함시켜 서버에 요청합니다. 서버에서는 If-Modified-Since 헤더 값을 통해 해..
Backend 프레임워크인 Spring Boot와 Frontend 프레임워크인 Vue.js의 연동방법에 대해 살펴보겠습니다. Vue.js와 Backend 프레임워크와의 연동방법은 다양하게 있으며 현재 프로젝트 상황에 맞게 연동하면 됩니다. 일반적인 방법으로 빌드시 생성되는 index.html 파일 하나만 두고 사용자 인증, 데이터 가져오기 등 모든 서버와의 통신은 WEB API 통신(REST API, GrapQL 등)으로 연동하는 방법입니다. 이 경우 기존의 렌더링 형태인 controller -> view(jsp, ejs 등 템플릿 엔진) 형태가 아니기 때문에 url 라우팅은 vue-router 등을 통해 처리해야 합니다. 프로젝트 구조 . ├── src/ # Spring 소스코드 디렉터리 │ └── m..
thymeleaf 템플릿 엔진을 사용 중에 meta, link, input 태그 등을 닫지 않으면 아래와 유사한 에러 메시지가 뜹니다.org.xml.sax.SAXParseException: Open quote is expected for attribute “charset” associated with an element type “meta”.thymeleaf의 기본 설정이 아래 처럼 HTML5로 설정되어 있기 때문입니다. spring.thymeleaf.mode = HTML5 html 파일들을 webpack 등을 이용해 빌드를 하는 경우 등 수작업으로 맞춰주기가 귀찮거나 번거로운 경우에는 thymeleaf 모드를 legacy html5 모드로 변경해주면 됩니다.thymeleaf를 legcay html5 모..
JSTL 태그를 통해 JSP 페이지에서 반복, 상태제어, 국제화(i18n), SQL 등을 사용할 수 있습니다. 하지만 때로는 이것들이 충분하지 않기 때문에 JSP페이지에서 약간의 작업을 수행하기 위해 자바스크립트를 쓰려는 유혹에 빠질 수 있습니다. 다행히도 JSP는 확장 가능하며 특정 작업을 수행할 수 있도록 고유한 사용자 지정 태그를 생성할 수 있습니다. JSP 커스텀 태그 (JSP Custom Tag) 예를들어, 우리는 숫자가 콤마와 소수점 2번째 자리까지만 보여지도록 하고싶다고 가정합시다. 이는 숫자가 매우 길때 유용할 수 있습니다. 그래서 다음과 같은 커스텀 태그를 만들면 편하게 사용할 수 있을 것입니다. 위의 커스텀 태크를 통해 number에 입력된 숫자가 format 형식에 맞게 100,050..
Spring Security 에서 현재 인증된(로그인한) 사용자의 정보를 가져오는 방법 에 대해 살펴볼 것 입니다. 스프링의 다양한 메카니즘을 통해 현재 로그인 중인 사용자의 정보를 가져올 수 있는데, 대표적인 몇 가지를 살펴보겠습니다. 1. Bean 에서 사용자 정보 얻기 가장 간단한 방법은 전역에 선언된 SecurityContextHolder을 이용하여 가져오는 방법입니다. Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal(); UserDetails userDetails = (UserDetails)principal; String username = principal.getUsername(); St..