mybatis를 사용하면서 검색을 구현하려다가 like쿼리에서 에러(Parameter index out of range)가 발생했다. 일반적으로 mybatis에서 인자로 받은 변수는 #{변수명}과 같이 사용한다. 이때 저 변수명은 "문자열"로 출력된다. 만약 문자열이 아니라 안의 글자 값 자체를 그대로 사용하고 싶다면 #대신 $를 사용하면 된다. LIKE "%#{param}%" // 오류 발생 LIKE "%${param}%" LIKE CONCAT('%',#{search},'%') ?(preparedStatement) 부분에 인자로 들어온 문자열이 들어간다. 문자열 안에 문자열을 넣어버려서 에러가 발생했다. 검색 그 자체가 바로 들어가는 것을 볼 수 있다. $를 사용할 경우 SQL Injection 공격을..
스프링 부트를 이용해 api를 구현하다보면, 입력값을 받아야 하는 경우가 존재한다. 사용자에게서 데이터를 받아 저장할 일이 반드시 생기기 때문이다. 이 때 사용자가 어떤 데이터를 마음대로 커스텀해서 보낼지 모르기 때문에 반드시 데이터 검증을 해야한다. 스프링부트에서는 검증을 빠르게 해주는 validation이 있다. 단, 2.3이상부터는 따로 분리되었기 때문에 반드시 의존성을 따로 추가해 주어야 한다. implementation 'org.springframework.boot:spring-boot-starter-validation' gradle 내가 정의한 Dto에 @Null과 같은 validation annotation을 붙이고 컨트롤러 인자에 @Valid(자바에서 지원) 혹은 @Validated(스프링..
스프링부트를 사용하면서 로그를 찍기위해 서비스에 아래와 같은 로그를 초기화하여 사용하고 있었다. 그런데 사수님께서 static 안붙인 이유가 있는지, static 붙이고 안붙이고의 차이가 무엇인지 물어보셨다. static은 메모리에서 저장되는 위치가 힙 영역이 아니라 데이터 영역(전역변수, static 변수)에 저장되어 여러 클래스 객체를 생성하더라도 하나만 공유한다고 알고 있었다. 그런데 스프링은 빈에 인스턴스를 등록해 싱글톤으로 관리되는데 굳이 static으로 할 필요가 있나? 라는 생각을 갖고 열심히 인터넷을 뒤적거려봤다. 참고에 뒤적거린 사이트들을 적어두었다. static을 사용하면 생기는 장점 1. 잘 알려진 관용구이다. (이게 왜 장점이지?) 2. CPU, Memory 오버헤드가 적다. log..
내 블로그 - 관리자 홈 전환 |
Q
Q
|
---|---|
새 글 쓰기 |
W
W
|
글 수정 (권한 있는 경우) |
E
E
|
---|---|
댓글 영역으로 이동 |
C
C
|
이 페이지의 URL 복사 |
S
S
|
---|---|
맨 위로 이동 |
T
T
|
티스토리 홈 이동 |
H
H
|
단축키 안내 |
Shift + /
⇧ + /
|
* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.