- [소프티어] 나무조경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..
- [소프티어] 출퇴근길2025-02-03 20:52:08https://softeer.ai/practice/6248 Softeer - 현대자동차그룹 SW인재확보플랫폼 softeer.ai 그래프 알고리즘에 DFS 알고리즘을 사용하면 될 것이라고 생각했고, 제약조건이 N 200,000 이기 때문에 시간복잡도 O(N + M)으로 충분히 효율적인 풀이 방법이라 생각했다. 하지만 그래프 구현까지만 가능했고, dfs를 통해 어떻게 방문을 했는지 헤매게 되어 결국 정답을 보았다. 검색한 코드import java.io.*;import java.util.*;public class Main { private static int N,M,S,T; private static List> graph = new ArrayList(); private static Lis..
- [트러블 슈팅] 갑자기 사라진 Redis2025-02-03 12:06:04기존에 잘 동작하던 개발 서버에서 Redis와 관련된 API 들이 동작하지 않는 것을 확인하게 되었다.오류를 확인해보니 Redis 오류인 것을 확인하였다.2025-02-03T01:31:34.427Z ERROR 1 --- [Eighteen_BE] [http-nio-8080-exec-22] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: org.springframework.data.redis.RedisConnectionFailureException: Unabl..
- Record를 DTO로 사용하는 이유가 뭔가요?2025-02-03 11:02:27Record는 Java 16에서 정식 출시된 특별한 유형의 클래스로 불변성(Immutable) 을 기본으로 합니다.기존의 클래스와 달리 모든 필드가 final 키워드로 선언되며, 객체 생성 후 변경할 수 없습니다. 또한 필드 선언만으로 자동으로 생성자, getter, equals(), hashCode(), toString() 등 메서드를 자동으로 생성해 주어 보일러 플레이트 코드를 줄일 수 있습니다. 이러한 특성으로 인해 멀티 스레드 환경에서 데이터가 의도치 않게 변경되지 않고 안전하게 전달할 수 있습니다.// 기존 클래스 기반 DTOpublic class MemberDto { private final String name; private final String email; private final in..