Java 6

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

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

개발/성능개선 2025.05.11

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

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

개발/성능개선 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] 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

문제https://school.programmers.co.kr/learn/courses/30/lessons/12905 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr  문제 개요주어진 2차원 배열 board에서 1과 0으로 이루어진 가장 큰 정사각형의 넓이를 계산하는 문제입니다. 접근 방법이 문제는 동적 계획법(Dynamic Programming, DP)을 사용하여 효율적으로 해결할 수 있습니다. 1. DP 배열 초기화:입력 배열과 같은 크기의 DP 배열을 생성합니다. DP 배열의 각 요소는 해당 위치에서 끝나는 가장 큰 정사각형의 한 변의 길이를 저장합니다.2. 기본 조건 설정:배열의 첫 번째 행과 첫..

[프로그래머스] 리코쳇 로봇 - Java

문제https://school.programmers.co.kr/learn/courses/30/lessons/169199 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr  문제 개요이 문제는 리코쳇 로봇이라는 보드게임을 기반으로 하고 있습니다. 게임의 목표는 격자 모양의 게임판에서 주어진 위치에 있는 로봇("R")을 특정 목표 위치("G")로 이동시키는 것입니다.규칙로봇은 한 번에 상, 하, 좌, 우 방향 중 하나로 움직이며 장애물("D")이나 게임판 가장자리에 닿기 전까지 멈추지 않습니다."R"에서 "G"로 도달하기 위해 필요한 최소 이동 횟수를 계산합니다.목표 지점에 도달할 수 없을 경우 -1을 반환합..