BACKEND
43
용어 :: 애플리케이션 성능 모니터링(APM)
2025.02.03
APM(Application Performance Management/Monitoring)애플리케이션의 성능 모니터링과 장애 예측을 통해 최적의 애플리케이션 상태를 보장하고 유지하는 일련의 관리 체계.즉,애플리케이션의 성능을 모니터링하고 경우에 따라 발생할 수 있는 장애를 신속히 감지하고 대처하여 담당하고 있는 정보시스템의 성능을 최적의 상태로 유지하는 것이 APM의 핵심 역할. 미들웨어(WebLogic, Tomcat 등..)에서 일어나는 트랜잭션의 사용 시간을 분석하여 각 단계 별로 성능에 미치는 영향의 원인을 파악. A(Application)Web Application을 의미.사용자와 웹 서비스 간에 상호 작용을 하며 성능을 관리해주는 서비스. P(Perforamance)애플리케이션 성능웹 서비스..

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) 테이블이나 컬럼명을 파라미터로 전달하고 싶을 때 사용함 차이점 ..