전체 글

전체 글

    [Java] ExecutorService 와 ThreadPoolExecutor 에 대해

    ExecutorService 와 ThreadPoolExecutor 에 대해 ExecutorService service = Executors.newFixedThreadPool(50); 위 코드가 뜻하는 것은 무엇일까? Executors 는 Executor, ExecutorService, ScheduledExecutorService, ThreadFactory 등을 위한 정적 팩토리 메서드를 지원해주는 클래스다. 내부 메서드를 확인해보면 다음과 같은 팩토리 메서드가 눈에 들어올 것이다. Executors.newSingleThreadExecutor(); Executors.newFixedThreadPool(); Executors.newCachedThreadPool(); Executors.newWorkStealin..

    [Java] CountDownLatch, Semaphore, CyclicBarrier 에 대해

    CountDownLatch, Semaphore, CyclicBarrier 에 대해 CountDownLatch, Semaphore, CyclicBarrier는 자바에서 제공해주는 동기화 클래스이다. 이 클래스들을 이용해서 멀티 스레드와 관련된 코드들을 핸들링 할 수가 있다. CountDownLatch @Test void countDownLatchTest() throws InterruptedException { int numberOfThreads = 10; CountDownLatch latch = new CountDownLatch(10); ExecutorService service = Executors.newFixedThreadPool(numberOfThreads); for (int i = 0; i < nu..

    [Java] OutputStream, InputStream, File 간단 사용법 정리

    OutputStream, InputStream, File 간단 사용법 정리 어느 한쪽에서 다른 쪽으로 데이터를 전달하기 위해서는 두 대상을 연결하고 데이터를 전송할 수 있는 통로가 필요한데 이것을 스트림이라고 생각하면 된다. 스트림은 단방향통신만 가능하므로 입력과 출력을 위한 스트림이 각각 존재해야한다. 입력 스트림이 InputStream, 출력 스트림이 OutputStream이다. 스트림은 FIFO 다. OutputStream OutputStream은 다른 매체에 바이트로 데이터를 쓸 때 사용한다. 데이터를 쓰기위해 write(int a) 메서드를 이용한다. @Test void OutputStream은_데이터를_바이트로_처리한다() throws Exception { byte[] bytes = {110,..

    알고리즘 모아보기

    알고리즘 모아보기 최대공약수 GCD(Grateast Common Divisor) // 재귀 public long gcd(int w, int h) { if (h == 0) { return w; } return gcd(h, w % h); } // 반복문 public static long gcd2(int w, int h) { int n; if (w < h) { int temp = w; w=h; h = temp; } while (h != 0) { n = w % h; w=h; h = n; } return w; } 최소공배수 LCM(Least Common Multiple) (각 숫자 / 최대공약수) * 최대공약수 // 두 개만 비교할 때에 두 수의 곱 / 최대공약수가 최소공배수가 됨 순열과 조합(Permutatio..

    [Jenkins] 간략히보는 SonarQube와 Jenkins 연동하기

    간략히보는 SonarQube와 Jenkins 연동하기 EC2를 하나 파서 도커를 설치한다. sudo apt-get update && \ sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common && \ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - && \ sudo apt-key fingerprint 0EBFCD88 && \ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) st..

    [DB] Mysql Order By 쿼리 ONLY_FULL_GROUP_BY 문제 해결

    MySql Order By 쿼리 ONLY_FULL_GROUP_BY 문제 해결 MySql 에서는 Group By 사용 시에 필드에 집계함수만을 사용할 수 있게끔 하기 때문에 생긴 문제다. SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,&#39;ONLY_FULL_GROUP_BY&#39;,&#39;&#39;)); 입력해주자. REFERENCE https://stackoverflow.com/questions/23921117/disable-only-full-group-by

    [Nginx] 하나의 Nginx로 여러 upstream 처리하기

    하나의 Nginx로 여러 upstream 처리하기 events {} http { upstream app { server 앱_아이피; } upstream api-dev { server 데브서버_아이피; } upstream api { server 프로드서버_아이피; } # Redirect all traffic to HTTPS // server { // listen 80; // return 301 https://$host$request_uri; // } // // server { // listen 443 ssl; // location / { // proxy_pass http://app; // } // } server { listen 80; server_name api-dev.thankyou-for.com; r..

    [Jenkins] PR 라벨에 따른 젠킨스 빌드 유발 설정

    PR 라벨에 따른 젠킨스 빌드 유발 설정 현재 진행중인 프로젝트의 main 브랜치는 다음과 같이 client와 server 디렉토리로 나뉘게 된다. 각각 프론트와 백이다. 만약 단순히 해당 브랜치가 push 될 때에 빌드 유발을 하게끔 설정해놓는다면 client 디렉토리 내부의 코드가 변경이 생겨서 push 된다고 했을 때에 server를 담당하고 있는 젠킨스 아이템 또한 빌드 유발이 되어 불필요한 CI/CD가 일어나게 될 것이다. main 브랜치는 직접적인 푸쉬가 제한되고 오직 머지를 통해서만 변경이 가능하다는 가정하에, PR 라벨을 통한 효율적인 젠킨스 빌드 유발 설정에 대해 알아보겠다. 기본적인 젠킨스 사용법을 안다는 가정하에 진행하겠다. 보통 빌드 유발 설정 시에 위의 사진에 해당하는 GitHub..