QueryDsl 적용 가이드 (SpringBoot-gradle-멀티모듈-JPA)

spring boot2.x / gradle /jpa 환경을 가정하였습니다.

//TODO : 자세한설명추가

Plugin 추가하기

멀티모듈 프로젝트로 가정했습니다
상위 프로젝트에서 플러그인을 셋팅했습니다.

build.gradle (멀티모듈 상위 에다가 셋팅함)

1
2
3
4
5
6
7
8
9
10
ext {
springBootVersion = '2.0.5.RELEASE'
querydslPluginVersion = '1.1.7' //이부분
}
...

dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
classpath("gradle.plugin.com.ewerk.gradle.plugins:querydsl-plugin:${querydslPluginVersion}")
}
Read more

[mybatis] 파라메터 ${}, #{} 차이점 정리

${}, #{}

mybatis mapper에서 parameter를 받아서 사용할때 크게 2가지 방법이 있다.
${}, #{} 두가지 방법은 동작이 다르고 경우에따라서는 보안상으로 좋지 않으므로 차이점을 명확히 알고 사용해야한다.

  • ${} : 원문 그대로 -> 잠재적 sql injection 취약점 - 주의해서 사용
  • #{} : ' ' 를 씌워줌, sql injection 방지
Read more

[java] enum 활용법 - 알아두면 좋은 TIP

서론

type이나 상태값을 나타내기위해 많은분들이 enum을 사용합니다.
enum을 활용하는 방법, 사용할때 알아두면 좋은 팁들을 정리해보려합니다.

예제

아래는 설명을 위해 사용할 예제입니다. 본문에 계속 사용될 예정입니다.
주문의 상태를 나타내는 enum입니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public enum OrderStatus {
ORDER("주문"),
PAYMENT("결제완료"),
DELIVERY("배송"),
REJECT("거절"),
REFUNDED("환불"),
CANCEL("취소");

private String description;

TicketStatus(String description) {
this.description = description;
}
}
Read more

[javascript] 중복클릭 방지 - 세마포어 이용하기

중복클릭 방지가 필요한 이유

  • 중복된 클릭으로 인한 요청은 원하는대로 에플리케이션이 의도한대로 동작할수 없게 할 뿐 아니라 데이터의 정합성을 해칠 수 있음.
  • 물론 이를 막기위해 backend는 중복된 요청이 오더라도 데이터의 정합성에 이상이 없더록 처리가 되어야함
  • front end 또한 중복된 요청이 가지않도록 인터페이스에서부터 막을 필요가 있음
  • 중복 클릭 방지라는것은 경합상황에서 한번만 수행되도록 하는것!
Read more

spring boot 예제 - 웹 프로젝트 만들기

spring boot 예제

spring boot를 이용하여 웹페이즈를 만드는 샘플 프로젝트를 소개하려한다.

작업한 소스코드 예시는 github에 공유하고있습니다.
https://github.com/HyeonGuJ/demo-spring-boot-web

spring bootspring에서 작업했던 설정들을 보다 쉽게 할 수 있고, 첫 페이지를 만들기까지 시간이 오래걸리지 않는다. spring initializr를 통해 원하는 기능들을 조합하고 IDE를 통해 페이지를 띄우는것까지 진행해보자.

시간이 없다면 3. 프로젝트 생성하기로 넘어가세요.

spring initializr를 통해 프로젝트 생성

spring initializr는 spring으로 application을 만들기 시작할때 필요한 의존성을 자동으로 셋팅하여 구조를 잡아주기 때문에 application을 처음 만들때 사용하면 매우 좋다.

Read more

[blog] hexo admin plugin 으로 포스트 작성

블로그 포스팅하기

github.io로 블로그를 만드는 많은 이용자들이 프래임워크를 활용을 하게된다.
필자와같이 hexo를 사용하기도 하고, jekyll을 사용하기도한다.
프래임워크마다 지원하는 기능이나 플러그인은 다를 수 있지만 포스팅을하는 기능이나, 테마를 바꾸는 기능처럼 공통적인 부분은 기본적으로 지원한다.

본 글에서는 필자가 블로그 포스트를 작성하는 방법에 대해 소개를한다.

Read more

[blog] Hexo icarus 테마 적용하기

테마

블로그에서 테마라고 하면 작게는 글자 폰트,크기,색부터 시작하여 헤더와 푸터 그리고 좌우 사이드 메뉴의 구성과 크기까지라고 여러가지 요소가 있다.
테마가 중요한이유는 사용자에게 제일 먼저 다가오는 이미지를 좌우하기 때문에다. 심플하다, 화려하다, 실용적이다… 목적에 따라 그리고 작성자의 취향에따라 선택할수 있는 폭도 넓다.

hexo theme

hexo 공식 홈페이지에 등록된 테마는 2020-02월 기준으로 약 300개가량 되고 이를 적용하면 아주 간단하게 테마를 적용 할 수 있다

Read more

[blog] hexo로 github page 블로그 만들기

블로그

여기저기 플렛폼을 옮겨다니기도하고, 삽질도하다보니 블로그를 만드는 나만의 방법을 공유하고자 포스팅을 하게 되었습니다.

다양한 사람들이 각자의 목적을 가지고 블로그를 만든다.
이 블로그는 평소에 경험하거나 공부했던내용을 복습, 정리, 공유하기위해서 만들었다.

블로그는 네이버블로그, 티스토리와같은 블로그 기능을 사용할수있는 다양한 플랫폼들이 있지만 그중에서 github page 를 통해 블로그를 만드는 방법을 알아보자

블로그 만들기 시리즈는 계속 포스팅 될 예정이다

  1. hexo로 블로그만들기
  2. 테마 연동하기
  3. 포스팅 하기 - (with admin)
Read more

spring - multiple implements : interface - 인터페이스의 구현체를 동적으로 선택하는 방법

동기

본 글은 interface 란? spring 주입받아 사용하기 에서 이어집니다.

동적으로 구현체를 선택하는 방법을 알아보자

여러 판매자가 판매하는 상품을 장바구니에 담고 결제를 하였다고 가정해보자.
각 판매자에게 구입 요청을 해야할것이다.

이때 판매자에게 할수 있는 행위들이 interface로 정의되어있고, 실제로 요청해야하는 판매자에 따라서 구현체를 바꾸어야한다면?? 어떻게 될까? 예시를 확인해보자

ex)

1
2
3
라면 + 노트북을 장바구니에넣고 한번에 주문 -> 내부적으로는 오뚜기 / LG전자에 구매 요청을 해야야한다
주문, 주문취소, 환불이라는 행위자체는 동일하지만 요청해야하는 도메인정보등 세부정보는 다를것이다
그리고 이공통점을 판매자라는 인터페이스로, 달라지는 세부적인 부분을 오뚜기/LG전자라는 구현체로 구현했다면?

각 판매자에 해당하는 구현체를 선택하여 요청 로직을 실행해야할것이다.

Read more