전체 글 36

이중화된 서버의 로드밸런싱(Apache)

안녕하세요 개발자 문문입니다.오늘은 대용량 트래픽 처리를 하기위해 이중화된 서버를 로드밸런싱 처리하는 과정을 살펴보겠습니다. 앞의 장들에서 개발했던 프로젝트들이 분배 서비스, 발송 서비스로 프로젝트가 분리되어있으며, 이중화된 서버에 배치되어있습니다.서버가 이중화 되었기 때문에 들어온 요청을 어느 서버에 보낼지 처리하는 과정이 필요한데요, 이 과정을 로드밸런싱이라고 합니다. 로드밸런싱 처리를 하기 위해 server1에 Apache를 설치합니다. sudo dnf install httpd –y 설치가 완료되었으면 로드밸런싱 설정 파일을 추가해줍니다.//경로 이동cd /etc/httpd/conf.d//로드밸런스 설정파일 생성vi loadbalancer.conf loadbalancer.conf에 아래의 내용을..

[백준 1325번] - JAVA

이 문제를 풀기 위해서는 신뢰 관계를 정확하게 파악해야 합니다.1 2가 신뢰 관계일 때 (1 ➡️ 2) 2가 감염되면 1도 감염이 됩니다. 하지만 1이 감염되면 2는 감염되지 않습니다.즉 신뢰 관계가 양방향이 아닌 단방향이라는 것을 생각하고 문제를 풀어야 합니다.import java.util.*;import java.io.*;//A가 B를 신뢰한다//B를 해킹하면 A도 해킹할 수 있다public class Main{ private static List[] graph; private static int N; private static int M; public static void main(String []args) throws IOException{ Buf..

WebClient로 외부 서비스에 요청

대량의 요청을 타입별로 분배를 했습니다. 그렇다면 이 분배된 요청을 발송 요청 서비스로 보내야합니다.이때 사용한 것이 WebClient입니다. WebClient비동기·논블로킹(Non-Blocking) 방식의 HTTP 클라이언트논블로킹 방식이기 때문에 발송 요청 후 응답을 기다리지 않고 다른 작업 수행이 가능GET, POST, PUT, DELETE 등 모든 HTTP 메서드 지원헤더, 쿠키, 인증 등 다양한 요청 설정 가능@Configurationpublic class WebClientConfig { @Value("${api.url}") private String url; @Bean public WebClient webClient(WebClient.Builder builder) { return build..

Thread Pool로 대용량 트래픽 처리

Thread Pool이란?미리 일정 개수의 스레드를 생성해 두고 재사용하는 구조요청이 들어오면 풀에 있는 스레드가 작업을 수행작업이 끝나면 스레드를 종료하지 않고 풀에 반환하여 다음 요청에서 재사용@Configuration@EnableAsync // @Async 활성화public class AsyncConfig { @Bean(name = "taskExecutor") public ThreadPoolTaskExecutor taskExecutor() { ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); executor.setCorePoolSize(5); // 기본 스레드 수 executor.se..

[백준 15649번] - JAVA

이 문제는 백트래킹을 사용하여 풀었습니다.문제의 난이도 자체는 높지 않지만 백트래킹 개념을 이해하기에 좋은 문제인 것 같습니다. 백트래킹값을 탐색하던 도중 가능성이 없다고 판단되면 다시 돌아가서 탐색하는 기법입니다.여기서 중요한건 다시 돌아간다는 것입니다. 이를 이해하려면 트리구조로 보는 것이 좋겠습니다.만약 위의 문제에서 3, 2가 N,M의 값으로 주어진다면 이런 트리구조가 나올겁니다.1부터 탐색을 시작하면 1,2를 탐색 후 2값만 지워주고 다시 1로 돌아가서 3을 탐색합니다. 이렇게 되면 1에 대한 탐색을 끝난겁니다.같은 방법으로 N이하의 모든 숫자를 탐색을 한다면 문제의 답이 나옵니다.여기서 중요한건 1,2를 탐색 후 1로 다시 돌아갔다는 점입니다. import java.util.*;import j..

[Clean Code] 5장. 형식 맞추기

안녕하세요 개발자 문문입니다.오늘은 5장 형식 맞추기를 공부해보겠습니다. 형식을 맞추는 목적코드 형식은 의사소통의 일환처음 잡아놓은 구현 스타일과 가독성 수준은 유지보수 용이성과 확장성에 계속 영향을 미친다. 적절한 행 길이를 유지하라자바에서 파일 크기는 클래스 크기와 밀접하다.프로젝트 7개 : JUnit, FitNesse, testNG, Time and Money, JDepend, Ant, TomcatFitNesse : 평균 65줄, 전체 파일중 1/3이 40~100줄, 최대 400줄, 최소 6줄JUnit, FitNesse, Time and Money: 500줄이 넘는 파일이 없으며 대다수가 200줄Tomcat, Ant : 절반 이상이 200줄을 넘어가고 수천 줄이 넘는 파일도 있다.위 내용을 보면 5..

Clean Code 2025.08.26

[백준 1926번] - JAVA

이 문제는 입력으로 주어진 0,1중 1이 연결된 그룹의 개수와 가장 많은 1이 연결된 그룹의 1의 개수가 몇 개인지 출력하는 문제입니다.0,0부터 n,m까지 확인하며 1이 연결되어 있는 부분을 찾아내면 됩니다.단, 1이 연결된 부분만 찾으면 되기 때문에 탐색중 값이 0이면 굳이 탐색 로직을 수행하지 않아도 됩니다.import java.util.*;import java.io.*;public class Main{ private static int[] dx = {1,-1,0,0}; private static int[] dy = {0,0,1,-1}; private static int[][] board; private static boolean[][] visited; private st..

[프로그래머스 기능개발] - JAVA

import java.util.*;//progresses - 작업 진도//speeds - 작업 속도//뒤에 기능이 먼저 개발된다면, 앞의 기능 배포시에 같이 배포//하루에 하나씩 배포//작업 진도에 작업 속도만큼 추가하는 반복문이 필요//반복문안에는 반복문의 싸이클 종료시 마다 작업 진도를 체크하는 로직이 필요//반복문 탈출 조건은 작업 Queue가 비워졌을때로 하자class Solution { private Queue> workQueue = new LinkedList(); private List finCntList = new ArrayList(); public int[] solution(int[] progresses, int[] speeds) { int[] a..

[Object] Chapter06. 메시지와 인터페이스

안녕하세요 개발자 문문입니다. 오늘은 메시지와 인터페이스를 공부하겠습니다. 서론훌륭한 객체지향 코드를 얻기 위해서는 클래스가 아닌 객체를 지향해야 한다.좀 더 정확하게 말하면 협력안에서 객체가 수행하는 책임에 초점을 맞춰야한다.책임이 객체가 수신할 수 있는 메시지의 기반이 된다.객체를 수신하는 메시지들이 객체의 퍼블릭 인터페이스를 구성한다.이번 장에서는 퍼블릭 인터페이스를 만드는데 도움이 되는 설계 원칙과 기법을 살펴보자.협력과 메시지클라이언트 - 서버 모델객체는 자신의 희망을 메시지라는 형태로 전송하고 메시지를 수신한 객체는 요청을 적절히 처리한 후 응답한다.협력 안에서 메시지를 전송하는 객체를 클라이언트, 메시지를 수신하는 객체를 서버라고 부른다.객체는 협력에 참여하는 동안 클라이언트와 서버의 역할을..

Object 2025.08.23