전체 글 146

DB대신 캐시? - 성능 개선(캐시)

서비스의 트래픽이 증가하면서 응답 속도가 느려지고 처리량(TPS)이 한계에 가까워질 때, 가장 먼저 떠오르는 해결책은 서버 확장이다. 수직 확장(서버 스펙 업그레이드)이나 수평 확장(서버 추가)은 효과가 빠르지만, 비용이 많이 들고 구조도 복잡해진다. 이럴 때, 보다 효율적인 대안으로 떠오르는 것이 바로 캐시(Cache) 이다. 캐시란?캐시는 자주 사용하는 데이터를 미리 저장해두고, 같은 요청이 다시 들어오면 원본(DB나 외부 API 등)을 거치지 않고 즉시 반환하는 저장소다. 내부적으로는 보통 Key-Value 구조의 Map과 유사하며, 응답 속도를 극적으로 단축시킬 수 있다.캐시 동작 방식서버는 먼저 캐시에서 데이터 조회 시도캐시에 데이터가 있으면 → 그대로 반환 (DB 접근 생략)캐시에 없다면 → ..

개발/성능개선 2025.05.17

[프로그래머스 / Java] 파괴되지 않은 건물

https://school.programmers.co.kr/learn/courses/30/lessons/92344 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 문제 개요이 문제는 N x M 크기의 게임 맵에서 건물들의 내구도를 관리하는 문제다. 각각의 칸에 건물이 존재하며, 적군은 직사각형 범위로 건물의 내구도를 감소시키는 공격을, 아군은 직사각형 범위로 내구도를 증가시키는 회복 스킬을 사용한다. 모든 공격과 회복이 끝난 후, 내구도가 1 이상인 건물의 개수를 계산하는 것이 목표다. 접근 방법이 문제는 누적합을 활용한 2차원 차이 배열 (2D Difference Array) 기법으로 해결해야 효율..

커넥션 풀 그거 크면 좋은 거 아니야? - 성능 개선(커넥션)

DB 연결은 생각보다 비용이 비싼 작업일반적으로 서버에서 DB를 사용할 때는 다음과 같은 단계를 거침DB연결 → 쿼리 실행 → 연결 해제 쿼리 자체는 빠르게 끝날 수 있지만, DB와의 연결을 새로 열고 닫는 과정은 생각보다 많은 비용이 발생한다. 예를 들어, 쿼리 실행 자체는 10ms밖에 걸리지 않아도 연결과 해제에 100ms가 들면 전체 요청에 110ms 이상이 소요된다. 트래픽이 많아질수록 이런 비효율은 성능에 치명적이다. 커넥션 풀(Connection Pool)이란?커넥션 풀은 이러한 비효율을 줄이기 위한 전략이다. 미리 DB와 연결된 커넥션을 생성해 놓고, 필요할 때 꺼내 쓰고 작업이 끝나면 다시 반환하는 방식이다.새로운 연결을 생성하는 오버헤드를 줄일 수 있음이미 연결된 커넥션을 재사용하므로 ..

개발/성능개선 2025.05.11

수직 확장, 수평 확장 뭐가 좋음? - 성능 개선(수직 확장, 수평 확장)

서비스를 운영하다 보면 사용자 수나 트래픽이 증가하면서 응답 시간이 점차 느려지는 문제가 발생할 수 있다.전체 요청 응답 시간이 길어지고, 일부 요청은 10초 이상 걸리기도 함간헐적으로 연결 시간 초과 오류가 발생서버 재시작 시 일시적으로 해결되지만 곧 같은 현상이 반복이러한 문제의 근본적인 원인은 TPS(Transaction Per Second), 즉 초당 처리 가능 요청 수를 초과하는 트래픽이 유입되기 때문이다. 모니터링 도구를 활용해 실행 시간을 추적하거나 모니터링 도구가 없다면 로그라도 남겨야 한다. 수직 확장 급한 불을 끌때는 수직확장을 고려해볼 필요가 있다. 수직 확장은 기존 서버의 성능 자체를 향상시키는 방식이다. 즉, 하나의 서버에 더 좋은 하드웨어(CPU, 메모리, 디스크 등)를 추가..

개발/성능개선 2025.05.10

[백준 / Java] 2668 숫자고르기

https://www.acmicpc.net/problem/2668 문제 개요 가로로 N개의 칸, 세로로 두 줄로 이루어진 표가 주어진다. 첫 번째 줄에는 1부터 N까지의 정수가 순서대로 들어 있으며, 두 번째 줄에는 각 칸마다 1 이상 N 이하의 정수가 하나씩 주어진다. 이때, 첫 번째 줄에서 일부 정수를 선택하되, 선택한 정수들의 집합과 각 정수 바로 아래 칸에 위치한 수들의 집합이 정확히 일치하도록 해야 한다. 접근 방법 이 문제는 "S와 T가 같아야 한다"는 조건이 정확히 '자기 자신으로 돌아오는 사이클'이라는 성질을 의미예를 들어 1 → 3 → 1이면 S={1,3}, T={3,1} → 동일하므로 조건 성립 코드 import java.io.*;import java.nio.Buffer;import ..

문제/백준 2025.05.10

[Java] try-finally보단 try-with-resources?

Java로 백엔드나 시스템 프로그래밍을 하다 보면, 파일, DB 커넥션, 네트워크 소켓 등 다양한 자원을 사용하게 됩니다. 이런 자원들은 사용 후 반드시 close()를 호출해서 반환해야 메모리 누수, 커넥션 풀 고갈 같은 심각한 문제를 방지할 수 있습니다. Java 7 이전 방식: try-finallyConnection conn = null;try { conn = dataSource.getConnection(); // 쿼리 실행 conn.close(); // 단순히 close() 호출} catch (SQLException e) { e.printStackTrace();}⚠️ 이 방식의 단점getConnection()에서 예외가 발생하면 conn은 null이고 close()도 호출되지..

cs/Java 2025.05.09

[백준 / Java] 11501 주식

문제https://www.acmicpc.net/problem/11501 문제 개요홍준이는 미래의 주식 가격을 정확히 예측할 수 있지만, 언제 어떤 방식으로 매매를 해야 최대 이익을 얻을지는 모른다.매일 다음 세 가지 행동 중 하나를 할 수 있다.주식을 하나 산다가지고 있는 주식을 원하는 만큼 판다아무것도 하지 않는다주어진 날 별 주식 가격을 보고, 최대 이익을 계산하는 문제이다. 접근 방법이 문제는 뒤에서부터 탐색하는 것이 핵심이다.미래의 주가를 알기 때문에, "앞으로 가장 비싼 날"을 기준으로 현재 주가를 판단할 수 있다.뒤에서부터 탐색하면서, 지금까지 본 주가 중 가장 높은 가격(max)을 기록한다.현재 주가가 max보다 작으면, 지금 매수한 후 max 가격에 판매한다고 가정해 이익을 계산한다.주가..

문제/백준 2025.04.30

[Java] System.in은 한 번만 선언해야 할까?

1. Java에서 데이터를 입력받을 때 사용하는 'System.in' 이게 뭘까? System.in은 "표준 입력 스트림"을 의미"표준 입력"이란?보통 키보드에서 사용자가 입력하는 데이터"스트림(Stream)"이란?데이터가 한 방향으로 흘러가는 통로를 의미즉, System.in은 키보드로 입력한 데이터를 '한 방향'으로 읽을 수 있게 하는 통로 🧠 쉽게 비유해보자System.in = 수도관에 흐르는 물줄기물줄기는 계속 한 방향으로 흐른다. (거슬러 올라갈 수 없음)한 번 지나간 물은 다시 읽을 수 없다.물줄기에 컵(BufferedReader, Scanner 등)을 대서 물(데이터)을 받아오는 것. 📚 System.in의 구조타입: InputStream데이터 단위: Byte(바이트)방향: 읽기 전용(F..

cs/Java 2025.04.29

[Java] JVM, JRE, JDK

🧩 1. JVM (Java Virtual Machine) — Java 실행의 핵심📌 JVM이란?JVM은 Java 프로그램이 실행되는 가상의 컴퓨터입니다.개발자가 작성한 .java 소스 파일은 javac 컴파일러를 통해 바이트코드(.class)로 변환되며, 이 바이트코드는 JVM이 실행합니다.✅ JVM의 역할바이트코드 실행 (실제 OS에서 동작하도록 변환)메모리 관리 (Heap, Stack, Method Area)Garbage Collection (자동 메모리 회수)예외 처리, 멀티스레딩 지원🧠 JVM 내부 구조[ JVM ] ├── Class Loader: .class 파일을 로드 ├── Execution Engine: 명령어 실행 (JIT 컴파일 포함) ├── Memory Area │ ├── ..

cs 2025.04.24

[백준 / Java] 15683 감시

문제https://www.acmicpc.net/problem/15683 문제 개요 이문제는 다양한 종류의 CCTV를 이용해 사무실 공간 내의 사각지대(감시되지 않는 영역)를 최소화하는 시뮬레이션 문제입니다.각 CCTV는 감시 가능한 방향이 정해져 있으며, 회전을 통해 방향을 설정할 수 있습니다. CCTV는 벽을 넘을 수 없지만 다른 CCTV는 통과할 수 있으며, 모든 CCTV의 방향을 적절히 정해 전체 사무실에서 감시되지 않는 빈 칸(0)의 개수를 최소화하는 것이 목표입니다. 접근 방법문제 분석 및 모델링사무실은 2차원 배열 map로 표현됩니다.CCTV는 종류(1~5번)에 따라 감시할 수 있는 방향이 다르며, 이에 따라 각각 가능한 방향 조합(monitor)을 미리 정의해 두었습니다.벽(6)은 감시를 막..