Java

JWT(0.11.5 → 0.12.6) 업데이트

1 minute read

기존의 JWT 라이브러리 버전을 0.11.5 → 0.12.6 로 업그레이드 했더니 기존에 소스중에 deprecated 된 것이 있어 수정한다.

Hibernate.initialize()란

1 minute read

Hibernate.initialize()는 Hibernate에서 지연 로딩(Lazy Loading) 된 엔터티나 컬렉션을 명시적으로 초기화하는 메서드다. 지연 로딩 전략을 사용할 때, 관련 엔터티나 컬렉션은 데이터베이스에서 즉시 로드되지 않고, 실제로 접근할 때 데이터베이스 쿼리가...

@QueryProjection VS Projections.constructor 차이점

2 minute read

Projections.constructor와 @QueryProjection은 서로 다른 상황에서 사용되며, 각각의 장단점이 있다. 그러나 두 기능은 서로 독립적으로 작동할 수 있기 때문에, Projections.constructor를 사용할 때 꼭 @QueryProjection을 ...

JWT Refresh Token 사용하기

4 minute read

Springboot에서 JWT를 이용해서 토큰을 발급받는데 refresh token도 발급받아서 사용해보자.

네이티브 쿼리에서 DTO를 매핑하는 가장 쉬운 방법

1 minute read

복잡한 통계 쿼리를 사용할 때는 네이티브 쿼리를 사용하고는 한다. 그리고 그 결과를 DTO에 매핑하기 위해 JPA에서 제공하는 natvieQuery를 사용해도 되는 데 DTO매핑이 쉽지 않다. 그래서 QLRM을 사용하는 방법을 소개하겠다. QLRM을 사용하면 DTO 매핑이 매우 쉬...

Springboot3.x에서 JWT에 권한 적용하기

5 minute read

Springboot 3 버전을 기반으로 권한을 JWT 토큰에 저장하고 각 컨트롤러에서 사용할 수 있도록 처리하는 간단한 샘플 코드를 작성했다.

Springboot Library 만들고 사용하기

2 minute read

스프링부트로 라이브러리를 만들어 보자. 그래서 다른 스프링부트에서 해당 라이브러리를 임포트해서 사용하도록 한다.

Spring에서 @Async 사용

2 minute read

Spring에서는 비동기 처리를 @Async 어노테이션을 통해 간단히 처리할 수 있다.

JPA에서 Collection 처리

4 minute read

JPA에서 @OneToMany <> @ManyToOne를 통해 양뱡향 처리하고 Collection으로 처리하는 방법을 알아본다. 아래와 같은 테이블 구조가 있다. 출판사(publisher)와 도서(book)은 일대다 <-> 다대일 관계로 앙뱡한 연관관게로...

Springboot에서 JWT 간단 사용하기

4 minute read

기존에 Spring security JWT 연동에 기술했던 내용에서는 spring aouth2를 활용해서 jwt연동을 수행했다. 하지만 aouth2 설정, private key, public key 생성등 복잡한 과정이 많았다. 단순하게 REST API서버에서 해당 암호키를 가지고...

Java에서 Python 파일 실행

less than 1 minute read

Java에서 Python파일을 호출해서 실행해보도록 하자. 보통 processBuilder 등을 사용하는데 여기서는 Apace Commons Exec 를 사용하도록 한다. Gradle 설정 implementation 'org.apache.commons:commons-exec:1...

Spring에서 Pebble Template 사용

4 minute read

Spring에서 아마 지금까지 가장 많이 사용된 템플릿은 jstl 일것이다. jstl이 너무 올드하고 지겨운 감도 있어 여러 템플릿을 찾던 중에 pebble을 알게 되었다. 무엇보다도 성능이 좋고, 사용법이 간단한 것 같다. 가장 많이 사용되는 freemarker, handl...

Java8에서 람다(Lambda) 정리1

5 minute read

1. 람다 이전에는.. java8에서 람다사용을 정리해본다. 사실 람다를 모른다고 해서 자바8을 사용하는데 지장은 없다. 람다를 사용하지 않더라도 익명클래스를 이용해서 처리할 수 있기 때문이다. 그런데 그렇게되면 자바의 가장 강력한 특징은 스트림을 사용하지 못하게 된다. 즉 아...

Gradle 에서 Multi 프로젝트 만들기

3 minute read

gradle 로 멀티프로젝트를 구성해보자. 여기서 멀티프로젝트란 프로젝트를 구성시 web, app 등으로 용도가 다른 프로젝트를 생성할 경우를 말한다. 이때 바라보는 database가 같다면 아마도 상당수 많은 부분이 공통적으로 겹치게 될 것이다. 유지보수 차원에서 공통인 부분이 ...

Spring security JWT 연동

5 minute read

1. 기존 oauth2의 문제점 기존의 OAuth2의 단점은 api를 호출할때마다 accessToken이 유효한지 실제 oauth서버에 통해 검증하는 것이다. 이때 매번 oauth에서 해당 토큰의 만료여부등을 DB등에서 조회하고 새로 갱신시 업데이트 작업을 해주어야 한다. 이러한...

Java에서 JSON(GSON)사용

1 minute read

Java에서 간단하게 json을 생성하고 파싱하는 방법을 알아보자. 여러가지 라이브러리가 있는데 우리는 여기서 구글에서 만든 gson를 이용하겠다. gson은 비교적 가볍고, 메이븐저장소를 지원하고 전반적으로 성능이 좋아서이다. 먼저 메이븐으로 다운로드한다. <depend...

Spring에서 Redis 설정

1 minute read

Spring(boot)에서 Redis를 설정하는 것은 무척 간단하다. 레디스를 이용해서 간단하게 페이지 방문자수를 업데이트해주는 것을 만들어보자. 먼저 메이븐에서 먼저 관련 라이브러리를 추가해주자. <dependency> <groupId>org.sp...

Spring에서 JNDI설정(hikaricp)

less than 1 minute read

스프링에서 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...

Spring Boot에서 배포환경 나누기

2 minute read

스프링부트에서 war로 만들고 각 서버에 톰켓으로 배포할 때 설정하는 방법을 알아보자. 몇가지 방법이 있지만, 가장 간단하고 일반적인 방법으로 설정을 해보자. 스프링부트에서는 application.yml를 통해 아래와 같이 profile를 설정하는 방법이 있다. 배포환경을 나누는 ...

Spring REST API 문서를 Swagger로 만들자

3 minute read

REST API를 개발할때 관련 문서를 만드는 것은 꽤 귀찮은 일이다. 파라미터가 변경되거나 주소가 변경되면 실제 문서와 소스와 싱크가 맞지 않으면 아무리 문서를 잘 만들어도 소용이 없다. 변경된 소스를 그대로 문서로 만들어 주는 것이 없을까? 그런 고민을 해결해주는 것이 바로 S...

익명클래스 사용방법

2 minute read

자바에서 익명클래스 (혹은 익명객체)를 사용하는 방법을 알아보자. 보통의 경우, 우리는 부모클래스를 상속받아 처리하려면 부모클래스를 상속받는 클래스를 별도로 만들어 처리한다. public class Person { void whoAmI() { System.out.prin...

Java annotaion 기본설명

2 minute read

스프링등을 사용하면 어노테이션을 참 많이 사용한다. @Controller, @Component .. 등등 어노테이션에 대해 간단히 알아보고 커스텀 어노테이션을 아주 간단히 만들어보도록 하자. 용어 및 설명은 이것이 자바다 (신용권의 Java programming) 정복, 한빛미디어...

Spring Security - MySQL 인증

7 minute read

본 문서는 스프링 시큐어리티에 관한 초급적인 부분을 설명한다. 스프링 시큐어리티를 처음 적용하는 부분에 초점을 맞추어었다. 또한 스프링부트가 아닌 스프링 레거시에 자바기반 설정으로 설명한다. (짧은 지식으로 개념이나 설명이 매끄럽지 못한 부분이 있으니, 그 부분은 책이나 블로그를 ...

Gradle Javascript, CSS Minify 하는 방법

2 minute read

Gradle에서 css, javascript를 Minify를 하기 위헤서는 해당 플러그인을 설치해야 한다. eriwen 이라는 개발자가 만든 플러그인이다. gradle-js-plugin gradle-css-plugin 그런데 사이트에서는 모든 css/js 파일을 하나...

Maven에서 js 파일 minify 하기

2 minute read

Maven에서 js파일을 압축하여 패키징하도록 해보자. 일단, 개발자들의 로컬에서는 압축되지 않은 상태로 사용하다고 패키징할때 압축하여 배포하는 방식으로 사용하면 편하다. 보통은 aa.js을 aa.min.js으로 압축하지만 만약 각각의 jsp나 html파일에 js경로가 적혀있다면 ...

Gradle에서 서버별 패키징 하기

less than 1 minute read

Gradle에서 패키징하는 방법을 알아본다. 본 문서는 <Maven에서 서버별 패키징하기>의 Gradle 버전용 문서이다. 따라서 디렉토리 설정은 같고 다만, Maven은 pom.xml에서 설정하지만 Gradle은 build.gradle에서 설정을 해주는 부분만 다르기...

Spring에서 Properties 사용

less than 1 minute read

Spring에서 Properties파일을 읽어들이는 부분을 처리할 수 있다. 먼저 application.xml에 다음과 같이 추가한다. //beans 선언에 util의 선언되어야 한다. <beans xmlns= ..... xmlns:util="http://www....

[Spring4.1]log4j를 logback으로 변경하기

1 minute read

그동안 Spring에서 오랫동안 사용해온 log4j를 새로운 logback으로 변경해보자. Maven을 기반으로 설명한다. 일단 기존의 등록된 log관련은 모두 지워준다. Spring 4.1과 mybatis 3.3.0, mybatis-spring-1.2.3 으로 구축한다 (Spr...

Spring과 Quartz 연동

2 minute read

Spring과 Quartz를 연동해서 개발해본다. Spring 3.2 와 Quartz 1.8을 연동한다. (Quartz 2.x 버전은 Spring 3.2 버전과 잘 안되므로 1.8로 한다) 1. pom.xml 에 추가 pom.xml에서 quartz와 연동하기 위해서 이클립스에서...

twitter4j를 통한 twitter 로그인 연동

1 minute read

트위터와 연동하는 자바모듈로 유명한 <twitter4j>가 있다. 스프링과 메이븐을 사용한다면 다음과 같이 pom.xml에 추가한다. <dependency> <groupId>org.twitter4j</groupId> <art...

Spring에서 다국어 적용하기

2 minute read

스프링에서 다국어처리는 의외로 간단하다, 특히 사용자가 언어를 자유롭게 설정하는 부분도 쉽게 가능하다. 아래와 같이 화면처리를 하고자 한다. 브라우저의 설정된 언어값을 읽어오거나, 아니면 디폴트 언어설정을 지정하거나, 링크를 통해 자유롭게 언어를 바꾸는 화면이다. 그런데...

Maven에서 서버별 패키징하기

1 minute read

Maven으로 개발시 환경별로 패키징해야 할 필요가 있다. 즉, DB가 로컬, 데모, 리얼서버별로 각각 다를 경우 DB접속정보는 각각 다르다. 이때 각각 다른 접속정보를 가지고 패키징이 되어야 한다. 또한 로그도 경로가 다르기때문에 각각 패키징해야 한다. 1. 각각의 패키징 폴더...

MyBatis에서 Batch처리(SqlSession과 foreach)

2 minute read

Spring과 MyBatis연동시 배치를 처리할 경우가 있다. 한꺼번에 인서트나 업데이트가 필요한 경우있다. 이 때 SqlSession을 반복적으로 처리하는 방법과 xml에서 foreach를 처리하는 방법이 있다. 먼저 DB는 Mariadb(MySql)을 기준으로 설명한다. te...

자바에서 스레드풀(Thread Pool)관리

1 minute read

자바에서 스레드를 필요한 작업마다 생성하는 것은 크게 자원낭비와 안정성에 문제가 있다. 스레드를 생성하고 제거하는 작업에는 자원이 소모된다. 스레드가 많다면 대부분의 대기중인 상태가 되고, 더더욱 메모리 사용량이 많아지고 JVM의 가비지콜렉터에 많은 부담을 주게된다. 또한 모든 ...

Maven 사용자를 위한 Gradle 의 간단 사용법

5 minute read

gradle이라는 것을 알았을 때 일단 한숨이 나왔다. 이제 겨우 maven에 적응되었는데 또 다른 툴이라니 오마이갓! 그런데 권남님의 블로그에서 <maven을 넘어 gradle로 가자> 라는 글을 읽고 공감되었다. 무엇보다도 새로운 툴이 나왔다면 개발자라면 응당 호기...

Spring에서 TDD를 이용하여 DB를 테스트해보자.

1 minute read

Spring에서 TDD를 적용해본다. 여기서는 db가 구축되어 있고, db조회, 입력, 처리부분을 TDD로 테스트할 경우를 예를 들겠다. (원래는 db도 DBUnit로 처리되어 있다면 아래처럼 할 필요는 없다. ) Spring에서 UI를 개발하기 전에 DB가 구축되어 있고, m...

Spring에서 스케줄러 사용하기

less than 1 minute read

별도의 배치 프로그램을 만들지 않고 스프링에서 특정 시간에 반복으로 처리할 수 있는 스케줄링 기능이 있다. http://docs.spring.io/spring/docs/current/spring-framework-reference/html/scheduling.html 위 사이트...

JQuery와 Spring간의 Cookie 연동

less than 1 minute read

JQuery에서 쿠키를 저장하고 Spring Controller에서 저장된 쿠키를 체크하는 기능이 필요할 때가 있다. 일단, JQuery에서 쿠키를 처리하는 플러그인을 받는다. jquery-cookie 에서 다운받거나 bower를 쓴다면 아래 처럼 실행한다. bower ins...

Spring에서 JSON과 연동방법

less than 1 minute read

Spring에서 JSON과 REST API로 연결하는 방법은 두 가지가 있다. 1. MappingJackson2HttpMessageConverter 을 이용하여 세팅하는 방법 먼저 pom.xml에서 관련된 라이브러리를 다운받는다. <!-- JSON 방식으로 통신 ( M...

Spring에서 AOP를 사용해보자.

2 minute read

한 어플리케이션의 여러부분에 걸쳐 있는 기능을 가리켜 횡단관심사(cross-cutting concerns)라 한다. 주로 로깅이나 세션처리등이 있다. 이런 로깅이나 세션처리작업은 각 모듈에서 반복적으로 사용되고 있으므로 스프링에서는 이러한 것을 AOP(Aspect-Oriented...

mybatis에서 selectKey 사용법

1 minute read

DB작업을 하다보면 먼저 사전에 어떤 키값을 가져와서 증가시켜서 입력하거나 혹은 입력후에 증가된 키값을 가져올 필요가 있다. 이럴때 mybatis에서 제공하는 selectKey를 이용하면 별도의 쿼리로직을 등록할 필요없이 해당 메소드에서 일괄처리할 수가 있다. 샘플로 아래와 같...

spring에서 component-scan을 사용하자.

less than 1 minute read

보통 스프링에서 클래스를 만들고 의존성 주입은 @Autowired를 통해 클래스생성을 처리하고 있다. 그런데 autowired를 하기 위해서는 applicationContext.xml에 해당 클래스를 bean으로 등록하는데 이것이 꽤 번거롭다. 예를 들어 아래와 같이 autowi...