전체 글 (32) 썸네일형 리스트형 Spring Event UnderTheHood Spring을 이용해 개발하다보면, 모듈간 결합도를 낮추기 위해 Spring Event를 활용하는 케이스가 있다. Spring Event를 편리하게 사용하고 있다 문득 내부 동작 원리가 궁금해 코드를 살펴봤다. 이번글은 Spring Event 동작 방식에 대해 설명하는 글이다. 크게 2가지 동작의 원리를 살펴보겠다.1. @EventListener 애노테이션을 통한 Handler 등록 과정2. ApplicationEventPublisher를 이용해 Event를 발행할 때 Event가 Listener로 전송되는 과정 @EventListener 애노테이션을 통한 Handler 등록 과정FlowApplicationContext Refresh 과정에 EventListenerMethodProcessor 부터 @Ev.. [인프런 X VMware Tanzu] Spring Boot 밋업 with Josh Long 후기 좋은 기회로 Josh Long님이 Java21과 SpringBoot 3.x에 대해 소개해주는 밋업에 참여했다.깊이 있는 내용을 다루기엔 시간이 짧았지만, Java21과 SpringBoot 3.x에서 제공해주는 새로운 기능들과 이 기능들의 활용 방법에 대한 아이디어를 얻을 수 있었다. Java21의 DATA ORIENTED PROGRAMMIG 지원 요즘 인프라의 트랜드는 서비스를 작은 서버에 여러대에 올려 필요에 따라 scale out/in해 사용한다.작은 서버에 애플리케이션을 실행시키기 때문에 하나의 서비스가 하는 역할이 작아졌고, 다른 서비스들과 메시지를 주고 받을 일이 많아졌다. 그리고 이러한 상황에 DATA ORIENTED PROGRAMMING 방식을 사용하면 목적에 맞는 코드를 작성할 수 있다. .. Python 입문기 최근에 AI 모델을 직접 만지는 프로젝트에 참여할 기회가 있었다. 프로젝트는 Python을 이용는데, Java에 익숙한 나에겐 신선한 경험이었다. 위 프로젝트를 진행하면서 알게된 Python의 기본 지식을 나중을 위해 정리해 두려고 한다. 다른 언어들은 사용해 봤지만, Python은 처음 사용하신다면 한 번쯤 읽어보길 추천한다. 글에서는 Python 관련 2가지 개념을 설명한다.첫 번째는 Python 코드가 실제 동작하기까지의 과정이다. (개인적으로 실제 코드가 동작하는 과정을 알아야 개발하다 이슈를 만나도 쉽게 해결할 수 있는 것 같다.)두 번째는 Virtual Environment에 대해 설명하겠다. Python Code 실행 과정 Code Editior에 Python 코드를 작성하면 Python 코.. K8S CPU Requests와 Limits 의미 쿠버네티스를 이용해 서버를 배포하면, Pod 설정 파일에 cpu request와 limit 설정 값이 존재한다. 이 값들이 실제로 어떤 의미인지 궁금해 여러 글들을 찾아보다, 좋은 글을 발견해 공유차 남겨둔다. 자세한 내용은 첨부한 글을 참고하길 바란다. 글에 있는 핵심 내용만 간략하게 정리하겠다. K8S에서 Pod의 Container는 Worker 노드 관점에서 Cgroup로 관리되고, CFS를 이용해 Cgroup이 얼만큼의 리소스를 사용할지 결정된다. cpu request는 CFS가 Cgroup에게 CPU 리소스를 할당할 때, 얼만큼 할당할지의 기준으로 사용한다. 따라서 request 값이 클 수록 worker node에서 더 오랫동안 cpu를 점유할 수 있다. cpu limit은 CPU 사용량 제한.. Java 시간관련 객체 정리 들어가면서 이번 글에서는 Java에서 제공하는 시간과 관련된 Class를 정리한다. 자바 시간 객체 종류 Date public class Date implements java.io.Serializable, Cloneable, Comparable { ... private transient long fastTime; ... } The class {@code Date} represents a specific instant* in time, with millisecond precision. java.util 패키지에 있는 클래스다. 좀 더 쉽게 풀어쓰면 1970년 1월 1일 00:00:00 GMT를 기준으로 지금 몇 milisecond이 지났는지를 저장한다. (이런 개념을 epoch-seconds 라고 부른다... Spring @Transactional 동작원리 완벽 정리 들어가면서 Spring을 이용해 개발하다보면 누구나 한 번은 @Transactional을 사용해 본 경험이 있을 것이다. 나 또한 애플리케이션을 개발하며 @Transactional을 굉장히 많이 사용한 경험이 있다. 그러다 문득 @Transactional의 동작원리를 제대로 이해하지 않고 사용하고 있다는 생각이 들었다. 어렴풋이 @Transactional을 사용하면 비지니스 로직중 예상하지 못한 문제로 예외가 발생했을때 데이터 정합성을 보장하기 위해 그동안 수정된 데이터를 원복한다고만 이해하고 있었다. 그래서 이번기회에 @Transactional이 내부적으로 어떻게 동작하는지 이해하고 싶어 Spring 코드를 뜯어봤다. 이번 글에서는 Spring 코드를 뜯어보면서 이해한 내용을 정리해 공유하려고 한다.. Spring MVC에서 MappingJacksonValue 활용하기 들어가면서 Spring MVC를 사용해 애플리케이션을 개발하는 중이였다. 개발을 하다 응답 DTO 필드 중 일부를 운영 환경에서 노출하지 않고 싶은 상황이 생겼다. 이를 어떻게 개발하면 좋을지 고민했다. 그 과정에서 MappingJacksonValue를 알게 되었고, 이를 이용해 문제를 해결했다. 이번글에서는 MappingJacksonValue를 이용해 응답 DTO에서 특정 필드를 노출하지 않는방법과 동작원리를 공유하겠다. MappingJacksonValue ? MappingJacksonValue는 Spring Framework에서 제공하는 라이브러리로, 응답 DTO를 HTTPResponseBody에 직렬화 하기 전 내가 원하는 로직을 추가해 직렬화 과정을 커스터마이징 할 수 있다. A simple ho.. HTTP Connection 역사 알아보기 목차 들어가면서 HTTP Connection 기본 개념 HTTP/1.0 Connection HTTP/1.1 Connection 마무리 참조 들어가면서 이번 글을 통해 HTTP Connection 기본 개념과 HTTP 버전별 동작 스펙을 정리해보겠다. HTTP Connection 기본 개념 HTTP 에서는 Connection을 신경쓰지 않는다. Connection은 HTTP 보다 하위 레이어인 transport layer에서 관리된다. HTTP는 꼭 connection-based인 transport protocol을 사용할 필요는 없다. 대신 신뢰성있는 protocol이면 된다. 쉽게 말하면 HTTP 메시지가 유실되지 않는 transport protocol이면 된다. transport protocol에 가.. 이전 1 2 3 4 다음