- 로드 밸런싱에 대해서 설명해주세요.2025-02-12 10:25:56로드 밸런싱이란 애플리케이션을 지원하는 리소스 풀에 들어오는 네트워크 트래픽(들어오는 요청)을 균등하게 분산하는 것을 의미합니다. 이를 수행하는 로드 밸런서는 애플리케이션 서버 앞단에 위치하며 클라이언트 요청을 지시하고 제어합니다. 이를 통해서 애플리케이션의 가용성, 확장성, 보안 및 성능을 확보할 수 있습니다.알고 계신 로드 밸런싱 알고리즘이 존재하나요? 🤔각 방식을 설명해 주세요. 필요하시면 화이트보드를 사용해 주셔도 좋습니다. 😀라운드 로빈(Round Robin) 방식은 모든 요청이 순서대로 처리되는 방식입니다. 서버가 3대(A, B, C)가 존재하면 요청은 ABCABC 순서대로 전달됩니다. 모든 서버의 처리 능력이 동등하고, 요청의 고른 분산이 중요한 경우 고려해볼 수 있습니다. 구현이 쉬우며..
- 트랜잭션(Transaction) 분리하기2025-02-11 15:41:21프로젝트 리팩토링을 진행하다가 트랜잭션의 관리가 미흡하다고 생각되서 정리하게 되었다. 보통 트랜잭션 단위는 일반적으로 짧게 가져가는 것이 이상적이다. 그 이유에 대해 살펴보고, 어떻게 구성해야 하는지 고민해 보겠다. @Transactional 남용의 문제점@Transactional 어노테이션은 Spring Boot 를 쓰는 사람들은 다들 너무나도 편리하다는 생각을 할 것이다.매번 트랜잭션의 시작과 종료를 코드로 명시하지 않아도, Spring AOP를 통해 간단하게 어노테이션으로 트랜잭션 범위를 설정한다.공통적인 횡단 관심사를 해결하는 Spring AOP의 대표적인 사례라고 볼 수 있다.더보기횡단 관심사(Aspect-Oriented Programming, AOP)는 프로그래밍에서 자주 등장하는 개념이다. ..
- [백준] 쉬운 최단거리2025-02-09 18:29:26https://www.acmicpc.net/problem/14940 이 문제는 정석적인 BFS 문제라고 볼 수 있다.중요한 포인트는 BFS 시작점을 (0,0)으로 두지 말고 목표 좌표로 설정해야하는 것이다. 전체코드import java.io.*;import java.util.*;public class Main { private static int N,M; private static boolean[][] visited; private static int[][] map, result; private static int[] dirX = {1,0,-1,0}; private static int[] dirY = {0,1,0,-1}; public static void main(Stri..
- [소프티어] 나무조경2025-02-06 21:56:24https://softeer.ai/practice/7594 Softeer - 현대자동차그룹 SW인재확보플랫폼 softeer.ai 처음에 DFS로 일반적인 4가지 방향 백트래킹을 구현했는데, 고민을 하다보니 전체를 탐색하면서 아래와 오른쪽으로만 이동하게 탐색하는 것 만으로도 충분히 쌍을 만들 수 있다는 것을 파악했다. 또한 기존에 내가 구현하던 DFS로는 모두 연결된 쌍만 구현이 된다고 생각했는데 DFS내에서 2차원 반복문으로 map전체를 탐색하게 하니 떨어져 있는 쌍도 만들어서 경우의 수를 계산할 수 있었다. 전체 코드import java.io.*;import java.util.*;public class Main { private static BufferedReader br; private ..
- 다중 서버 환경에서 세션 기반 인증 방식을 사용하는 경우 발생할 수 있는 문제점은 무엇인가요?2025-02-06 10:38:24다중 서버 환경에서 세션 기반 인증 방식을 사용하는 경우에는 세션 불일치 문제가 발생할 수 있습니다.만약 서버 A, B를 관리하고 있을 때, 로드밸런서는 사용자의 요청을 상황에 맞게 A, B 중 한 곳으로 전달합니다.유효한 로그인 요청이 A 서버로 처음 도착하면 사용자에 대한 세션 정보는 A 서버에 저장됩니다.이후에 해당 사용자의 또 다른 요청이 로드 밸런서에 도착했을 때, B 서버로 도착하게 되면 사용자의 세션 데이터가 존재하지 않기 때문에 요청이 제대로 처리되지 않습니다.이를 세션 불일치 문제라고 합니다.세션 불일치 문제는 어떻게 해결할 수 있나요? 🤔세션 불일치 문제는 크게 3가지 방식으로 해결할 수 있습니다. 스티키 세션 방식, 세션 클러스터링 방식, 스토리지 분리 방식입니다.각 방식에 대한 설..
- [소프티어] 택배 마스터 광우2025-02-05 17:13:19https://softeer.ai/practice/6273 Softeer - 현대자동차그룹 SW인재확보플랫폼 softeer.ai 이 문제는 레일의 순서를 임의로 변경 가능하기 때문에 각각의 경우의 수를 모두 찾아서 그 중 최소값을 찾는 문제라고 생각했고, 백트래킹을 사용하면 된다고 판단했다. 백트래킹을 사용하기 전 시간복잡도를 먼저 알아보자면레일의 개수는 최대 10개이고, 일의 시행 횟수는 최대 50이기 때문에 worst case 여도 10 x 50 = 500번 정도 이기 때문에 충분히 O(n^2) 작업도 가능하다. 1. 만들어질 수 있는 모든 레일의 경우의 수를 구한다.2. 각각의 경우 마다 광우가 들 수 있는 택배의 무게를 구한다.3. 각 경우의 수마다 구해진 택배 무게 중 최소값을 찾는다. 1. 레..
- SOLID 원칙에 대해서 설명해 주세요.2025-02-05 17:01:28SOLID 원칙은 객체지향 설계 5원칙이라고도 불리며, 각 원칙의 앞 글자를 따서 만들어졌습니다. 객체지향설계의 핵심 중 하나는 의존성을 관리하는 것인데요. 의존성을 잘 관리하기 위해서는 SOLID 원칙을 준수해야 합니다. 단일 책임 원칙(Single Responsibilty Principle) 은 클래스가 오직 하나의 목적이나 이유로만 변경되어야 한다는 것을 강조합니다. 여기서 “책임”이란 단순히 메서드의 개수를 뜻하지 않고, 특정 사용자나 기능 요구사항에 따라 소프트웨어의 변경 요청을 처리하는 역할을 의미합니다.즉, 클래스는 한 가지 변화의 이유만 가져야 하며, 이를 통해 변경이 발생했을 때 다른 기능에 영향을 덜 미치도록 설계됩니다. 이렇게 하면 유지보수가 쉬워지고 코드가 더 이해하기 쉬워집니다.개..
- DB Replication에 대해서 설명해주세요.2025-02-04 13:55:14DB Replication은 데이터베이스의 고가용성과 데이터 안정성을 보장하기 위해 널리 활용되는 핵심 기술입니다.특히, 대규모 애플리케이션 환경에서는 데이터의 지속적인 가용성과 신뢰성이 매우 중요하기 때문에, 원본(Source) 서버와 복제(Replica) 서버 간의 데이터 동기화는 필수입니다.MySQL 기준으로 설명하겠습니다.바이너리 로그(Binary log)를 저장하는 방식은?Replication은 Source 서버에서 발생하는 모든 데이터 변경 사항을 Replica 서버로 복제하여 두 서버 간의 데이터 일관성을 유지하는 메커니즘입니다.이러한 과정은 주로 Binary log를 기반으로 이루어지며, Binary log는 Source 서버에서 실행된 모든 데이터 변경 쿼리를 기록하는 역할을 합니다.My..