전체 글53 프록시 패턴 정리 📝 프록시란 무엇인가?프록시(Proxy)란 클라이언트가 서버에 직접 요청하지 않고, 중간에 대리 객체를 통해 간접적으로 요청을 수행하는 구조이다. 이때 중간의 대리 객체가 바로 '프록시'이다. 프록시는 클라이언트와 서버 사이에 위치하여 요청을 가로채거나, 부가적인 작업을 수행하거나, 요청을 제어할 수 있다. 일반적으로 클라이언트는 자신이 요청하는 대상이 실제 서버인지, 프록시인지를 알지 못한다. 따라서 프록시는 서버와 동일한 인터페이스를 구현해야 한다. 이로 인해 클라이언트는 프록시든 서버든 동일한 방식으로 호출할 수 있으며, 구조가 변경되어도 클라이언트 코드는 전혀 영향을 받지 않는다.🏗️ 프록시 패턴의 구조프록시 패턴의 기본 구조는 다음과 같다.Client: 요청을 보내는 주체이다.Proxy: 서.. Design Pattern 2025. 4. 1. 전략 패턴(Strategy Pattern) 정리 - 템플릿 메서드 패턴과의 차이점 템플릿 메서드 패턴은 부모 추상 클래스가 변경되면 그 하위 구현체인 자식 클래스들까지 영향을 받는다는 단점이 있다.즉, 자식 클래스들이 부모 추상 클래스에 의존하고 있다는 점이 문제이다.이러한 단점을 보완한 것이 바로 전략 패턴이다.📝 전략 패턴의 기본 구조아래 첫 번째 그림처럼 Context 클래스의 execute() 메서드에 변하지 않는 로직 부분을 구현하고, 변하는 부분은 Strategy라는 인터페이스의 call() 메서드를 통해 분리한다. 이로써 상속이 아닌 위임(composition)으로 문제를 해결한다. 이는 스프링의 의존성 관리 패턴과 동일하다.전략 패턴 동작 흐름아래 그림은 전략 패턴이 동작하는 전체 흐름을 시각화한 것이다.Context에 원하는 Strategy 구현체를 주입한다.클라이언.. Design Pattern 2025. 3. 27. 싱글톤 Context에서 전략 패턴 사용 시 동시성 문제 전략 패턴을 사용할 때 Context를 싱글톤으로 설계하면 동시성 문제가 발생할 수 있다. 특히 Context 내부에 Strategy를 필드로 가지고 있고, setStrategy()로 전략을 변경하는 구조일 경우 문제의 소지가 크다.💥 문제 예시@Slf4jpublic class Context { private Strategy strategy; public void setStrategy(Strategy strategy) { this.strategy = strategy; } public void execute() { log.info("Context.execute() 호출"); strategy.call(); // 문제 발생 가능 지점 }}이 C.. spring 2025. 3. 27. [디자인 패턴] 템플릿 메서드 패턴 📝 템플릿 메서드 패턴?템플릿 메서드 패턴은 객체지향 디자인 패턴 중 하나다.공통된 구조를 가진 코드를 부모 클래스에서 정의하고, 세부 구현은 자식 클래스에서 따로 처리하게 만드는 방식.이렇게 하면 동일한 구조의 껍데기를 반복해서 쓰지 않아도 돼서 코드가 깔끔해진다. 📘 예시 코드로 이해해보자예를 들어, 게임 캐릭터가 공격하는 과정을 생각해보자. 모든 캐릭터는 "준비 -> 공격 -> 마무리"라는 공통 흐름을 가지는데, 구체적인 공격 방식은 캐릭터마다 다르다. 이걸 템플릿 메서드 패턴으로 구현하면:// 부모 클래스abstract class Character { // 템플릿 메서드: 공통 흐름 정의 public void attack() { System.out.println("캐릭터.. Design Pattern 2025. 3. 24. [디자인 패턴] Builder 패턴 빌더 패턴이 생성자보다 좋은 이유객체를 만들 때 빌더 패턴이 왜 기존 생성자 방식보다 나은지 궁금하다.1. 기존 생성자 방식, 뭐가 문제일까일단 생성자 방식은 객체를 만들 때 필요한 값을 전부 한 번에 넘겨야 한다. 예를 들어, 유저 정보를 담는 클래스를 만들어보자:// 기존 생성자 방식public class User { private String name; private int age; private String email; private String phone; private String address; private boolean isActive; public User(String name, int age, String email, String phone, St.. Design Pattern 2025. 3. 23. [Java 기초] 내부클래스에 static을 붙이는 이유 Java 내부 클래스에 static을 붙이는 이유Java에서는 클래스 안에 또 다른 클래스를 정의할 수 있는데, 이를 내부 클래스 (Nested Class)라고 한다.그리고 내부 클래스 중에서 static 키워드를 붙일 수 있는 경우가 있는데,이번 글에서는 왜 내부 클래스에 static을 붙이는지를 쉽게 설명하겠다.✅ 내부 클래스란?클래스 내부에 정의된 클래스다. 예를 들어:public class Outer { class Inner { // 일반 내부 클래스 } static class StaticInner { // static 내부 클래스 }}✅ 그럼 static은 왜 붙일까?내부 클래스에 static을 붙이면 외부 클래스의 인스턴스 없이도 내부 클래스를 생.. Java 2025. 3. 22. ThreadLocal, 안 쓰면 큰일 나는 이유 (멀티스레드 동시성 문제 해결법) 자바에서 싱글톤 패턴과 static 변수를 사용할 때, 멀티스레드 환경에서는 동시성 문제가 발생할 수 있다. 특히 웹 애플리케이션에서 이런 문제가 생기면 예상치 못한 버그나 데이터 오염이 일어날 수도 있다.1. 동시성 문제란? (한 번 겪으면 밤 샌다…😨)멀티스레드 환경에서는 여러 개의 쓰레드가 동시에 실행되면서 같은 데이터를 접근하거나 수정할 수 있다. 그런데 만약 공유 자원을 안전하게 관리하지 않으면 한 쓰레드가 변경한 값이 다른 쓰레드에도 영향을 미쳐서 데이터가 꼬이는 문제가 생긴다.🛑 예제: 동시성 문제가 발생하는 코드아래 코드는 여러 사용자의 세션 정보를 저장하는 클래스. 싱글톤 패턴을 사용했는데, 여기서 동시성 문제가 발생할 수 있다. public class UserSessionMan.. spring 2025. 3. 20. 문자 vs 바이너리 & 이미지가 바이너리인 이유 📝 chatGPT와의 문답📙 이미지가 바이너리 파일인 이유와 표현 방식1. 이미지가 바이너리 파일인 이유파일에는 문자 파일과 바이너리 파일 두 가지가 있습니다. 문자 파일은 사람이 읽을 수 있는 텍스트로 구성된 파일이고, 바이너리 파일은 컴퓨터가 처리할 수 있는 이진 데이터(0과 1)로 구성된 파일입니다. 이미지 파일은 픽셀 데이터를 저장해야 하므로 효율적인 이진 데이터 형태로 저장됩니다.2. 바이너리로 이미지를 표현하는 방법이미지는 픽셀 단위로 색상, 밝기 등의 정보를 저장하며, 이를 숫자 데이터로 변환해 바이너리 파일로 표현합니다.이미지 표현 과정픽셀(Pixel) 기반 데이터이미지는 작은 점(Pixel)들로 이루어져 있습니다.각 픽셀의 색상은 RGB 값(Red, Green, Blue)으로 표현됩니.. etc 2025. 1. 13. 스프링 MVC 학습목록 (2) 📝 학습목록 & GPT에게 물어본 질문 목록📙 1. 스프링 타입 컨버터1) Converter컨버터는 org.springframework.convert.converter.Converterpublic interface Conveter { T convert(S source);}인터페이스를 구현하여 만든다.2) ConversionService스프링은 개발 컨버터를 모아두고 그것을 묶어서 편리하게 사용할 수 있는 기능을 준다그것이 ConversionService 인터페이스package org.springframework.core.convert;import java.util.List;public interface ConversionService { boolean canConvert(Class source.. spring 2025. 1. 8. 이펙티브 자바 : 용어 정리 & 이해불가 구문 해석 📚 1. 시그니처이펙티브 자바(Effective Java)에서 언급하는 시그니처(signature)는 주로 메서드 시그니처를 의미합니다. 메서드 시그니처는 자바에서 메서드를 식별하고 구분하는 데 사용되는 중요한 요소로, 다음과 같은 구성 요소로 이루어져 있습니다:메서드 이름(Method Name): 메서드의 이름 자체.매개변수 목록(Parameter List): 메서드가 받는 매개변수의 타입과 순서.메서드 시그니처에 포함되지 않는 요소:반환 타입(Return Type): 메서드가 반환하는 값의 타입은 시그니처에 포함되지 않습니다.예외(Exception): 메서드가 던질 수 있는 예외도 시그니처의 일부가 아닙니다.접근 제어자(Access Modifiers): public, private 등 접근 제어자는.. BOOK/JAVA 2024. 12. 29. 이펙티브 자바 : Item1. 생성자 대신 정적 팩터리 메서드를 고려하라 📝 Effective Java: 생성자 대신 정적 팩터리 메서드를 고려하라Effective Java의 저자 조슈아 블로크(Joshua Bloch)는 생성자 대신 정적 팩터리 메서드를 사용하는 것을 권장하며, 그 이유로 여러 가지 장점을 제시하고 있습니다. 아래에서 각 장점과 단점을 코드 예시와 함께 자세히 설명하겠습니다.정적 팩토리 메서드의 장점1. 이름을 가질 수 있다생성자는 클래스 이름을 가지므로, 여러 생성자가 있을 경우 구분이 어렵습니다. 반면, 정적 팩토리 메서드는 의미 있는 이름을 가질 수 있어 코드 가독성이 향상됩니다.예시:public class User { private String username; private String email; private User(Strin.. BOOK/JAVA 2024. 12. 29. JPA @MappedSuperClass 📝 @MappedSuperclass란?@MappedSuperclass는 JPA에서 공통 속성을 여러 엔티티 클래스에 재사용할 수 있게 해주는 슈퍼클래스를 정의할 때 사용되는 어노테이션입니다. 이 슈퍼클래스는 엔티티가 아니며, 따라서 데이터베이스에 별도의 테이블이 생성되지 않습니다. 대신, 이 슈퍼클래스를 상속받는 서브클래스 엔티티의 테이블에 슈퍼클래스의 필드가 포함됩니다.주요 포인트:엔티티가 아님: @MappedSuperclass로 선언된 클래스는 JPA 엔티티가 아니므로 데이터베이스에 별도의 테이블이 생성되지 않습니다.공통 속성 상속: 슈퍼클래스의 필드와 매핑 정보가 서브클래스 엔티티에 상속되어 테이블에 포함됩니다.단일 테이블 전략과의 차이: 다른 상속 매핑 전략과는 달리, 슈퍼클래스 자체는 별도의 .. JPA 2024. 12. 28. 이전 1 2 3 4 5 다음