jvm 프로세스 상태 확인 명령어 : jps 파라미터와 함꼐 보려면 : jps -v > jps -v17201 Jps -Denv.class.path=. -Dapplication.home=/app/jdk1.8.0 -Xms8m13028 test-batch-1.2.30-SNAPSHOT.jar -Xmx3g -Xms3g -Dfile.encoding=UTF-8 -Dspring.data.elasticsearch.cluster-nodes=tas-es-master:19300 -XX:+UseG1GC -XX:MaxGCPauseMillis=20 -XX:InitiatingHeapOccupancyPercent=35 -XX:+DisableExplicitGC -Dspring.profiles.active=prod -DtargetList..
Boot에서 변경 -Xmx8g: 최대 힙 메모리를 8GB로 제한 -XX:NewSize=2g 및 -XX:MaxNewSize=2g: Young Generation 크기를 2GB로 설정하여 Old Generation이 약 6GB가 -XX:+UseG1GC: G1 가비지 컬렉터를 사용 bootRun { jvmArgs = ["-Xmx8g", "-XX:NewSize=2g", "-XX:MaxNewSize=2g", "-XX:+UseG1GC"]}JVM 옵션에서 조정-Xmx8g -XX:NewSize=2g -XX:MaxNewSize=2g-XX:+UseG1GC
서버가 비정상 상태일 경우 팀즈로 알람을 받아서 조치 하도록 운영을 하고 있는데, 매시간 서버 재기동 하는게 불편해서 비정상 상태일 경우 서버를 재시작 하도록 자동화 하려고 함. jsch 를 라이브러리 사용 - ssh 연결해줌 최신버전 0.1.55 버전이 이상하지만 고고 implementation 'com.jcraft:jsch:0.1.55' ssh 설정 - 프로퍼티는 알아서 지정 연결할 host port username pw 넣어주면됨 @Configuration public class SshCommandConfig { @Value("${ssh.tunnel.host}") private String sshHost; @Value("${ssh.tunnel.port}") private int sshPort; @V..
Spring Batch 로 하루 30만건 정도의 쿠폰 데이터 ES 적재 이후 타겟팅 된 고객 RDB 적재 연계 로직 일 배치로 ES에 적재 만료예정일시 타겟팅시에 쿠폰 API 호출하여, 실제 만료 예정될 쿠폰이 있는지 확인 쿠폰 지급 타겟된 mall 갯수 : 105개 쿠폰갯수 : 1720개 쿠폰 가장 많은 몰 : 175개 ( * 조금 더줄이는 방법 찾기 ) 가장많은 issued copoun 가진 몰 : 49319개 쿠폰 리스트 총갯수 : 241,210개 (14번 X-Api-Call-Limit 발생) Thread 별 실행시간 이슈 : 스케줄 조정 새벽 2시 10 분 : 3시간30분 소요 → 실행시간 1시간 초과로 오류 발생 오전 8시 20분 : 2분 56초 828 오전 11시 15분 : 4분 20초 소요 ..
Spring Boot에서 quartz 크론 표현식 주의 - 월은 0-11이 아닌 1-12인점 - 요일은 0 :일요일 ~ 6: 토요일, 7도 일요일로 되어있음. 1234567 기준으로 일관성 있게 쓰는게 나음 크론 표현식 옵션 ? : 조건없음 [일, 요일 에서만 사용가능] * : 모든 조건에서 참 시작시간/단위 (예 0/5) : 해당 시작시간부터 해당 단위때 참 시작범위-끝범위 (예 3-5) : 예제(3-5)는 3에서 5까지 (3, 4, 5) 조건일때 참. x,y,z... (예 1,3,5) : 예제(1,3,5) 1,3,5 일때만 참. L : [일, 요일 에서만 사용가능] - 일에서 사용하면 : 예(L) 마지막 날짜입니다. 예를들어 1월이라면 31일 2월이라면 윤년에 따라 28혹은 29일 4월이라면 30일에..
테스트코드는 메인 코드의 경로를 맞춰줘야 한다. 1. Test Life Cycle import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; public class TestLifeCycle { @BeforeAll static void beforeAll() { System.out..
TDD에 대한 간단한 설명 - 테스트 주도 개발이라는 뜻으로 TDD는 테스트를 먼저 설계하고 테스트를 통과할 수 있는 코드를 짜는 것을 말한다. - 애자일 개발 방식 중 하나라고 한다. - 코드 설계시 원하는 단계적 목표에 대해 설정하여 진행하고자 하는 것에 대한 결정 방향의 갭을 줄인다. - 최초 목표에 맞춘 테스트를 구축하여 그에 맞게 코드를 설계 하기 때문에 보자 적은 의견 충돌을 이끌 수 있음 테스트 코드를 작성하는 목적 - 코드의 안정성은 높일 수 있음 - 기능을 추가하거나 변경하는 과정에서 발생하는 Side-Effect를 줄일 수 있음 - 해당 코드가 작성된 목적을 명확하게 표현할 수 있다.(코드에 불필요한 내용이 들어가는 것을 비교적 줄일 수 있음) [단위테스트] 단위 테스트(Unit Tes..
Spring Batch :books: Spring batch Architecture Spring batch는 Job bean이 생성되면 JobLauncher에 의해 Job을 실행한다. JobLauncher가 job을 실행하고, Job은 Step을 실행하게 된다. JobRepository는 DB또는 Memory에 Spring batch가 실행할 수 있도록 Metadata를 관리하는 Class이다. Job은 배치의 실행단위 Job은 N개의 Step을 실행할 수 있으며, 흐름(Flow)를 관리할 수 있다. - Job Flow : A step 실행 후 조건에 따라 B Step 또는 C Step을 실행 설정 Step은 Job의 세부 실행 단위이며, N개가 등록되어 실행된다. Step의 실행단위는 크게 2가지로 나..
[JAVA 초급 질문] 1. JAVA 컴파일 과정에 대해서 말해보시오. 1.1 compiler vs Interpreter 차이에 대해서 말해보시오. 2. String, StringBuffer, StringBuilder의 차이에 대해서 말해보세요. 2.1 thread safe에 대해서 설명해보세요. 2.2 java String이 불변객체인 이유는 무엇인가요? 3. java의 접근 제어자의 종류와 특징에 대해서 아시나요? 4. OOP의 4가지 특징에 대해서 설명해주세요. 4.1 캡슐화와 은닉화의 차이는 무엇인가요? 5. OOP의 5대 원칙에 대해서 말해주세요. (SOLID) 6. JVM 메모리 구조에 대해서 설명해주세요. 7. 클래스, 객체, 인스턴스의 차이에 대해서 설명해주세요. 8. interface와 ..