slf4j을 활용한 로깅시 놓치기 쉬운 실수 한가지 그리고 Logback 내부 동작 과정 해당 포스트에선 java 8, logback 1.3, slf4j 2.0를 바탕으로 코드 제공 및 설명한다. 요약: slf4j의 로깅 메서드 호출 시 formatted string이 필요하다면 무조건 {} 쓰자. 개발을 하다 보면 디버깅 및 에러감지를 위해 필수적으로 코드 사이사이에 로그를 쌓게 된다. 자바에서는 로깅 기능을 위해 활용되는 프레임워크가 크게 logback, log4j, log4j2 정도가 있다. 보통 애플리케이션 단에서는 이 프레임워크들을 직접 사용하진 않고(굳이 사용하고 싶다면 뭐..), 이들을 추상화시켜 뒷단에 두며 구현체를 선택할 수 있는 퍼사드를 제공하는 프레임워크를 사용한다. 퍼사드의 종류엔 ..
스프링 프록시 기반 AOP (2) - CGLIB Proxy 이번엔 cglib를 이용한 프록시 객체 생성/동작 과정에 대해서 알아보고자 한다. 스프링 AOP 적용을 위한 프록시 방식 2가지 중, cglib가 사실상 메인으로 쓰이는데, cglib가 뭔지, 프록시 객체 생성을 위해서 cglib에서 어떤 모듈이 쓰이는지에 대해 알아보자. 메인으로 쓰인다는 것에 대한 지표등은 확인 못했지만, aop를 적용하고자 하는 메소드가 인터페이스를 구현하지 않는 경우도 많으며, 부트에서도 auto-configuration에서 default로 cglib를 선택하고 있으므로 main라고 말해도 되지 않을까.? CGLIB (Code Generation LIBrary) 해당 글을 작성하며 cglib에 대해 좀 더 자세히 보기전까진..
스프링 Proxy 기반 AOP (1) 스프링을 통해 애플리케이션을 개발할 때, 우리는 애플리케이션의 도메인과 관련된 코어 로직 개발뿐만 아니라 이 코어 기능을 제대로 동작시키기 위해 트랜잭션 관리나 로깅, 캐싱등의 관심에도 신경써야한다. 하지만 이런 부가적인 관심사들을 도메인 코어 로직에 같이 녹여야한다면 해당 모듈은 변경의 이유가 도메인 로직의 변경 뿐만이 아니게 된다. 그리고 이런 부가적인 관심사들은 전 애플리케이션의 영역이 활용이 필요하다. 그래서 스프링에선 AOP를 통해서 이런 공통적인 기능들을 별도로 분리해 필요한 곳에서 재사용가능하게 했다. 스프링에서 AOP를 적용하기 위해선 스프링에서 자체적으로 구현하고 있는 AOP 프레임워크를 사용할 수도 있고 AspectJ라는 라이브러리를 활용할 수도 있..
NGINX와 Apache(NGINX and Apache) 잘못 정리된 내용이 있다면 댓글부탁드립니다. 관련해서 알아두면 이해하는데 도움되는 내용(추후에 딥하게 알아보자.) socket 네트웤 데이터 교환을 위한 IO 인터페이스 또한 일종의 file이다.(리눅스) blocking/non-blocking mode IO(especially, Network I/O) 외부와 데이터를 교환하기 위한 기능. 소켓은 네트워크를 통해 외부와 데이터를 교환할 수 있는 IO 인터페이스. system call user/kernal space 일단 프로세스(user space상의)는 시스템의 file을 직접 다룰 수 없다. 따라서 소켓에 대한 핸들링을 하기 위해선 커널에 요청해야함. IO multiplexing(select(s..
스프링을 사용하다보면 @Transactional과 함께 자주 사용하는 애노테이션중에 하나가 바로 @Async 일 것이다. 스프링은 애플리케이션에서 메소드의 비동기 수행이 필요한 경우, @Async 애노테이션을 통해 애플리케이션 코어 로직을 수정하지 않고도 AOP를 통해 메소드를 비동기 처리로 전환할 수 있다. 오늘은 이 스프링 비동기 실행 및 이를 위해 필요한 스레드풀 관련해서 포스팅하려 한다. 아래 Spring 코드는 5.x 기반 주의. 스프링 프레임워크 코드 및 이미지가 많아 스크롤 압박은 있을 수 있으나 내용은 실제로 그렇게 길지 않습니다. Spring Async 설정 및 메소드 비동기 수행 스프링은 일련의 작업을 수행하는 메소드를 간단하게 비동기로 처리할 수 있게끔 프레임워크단에서 AOP로 비동기..
자바(버전 8 기준) 오브젝트 생성 과정 톺아보기 (+ JVM Runtime Data Area 영역) Intro 이번에 java 및 JVM의 Runtime Data Area 영역에 대해 공부를 하였는데, 자바에서 오브젝트가 생성 시 어떤 과정을 거치며 jvm 메모리 영역에 올라가는지에 대해 조금 더 자세히 알게되어 정리하고자 합니다. (사실 지금부터 제가하는 말은 거짓말입니다.; 가려서 들어주시고, 틀린점은 바로잡아주시면 업데이트해놓도록 하겠습니다.) 아래와 같은 Product 모델 클래스가 있다고 가정을 하고, 이 클래스의 오브젝트를 생성해보도록 한다. public class Product { public static final int PAYMENT_WINDOW_TITLE_MAX_BYTE = 4000;..
- Total
- Today
- Yesterday
- log
- linux
- Spring
- runtime data areas
- NGINX
- Apache
- object
- logging facade
- log level
- async
- slf4j
- logback
- lood
- webserver
- logging
- TaskExecutor
- java
- good practice
- JVM
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |