header-img
Info :
BACKEND/SpringBoot 15
list_img
Springboot :: HikariCP Option 과 성능 최적화. (Hikari 튜닝) 1
2025.01.20
Springboot :: HikariCP 란?커넥션 풀(Connection Pooling)을 제공하는 JDBC Datasource의 구현체. 사전 지식JDBC(Java Database Connectivity)자바에서 데이터베이스에 접속할 수 있도록 해주는 자바 API.JDBC는 데이터베이스에서 자료를 쿼리bornatnoon.tistory.com 우선 들어가기 전에 앞서 HikariCP 가 뭔지 개념을 모르겠다면.위의 글을 참조하도록 하자. HikariCP 옵션  GitHub - brettwooldridge/HikariCP: 光 HikariCP・A solid, high-performance, JDBC connection pool at last.光 HikariCP・A solid, high-performanc..
Springboot :: HikariCP 란?
2025.01.20
커넥션 풀(Connection Pooling)을 제공하는 JDBC Datasource의 구현체. 사전 지식JDBC(Java Database Connectivity)자바에서 데이터베이스에 접속할 수 있도록 해주는 자바 API.JDBC는 데이터베이스에서 자료를 쿼리하거나 업데이트하는 방법을 제공한다. DB Connection Pool일반적인 데이터 연동 과정은 웹 애플리케이션이 필요할 때마다 DB에 연결하여 작업하는 방식→ 필요할 때마다 연동하여 작업할 경우 DB 연결에 시간이 많이 걸리는 issue 발생→ 웹 어플리케이션이 실행됨과 동시에 연동할 DB와의 연결을 미리 설정해두면 문제 해결 가능!그리고 필요할 때마다 미리 연결해 둔 상태를 이용해 빠르게 DB와 연동하여 작업을 하면 된다.. 이런 식으로미리 ..
list_img
intelliJ(Community) :: Springboot active profile 설정하기 (환경 변수 기본 설정)
2025.01.20
보통 환경 변수를 사용할 때application.yml, application-dev.yml, application-local.yml으로 파일을 분기하여 작성하고 1. application.yml 에서 동작시킬 때 바꿔준다.spring: profiles: active: local 예를 들면 이런 식으로.. 2.  active profile 을 지정해둔다.. 여기서 우리는 intellij Community 버전을 사용하여 active profile 을 지정하는 방법을 알아볼 것이다.(application.yml 이 보기에는 직관적이나 개발을 진행하면서 챙겨야할 것들이 생기기 때문에..active profile 로 local 을 고정 값으로 두면 편할 듯 하다. (코드는 dev 로 두고) )방법 1...
list_img
Spring boot :: 외부 http 불러와 body 값 리턴하는 RequestUtil (Proxy Server 기능)
2024.02.20
내가 하고 싶었던 것은 http:~ 로 된 주소에 담긴 API data 를 내가 구현한 서버에서 제공하는 거 였음. 고로 내가 구현한 서버에서 프록시 서버의 역할을 해주어야 하는 것. 이때 뭐 RestTemplete 이니 WebClient 니 설치하고 셋팅하고... 너무 귀찮았음. 그래서 간단 ver 로 requestUtil 을 만들어보았다. import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; import org.springframework.http.ResponseEntity; import org.springframewo..
MSSQL, Mybatis :: DB툴과 웹에서의 쿼리 속도가 다를 때 고려할 것
2024.01.16
쿼리속도는 00:00:06 초 정도로 짧게 나오는데 API 실행 속도는 48초가 나오는 케이스가 발생. 물론 건 수가 많은 SQL이기는 했지만, 쿼리 속도와 API 속도가 이렇게 비례하지 않는 케이스는 처음이었음. -- 이런 현상이 발생하는 경우는 대부분 Where 절의 조건이 VARCHAR로 되어 있다는 것 MSSQL 의 특징 MSSQL의 경우 VARCHAR형 데이터를 비교할 때 NVARCHAR형으로 변환하여 데이터를 비교한다고 함. 즉, 데이터의 사이즈를 가변으로 할지 아닐지를 결정하는 것으로 보임. 쿼리를 사용할 때마다 강제적으로 타입 캐스팅이 일어나고, 수행되는 쿼리의 타입이 다르기 때문에 INDEX를 안타게 됨. ㅠ-ㅠ.. 쿼리 튜닝을 아무리해도 DB 속도는 빨라지는데, API 호출 속도는 크게..
Mybatis :: 달러($)와 샵(#)의 차이
2024.01.16
파라미터 매핑을 하는 데에 사용하는 $와 # 두가지의 차이에 대해 알아보도록 하겠다. # PreparedStatement를 의미 파라미터가 String 형태로 들어와 자동으로(' ') 파라미터 형태가 됨 #{user_id} 의 값이 'neeon'이라면 user_id = 'neeon' 형태가 됨 쿼리 주입을 예방할 수 있어 보안 측면에서 유리 정적인 방법을 사용하기 때문에 캐싱을 해서 재활용할 수 있어서 효율적임 $ Statement를 의미 해당 컬럼의 자료형에 맞추어 파라미터의 자료형이 변경됨 파라미터가 바로 출력됨. 쿼리 주입을 예방할 수 없어 보안 측면에서 불리하므로 사용자의 입력을 전달할 때는 사용하지 않음 (SQL Injection) 테이블이나 컬럼명을 파라미터로 전달하고 싶을 때 사용함 차이점 ..
list_img
SpringBoot :: 초초초간단한 방법으로 사용자 요청에 대한 경과시간 알아보기
2024.01.16
개발 도중 API 호출 시간이 오래걸리는 아이를 발견하게 되었다. DB 시간은 SQL 을 때려보면 나오는데.. 예상만큼 오래 걸리지는 않았고 그리드에 데이터를 뿌리는 게 전부인데다, 그리드의 경우는 별도 구현없이 외부 라이브러리를 사용 중이라서 프론트엔드의 문제도 아닌거 같고.. 혹시 모르니까 백엔드 경과 시간이 어떻게 걸리는지 확인을 해보고자 했다. 소스 코드 // 컨트롤러 단 long startTime = System.currentTimeMillis(); List TactTimeList = tacttimeService.tacttime(paramMap); // Service 호출부 long endTime = System.currentTimeMillis(); long ms = endTime - start..
Java :: equals() 와 == 의 차이
2024.01.09
.equals()와 == 모두 비교 연산자이며 둘 다 모두 양쪽에 있는 내용을 비교한 값을 boolean type으로 반환한다. 그런데 java에서 String처럼 Class의 값을 비교할 때에는 보통 equals() 메서드를 사용하는데... equals와 ==는 구조적으로 어떤 차이점을 갖는지 알아보도록 하자. 1. 형태의 차이 .equals() 는 메소드 이며 == 는 비교를 위한 연산자 이다. 2. 주소 값 비교와 실제 값(내용) 비교 .equals() 메소드는 비교하고자 하는 대상의 내용 자체를 비교하지만, == 연산자는 비교하고자 하는 대상의 주소 값을 비교한다. int, float, double, byte 등은 primitive type 으로 Call By Value(CBV) 에 해당. Cla..
Java, SpringBoot :: private 상수를 private static final로 선언하는 이유 1
2023.12.28
static이란? (정적인, 움직임이 없는) static 을 사용하여 선언하면 메모리가 jvm의 static 메모리에 올라가게 된다. static 영역의 경우 프로그램이 시작하고 종료할 때까지 살아 있어 별도의 초기화 과정을 필요로 하지 않고 static이 선언된 변수, 메서드에 바로 접근이 가능해진다. static을 사용한다는 의미는 해당 객체를 공유한다는 의미. 동일한 객체로 값만 바꾸어 사용할 수 있다는 장점이 있음과 동시에 동일한 객체를 값만 바꾸어 사용한다는 점에서 변수의 값을 신중하게 바꾸어야 한다는 생각도 해야한다. final이란? 불변과 관련된 속성이 아니라 재할당 방지와 관련된 속성. final을 사용하게 되면 재할당이 방지되므로, 상속이나 값 재 초기화 등이 불가능해진다. public ..
Springboot(java) :: 문자 관련 StringUtil 모음집
2023.12.27
파일로 보기는 아래에.. 악성코드 無 only java.. /** * @Class Name : StringUtil.java * @Description : 문자열 데이터 처리 관련 유틸리티 * @Modification Information * @author ony **/ package com.sample.controller; // 이름 임의 변경함 import java.io.UnsupportedEncodingException; import java.math.BigDecimal; import java.security.SecureRandom; import java.sql.Timestamp; import java.text.SimpleDateFormat; import java.util.Locale; public ..
list_img
SpringBoot :: Log4jdbc 란? 2
2023.11.15
Log4jdbc Log4j 를 JDBC와 연결하여 사용하기 위해 만들어진 오픈소스 프로젝트 GitHub - arthurblake/log4jdbc: log4jdbc is a Java JDBC driver that can log SQL and/or JDBC calls (and optionally SQL timing info log4jdbc is a Java JDBC driver that can log SQL and/or JDBC calls (and optionally SQL timing information) for other JDBC drivers using the Simple Logging Facade For Java (SLF4J) logging system. - G... github.com 위의 코드는..
list_img
SpringBoot :: Swagger API 연동
2023.10.26
dev. environment. SpringBoot 3.1.1 Java 17 스웨거(Swagger) 란? 개발자가 REST API 서비스를 설계, 빌드, 문서화할 수 있도록 하는 프로젝트 REST API를 문서화하는 도구이며, API에 대한 명세(Spec)을 관리하기 위한 프로젝트 API가 수정되더라도 문서가 자동으로 갱신. 2011 년에 처음 도입된 개념 기존, 워드나 엑셀 등 수기 작성하는 문서형 API 명세서와 달리 서버에 일정 셋팅을 해주면 API 명세서가 갱신된다. 백엔드 개발자의 경우 클라이언트를 개발하는 프론트엔드 개발자와 소통을 하려면 API 명세서가 꼭 필요하게 되는데 이걸 하나하나 명세하고 있는 것도 꽤나 큰 일로 파악된다. 이런 업무 로스를 줄이기 위해 서버 단에 적용하는 것이 바로바..