Java (189) 썸네일형 리스트형 스케줄러 cron 설정을 Global Properties 값으로 변경 스케줄러의 실행 시점을 설정해주는 cron 설정에 Enum상수의 필드값을 사용할 수 없었습니다.private String every30Minutes = ServerProperties.SCHEDULER_CRON.getValue();@Scheduled( cron = every30Minutes, zone = "Asia/Seoul" ) @Transactional public void findExpiredMembers(){실행 결과 : error: element value must be a constant expression @Scheduled( cron = every30Minutes, zone = "Asia/Seoul" ) ^이는 컴파일 타임에 @Sched.. ChannelGroup과 GlobalEventExecutor ChannelGroup 생성 시 왜 GlobalEventExecutor 를 사용하는지, GlobalEventExecutor 가 어떤건지 여쭤보셨습니다. GlobalEventExecutor 가 단일 스레드 싱글톤 EventExecutor라는 내용은 알고 있었지만 어떻게 동작하는지는 알고 있지 않아서 이에 대해 알아보고자 합니다. ChannelGroup우선 ChannelGroup은 채널을 저장할 수 있으며, Channel이 닫히면 ChannelGroup 컬렉션에서도 자동으로 제거되는 Netty 제공 인터페이스입니다. 여러 Channel을 그룹화하여 관리하는 인터페이스라고 볼 수 있습니다.ChannelGroup 은 스레드 안전하며, 하나의 channel은 여러 ChannelGroup에 속할 수 있고, 소속된.. @TransactionalEventListener @transactionalEventListener 가어떻게 이벤트를 인식하여 리스너를 실행하는지 알아보겠습니다. Spring에서의 Spring event의 실행 단계 : 생성 주체에서 이벤트를 발생하면 이벤트 디스패처에게 전달이벤트 디스패처가 이벤트 핸들러를 연결이벤트 핸들러에서 이벤트에 담긴 데이터를 통해 원하는 기능을 실행이번에 사용한 @TransactionalEventListener 는 적용할 메서드의 매개변수에 이벤트 객체를 정의해주면 지정한 이벤트가 발생했을 때 수신해서 처리할 수 있습니다. (이 점은@EventListener 와 동일)또한 이벤트 발행자의 트랜잭션을 기준으로 이벤트 실행 시점을 조절할 때 사용할 수 있습니다.option :AFTER_COMMIT (default) : 트랜잭션이 .. TCP Keepalive TCP 연결이 설정된 이후 정상적인 상황이라면 FIN 메시지를 송수신 했을 때, 연결이 해제됩니다.하지만 전원이 차단되거나 오류에 의해 오동작을 하면 하나의 단말만 연결이 유지되는 Half Open Connection이 발생할 수 있습니다. 이러한 소켓이 꽉차면 정상적인 Connection요청에 응답을 할 수 없는 상황이 발생하게 됩니다.이런 현상을 막기 위해 Keep-alive라는 기능이 있습니다. TCP KeepaliveTcp Keep-alive는 한 번 맺은 세션을 요청이 끝나더라도 유지해주는 기능입니다. tcp_keepalive_time으로 설정한 keepalive timeout 시간이 지나면 서버에서 Keepalive 확인 패킷을 보냅니다.이 패킷에 대한 응답(ACK 패킷)을 받으면 타이머는 원.. Netty의 이벤트 루프 이해하기 이벤트 루프 기반 프레임워크 동작 방식은 단일 스레드 이벤트 루프와 다중 스레드 이벤트 루프로 나눌 수 있습니다.Netty 동작 방식 이해를 위해 두 가지 차이점을 비교해보겠습니다. 단일 스레드 이벤트 루프이는 이벤트를 처리하는 스레드가 하나인 상태를 의미합니다. 이벤트 루프의 구현이 단순하고 예측 가능한 동작을 보장합니다. 하나의 스레드가 이벤트 큐에 입력된 이벤트를 처리하므로 이벤트가 발생한 순서대로 처리할 수 있습니다.단점 1 - 다중 코어 CPU를 효율적으로 사용하지 못함단점 2 - 이벤트 메서드에 처리 시간이 오래 걸리는 작업이 있는 경우 다음 이벤트 처리 지연 발생대표적인 프레임워크 - Node.js 다중 스레드 이벤트 루프이벤트를 처리하는 스레드가 여러개입니다. 단일 스레드 이벤트 루.. JavaDoc 참고 내용 주석문을 잘 작성하는 방법은?주석문이 없어도 이해할 수 있도록 클래스, 메소드, 변수 이름을 작성한다주석문은 최소한으로 작성한다JavaDoc 주석문을 잘 작성한다(클래스 설명, 메소드 설명) JavaDoc 주석문에서 사용하는 태그들annotation설명@version 클래스나 메소드의 버전@author작성자@deprecated더이상 사용되지 않거나, 삭제될 예정@since언제 생성, 추가, 수정되었는가?@see외부 링크나 텍스트, 다른 필드나 메소드를 링크할 때 사용@linksee와 동일한 기능. 링크 제공@exception발생할 수 있는 Exception 정의 예시 /** * ObjectBox를 담기 위한 클래스 * * @author amung(amung * @since 2024.06 * @versi.. Lombok 의존성 설정 시 왜 compileOnly, annotationProcessor로 설정되는걸까? - gradle 의존성 구성 정보 알아보기 gradle 3.0의 Dependency Configurations참고로 gradle 3.0 이전 버전과의 차이는 다음과 같습니다compile → implementation / apitestCompile → testImplementationdebugCompile → debugImplementationprovided → compileOnlycompileOnly : compile 시점에만 필요한 의존성을 정의하는 데 사용. 사용하려는 라이브러리가 컴파일 타임에만 필요하고, 런타임 시점에는 필요하지 않을 때 사용합니다. compileClassPath에만 추가되어 결과적으로 build 결과물의 크기를 줄일 수 있습니다.(JAR파일에 포함되지 않기 때문). (ex)LombokruntimeOnly : 라이브러리가 .. 템플릿 메소드 패턴 만약에 여러 Controller 코드를 짜는데1.초기화 - 정해져있는 코드2.실행 - 매번 다르게 작성하는 코드3.마무리 - 정해져있는 코드라는 순서로 작성해야 한다초기화, 마무리하는 코드는 고정된 코드이고, 실행하는 코드만 다르게 작성하고 싶을 때 어떻게 할까?상속과 추상메소드를 이용하면 된다. 이를 이용한 것이 템플릿 메소드 패턴이다.템플릿 메소드 패턴의 특징1. 원하는 순서대로 코드가 실행되도록 강제할 수 있다. (아래의 execute()참고)package com.example.fw;public abstract class Controller2 { /** * 내가 가지고 있는 메소드를 호출하는데 * 어떠한 순서를 가지고 있다 * 이런 메소드를 템플릿 메소드라고 한다 .. 이전 1 2 3 4 ··· 24 다음