본문 바로가기

전체 글

(227)
InteliJ lombok 인식 불가(Cannot resolve symbol 'info', Cannot Find log) lombok 추가 시 인식을 하지 못하거나, Cannot Resolve Symbol 등의 문제가 발생할 수 있다. 이 경우 다음과 같은 옵션을 고려해보자 1. Lombok 플러그인 설치 및 적용 확인 setting - plugins - lombok으로 확인해볼 것. 2. 구체적 버전 추가 및 Annotation Processor 적용 settings - Build, Execution, Deployment - Annotation Processors 에서 옵션 활성화 dependencies { testImplementation platform('org.junit:junit-bom:5.9.1') testImplementation 'org.junit.jupiter:junit-jupiter' .. 생략 imple..
[포팅 메뉴얼] 스카우터(Scouter), 핀포인트(Pinpoint) 설치 가이드 - 1 이번 포스팅에서는, Scouter와 Pinpoint를 Linux 환경에 구축하는 메뉴얼을 작성하였다. 환경 사양의 경우 다음과 같다. 구축 환경 Diagram과 Flow 설치 환경 및 설치 버전 - CentOS 7 / windows 11(Scouter window Client) - Java 1.8 Pinpoint v2.3.3 Release v2.3.3 · pinpoint-apm/pinpoint Security Patch Release Fix Log4j2 Security Vulnerabilities CVE-2021-45105, CVE-2021-45046 Agent : log4j 2.12.3 Server module : log4j 2.17.0 Release Notes [#8510] Backport: Bump..
[CentOS] 표준 시간대 변경 및 NTP를 사용한 동기화 [Backup posting] 서버 간의 시간을 맞출 때, Network Time Protocol을 사용하여 편리하게 동기화할 수 있다. 리눅스 상에서 표준 시간대를 재설정하고, 동기화하는 명령어를 정리하였다. 1. Timezone 변경 서버의 시간대를 KST 한국 기준으로 변경하려면 다음과 같이 설정하자. sudo timedatectl set-timezone Asia/Seoul 2. NTP(Network Time Protocol) 설치 NTP 프로토콜을 설치하고 적용하여 동기화한다. 1. NTP 서비스 설치 sudo yum install ntp 2. 서비스 시작 sudo systemctl start ntpd 3. 부트 시 NTP 자동 활성화 sudo systemctl enable ntpd 3. NTP ..
[Agent / ASM] agent의 transform 메서드에 ASM 바이트코드 적용하기 2 / ASM 라이브러리 이슈 ClassReader / Visiter / Writer를 사용한 값 읽어오기 public static byte[] addLogging(byte[] classfileBuffer) { ClassReader classReader = new ClassReader(classfileBuffer); // 클래스 파일 읽기 // 클래스 파일 쓰기, COMPUTE_MAXS와 COMPUTE_FRAMES 옵션으로 메서드의 최대 스택 크기와 로컬 변수를 자동 계산 ClassWriter classWriter = new ClassWriter(classReader, ClassWriter.COMPUTE_MAXS | ClassWriter.COMPUTE_FRAMES); // Classvisitor 내부에 MethodVisitor가 있으..
[디자인 패턴]방문자(visitor) 패턴 설명과 예 설명 방문자 패턴은 알고리즘들을 그들이 작동하는 객체들로부터 분리할 수 있도록 하는 행동 디자인 패턴이다. 방문자(Visitor) 패턴은 객체 지향 디자인 패턴의 하나로, 알고리즘을 객체 구조에서 분리하여, 객체 구조의 클래스를 변경하지 않고도 새로운 연산을 추가할 수 있도록 한다. 이 패턴은 객체 구조 내의 각 요소에 대해 수행할 연산을 별도의 '방문자' 객체에 정의한다. 연산을 추가하는 것이 객체 구조의 클래스들을 변경하는 것보다 훨씬 용이하기 때문이다. 특히, 복잡한 객체 구조를 다룰 때 유용하며, 다양한 연산을 객체 구조에 추가하고자 할 때 활용된다. 내가 직접적으로 느꼈던 직관적인 설명을 서술하자면, "일반적인 로직과 달리 방문자가 로직을 가지고 accept를 통해 파라미터로 받는 방문자 객체에..
[디자인 패턴]어댑터(apdapter) 패턴 설명과 예시 https://refactoring.guru/ko/design-patterns/adapter 어댑터 패턴 / 디자인 패턴들 / 구조 패턴 어댑터 패턴 다음 이름으로도 불립니다: 래퍼(Wrapper), Adapter 의도 어댑터는 호환되지 않는 인터페이스를 가진 객체들이 협업할 수 있도록 하는 구조적 디자인 패턴 refactoring.guru 설명 기존 클래스를 사용하고 싶지만 그 인터페이스가 나머지 코드와 호환되지 않을 때 사용 어댑터 패턴은 구조적 디자인 패턴의 일종으로, 호환되지 않는 인터페이스로 인해 함께 사용할 수 없는 클래스들이 서로 상호 작용할 수 있도록 해준다. 이 패턴은 기존 시스템에 새로운 클래스를 쉽게 통합하고자 할 때 유용하게 사용된다. 어댑터 패턴의 주요 목적은 기능의 재사용과 코드..
[A Java bytecode engineering library] - [Core API] 3. Method[3/3] 3.3. 도구들 (tools) org.objectweb.asm.commons 패키지에는 자신만의 어댑터를 정의하는데 유용할 수 있는 몇 가지 사전 정의된 메소드 어댑터들이 포함되어 있다. 이 섹션에서는 그 중 세 가지를 소개하고, 이들이 어떻게 섹션 3.2.4의 AddTimerAdapter 예제와 함께 사용될 수 있는지 보여준다. 또한, 이전 장에서 본 도구들이 메소드 생성이나 변환을 용이하게 하는 방법도 보여준다. 3.3.1. 기본 도구들 섹션 2.3에서 소개된 도구들은 메소드에도 사용될 수 있다. 타입(Type) 많은 바이트코드 명령어들, 예를 들어 xLOAD, xADD 또는 xRETURN은 적용되는 타입에 따라 다르다. Type 클래스는 이러한 명령어들에 대해, 주어진 타입에 해당하는 opcode를..
[ASM]]MethodVisitor를 통해 특정 메서드 변조하기 나는 m의 메서드를 찾아, 여기 sysout을 통해 로깅을 붙이고 싶다..! 바로 코드를 보자. (A)의 경우 정상적인 동작을 하고, (B)의 경우 잘못된 코드이다. public class WrappingMethodVisitor extends ClassVisitor { public WrappingMethodVisitor(ClassVisitor classVisitor) { super(Opcodes.ASM9, classVisitor); } //각 메서드 방문시 호출 @Override public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) { MethodVisitor m..