728x90
반응형

🌐 프록시란 무엇인가요?

프록시(Proxy) 패턴은 다른 객체를 대신해 행동하는 객체를 말합니다.
가장 흔한 예로 우리가 자주 접하는 프록시 서버가 있습니다.
프록시는 클라이언트와 실제 서비스 객체 사이의 중계자 역할을 수행합니다.

프록시는 클라이언트가 직접 실제 객체에 접근하지 못하도록 중간에서 대리 처리하는 보호막입니다.


📘 프록시 패턴의 구조 (UML 클래스 다이어그램)

🔹 1. Service Interface

  • 서비스의 공통 인터페이스를 정의합니다.
  • 실제 객체와 프록시 객체가 모두 이 인터페이스를 구현합니다.

🔹 2. Proxy

  • 실제 서비스 객체에 대한 **참조(Reference)**를 갖습니다.
  • 클라이언트는 프록시를 통해 마치 진짜 서비스 객체처럼 사용할 수 있습니다.
  • 프록시는 흐름 제어나 접근 제어만 담당하며 결과를 조작하지는 않습니다.

🔹 3. Real Service

  • 실제로 비즈니스 로직을 처리하는 핵심 객체입니다.

🧠 활용 사례

종류설명
🔹 원격 프록시 (Remote Proxy) 원격 서버의 객체를 로컬에서 다루듯 사용할 수 있도록 해줌
🔹 가상 프록시 (Virtual Proxy) 무거운 객체의 생성을 지연시켜 성능 최적화
🔹 보호 프록시 (Protective Proxy) 접근 제어와 인증을 통해 보안 강화
🔹 스마트 프록시 (Smart Proxy) 접근 전후에 로깅, 캐싱 등 부가 기능 수행
 

✅ 장점 요약

  • 🔐 보안성 향상: 실제 객체에 대한 직접 접근을 차단
  • 🌐 원격 접근 지원: 원격 객체를 로컬처럼 다룰 수 있음
  • 성능 최적화: 무거운 객체를 캐싱 또는 지연 초기화 가능

⚠️ 단점도 존재합니다

  • 🐢 초기 응답 지연: lazy initialization 시 응답 속도 저하
  • 🧩 구조 복잡성 증가: 객체 구조가 복잡해질 수 있음

💡 실제 사용 예

  • 웹 프록시 서버
  • 스프링 AOP 프록시
  • 데이터베이스 연결 풀 (Connection Proxy)
  • 보안 접근 필터
728x90
반응형
728x90
반응형

✔️ 싱글톤이란?

싱글톤(Singleton) 패턴은 클래스의 인스턴스를 단 하나만 생성하도록 보장하는 디자인 패턴입니다.
객체가 계속해서 생성되는 것처럼 보여도, 실제로는 최초에 생성된 하나의 인스턴스만을 반환합니다.

💡 싱글톤 구현 예제 (Lazy Initialization 방식)

public class Singletone {

    private static Singletone singletone;

    // 생성자를 private으로 막아 외부에서 new로 생성 불가
    private Singletone() {}

    public static Singletone getInstance() {
        if (singletone == null) {
            singletone = new Singletone();
        }
        return singletone;
    }
}

📌 핵심 포인트:

  • private static 으로 클래스 내부에 단 하나의 인스턴스를 보관
  • 외부에서 new Singletone() 호출 불가능 (생성자 private)
  • getInstance() 메서드를 통해서만 인스턴스에 접근 가능
  • 필요할 때만 초기화하는 지연 초기화(Lazy Initialization) 방식 사용

⚠️ 싱글톤 패턴 사용 시 주의사항

  1. 객체를 2개 이상 생성하지 않도록 철저히 차단해야 함
    • 생성자를 private으로 감춰야 함
  2. 상태를 유지하지 않는 Stateless 설계가 중요
    • 필드를 통해 상태를 가지면 여러 사용자 간 충돌 위험
    • 예: 웹 애플리케이션에서 사용자별 데이터를 필드로 저장하면 큰일 남 😱
  3. Spring을 사용한다면 걱정할 필요 없음
    • 기본적으로 모든 Bean은 싱글톤 범위로 관리됨
    • @Component, @Service, @Repository 등 사용 시 자동 적용
  4. 공유되지 않는 데이터는 지역 변수 또는 ThreadLocal 사용
    • 예: 사용자 요청에 따른 데이터를 처리할 때는 필드 대신 메서드 파라미터 사용

🧠 결론

  • 싱글톤은 자원을 절약하고, 전역적으로 동일한 인스턴스를 공유할 수 있어 유용합니다.
  • 그러나 잘못 사용할 경우 상태 공유로 인한 오류 발생 가능성이 있으므로, Stateless 설계를 철저히 해야 합니다.
  • Spring에서는 기본이 싱글톤이지만, 상태 관리만 잘 하면 안전하게 사용 가능!
728x90
반응형

+ Recent posts