2025/05 10

기사의 현명한 아내: 불가능한 여정 찾기(java 코드포함 풀이)

문제 정보 데블스플랜2 기사의 여정, 근데 코딩테스트 곁들인..넷플릭스에서 데블스플랜2를 보다가 내용에 집중 못하고 잡념만 떠오른 게임이 있다바로 기사의 여정(여행) 기사의 여행 - 위키백과, 우리 모두의 백과사전위키백과, 우리 모두의 백과사전. 체moonquery.tistory.com 문제 풀이저는 이런 종류의 문제를 한번에 못짜기 때문에 분할정복(?) 하는 편 입니다.그래야 잘못된 길로가도 코드 몇 라인 정도는 살려서 써먹을 수 있더라고요 1. 기사의 이동 구현하기8 방향 이동을 배열로 정의이동 가능한 위치인지 확인(이전에 갔던 곳이거나 맵의 밖이면 못가도록 처리)int[] dx = {2, 1, -1, -2, -2, -1, 1, 2};int[] dy = {1, 2, 2, 1, -1, -2, -2, -..

데블스플랜2 기사의 여정, 근데 코딩테스트 곁들인..

넷플릭스에서 데블스플랜2를 보다가 내용에 집중 못하고 잡념만 떠오른 게임이 있다바로 기사의 여정(여행) 기사의 여행 - 위키백과, 우리 모두의 백과사전위키백과, 우리 모두의 백과사전. 체스판 위에서의 경로의 예 5x5 기사의 여행을 나타낸 애니메이션 기사의 여행은 체스보드의 나이트에 대한 수학적인 알고리즘 문제의 일종이다. 체스 피스를ko.wikipedia.org 이거 코테 문제로 있을 것 같은데? DP를.. 아니 백트래킹을..LeetCode에서 제공하는 문제가 있다! (프로그래머스 점수 올리고 싶다)다만 경로의 유효성 검증이라서 게임을 진행하는 느낌이 안든다다른 사이트에서도 유사한 문제를 제공하기는 하나, 실행 검증하는 기능이 없거나, 풀이를 줘버려서 화들짝 꺼버렸다 LeetCode https://..

Java 키워드 모음: static, final, synchronized, abstract, transient

1. static개념클래스 단위 변수나 메서드를 의미합니다. 객체 생성 없이도 클래스 이름으로 바로 접근할 수 있으며, JVM의 클래스 영역에 저장되어 모든 인스턴스가 공유합니다.샘플 코드public class Counter { public static int count = 0; public static void increment() { count++; }}Counter.increment();System.out.println(Counter.count); // 출력: 1활용 방안공통으로 사용해야 하는 값이나 메서드를 관리할 때 유용합니다. 예를 들어, 전체 객체 수 카운트, 유틸리티 메서드 등에 많이 사용합니다. 2. final 개념값 변경이 불가능한 상수를 선언하거나, 메서..

CS 정리 2025.05.28

Kafka 메세지 처리에 대한 고민

배경이커머스 기반 주문 처리 시스템에서 Kafka를 도입하며, 대량 메시지 처리 환경에서도 안정적인 소비와 중복 방지, 장애 복구 구조를 어떻게 구현할지에 대한 실전 고민이 있었습니다.Kafka는 at-least-once 전달을 보장하지만, 이는 곧 중복 소비의 가능성이 있다는 뜻입니다. 실제 장애 상황에서 메시지가 두 번 처리되며 중복 주문이 발생하는 문제를 경험하게 되었고, 이를 계기로 구조 개선을 시작하게 되었습니다.문제 상황 1 - 중복 메세지 소비Kafka 컨슈머가 메시지를 처리 중 예외가 발생하면, 해당 오프셋이 커밋되지 않아 같은 메시지를 다시 소비합니다.단순히 보면 메시지를 놓치지 않기 위한 설계지만, 이로 인해 실제 주문이 두 번 처리되는 문제가 발생했습니다. 대응 1 – 수동 커밋 도입..

Kafka 2025.05.25

SOLID, O:개방-폐쇄 원칙 (OCP)

O. 개방-폐쇄 원칙 (Open-Closed Principle) 소프트웨어 요소(클래스, 모듈, 함수 등)는 확장에는 열려 있어야 하고, 변경에는 닫혀 있어야 한다! 문제 상황 1 (잘못된 개방)비교적 최근에 쇼핑몰 연동 개발을 진행한 적이 있어, 상품 조회하는 기능이 하나의 메서드에서 분기처리되어 있더라고public class ShopItemService { public ShopItemResponse search(ShopType type, ShopItemSearchRequest request) { if (ShopType.Amazon.equals(type)) { // 아마존 상품 조회 } else if (ShopType.Cafe24.equals(type)..

Idea 2025.05.21

SOLID, S:단일 책임 원칙 (SRP)

객체지향 설계 원칙(SOLID)은 앞서 작성한 객체지향 이해하기를 보고오는게 좋다왜냐하면 캡슐화, 상속, 다형성, 추상화를 어떻게 쓸것인가? 에 대한 고민으로 엉클 밥님이 만든걸 멋지게(?) 앞자리만 따서 만든게 SOLID기 때문이야핵심은 유지보수 할 때를 고려해서, 변경에 유연하고 가독성 좋게 짜는거야S. 단일 책임 원칙 (Single Responsibility Principle)클래스는 하나의 이유로만 변경돼야 한다! 문제 상황1~2년 차쯤 개발할 때, 하나의 클래스에 너무 많은 기능을 몰아넣었던 기억이 있어.예를 들어 MemberService 하나에 아래 기능들을 다 넣는다고 해보자.회원 가입로그인비밀번호 찾기이메일 인증알림 발신여기에 공통적으로 사용하는 사용자 조회 기능이 있다고 가정해보자.근데 ..

Idea 2025.05.21

JAVA DP(동적 계획법)

DP는 큰 문제를 작은 문제로 나누고, 그 작은 문제의 해답을 재사용하여 전체 문제를 푸는 방식 비효율적인 중복 계산을 줄일때 효율적임비슷한 계산을 반복할 것 같을 때 의심하고 적용해보는 전략 1. 경로 수 "몇 가지 방법?"ex) 타일링, 계단 오르기2. 최댓값/최솟값 "최대 이득/점수?"ex) 배낭, 땅따먹기3. 조합 최적화 "어떻게 조합해야 최선?"ex) 숫자 변환, 동전 교환4. 부분 문제 반복 "부분 계산 중복"ex) 피보나치, 문자열 비교 점화식 dp[n]=dp[n−1]+dp[n−2] 문제 풀이땅따먹기https://school.programmers.co.kr/learn/courses/30/lessons/12913문제 키포인트1) 브루트포스, 그리드 사용하지말자2) 테스트 케이스 생각해보고 가..

JAVA 문자열 처리

자주 나오는 유형회문 검사 (Palindrome)아나그램 비교중복 문자 제거문자열 압축, 슬라이딩 윈도우문자 빈도 수 세기Java 핵심 포인트StringBuilder, String.charAt(i), toCharArray()Map, Set, Arrays.sort()substring, split, replace, equals, charAt문제 풀이문자열 압축https://school.programmers.co.kr/learn/courses/30/lessons/60057 문제 키포인트1) 압축 가능한 자릿수까지 모두 압축해보고 길이 비교하기 (s.length /2 까지 압축 가능)2) 압축된 문자열 StringBuilder 에 담기3) 시작지점부터 압축이 가능한 조건이어야 하며, 압축이 불가능한 뒷부분은 그..

Java 대용량 데이터 처리 (6) - 멀티 쓰래드/병렬 처리

6. 싱글 쓰레드 → 멀티 쓰레드 / 병렬 처리 (10만 명에게 알림 발송)싱글 쓰레드 vs 멀티 쓰레드/병렬 처리싱글 쓰레드 방식은 하나의 작업 흐름으로 모든 알림을 순차적으로 처리.사용자는 많고, 각 알림 발송 시간이 지연되면 전체 처리 시간도 길어짐.멀티 쓰레드 / 병렬 처리는 여러 쓰레드를 활용해 동시에 알림을 전송.작업을 분산해 처리 속도를 높이고, 전체 처리 시간을 획기적으로 단축할 수 있음. 비동기 병렬 처리 예제 Bad case: 싱글 쓰레드public class NotificationService { public void sendNotifications(List users) { for (String user : users) { send(user); ..

CS 정리 2025.05.04

Java 대용량 데이터 처리 (5) - 캐시 계층 활용(L1, L2, DB)

5. DB만 사용 → DB + 캐시 + 계층 구조 활용 (상품 상세정보 조회)DB 단독 조회 vs 캐시 계층 활용DB 단독 조회는 사용자의 요청이 있을 때마다 매번 DB에 접근해서 데이터를 가져오는 방식.트래픽이 많거나 요청이 반복되는 경우, DB 부하 증가와 응답 지연이 발생할 수 있음.캐시 + 계층 구조 활용은 데이터 조회 시 우선적으로 메모리 캐시(L1),분산 캐시(L2) 등을 확인한 뒤, 없을 경우에만 DB 조회.조회 성능을 극적으로 향상시키고, DB 부하를 줄이는 효과가 있음. 캐시 계층 예시L1 Cache (로컬 메모리): 서버 JVM 내 ConcurrentHashMap 등L2 Cache (분산 캐시): Redis, Memcached 등DB: 최종 백엔드 데이터 소스계층 처리 흐름사용자 요청 ..

CS 정리 2025.05.02