-
자바의 Reflection 활용하기Java 2023. 11. 8. 10:59
# Relfection 이란? JVM Runtime Data Area 내의 Method Area에 Class, Mehtod, Variable와 같은 클레스의 정보가 저장되는데 클레스 정보를 활용할 수 있도록 도와주는 Library이다. # 활용 사례 개발을 하다보면 switch, if ~ else if ~ else 와 같이 코딩을 하는 경우가 있다. 개인적으로 이런 코드는 SOLID의 원칙 중 SRP(단일책임원칙)과 OCP(개방폐쇠원칙)을 위반할 확률이 있기 때문에 이런 경우에 상황에 맞게 유동적으로 사용할 수 있다. '그림1'은 kafkaMehtodList Class에 methodName과 일치하는 method를 실행시키는 로직이다. 위와 같은 구조로 설계를 하면 토픽이 늘어날 때 마다 해당 토픽에 상..
-
String Constant Pool 이란?Java 2023. 11. 8. 00:21
# String Constant Pool 이란? 리터럴("")로 구성된 문자열의 복사본을 Pool에 하나만 저장한 공간을 String Constant Pool이라고 한다. # 왜 사용 하는지? 결론적으로는, 메모리 공간 효율성을 위해서 사용한다. 똑같은 문자열을 사용할 때마다 생성해주면 메모리 측면에서 너무 비효율적이니까 같은 문자열을 가진 String들은 저 Pool에 있는 문자열을 바라보게끔 만든 것 이다. [예시] public class Main { public static void main(String[] args) { String test = "김성훈" ; String test2 = "김성훈" ; System.out.println(test.hashCode()) ; System.out.printl..
-
멀티프로세스와 멀티스레드Java 2023. 10. 31. 17:59
# 정의프로세스는 운영체제로부터 자원을 할당받는 작업의 단위이고 스레드는 프로세스가 할당받은 자원을 이용하는 실행의 단위이다.# 멀티 스레드 vs 멀티 프로세스멀티 스레드는 멀티 프로세스보다 적은 메모리 공간을 차지하고 Context Switching이 빠른 장점이 있지만, 동기화 문제와 하나의 스레드 장애로 전체 스레드가 종료 될 위험을 갖고 있다.멀티 프로세스는 하나의 프로세스가 죽더라도 다른 프로세스에 영향을 주지 않아 안정성이 높지만, 멀티 스레드보다 많은 메모리공간과 CPU 시간을 차지하는 단점이 있다.두 방법은 동시에 여러 작업을 수행하는 점에서 동일하지만, 각각의 장단이 있으므로 적용하는 시스템에 따라 적합한 동작 방식을 선택하고 적용해야 한다.# 멀티 스레드장점운영체제가 시스템 자원을 효율..
-
JIT(Just In Time)이란?Java 2023. 10. 31. 11:33
# JIT란? JIT(Just-In-Time) 컴파일러는 런타임 시 바이트코드를 기본 기계어 코드로 컴파일하여 Java™ 애플리케이션의 성능을 향상시키는 런타임 환경의 구성요소이다. JIT 컴파일러는 런타임 시 바이트코드를 기본 기계 코드로 컴파일하여 Java 프로그램의 성능을 향상시키는 데 도움이 된다. # JIT의 특징 메소드가 컴파일되면 JVM은 메소드를 해석하는 대신 해당 메소드의 컴파일된 코드를 직접 호출합니다. JIT 컴파일에는 프로세서 시간과 메모리 사용량이 필요합니다. JIT 컴파일러는 Cold, Warm, Hot, VeryHot 또는 Scorching 등 다양한 최적화 수준에서 메서드를 컴파일할 수 있습니다 최적화 수준이 높을수록 더 나은 성능을 제공할 것으로 예상되지만 CPU 및 메모리..
-
[MyBatis] 배치 처리 중 hikari connection pool timeout 에러 발생에러 히스토리 2023. 10. 26. 15:41
# 컨디션 SqlSession을 'ExecutorType.BATCH' 타입으로 설정 후 알림 전송 내역을 DB에 1번만 Connection하여 저장하는 로직을 처리하는 중 hikari connection pool timeout 에러 발생 # 원인 발견 1. MyBatis sqlSession의 insert 메소드를 디버깅해보면 BatchExecutor 클레스의 아래와 같은 로직을 발견할 수 있다. 이는똑같은 sql을 실행하게 되면 connection을 계속해서 실행하는 것이 아니라 해당 쿼리문만 내부에 등록하는 로직이다. 반대로, 새로운 쿼리문이라면 getConnection을 통해 DB와의 connection을 유지한다. 여기서의 핵심은 connection이 유지돼 있는 상태라는 것이다. connectio..
-
ArrayBlockingQueue vs LinkedBlockingQueueJava 2023. 10. 24. 23:36
FeatureArrayBlockingQueueLinkedBlockingQueueImplementationIt’s backed by an arrayIt uses linked nodesQueue SizeIt’s a bounded queue. Therefore, it’s mandatory to specify the initial capacity while creating it.It’s not mandatory to mention size.Fairness PolicyWe can set a fairness policy in itThere’s no option to set a fairness policy in thisNumber of LocksIt uses one ReentrantLock. The same lock..
-
[재귀쿼리] 실무에서 많이 쓰일 수 있는 쿼리DB/쿼리 2023. 10. 22. 18:55
재귀 쿼리가 필요한 이유? 실무에서 쿼리를 작성하다 보면, 해당 테이블에 데이터가 없는데 인위적으로 나오게 만드는 경우(데이터가 없으므로 로우에 아무것도 안나오겠지만 null이라는 결과값이 나와야하는 경우) 또는 특정 일자를 기준으로 일주일치 또는 한달치의 row를 출력해야 하는 경우에 활용할 수 있다. 예시) 네이버 지도의 아래와 같은 경우에 사용 가능 환경 oracle, MS-Sql, Tibero와 같이 DB마다 약간 상이하거나 같을 수는 있지만 적어도 대부분의 RDBMS에서는 활용할 수 있다. 구현1 my sql 기준으로 작성 7개의 로우를 인위적으로 생성하는 쿼리 WITH RECURSIVE T1 as ( SELECT 1 as LV UNION ALL SELECT LV + 1 FROM T1 WHERE..
-
[JPA] 파라미터 바인딩 로그 보기Spring Boot/JPA 2023. 10. 22. 18:50
JPA에 로깅이 필요한 이유? JPA를 사용하다보면 파라미터의 값이 아래와 같이 물음표로 나온다. 실제로 어떤 값이 할당돼 들어갔는지 확인이 필요한 경우에 필요하다. select e1_0.id, e1_0.name, e1_0.salary from s_emp e1_0 where e1_0.id=? or e1_0.name=? order by e1_0.id desc,e1_0.name limit ?,? 환경 JPA 3.1.4 Spring Boot 3.1.3 Java 17 yml 설정 logging: level: org.hibernate: orm: jdbc: bind: trace 결과 위 사진처럼 trace 레벨로 로깅이 남는 것을 확인할 수 있다.
-
[소스 까보기] AsyncRestTemplate 편Java 2023. 10. 22. 18:49
AsyncRestTemplate 사용 이유? API 통신할 때, 비동기로 빠르게 통신하여 성능을 개선하는 경우에 성능 튜닝을 목적으로 사용한다. ex) 알림톡 중계서버에 API로 알림 내역을 전송시 활용 AsyncRestTemplate 핵심 내용 디버깅하여 소스를 깊게 들어가보면 아래와 같은 로직을 볼 수 있다. 주목할 점은 저 submitListenable 메소드가 핵심 역할이다. @Override protected ListenableFuture executeInternal( HttpHeaders headers, byte[] bufferedOutput) throws IOException { return this.taskExecutor.submitListenable(() -> { SimpleBufferi..
-
AOP 용어 및 적용 방법Spring Boot/AOP 2023. 10. 22. 18:47
AOP 사용 이유 소스코드는 크게 두 가지 형태인 비즈니스 영역과 부가기능 영역(로깅, 보안, 트랜잭션)으로 나뉜다. 반복되는 부가기능 영역을 유지보수 좋게 하나의 모듈로 만들어서 사용하면, 반복되는 소스코드가 줄어든다. "반복되는 소스코드가 줄어든다." 라는 말의 의미는 유지보수가 좋아진다. 라는 의미. 즉 한 마디로, AOP 쓰는 이유 ==> 개발자들은 비즈니스 영역에만 집중할 수 있고 부가기능 영역은 AOP로 분리하여 유지보수 좋은 환경을 구축할 수 있다. AOP 용어 정리 Target 부가기능을 부여할 대상 Advice 부가기능을 담고 있는 모듈 Join Point 어드바이스가 적용될 수 있는 위치 Pointcut 어드바이스를 적용할 타겟의 메서드를 선별하는 정규표현식이다. (하단의 그림 참고) ..