본문 바로가기

전체 글76

Java) 데몬 쓰레드와 사용자 쓰레드 데몬 쓰레드와 사용자 쓰레드 !!! JVM은 사용자 쓰레드의 작업이 끝나면 기능을 전부 수행하지 않은 데몬 쓰레드도 자동으로 종료시켜 버림.!!! 데몬 쓰레드: 보이지 않는 곳에서 실행되는 낮은 우선순위를 가진 쓰레드 (대표적인 데몬 쓰레드: 가비지 컬렉터) 쓰레드를 만들 때 thread.setDaemon(true)를 통해 명시적으로 할당해 줘야 함 사용자 쓰레드: 보이는 곳에서 실행되는 높은 우선순위를 가진 쓰레드 (대표적인 사용자 쓰레드: 메인 쓰레드) 프로그램 기능을 담당하며 대표적인 사용자 쓰레드로는 메인 쓰레드가 있다. 쓰레드 우선순위 쓰레드 작업의 중요도에 따라서 쓰레드의 우선순위를 부여할 수 있다. JVM에 의해 지정되며, 최대(10), 최소(1), 보통(5)의 우선 순위를 갖는다. 기본 값.. 2023. 9. 18.
백준) 단어 공부(1157번) 1157번: 단어 공부 알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다. www.acmicpc.net import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Main { public static void main(String[] args) throws IOException { BufferedReader bf = new BufferedReader(new InputStreamReader(System.in)); String word = bf.readLine().toUp.. 2023. 9. 17.
백준) 더하기 사이클(1110번) 1110번: 더하기 사이클 0보다 크거나 같고, 99보다 작거나 같은 정수가 주어질 때 다음과 같은 연산을 할 수 있다. 먼저 주어진 수가 10보다 작다면 앞에 0을 붙여 두 자리 수로 만들고, 각 자리의 숫자를 더한다. 그 다음, www.acmicpc.net import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Main { public static void main(String[] args) throws IOException { BufferedReader bf = new BufferedReader(new InputStreamReader(System.in)); int f.. 2023. 9. 16.
Java) 프로세스와 쓰레드 프로세스: 운영체제로부터 자원을 할당받는 작업의 단위 쓰레드: 프로세스가 할당받은 자원을 이용하는 실행의 단위 프로세스의 구조 OS가 프로그램 실행을 위한 프로세스를 할당해줄때 프로세스안에 프로그램 Code와 Data 메모리영역을 함께 할당해준다. Code는 Java main 메소드와 같은 코드를 말한다. Data는 프로그램이 실행중 저장할 수 있는 저장공간을 의미한다. Memory는 지역변수, 매개변수 리턴변수를 저장하는 Stack 영역과 프로그램이 동적으로 필요한 변수를 저장하는 Heap 영역으로 나뉜다 쓰레드 프로세스가 작업중인 프로그램에서 실행요청이 들어오면 쓰레드를 만들어 명령을 처리하도록 한다. 프로세스 안에는 여러 쓰레드가 있고, 쓰레드들은 실행을 위한 프로세스 내 주소공간이나 메모리공간(H.. 2023. 9. 14.
Spring) 평균 응답 시간 개선 현재 입찰 요청의 평균 응답 시간은 1300/ms이다. 일반적으로 클라이언트가 이용하기엔 매우 불편한 수치이다. 문제 원인 파악 현재 비동기로 이벤트를 발송하는 구조에서 많은 사용자가 연결 되었을 때, 내부적으로 이벤트를 전송하는 로직에 자원을 많이 사용하나? 라는 가설을 세우고 테스트를 진행해보았다. 연결을 하지 않고, 입찰 요청만 보냈을 때 응답 시간이 현저히 낮은 것을 확인했다. 입찰 요청의 문제가 아닌 연결 하고 이벤트를 발송할 때 생기는 문제라고 생각이 되었다. 이벤트 발송하는 로직에서 Emitter들이 유효한지 확인하는 반복문을 제거하여 테스트를 더 진행해 보았다. 응답시간이 줄어듦을 확인했다. 문제가 일어난 이유 SSE는 특성상 클라이언트가 접속을 끊었는지 확인하기 어렵다. 그러하여 이벤트를.. 2023. 8. 31.
Spring) Transaction 처리 속도 향상 scale-up을 하고도 Time out 에러가 발생했다. 서버의 자원은 아직 견딜 만 한데도 Time out이 발생한다. 이는 Transaction의 처리 속도가 느리니 Lock이 걸려있는 시간도 길어진다. 그러므로 Lock을 얻기위해 Connection 들은 기다린다. 그렇게 되며 병목현상이 발생하고, HandOffQueue에서 대기하는 Thread들의 시간이 30초를 넘으며 time out이 발생하는 것 같다. 문제 원인 파악 각각의 시간이 얼마나 걸리는지 로그를 찍어 확인해 보았다. 그 결과 발생하는 이벤트를 전송하는(Bid Update Send) 과정에서 처리하는 시간의 90% 이상을 차지한다. 문제가 발생한 원인 업데이트 된 입찰가를 연결되어있는 클라이언트들에게 보내는 과정에서 많은 시간이 소.. 2023. 8. 28.
Java) 병목현상 해결 과정 SSE 연결 후에 입찰 요청 성능테스트를 진행하는 과정에서 생긴 문제이다. HikariCP Time out이 발생했다. 첫 번째 가정: 다른 API에서 물린 Connection이 아직 남아있는 건가? 나는 입찰과 조회를 동시에 트래픽을 발생시키기 위해 입찰과 조회 동시에 요청, 입찰만 요청, 조회만 요청 등등 경우의 수를 테스트 했었다. 그렇다면 입찰 쪽이 아니라 조회 쪽에서 Connection을 차지하고 있을 수도 있겠다는 생각에 RDS를 재부팅하고 입찰만 테스트 해보았다. 처음의 성능 테스트는 잘 이루어 졌지만, 두 번째 테스트 부터 같은 에러가 발생했다.. 서로의 상관관계는 없어보인다. 두 번째 가정: HikariCP에서 생긴 Deadlock? 하나의 Thread가 하나의 Connection을 요청.. 2023. 8. 23.
JMeter SSE 테스트 현재 며칠 째 이 기능을 테스트를 성공하지 못하고 있다. 현재 프로젝트에서 가장 핵심 기능인데 말이다. JMeter에 조금 익숙해 졌으니 금방 끝나겠지 라고 생각한지 벌써 3일 째가 되어간다. 삽질 과정을 블로그에 적을 생각도 못하고 계속 삽질을 하고 있다. 첫 째, 일단 Referce가 없다. 그나마 2개 정도 있는데 이 2개의 방법이 유사해서 1개로 봐도 무방하다. 그렇다고 이 1개의 자료가 잘 되는 것도 아니다. https://www.blazemeter.com/blog/jmeter-sse 이 자료에서 제공하는 두가지 방식 전부 잘 되지 않는다.. 지금부터라도 삽질 과정을 남겨야 할 것 같아 부랴부랴 왔다... JSR223 Sampler Script에서 import가 되지 않는 문제 더보기 며칠간 기.. 2023. 8. 19.
JMeter 변수 설정 JMeter에서 테스트를 하게 된다면 나의 프로젝트에 맞게 테스트 할 데이터를 설정해야 한다. Request Body 설정 더보기 로그인 API 에서는 Body에 ID와 password 값을 담아서 요청해야 한다. 1. HTTP Request Sampler에서 Body Data 진입 후 값을 입력한다. 2. HTTP Header Manager를 설정한다. JMeter에서 보내는 요청을 JSON으로 서버에서 인식할 수 있게 설정하기 위해서다. HTTP Request Sampler 우클릭 -> add -> Config Element -> HTTP Header Manager 생성 토큰값 추출 더보기 login이 성공적으로 됐으면 토큰값이 Header에 담겨 올 것이다. 인가할 때 필요한 토큰값이 필요하니 추출.. 2023. 8. 15.