회사 업무를 진행하다가 최근에 다루기 어려웠던 문제가 있어서 적어둔다. API에 요청을 하고 그 응답을 받아서 응답에 따라 로직을 타는 부분이었는데, 응답이 제대로 안 받아지는 문제가 있었다. Response 우선 내가 받아야 하는 응답의 json구조는 아래와 같았다. { "resultCode":"0000", "resultMessage":"Success", "totalCount":1 "items":[ { "index":0, "name":"홍길동", "gender":"M" } ] } items는 없을 수도 있고, 여러 개로 구성될 수도 있었다. 그럼 받는 방향에서 어떻게 객체를 구성해야 하는지 고민을 했다. 우선 내가 짠 구조는 아래와 같았다. class ApiResponse { private String..
여러 개의 스레드가 한 개의 자원을 사용하고자 할 때, 현재 데이터를 사용하고 있는 해당 스레드를 제외하고 나머지 스레드들은 데이터에 접근할 수 없도록 막는 개념이다. 너무 남발할 경우 프로그램 성능 저하를 일으킬 수 있다. Synchronized 키워드를 사용하면 자바 내부적으로 메서드나 변수에 동기화를 하기 위해 block과 unblock 처리를 하게 되는데 이런 처리들이 만약 너무 많아지게 되면 오히려 프로그램 성능 저하를 일으킬 수 있기 때문이다. 출처 : https://coding-start.tistory.com/68 java - synchronized 란? 사용법? java - synchronized 란? 사용법? 멀티스레드를 잘 사용하면 프로그램적으로 좋은 성능을 낼 수 있지만, 멀티스레드 ..
오픈 소스 소프트웨어로 다양한 서비스의 성능을 분석하고 측정하기 위한 도구이다. Sampler : 사용자의 행동 대행(Request) Listener : 처리결과에 대한 data 표시(Response) ThreadGroup : 각종 Test 진행 JMeter 안에는 여러 개의 Thread를 구성할 수 있으며, 하나의 Thread당 하나의 URL을 매핑시킬 수 있다. 하나의 Thread를 하나의 ThreadGroup으로 생성하여 관리한다. Number of Threads(Users) : 동시 사용자 수 Ramp-up Period(in Seconds) : 사용자(Thread) 증가 시간, 사용자를 서서히 증가시킬 때 사용 Loop Count : 반복횟수 https://ko.vvikipedla.com/wiki..
구현 1. Thread 클래스 상속 -> 다중상속이 불가능하므로 다른 클래스를 상속받을 수 없다! class ExThread extends Thread { public void run() { // 비즈니스 코드 } } 2. Runnable 인터페이스 구현 -> 이 방법이 일반적. 재사용성 높고, 코드의 일관성 유지 가능! class ExThread implements Runnable { public void run() { // 비즈니스 코드 } } 쓰레드를 구현한다? -> 스레드를 통해 작업하고자 하는 내용으로 run()의 내부를 채우는 것 실행 ExThread t = new ExThread(); t.start(); // 실행 t.start(); // 에러 -> 한 번 종료된 스레드는 다시 실행할 수 없..
여러 사용자에게 서비스를 해주는 서버의 경우 멀티스레드로 작성하는 것이 필수적이어서 하나의 서버 프로세스가 여러 개의 스레드를 생성해서 스레드와 사용자의 요청이 일대일로 처리되도록 해야 한다. 만일 싱글스레드로 서버 프로그램을 작성한다면 사용자의 요청마다 새로운 프로세스를 생성해야 하는데 프로세스를 생성하는 것은 스레드를 생성하는 것보다 더 많은 시간과 메모리 공간이 필요하기 때문에 많은 수의 사용자 요청을 서비스하기 어렵다. 그러나 멀티스레드 프로세스는 여러 스레드가 같은 프로세스 내에서 자원을 공유하면서 작업하기 때문에 발생할 수 있는 동기화, 교착상태와 같은 문제들을 고려해서 신중히 프로그래밍해야 한다. 자바의 정석 P.723