JWT(0.11.5 → 0.12.6) 업데이트
기존의 JWT 라이브러리 버전을 0.11.5 → 0.12.6 로 업그레이드 했더니 기존에 소스중에 deprecated 된 것이 있어 수정한다.
기존의 JWT 라이브러리 버전을 0.11.5 → 0.12.6 로 업그레이드 했더니 기존에 소스중에 deprecated 된 것이 있어 수정한다.
Hibernate.initialize()는 Hibernate에서 지연 로딩(Lazy Loading) 된 엔터티나 컬렉션을 명시적으로 초기화하는 메서드다. 지연 로딩 전략을 사용할 때, 관련 엔터티나 컬렉션은 데이터베이스에서 즉시 로드되지 않고, 실제로 접근할 때 데이터베이스 쿼리가...
배치로 페이징 처리시 보통 OFFSET 을 사용하는 경우가 많다.
Projections.constructor와 @QueryProjection은 서로 다른 상황에서 사용되며, 각각의 장단점이 있다. 그러나 두 기능은 서로 독립적으로 작동할 수 있기 때문에, Projections.constructor를 사용할 때 꼭 @QueryProjection을 ...
라이브러리 추가
JPA에서 DTO 내의 컬렉션 처리를 설명하는 두 가지 방법과 각각의 장단점에 대해 알아본다
Springboot에서 JWT를 이용해서 토큰을 발급받는데 refresh token도 발급받아서 사용해보자.
Spring Rest Docs를 Gradle에 추가한다.
스프링부트 3.x 버전에서 QueryDSL을 설정해 본다.
복잡한 통계 쿼리를 사용할 때는 네이티브 쿼리를 사용하고는 한다. 그리고 그 결과를 DTO에 매핑하기 위해 JPA에서 제공하는 natvieQuery를 사용해도 되는 데 DTO매핑이 쉽지 않다. 그래서 QLRM을 사용하는 방법을 소개하겠다. QLRM을 사용하면 DTO 매핑이 매우 쉬...
Springboot 3 버전을 기반으로 권한을 JWT 토큰에 저장하고 각 컨트롤러에서 사용할 수 있도록 처리하는 간단한 샘플 코드를 작성했다.
스프링부트로 라이브러리를 만들어 보자. 그래서 다른 스프링부트에서 해당 라이브러리를 임포트해서 사용하도록 한다.
Spring에서는 비동기 처리를 @Async 어노테이션을 통해 간단히 처리할 수 있다.
Spring에서 @Transactional를 사용시 주의점이 있다. 바로 하위 메소드에 @Transactional를 거는 것이다.
JPA에서 Join테이블을 사용해본다.
JPA에서 @OneToMany <> @ManyToOne를 통해 양뱡향 처리하고 Collection으로 처리하는 방법을 알아본다. 아래와 같은 테이블 구조가 있다. 출판사(publisher)와 도서(book)은 일대다 <-> 다대일 관계로 앙뱡한 연관관게로...
기존에 Spring security JWT 연동에 기술했던 내용에서는 spring aouth2를 활용해서 jwt연동을 수행했다. 하지만 aouth2 설정, private key, public key 생성등 복잡한 과정이 많았다. 단순하게 REST API서버에서 해당 암호키를 가지고...
Java에서 Python파일을 호출해서 실행해보도록 하자. 보통 processBuilder 등을 사용하는데 여기서는 Apace Commons Exec 를 사용하도록 한다. Gradle 설정 implementation 'org.apache.commons:commons-exec:1...
Spring에서 아마 지금까지 가장 많이 사용된 템플릿은 jstl 일것이다. jstl이 너무 올드하고 지겨운 감도 있어 여러 템플릿을 찾던 중에 pebble을 알게 되었다. 무엇보다도 성능이 좋고, 사용법이 간단한 것 같다. 가장 많이 사용되는 freemarker, handl...
1. 람다 이전에는.. java8에서 람다사용을 정리해본다. 사실 람다를 모른다고 해서 자바8을 사용하는데 지장은 없다. 람다를 사용하지 않더라도 익명클래스를 이용해서 처리할 수 있기 때문이다. 그런데 그렇게되면 자바의 가장 강력한 특징은 스트림을 사용하지 못하게 된다. 즉 아...
gradle 로 멀티프로젝트를 구성해보자. 여기서 멀티프로젝트란 프로젝트를 구성시 web, app 등으로 용도가 다른 프로젝트를 생성할 경우를 말한다. 이때 바라보는 database가 같다면 아마도 상당수 많은 부분이 공통적으로 겹치게 될 것이다. 유지보수 차원에서 공통인 부분이 ...
1. 기존 oauth2의 문제점 기존의 OAuth2의 단점은 api를 호출할때마다 accessToken이 유효한지 실제 oauth서버에 통해 검증하는 것이다. 이때 매번 oauth에서 해당 토큰의 만료여부등을 DB등에서 조회하고 새로 갱신시 업데이트 작업을 해주어야 한다. 이러한...
Java에서 간단하게 json을 생성하고 파싱하는 방법을 알아보자. 여러가지 라이브러리가 있는데 우리는 여기서 구글에서 만든 gson를 이용하겠다. gson은 비교적 가볍고, 메이븐저장소를 지원하고 전반적으로 성능이 좋아서이다. 먼저 메이븐으로 다운로드한다. <depend...
Spring(boot)에서 Redis를 설정하는 것은 무척 간단하다. 레디스를 이용해서 간단하게 페이지 방문자수를 업데이트해주는 것을 만들어보자. 먼저 메이븐에서 먼저 관련 라이브러리를 추가해주자. <dependency> <groupId>org.sp...
스프링에서 jndi를 통해 mysql과 연결하자. 1. 해당 라이브러리를 tomcat/lib에 넣어준다. mysql-connector-java-5.1.34.jar slf4j-api-1.6.6.jar HikariCP-2.6.0.jar 2. Tomcat의 Serve...
스프링부트에서 war로 만들고 각 서버에 톰켓으로 배포할 때 설정하는 방법을 알아보자. 몇가지 방법이 있지만, 가장 간단하고 일반적인 방법으로 설정을 해보자. 스프링부트에서는 application.yml를 통해 아래와 같이 profile를 설정하는 방법이 있다. 배포환경을 나누는 ...
REST API를 개발할때 관련 문서를 만드는 것은 꽤 귀찮은 일이다. 파라미터가 변경되거나 주소가 변경되면 실제 문서와 소스와 싱크가 맞지 않으면 아무리 문서를 잘 만들어도 소용이 없다. 변경된 소스를 그대로 문서로 만들어 주는 것이 없을까? 그런 고민을 해결해주는 것이 바로 S...
자바에서 익명클래스 (혹은 익명객체)를 사용하는 방법을 알아보자. 보통의 경우, 우리는 부모클래스를 상속받아 처리하려면 부모클래스를 상속받는 클래스를 별도로 만들어 처리한다. public class Person { void whoAmI() { System.out.prin...
스프링등을 사용하면 어노테이션을 참 많이 사용한다. @Controller, @Component .. 등등 어노테이션에 대해 간단히 알아보고 커스텀 어노테이션을 아주 간단히 만들어보도록 하자. 용어 및 설명은 이것이 자바다 (신용권의 Java programming) 정복, 한빛미디어...
본 문서는 스프링 시큐어리티에 관한 초급적인 부분을 설명한다. 스프링 시큐어리티를 처음 적용하는 부분에 초점을 맞추어었다. 또한 스프링부트가 아닌 스프링 레거시에 자바기반 설정으로 설명한다. (짧은 지식으로 개념이나 설명이 매끄럽지 못한 부분이 있으니, 그 부분은 책이나 블로그를 ...
Gradle에서 css, javascript를 Minify를 하기 위헤서는 해당 플러그인을 설치해야 한다. eriwen 이라는 개발자가 만든 플러그인이다. gradle-js-plugin gradle-css-plugin 그런데 사이트에서는 모든 css/js 파일을 하나...
Maven에서 js파일을 압축하여 패키징하도록 해보자. 일단, 개발자들의 로컬에서는 압축되지 않은 상태로 사용하다고 패키징할때 압축하여 배포하는 방식으로 사용하면 편하다. 보통은 aa.js을 aa.min.js으로 압축하지만 만약 각각의 jsp나 html파일에 js경로가 적혀있다면 ...
Gradle에서 패키징하는 방법을 알아본다. 본 문서는 <Maven에서 서버별 패키징하기>의 Gradle 버전용 문서이다. 따라서 디렉토리 설정은 같고 다만, Maven은 pom.xml에서 설정하지만 Gradle은 build.gradle에서 설정을 해주는 부분만 다르기...
Spring에서 Properties파일을 읽어들이는 부분을 처리할 수 있다. 먼저 application.xml에 다음과 같이 추가한다. //beans 선언에 util의 선언되어야 한다. <beans xmlns= ..... xmlns:util="http://www....
그동안 Spring에서 오랫동안 사용해온 log4j를 새로운 logback으로 변경해보자. Maven을 기반으로 설명한다. 일단 기존의 등록된 log관련은 모두 지워준다. Spring 4.1과 mybatis 3.3.0, mybatis-spring-1.2.3 으로 구축한다 (Spr...
Spring과 Quartz를 연동해서 개발해본다. Spring 3.2 와 Quartz 1.8을 연동한다. (Quartz 2.x 버전은 Spring 3.2 버전과 잘 안되므로 1.8로 한다) 1. pom.xml 에 추가 pom.xml에서 quartz와 연동하기 위해서 이클립스에서...
트위터와 연동하는 자바모듈로 유명한 <twitter4j>가 있다. 스프링과 메이븐을 사용한다면 다음과 같이 pom.xml에 추가한다. <dependency> <groupId>org.twitter4j</groupId> <art...
스프링에서 다국어처리는 의외로 간단하다, 특히 사용자가 언어를 자유롭게 설정하는 부분도 쉽게 가능하다. 아래와 같이 화면처리를 하고자 한다. 브라우저의 설정된 언어값을 읽어오거나, 아니면 디폴트 언어설정을 지정하거나, 링크를 통해 자유롭게 언어를 바꾸는 화면이다. 그런데...
Maven으로 개발시 환경별로 패키징해야 할 필요가 있다. 즉, DB가 로컬, 데모, 리얼서버별로 각각 다를 경우 DB접속정보는 각각 다르다. 이때 각각 다른 접속정보를 가지고 패키징이 되어야 한다. 또한 로그도 경로가 다르기때문에 각각 패키징해야 한다. 1. 각각의 패키징 폴더...
Spring과 MyBatis연동시 배치를 처리할 경우가 있다. 한꺼번에 인서트나 업데이트가 필요한 경우있다. 이 때 SqlSession을 반복적으로 처리하는 방법과 xml에서 foreach를 처리하는 방법이 있다. 먼저 DB는 Mariadb(MySql)을 기준으로 설명한다. te...
자바에서 스레드를 필요한 작업마다 생성하는 것은 크게 자원낭비와 안정성에 문제가 있다. 스레드를 생성하고 제거하는 작업에는 자원이 소모된다. 스레드가 많다면 대부분의 대기중인 상태가 되고, 더더욱 메모리 사용량이 많아지고 JVM의 가비지콜렉터에 많은 부담을 주게된다. 또한 모든 ...
Java 어플리케이션에서 (public static void main())에서 Spring으로 xml파일을 읽어들이고, Component scan를 하는 방법을 설명한다. 먼저, applicationContext.xml 파일을 src/main/resources 안에 둔다고 하자....
gradle이라는 것을 알았을 때 일단 한숨이 나왔다. 이제 겨우 maven에 적응되었는데 또 다른 툴이라니 오마이갓! 그런데 권남님의 블로그에서 <maven을 넘어 gradle로 가자> 라는 글을 읽고 공감되었다. 무엇보다도 새로운 툴이 나왔다면 개발자라면 응당 호기...
Spring에서 TDD를 적용해본다. 여기서는 db가 구축되어 있고, db조회, 입력, 처리부분을 TDD로 테스트할 경우를 예를 들겠다. (원래는 db도 DBUnit로 처리되어 있다면 아래처럼 할 필요는 없다. ) Spring에서 UI를 개발하기 전에 DB가 구축되어 있고, m...
별도의 배치 프로그램을 만들지 않고 스프링에서 특정 시간에 반복으로 처리할 수 있는 스케줄링 기능이 있다. http://docs.spring.io/spring/docs/current/spring-framework-reference/html/scheduling.html 위 사이트...
부모클래스에서 자식클래스의 메소드를 사용할 때가 있다. 자칫 혼돈되기 쉬운 부분이다. 다음의 부모 클래스가 있다고 한다.. public class Parent { public void parentMethod() { System.out.println("나는 ...
JQuery에서 쿠키를 저장하고 Spring Controller에서 저장된 쿠키를 체크하는 기능이 필요할 때가 있다. 일단, JQuery에서 쿠키를 처리하는 플러그인을 받는다. jquery-cookie 에서 다운받거나 bower를 쓴다면 아래 처럼 실행한다. bower ins...
Spring에서 JSON과 REST API로 연결하는 방법은 두 가지가 있다. 1. MappingJackson2HttpMessageConverter 을 이용하여 세팅하는 방법 먼저 pom.xml에서 관련된 라이브러리를 다운받는다. <!-- JSON 방식으로 통신 ( M...
한 어플리케이션의 여러부분에 걸쳐 있는 기능을 가리켜 횡단관심사(cross-cutting concerns)라 한다. 주로 로깅이나 세션처리등이 있다. 이런 로깅이나 세션처리작업은 각 모듈에서 반복적으로 사용되고 있으므로 스프링에서는 이러한 것을 AOP(Aspect-Oriented...
Spring에서 간단하게 접속하는 Device(desktop, mobile, tablet)를 구분하는 방법이 있다. 1. 먼저 spring mobile 라이브러리를 받는다. pom.xml에 다음을 추가한다. <dependency> <groupId>org....
DB작업을 하다보면 먼저 사전에 어떤 키값을 가져와서 증가시켜서 입력하거나 혹은 입력후에 증가된 키값을 가져올 필요가 있다. 이럴때 mybatis에서 제공하는 selectKey를 이용하면 별도의 쿼리로직을 등록할 필요없이 해당 메소드에서 일괄처리할 수가 있다. 샘플로 아래와 같...
보통 스프링에서 클래스를 만들고 의존성 주입은 @Autowired를 통해 클래스생성을 처리하고 있다. 그런데 autowired를 하기 위해서는 applicationContext.xml에 해당 클래스를 bean으로 등록하는데 이것이 꽤 번거롭다. 예를 들어 아래와 같이 autowi...