BACKEND
42
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์ ์ฐ๋ํ์ฌ ์์
์ ํ๋ฉด ๋๋ค.. ์ด๋ฐ ์์ผ๋ก๋ฏธ๋ฆฌ ..
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...
API :: API Versioning ?
1
2024.04.26
๋ฐฑ์๋๋ฅผ ๊ฐ๋ฐํ๋ ๊ฐ๋ฐ์๋ผ๋ฉด API๋ฅผ ๋ง๋ค๊ณ ๋ฐฐํฌํ ๊ฒฝํ์ด ์์ ๊ฒ์ด๋ค.์ด๋ฐ API๋ ํ๋ฒ ๋ง๋ค๊ณ ๋ฐฐํฌํ๋ฉด, ์ญ์ ํ๊ฑฐ๋ ๋ณ๊ฒฝํ๋ ๊ฒ ์ด๋ ค์์ง๊ฒ ๋๋๋ฐ.. ๊ทธ๋์ API Versioning์ผ๋ก ์ด๋ฅผ ๊ด๋ฆฌํ๊ฒ ๋๋ค..! API Versioning?API์ ๋ณ๊ฒฝ ์ฌํญ์ ๊ด๋ฆฌํ๊ณ ์ถ์ ํ๋ ํ๋ก์ธ์ค. ๋ณ๊ฒฝ ์ฌํญ์ API ์ฌ์ฉ์์๊ฒ ์ ๋ฌํ๋ ๊ฒ ๋ํ ํฌํจ ๋จ. API์ ์์ฐ์์ ์๋น์๊ฐ ๊ณต๊ฐ์ธ์ง, ๋น๊ณต๊ฐ์ธ์ง์ ๊ด๊ณ์์ด API๊ฐ ๋ฐ์ ํจ์ ๋ฐ๋ผ ๋๊ธฐํ๋ฅผ ์ ์งํ๋ ๊ฒ์ด ์ค์ํ๋ฐใ
ก, ์ด๋ฅผ ์ํด API Versioning์ ํ๋ค๊ณ ์๊ฐํ๋ฉด ๋๋ค. API Versioning ๋ฐฉ๋ฒ๋ณดํต ๋ค๋ฅธ ํ๋ก๊ทธ๋จ๋ค์ ๋ณ๊ฒฝ, ๋ณด์ ํด์ ์ฌ ๋ฐฐํฌ ํ ๋ 1.0.1 ํํ๋ก tag ๋ publish๋ฅผ ์งํํ๊ฒ ๋๋๋ฐ,API ๋ ์ด๋ค ๋ฐฉ๋ฒ์ผ๋ก Ver..
MSSQL :: ๋ฐ์ดํฐ ์ ๋ ฌ(COLLATE)
2024.04.25
SQL Server์ ๋ฐ์ดํฐ ์ ๋ ฌ์ ๋ฐ์ดํฐ์ ๋ํ ์ ๋ ฌ ๊ท์น๊ณผ ๋/์๋ฌธ์ ๋ฐ ์
์ผํธ ๊ตฌ๋ถ ์์ฑ์ ์ ๊ณตํ๋ค. ์๋ฒ, DB, ์ด ๋๋ ์์ ๋ฐ์ดํฐ ์ ๋ ฌ์ ์ ํํ๊ฒ ๋๋ฉด ๋ฐ์ดํฐ์ ํน์ ํน์ฑ์ด ํ ๋น๋๊ฒ ๋๋ค. ์ด๋ฐ ํน์ฑ์ ์ฌ๋ฌ DB ์์
์ ๊ฒฐ๊ณผ์ ์ํฅ์ ์ฃผ๋๋ฐ.. ์๋ฅผ ๋ค์ด Order by๋ฅผ ์ฌ์ฉํ์ฌ ์ฟผ๋ฆฌ๋ฅผ ๋ง๋ ๊ฒฝ์ฐ, ๊ฒฐ๊ณผ ์งํฉ์ ์ ๋ ฌ ์์๋ ์ฟผ๋ฆฌ์ ์ ์์ค์์ Collate ์ ์ ์ง์ ๋๊ฑฐ๋ DB์ ์ ์ฉ๋ ๋ฐ์ดํฐ ์ ๋ ฌ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๊ฒ ๋จ. ์ง์ํ๋ ์ธ์ดSELECT * FROM sys.fn_helpcollations() ์์ ์ฟผ๋ฆฌ๋ก ์ง์ํ๋ ์ธ์ด SET ์ ์ข
๋ฅ๋ฅผ ํ์ธํด๋ณผ ์ ์๋ค. ์ด 5,540๊ฑด. ์ด ์ค Korean์ผ๋ก ์์๋๋ ์ ๋ ฌ ๋ฌธ์์ด์ ๋ํด ์์๋ณด์.!! Korean๊ณผ ๊ด๋ จ๋๋ ์ธ์ดSETSELECT ..
SQL :: ์ค๋ณต ์ ๊ฑฐ (Group by, Distinct)
2024.04.22
์ค๋ผํด(Oracle)์์ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ ๋, ์ค๋ณต ์ ๊ฑฐํ๋ ๋ฐฉ๋ฒ์ผ๋ก๋1. distinct ๋ฅผ ๊ฑฐ๋ ๋ฐฉ๋ฒ ๊ณผ 2. group by ์ ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด ์๋ค. Group by- Group by ๋ ๋ฐ์ดํฐ๋ค์ ์ํ๋ ๊ทธ๋ฃน์ผ๋ก ๋๋ ์ ์์.- ๋๋๊ณ ์ ํ๋ ๊ทธ๋ฃน์ ์ปฌ๋ผ๋ช
์ SELECT์ ๊ณผ GROUP BY์ ๋ค์ ์ถ๊ฐํ๋ฉด ๋จ.- ์ง๊ณํจ์์ ํจ๊ป ์ฌ์ฉํ๋ ์์๋ GROUP BY์ ์ ์ถ๊ฐํ์ง ์์๋ ๋จ.SELECT deptno ๋ถ์๋ฒํธ, COUNT(*) ์ฌ์์ FROM emp GROUP BY deptno ORDER BY COUNT(*) DESC; Distinct - ์ค๋ณต๋ ํ์ ์ ๊ฑฐํ๊ณ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ๊ธฐ ์ํ ์ฉ๋๋ก ์ฌ์ฉ.SELECT distinct deptno ๋ถ์๋ฒํธ, COUN..
SQL :: ANSI JOIN ๊ณผ Oracle JOIN
1
2024.04.19
ํ์ mssql ๋ฐ์ ์ ํ ์ผ์ด ์์ด์ ์ค๋ผํด ๋ฌธ๋ฒ์ ์์ํ๋ฐ...์กฐ์ธ์ ๊ฑธ ๋ (+) ๋ก ํ๊ธฐํ๋ ๊ฒฝ์ฐ๊ฐ ์์๋ค.์ด๊ฒ ๋ญ๊ฐ ํ๊ณ ์ฐพ์๋ณด๋ ์ฐ๋ฆฌ๊ฐ ๊ธฐ์กด์ ์ฌ์ฉํ๋ outer join, inner join, left join ๋ฑ ์ง์ ํ์ฌ ์ฌ์ฉํ๋ ๊ฒ์ ANSI JOIN ์ด๋ผ๊ณ ํ๊ณ (+)๋ฅผ ์ฌ์ฉํ์ฌ ์กฐ์ธ ์ข
๋ฅ๋ฅผ ์ง์ ํ๋ ๊ฒ์ Oracle JOIN ์ด๋ผ๊ณ ํ๋จ๋ค.. ๋ค์ด๊ฐ๊ธฐ์ ์์ SQL JOIN์ ์ข
๋ฅ๋ถํฐ ์์๋ณด์. JOIN ์ ์ข
๋ฅ* INNER JOIN* LEFT OUTER JOIN* RIGHT OUTER JOIN* CROSS JOIN* FULL OUTER JOIN ์ด๋ ๊ฒ ์๋๋ฐ ๋ณดํต ๋ง์ด ์ฌ์ฉํ๋ ๊ฑดINNER JOIN ๊ณผ LEFT/RIGHT OUTER JOIN ์ ๋๊ฐ ๋์๊ฒ ๋ค..
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..
Springboot, Mybatis :: ๋ถ๋ฑํธ, ๋น๊ต์ฐ์ฐ์ ์ฌ์ฉ ๋ฐฉ๋ฒ
1
2024.02.02
์ฟผ๋ฆฌ๋ฌธ์ ์์ฑํ๋ค๋ณด๋ฉด ๋น๊ต๋ฌธ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ์๊ธฐ๋๋ฐ.. ๋ง์ด๋ฐํฐ์ค์์๋ , WITH CTE(WorkDate) AS ( SELECT CONVERT ( DATE, #{Year}+'-01-01') UNION ALL SELECT DATEADD(d, 1, WorkDate) FROM CTE WHERE WorkDate (CONVERT(DATE, #{Year}+'-12-31')) ) SELECT * FROM CTE OPTION ( MAXRECURSION 0 ); ๋. WITH CTE(WorkDate) AS ( SELECT CONVERT ( DATE, #{Year}+'-01-01') UNION ALL SELECT DATEADD(d, 1, WorkDate) FROM CTE WHERE ) SELECT * FROM CTE..
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) ํ
์ด๋ธ์ด๋ ์ปฌ๋ผ๋ช
์ ํ๋ผ๋ฏธํฐ๋ก ์ ๋ฌํ๊ณ ์ถ์ ๋ ์ฌ์ฉํจ ์ฐจ์ด์ ..
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..