전체 글
-
24년 4월 회고 - 못 죽는 기사와 비단 요람일상 2024. 5. 1. 16:31
날씨가 정말 제멋대로다.이번 4월은 바쁘게 살아서 시간이 빨리 지난 탓인지 날씨 탓인지는 몰라도 유독 벚꽃이 빨리 진 것만 같다. 인생의 유통기한에 대해 생각하는 요즘 나를 살려내는 노래.루시 라이브는 어쩌다가 예전에 딱 한번 가봤는데, 기회되면 언젠가 단콘 정도는 가보고 싶긴하다.LUCY - 못 죽는 기사와 비단 요람가지 마나와 네 약속처럼나는 죽지 않는 너일 테니까외로운 괴로운 그날들에우리 둘이었으니까2024.04.06 - 연남동대학 친구들이랑 봄맞이 옷 구경한다는 핑계로 홍대에서 만났다.진작 옷가게는 몇군데만 들리고 벚꽃이 너무 예쁘게 펴서 카메라 챙긴김에 연남동에서 사진이나 찍고 놀았다.이날 필름만 3롤 썻다,,,나중에 친구들이 내가 찍어준 사진으로 카톡 프사를 다 바꿨더라. 뭔가 이런거 기분이 ..
-
[Spring Webflux] #3 스프링 웹플럭스에서 AOP 제대로 사용하기개발 2024. 4. 11. 22:07
스프링의 핵심 요소 중 하나인 AOP(관점 지향 프로그래밍)는 횡단 관심사(cross-cutting concerns)를 모듈화 한다. 간단히 말하면 흔히 스프링에서의 선언적 트랜잭션(@Transactional)처럼 여러 서비스/비즈니스 로직에 대해 공통적으로 사용하는 부분을 따로 분리해서 관리한다고 생각하면 될 것 같다. 일반적인 AOP 구현 방법 스프링에서 AOP는 @AspectJ를 사용해 어노테이션 기반으로 작성할 수 있다. 간단한 예시로 함수 실행 시간을 측정하는 로직을 AOP를 이용해 구현해 보겠다. 일단 우리가 흔히 아는 Spring MVC의 경우 아래와 같이 구현 할 수 있다. @Aspect @Component public class ExecutionTimerAspect { private fi..
-
[Spring Webflux] #2 내가 스프링 웹플럭스를 공부한 방법개발 2024. 4. 10. 00:32
작년 9월, 자바의 새로운 LTS 버전인 자바 21가 출시 되면서, 함께 정식 릴리즈 된 가상 스레드가 웹플럭스를 대체할 수 있을 것인지가 주변 개발자들과의 이야기에서 항상 화두에 올랐다. 반년이 지났지만 아직 시기 상조인 것 같다. 스프링의 큰 장점인 거대 자바 생태계가 온전히 가상 스레드를 지원 못하는 탓일까 싶다. 특히 Spring Data JPA가 디폴트로 사용하는 커넥션 풀 라이브러리 HikariCP가 아직 가상 스레드를 지원하지 않는다. (관련 PR: https://github.com/brettwooldridge/HikariCP/pull/2055) 그리고 식품 e커머스로 꽤 인지도 있는 모 회사의 어느 개발팀에서도 가상 스레드 하나보고 자바 21로 전환을 시도했지만, 여러 한계로 다시 롤백했다..
-
24년 3월 회고 - Now everybody's dead일상 2024. 4. 8. 03:59
올해 1,2월은 어떻게 지나갔는지도 모르겠다. 기억을 안하는건지 기억을 못하는건지. 그래도 어떻게 졸업 요건 밀렸던거 밤새가며 해치우고 졸업 했던거랑 살면서 스키장을 한번도 안가봤었는데 고등학교 동창들이랑 지산가서 야간 스키 탄건 기억난다. 그래도 3월부터는 좀 사람들도 만나면서 뭔가 많이 한 거 같다. 이 곡 첫 도입부의 리드 기타가 한동안 귓 속에서 맴돌았다. 0분 49초 부터. The 1975 - Robbers And he's got his gun, he's got his suit on She says, babe, you look so cool 2024.03.05 - 필름카메라 입문 작년 취준할 때 돈이 없어서 갖고 있던 EOS R을 팔았다. 렌즈는 나름 자산이라고 EF시절 부터 갖고 있던 35.2..
-
Docker로 Elasticsearch + Kibana 개발환경 구성하기개발 2023. 11. 24. 05:19
회사에서 검색 시스템 개발을 맡게 되었고 아파치 루씬 기반의 검색엔진인 Elasticsearch를 사용하기로 하였다. 로컬 개발 환경을 간단하게 구축하기 위해 도커를 활용해 구성하였다. ES, Kibana 컨테이너 실행하기 우선, Elasticsearch와 Kibana가 사용할 도커 네트워크를 만든다. docker network create [NETWORK_NAME] Elasticsearch와 Kibana 컨테이너를 실행한다. 버전은 8.10.4를 사용했다. 필요한 포트들을 포트포워딩 한다. 9200번 포트: Elasticsearch API 9300번 포트: Elasticsearch 클러스터 내 에서 노드간 통신에 사용 5601번 포트: Kibana 대시보드 개발 환경 이므로 "discovery.type..
-
[Spring Webflux] #1 Reactive Streams 이해하기개발 2023. 2. 25. 16:39
Spring Webflux에서 비동기 로직을 지원하기 위해 사용되는 Reactor 라이브러리는 Reactive Stream의 구현체이다. Reactor 라이브러리를 보기에 앞서, Reactive Streams을 공부하려 한다. Reactive Streams? Reactive Streams는 non-blocking backpressure를 이용한 비동기 스트림 처리를 위한 표준을 뜻한다. Backpressure: 시스템의 한 컴포넌트(생성자)가 데이터를 생성하는 속도가 다른 컴포넌트(소비자)가 데이터를 소비하는 속도를 초과할 때 발생하는 압력 Non-blocking backpressure: 컴퓨터 네트워크와 분산 시스템에서 과부하와 혼잡을 방지하기 위한 컴포넌트 간의 데이터 흐름을 제어하는 기술. 소비자 ..
-
[Spring Webflux] #0 Webflux 기본 개념개발 2023. 2. 22. 03:02
스프링에서, 웹 스택은 Web Servlet, Web Reactive 이렇게 두가지가 있다. Spring MVC 와 Spring WebFlux Web Servlet에 해당되는 Spring MVC는 Java EE의 Servlet API를 기반으로 한다. Spring MVC는 Blocking 방식이다. 요청들이 들어오면 큐에 넣고 미리 만들어 둔 스레드 풀에서 스레드를 가져와서 사용한다. (하나의 요청에 하나의 스레드를 사용한다.) 그래서 스레드 풀 사이즈를 초과하는 많은 요청들이 들어오면 나머지 요청들을 처리하지 못하고 이전 작업들이 처리 될 때까지 큐에서 대기하게 되므로 지연시간이 늘어나게 된다. (Thread Pool Hell 현상) 이와 같은 대용량 트래픽 문제를 해결하기 위해 Spring 5버전부터..
-
라즈베리파이 우분투 서버 구축 #2 Docker Engine 설치개발 2022. 12. 6. 18:09
API 서버의 버전 관리를 도커 컨테이너를 사용하여 하기로 결정했다. 설치 방법은 도커 공식 문서를 참고하였다. https://docs.docker.com/engine/install/ubuntu/ Install Docker Engine on Ubuntu docs.docker.com 모든 커맨드는 최상위 경로에서 실행하였다. 1. apt 패키지 리스트를 최신화하고, apt 커맨드가 https를 사용할 수 있도록 허용할 수 있도록 필요한 패키지들을 설치한다. $ sudo apt-get update $ sudo apt-get install \ ca-certificates \ curl \ gnupg \ lsb-release 2. 도커 공식 GPG Key를 추가한다. $ sudo mkdir -p /etc/apt/..