cs 45

전략 패턴 - Java

전략 패턴이란? 전략 패턴이란 알고리즘을 각각 분리해서 클래스로 만들고, 그 알고리즘을 사용하는 쪽에서 필요할 때 선택해서 사용하는 방식이다. 쉽게 말해, 자주 바뀌는 기능을 하나의 클래스로 묶지 않고 외부로 분리해서 관리하는 설계 방식이다. 전략 패턴의 구조:1️⃣ Strategy (인터페이스 또는 추상 클래스)알고리즘의 공통 메서드 선언2️⃣ ConcreteStrategy (구체 전략)Strategy를 구현한 실제 알고리즘 클래스들3️⃣ Context (문맥, 전략을 사용하는 쪽)Strategy 객체를 받아서, 필요한 곳에서 전략 메서드를 호출 예시 코드// 1. Strategy 인터페이스public interface PaymentStrategy { void pay(int amount);}// ..

cs 2025.07.13

싱글톤 패턴 - Java

싱글톤 패턴이란?싱글톤(Singleton) 패턴은 하나의 클래스에 대해 오직 하나의 인스턴스만 가지도록 설계하는 패턴이다. 보통 DB 연결 모듈이나 설정 정보 관리 등, 인스턴스가 여러 개 생성될 경우 불필요하거나 문제가 될 때 자주 사용된다. 예를 들어 DB 연결을 매번 새로 생성하는 것은 리소스 낭비다. 그래서 한 번 생성한 DB 연결 인스턴스를 여러 모듈에서 공유해서 사용한다. 싱글톤 패턴으로 DB 연결하는 코드더보기import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;public class DBConnection { // 유일한 인스턴스 저장 private static DBConnecti..

cs 2025.07.11

[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] 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

[ODOQ] 정적 IP 주소 할당 방식, 동적 IP 주소 할당 방식

[One Day One Question]정적, 동적 IP 주소 할당 방식의 차이점에 대해서 설명해 주세요.1. 정적 IP 주소 할당 (Static IP Address)고정된 IP 주소를 수동으로 설정하여 특정 기기에 영구적으로 할당하는 방식입니다.변경되지 않으며, 네트워크 관리자나 사용자에 의해 직접 설정됩니다.특징:항상 동일한 IP 주소를 유지합니다.서버, CCTV, 원격 접속이 필요한 장치 등에 사용됩니다.설정이 복잡할 수 있으며, 관리가 필요합니다.보안 위험이 상대적으로 클 수 있습니다(고정된 IP가 공격 대상이 될 가능성 증가).일반적으로 추가 비용이 발생할 수 있습니다(ISP에서 별도로 제공). 2. 동적 IP 주소 할당 (Dynamic IP Address)네트워크에서 자동으로 할당되는 방식으로..

cs/ODOQ 2025.02.26

[ODOQ] NAT

[One Day One Question]NAT 기능에 대해서 설명해 주세요.NAT(Network Address Translation)는 사설 IP 주소를 공인 IP 주소로 변환하여 인터넷과 통신할 수 있도록 해주는 기술입니다. 1. 공인 IP 주소 부족 문제 해결IPv4 주소는 한정되어 있으며, 모든 장치에 공인 IP를 할당하기 어렵습니다.NAT를 사용하면 하나의 공인 IP를 여러 개의 사설 IP 주소와 공유하여 인터넷에 접속할 수 있습니다.특히 가정, 기업, ISP(인터넷 서비스 제공업체)에서 많이 사용됩니다. 2. 보안 강화내부 네트워크의 사설 IP 주소는 외부에서 직접 접근할 수 없습니다.이는 외부 공격자가 내부 장치의 IP를 직접 알 수 없게 만들어 보안을 강화합니다.방화벽과 함께 사용하면 네트워..

cs/ODOQ 2025.02.25

[ODOQ] CSRF 공격

[One Day One Question]CSRF공격에 대해서 설명해 주세요.  CSRF(Cross-Site Request Forgery, 사이트 간 요청 위조) 공격은 사용자가 신뢰하는 웹사이트를 대상으로, 공격자가 의도하지 않은 요청을 전송하도록 유도하는 보안 취약점입니다. 즉, 사용자의 권한을 악용하여 원치 않는 행동을 수행하게 만드는 공격 방식입니다. 1. CSRF 공격공격자는 사용자가 이미 로그인된 웹사이트에서 특정 요청을 실행하도록 조작합니다.예를 들어, 사용자가 은행 웹사이트에 로그인한 상태에서 공격자가 만든 악성 링크를 클릭하면, 공격자가 설정한 계좌로 돈을 이체하는 요청이 사용자 모르게 실행될 수 있습니다.이 공격은 사용자의 인증 정보(세션 쿠키, 토큰 등) 를 악용하여 실행됩니다.  2...

cs/ODOQ 2025.02.21

[ODOQ] 캐시 스탬피드(Cache Stampede)

[One Day One Question]캐시 스탬피드(Cache Stampede)에 대해서 설명해 주세요.  캐시 스탬피드(Cache Stampede)는 다수의 요청이 동시에 캐시 갱신을 유발하여 서버 부하가 급격히 증가하는 현상을 말합니다. 캐시 만료 시점에 다수의 클라이언트가 동일한 데이터를 동시에 요청하면, 모든 요청이 캐시를 우회하여 데이터베이스(DB) 또는 백엔드 서버로 몰리게 됩니다. 이는 서버 과부하로 이어져 성능 저하, 서비스 지연, 심지어 서버 다운으로 연결될 수 있습니다.캐시 스탬피드 발생 과정캐시가 만료되어 클라이언트가 캐시에서 데이터를 가져오지 못함.동일한 데이터에 대한 요청이 다수의 클라이언트로부터 동시에 발생.모든 요청이 데이터베이스나 원본 서버로 전달되며 부하가 급증.서버 응답..

cs/ODOQ 2025.01.23

[ODOQ] 지연로딩, 즉시로딩

[One Day One Question]지연로딩과 즉시로딩에 대해서 설명해 주세요. 지연 로딩(Lazy Loading)과 즉시 로딩(Eager Loading)은 주로 데이터베이스나 웹 애플리케이션에서 데이터를 로드하는 방법을 설명할 때 사용되는 용어입니다. 1. 지연 로딩(Lazy Loading)개념:필요할 때 데이터를 로드하는 방식.객체를 처음 사용할 때(혹은 요청 시점)에 데이터를 가져옵니다.특징:초기 로드 시간이 짧아집니다. (필요한 데이터만 불러오기 때문)불필요한 데이터 로드를 방지할 수 있어 메모리 효율적.하지만, 데이터를 요청하는 시점마다 추가적인 쿼리가 실행될 수 있습니다.예시:웹페이지에서 이미지를 스크롤로 보여줄 때, 스크롤 위치에 따라 이미지를 로드하는 방식.관계형 데이터베이스에서, 연관..

cs/ODOQ 2025.01.19