개발중623 Spring Cache 이해하고 사용하기: 성능 최적화를 위한 데이터 캐싱 도구 Spring Cache란Spring Cache는 캐싱을 쉽게 구현할 수 있도록 하는 Spring의 추상화 레이어입니다. 이를 통해 애플리케이션은 특정 데이터를 메모리, 디스크, Redis, Ehcache 등 다양한 캐시 저장소에 저장하고 재사용할 수 있습니다. Spring Cache 주요 개념캐싱 메커니즘캐시 저장소: 데이터를 임시로 저장하는 공간(예: ConcurrentHashMap, Redis).캐시 키: 데이터를 식별하기 위한 고유 키.캐시 값: 캐시에 저장된 실제 데이터. 주요 어노테이션Spring Cache는 주로 어노테이션 기반으로 작동한다. @EnableCaching캐시 기능을 활성화한다.보통 Spring Boot의 메인 클래스나 구성 클래스에 선언한다.@SpringBootApplicatio.. 개발중/Spring 2024. 11. 19. docker-compose 에 대해서 알아보기. docker-composedocker-compose는 Docker에서 여러 컨테이너를 정의하고 관리하기 위한 도구이다. 복잡한 애플리케이션은 여러 서비스(예: 웹 서버, 데이터베이스, 캐시 등)로 구성되는데, docker-compose를 사용하면 이러한 서비스들을 하나의 설정 파일로 정의하고 한꺼번에 실행할 수 있다. 주요 기능 및 특징YAML 파일을 통한 설정docker-compose.yml 파일에 서비스, 네트워크, 볼륨 등을 정의하여 각 컨테이너의 설정을 관리한다.멀티 컨테이너 애플리케이션 관리단일 명령어로 여러 컨테이너를 빌드하고 실행할 수 있다.환경 간 일관성 유지개발, 테스트, 프로덕션 환경에서 동일한 설정을 사용하여 일관성을 보장한다.의존성 관리서비스 간의 의존성을 정의하여 실행 순서를 제어.. 개발중/Docker 2024. 11. 19. [redis] sentinel : waitpid() returned a pid (...) we can't find in our scripts execution queue! Sentinel 의 CPU 사용률이 비정상적으로 튀는현상이 발생했다.Sentinel Log 를 확인해보니 아래와 같다. 1:X 15 Nov 2024 06:47:20.330 # +tilt #tilt mode entered1:X 15 Nov 2024 06:47:20.330 # waitpid() returned a pid (924) we can't find in our scripts execution queue!1:X 15 Nov 2024 06:47:50.401 # -tilt #tilt mode exited1:X 15 Nov 2024 06:50:12.123 # +tilt #tilt mode entered1:X 15 Nov 2024 06:50:12.123 # waitpid() returned a pid (138.. 개발중/Redis 2024. 11. 18. Spring Boot 기반 Redis Pub/Sub 구현: 분산 환경에서 Pod 간 이벤트 처리 목적오늘은 Spring Boot 기반 프로젝트에서 Redis Pub/Sub을 설정하는 코드를 구현하려고 한다. 환경 분산 처리 환경(API들이 Pod로 분산 처리됨)에서 Redis를 Session Storage로 사용한다. 목표특정 Pod에서 이벤트가 발생하면, Redis Pub/Sub을 통해 모든 Pod에 이벤트를 전달하는 구조를 구현한다. 구현채널 구독Redis Config 파일에 RedisMessageListenerContainer 를 Bean 등록해서 아래와 같이 PatternTopic 으로 채널을 구독한다.여기서 채널을 구독하지 않으면 메세지를 수신할 수 없으니 유의하자. @Beanpublic RedisMessageListenerContainer redisContainer(RedisConnect.. 개발중/Spring Boot & Redis 2024. 11. 16. [JAVA] ConcurrentHashMap 에 대해서 ConcurrentHashMap은 Java에서 멀티스레드 환경에서 안전하게 사용될 수 있도록 설계된 해시맵 구현체입니다. 다음은 ConcurrentHashMap의 주요 특징입니다:동시성 제공:ConcurrentHashMap은 멀티스레드 환경에서 여러 스레드가 동시에 데이터를 읽고 수정할 수 있도록 설계되었습니다.내부적으로 분할 잠금(Shard Locking) 메커니즘을 사용하여 성능을 최적화합니다. 이는 맵이 여러 개의 세그먼트(segment) 로 나뉘어 각 세그먼트에 대해 개별적으로 잠금을 걸기 때문에, 여러 스레드가 동시에 다른 세그먼트를 수정할 수 있습니다.잠금 수준 최적화:HashTable처럼 전체 맵에 대해 잠금을 걸지 않고, 데이터의 특정 버킷(bucket) 단위에만 잠금을 걸기 때문에 동시성.. 개발중/Java 2024. 11. 4. [Airflow] Airflow 병렬 처리의 함정: Worker 분산 없이 처리하면? Airflow에서 병렬 처리를 구현할 때 많은 사람들이 성능이 크게 향상될 것으로 기대하지만, Worker 분산 처리가 설정되어 있지 않은 경우에는 오히려 순차 처리보다 더 느려질 수 있는 상황이 발생합니다. 이번 포스팅에서는 Airflow의 병렬 처리와 순차 처리의 테스트 결과를 비교하고, 그 이유를 살펴보겠습니다. 테스트 결과 비교Task 순차 처리전체 데이터 수300,000태스크별 데이터 수300,000전체 소요 시간1시간 56분 Task 병렬 처리전체 데이터 수300,000태스크별 데이터 수75,000전체 소요 시간2시간 1분 테스트 결과를 보면, 병렬 처리의 전체 소요 시간이 순차 처리보다 오히려 더 길어졌음을 알 수 있습니다. 병렬 처리를 했음에도 불구하고 성능이 기대만큼 향상되지 않은 이유는.. 개발중/AirFlow 2024. 10. 10. [AirFlow] 특정 Role 만 특정 Dag 권한주고 싶다. 난 Admin Role 만 읽고 수정 권한을 주고 싶다,from airflow import DAGfrom airflow.operators.dummy_operator import DummyOperatorfrom datetime import datetimewith DAG( 'TEST_1', default_args={'start_date': datetime(2023, 10, 7)}, schedule_interval='@daily', catchup=False, access_control={ 'Admin': {'can_read', 'can_edit'}, # Admin 역할에만 읽기 및 수정 권한 부여 },) as dag: start = DummyOperator(.. 개발중/AirFlow 2024. 10. 8. [AirFlow] airflow 사용자 생성 / REST API airflow users create \ --username admin \ --firstname Admin \ --lastname User \ --role Admin \ --email admin@example.com \ --password admin 개발중/AirFlow 2024. 10. 8. [Airflow] example_datasets.py 에러 ERRORBroken DAG: [/opt/airflow/airflow_env_38/lib/python3.8/site-packages/airflow/example_dags/example_datasets.py] Traceback (most recent call last): File "/opt/airflow/airflow_env_38/lib/python3.8/site-packages/airflow/example_dags/example_datasets.py", line 60, in from airflow.timetables.datasets import DatasetOrTimeSchedule File "/opt/airflow/airflow_env_38/lib/python3.8/site-packages/airfl.. 개발중/AirFlow 2024. 10. 8. [AirFlow] ContentType Mysql 누락 MySQL Content Type 을 선택하고 싶은데 주어진 값에 "MySQL" 은 없습니다. MySQL을 사용하려면, MySQL과 연동하는 Airflow Provider 패키지를 설치해야 합니다. 해당 패키지가 설치되지 않으면 MySQL 연결 타입이 Airflow의 UI에서 누락될 수 있다고 합니다. Mysql 옵션을 다운로드 하자.pip install apache-airflow-providers-mysql 근데 이런 에러가 난다면× Getting requirements to build wheel did not run successfully. │ exit code: 1 ╰─> [27 lines of output] /bin/sh: 1: pkg-config: not found .. 개발중/AirFlow 2024. 9. 30. Redis Pub/Sub 기반 SSE 실시간 알림 삽질 통해 구현하기. 첫 번째와 두 번째 클라이언트는 첫 번째 서버와 SSE 연결을 맺었기 때문에, 두 번째 서버는 이 두 클라이언트와의 SSE 연결 정보를 가지고 있지 않습니다.만약에 A 파드에서 알림이 발생했을 경우에는 첫번째 클라이언트와 두번째 클라이언트에게 SEE 를 사용해서 알림을 보낼 수 있습니다. 하지만 B 파드에서 알림이 발생했을 경우에는 ?첫번째 클라이언트와 두번째 클라이언트의 SSE 정보가 없기 때문에 전송할 수 없습니다. 그래서 레디스의 Sub/Pub 기능을 이용해서 알림 상태를 모든 Pod 에게 전달하기로 했습니다.Redis Sub / Pub 참고 ... Redis Config 에 RedisMessageListenerContainer, MessageListenerAdapter 빈등록을 해줍시다. 일단.. 개발중/Spring Boot & Redis 2024. 9. 24. Redis Pub/Sub 에 대해서 알아보기. Redis Pub/Sub Redis Pub/Sub(Publish/Subscribe)는 Redis에서 제공하는 메시징 시스템으로, 발행자(Publisher)가 메시지를 특정 채널에 발행하고, 구독자(Subscriber)는 해당 채널을 구독하여 메시지를 수신하는 방식입니다. 이 방식은 비동기적 통신을 가능하게 하며, 발행자와 구독자가 서로 직접적으로 통신하지 않고, Redis가 중간에서 메시지를 라우팅하는 역할을 합니다. Redis Pub/Sub 동작 방식Publisher (발행자)발행자는 특정 채널로 메시지를 보냅니다.발행자는 메시지를 보낼 때 구독자가 있는지 여부를 알 필요가 없습니다.여러 구독자가 있으면, 같은 채널을 구독한 모든 구독자에게 메시지가 전송됩니다. Subscriber (구독자)구독자는 .. 개발중/Redis 2024. 9. 24. 이전 1 2 3 4 5 ··· 52 다음