728x90

JAVA 109

스프링 배치를 사용해 적재되고 있는 로그 압축 , 삭제하기 - 병렬 실행

https://wonder-why.tistory.com/243 스프링 배치를 사용해 적재되고 있는 로그 압축 , 삭제하기 - 순차적 실행1. 요구사항현재 적재되고 있는 a,b 로그를 일정 기간이 지나면 압축, 삭제 할 것기간은 config 로 설정할 것모든 pod 에 적용할 것2. 해결 방안 코드 작성 전 알아야 할 것적용될 프로젝트의 이름로wonder-why.tistory.com 지난 글과 이어지는 글 해당 배치는 4가지 기능으로 나뉜다.위 기능들을 꼭 순차적으로 실행 시켜야할 이유가 없다고 느꼈다. a, b 로그가 해당 경로에 저장되고 있기 때문이다.그래서a,b 로그 압축, 삭제a,b 로그 삭제를 병렬 실행 하는 것으로 리팩토링 했다. @Slf4j@RequiredArgsConstructor@Confi..

JAVA/SpringBoot 2025.07.26

스프링 배치를 사용해 적재되고 있는 로그 압축 , 삭제하기 - 순차적 실행

1. 요구사항현재 적재되고 있는 a,b 로그를 일정 기간이 지나면 압축, 삭제 할 것기간은 config 로 설정할 것모든 pod 에 적용할 것2. 해결 방안 코드 작성 전 알아야 할 것적용될 프로젝트의 이름로그의 경로로그 파일의이름압축 확장자yaml 에 로그 경로와 적용될 프로젝트, 로그 보관 기간, 압축 기간을 설정한다. compressAfterDays: 7 // 7일 지나면 압축 keepDays: 730 // 730 일 지나면 삭제이 설정으로 편하게 관리할 수 있다. 2.CRON 을 설정한다 .나는 YAML 파일에 프로젝트를 | 으로 구분해 작성해 놓았고, 이것을 코드로 불러와 |로 나눠 리스트를 순회하는 방식으로 job 을 실행 시켰다.이렇게 파라미터를 달리해 배치를 실행 시키려면 ..

JAVA/SpringBoot 2025.07.26

Spring Integration - mqtt

MQTT: Message Queuing Telemetry Transport iot 낮은 대역폭과 리소스가 제한된 환경에서 안정적으로 통신할 수 있는 경량 메세징 프로토콜. 최소한의 리소스와 적은 전력을 소비하기 때문에 iot 같은 제한된 환경에서 사용하기 적합하다pub/ sub 모델을 기반으로 메세지 발행 pub, 구독 sub 방식으로 통신을 처리한다. publisher 는 메세지를 발행, Subscriber 는 관심 있는 Topic 을 구독해 메세지를 수신한다.클라이언트가 데이터를 비동기적으로 주고받을 수 있어 실시간 메세징 시스템 구축이 가능하다.클라이언트 - mqtt - 서버 환경을 구성해 서버가 mqtt 에 메세지를 보내면 다수의 클라이언트에게 전송 QoS Quality of Service 제공..

JAVA/SpringBoot 2025.03.17

Feign, @EnableFeignClients(), @FeignClient

Feign넷플릭스에서 개발된 Http client binder.외부 API호출을 간편하게 만들어 준다.  MAS아키텍쳐에서 여러 서비스 간 HTTP 통신이 필요할 때 Feign 을 사용하면 편리하다. ext { set('springCloudVersion', "2023.0.3") }dependencyManagement { imports { mavenBom "org.springframework.cloud:spring-cloud-dependencies:2020.0.3" }}implementation 'org.springframework.cloud:spring-cloud-starter-openfeign'build.gradle 에 의존성을 추가한다. @EnableFeignClients해당 ..

JAVA/SpringBoot 2025.02.16

JWT: Json Web Token

토큰으로 인증하기 세션의 단점서버에 세션 정보를 저장할 공간 필요, 서비스를 이용하는 사용자가 많다면 저장 공간이 많이 필요함분산 서버에서 세션을 공유하는데 어려움.세션의 단점을 해결하기 위해 토큰 인증 방식 채택유저가 로그인을 하면 서버에서 토큰을 생성한 뒤, 저장하지 않고 stateless 토큰 값을 내려준다.이 토큰 값을  유저가 게시글 조회 요청을 할 때 함께 보내고, 서버에서 이 토큰을 해석해 이 값을 토대로 유저 인증을 한다.세션 방식의 JSESSIONID 는 key 로만 활용할 수 있는 무의미한 값이 들어있지만, 토큰을 유저를 설명할 수 있는 데이터를 (uid, username) 을 포함한다.토큰의 장점/ 단점세션 관리를 할 필요가 없어 저장소 불필요서버 분산 & 클러스트 환경과 같은 확장성..

JAVA/SpringBoot 2025.02.13

Java, OOP, Spring, RESTFul API

Java?객체 지향 프로그래밍 언어로, JVM위에서 실행되기 때문에 플랫폼에 독립적이며, 객체 지향 언어로 코드의 재사용성과 유지보수성이 높다. GC를 통해 메모리 관리를 자동으로 합니다. 멀티스레딩을 지원해 동시에 여러 작업을 효율적으로 저리할 수 있다.JVM Java Virtual Machine: 자바를 실행하는 가상 머신, 이 위에서 실행 되기 때문에 OS 에 종속괴지 않는다. 이 위에서 실행 되기 때문에 다른 언어(c, c++)보다 느리다는 단점이 있다.GC Gabage Collector: 메모리 관리 기법. 참조되지 않는 객체를 자동으로 메모리에서 해제해 메모리 누수를 방지한다.객체지향 언어 OOP?Object Oriented Programming실제 세계의 사물들을 객체로 모델링하여 개발하는 ..

JAVA 2025.01.14

AWS: local 환경에 rds 연결중 DBMS: MySQL (no ver.)에러, Failed to connect to your instance, Failed to connect to your instance

aws에 세팅한 환경을 local 에 연결하려고 test connectio 을 해보니DBMS: MySQL (no ver.)Case sensitivity: plain=mixed, delimited=exactConnection timed out: connect.에러가 났다.security group 인바운드 규칙을 추가해주지 않아서 그런것.RDS - Databases - 해당 db - connectivity&Security - VPC Security group - edit inbound rules - everywhere IP4, enerywhere IP6를 추가해준다.ec2 instance connect 를 하니Failed to connect to your instance EC2 Instance Connec..

JAVA/에러 2024.12.09

쿠폰 선착순 발급 이벤트 -프로메테우스, 그라파나를 사용해 모니터링 환경 구축

프로메테우스를 통해 메트릭을 수집하고, 그라파나를 사용해 시각화, 대시보드를 설정한다. build.gradle.kts 의존성 추가 implementation("org.springframework.boot:spring-boot-starter-actuator")implementation("io.micrometer:micrometer-registry-prometheus") yml 파일 설정 core.yml---spring: config: activate: on-profile: prod datasource: hikari: jdbc-url: jdbc:mysql://PROD_URL:3306/coupon driver-class-name: com.mysql.cj.jdbc.Dri..

JAVA/프로젝트 2024.12.09

쿠폰 선착순 발급 이벤트 - redis 분산락 쿠폰 발급 문제점.

redis 분산락을 적용 사용해 쿠폰 발급 처리하는 로직을 작성했는데, RPS 가 낮다.  public void issue(long couponId, long userId) { //쿠폰 캐시를 통한 유효성 검증을 캐시 처리. 엔티티 필드를 가져오는 부분을 캐시 처리 CouponRedisEntity coupon = couponCacheService.getCouponCache(couponId); //캐시로 날짜 유효성 검사 coupon.checkIssuableCoupon(); Integer totalQuantity = coupon.totalQuantity(); //동시성 제어를 위한 락 distributeLockExecutor.execute("lock_%s".format..

JAVA/프로젝트 2024.12.05

쿠폰 선착순 발급 이벤트 - 쿠폰 발급 서버 구조 학습, 적절한 redis 데이터 구조 결정.

쿠폰 API 서버 구조 1. 유저가 api 서버로 요청을 보낸다2. API 서버에서 요청을 처리한다.3. 요청을 처리하는 과정에서 데이터베이스를 사용해 트랜잭션을 처리한다.쿠폰 조회쿠폰 발급 내역 조회쿠폰 수량 증가 & 쿠폰 발급우리는 N개의 요청을 처리 하길 바라는데 이것이 가능한가?-> DB는 감당하지 못함.고로, 유저 트래픽을 감당할 수 있는 구조로 변경해야한다.  쿠폰 API 서버 구조 개선  유저 트래픽 처리1. N명의 유저가 요청을 보낸다.2. API 서버에서는 N개의 요청을 처리한다.3. redis 에서 요청을 처리하고 쿠폰 발급 대상을 저장한다.4. 쿠폰 발급 처리 기능에서 redis 에 쿠폰 발급 대상을 조회해 발급 처리한다.  redis를 인터페이스로 해서, 발급 서버를 분리하였다. a..

JAVA/프로젝트 2024.12.02
728x90
반응형