264. 프록시 (Proxy) - 대리 객체 접근 제어 캐싱 지연 로딩 보안 구조 패턴 GoF
핵심 인사이트: (보안과 지연 로딩의 절대 문지기) 내가 10GB짜리 초고화질 사진(무거운 객체)을 보여주는 앱을 짰다. 유저가 화면을 켤 때마다 이 10GB짜리를 미리 다 로딩해 놓으려니, 메모리가 터져서 화면이 1분 동안 하얗게 멈췄다. 사장님이 극대노했다. "야 ㅆㅂ!! 유저가 사진을 클릭하지도 않았는데 왜 미리 10GB짜리를 메모리에 올려서 폰을 터뜨려!! 가짜 사진(가짜 객체 Proxy) 껍데기를 먼저 0.01초 만에 화면에 띄워놔!! 유저는 껍데기만 보고 사진이 로딩된 줄 착각하잖아!! 그러다가 유저가 진짜 그 사진을 '더블클릭(호출)'하는 그 찰나의 순간에!! 그 껍데기(프록시) 뒤에서 진짜 사진(원본 객체)을 디스크에서 쓱 긁어와서 보여줘(지연 로딩)!! 게다가 이 프록시(대리인) 놈한테 문지기 권한까지 줘서, VIP 회원이 아니면 아예 진짜 사진 근처에도 못 가게 보안(방어막) 처리까지 해버려!!" 진짜 객체 대신 얻어맞고, 권한을 검사하며, 메모리를 아껴주는 충직한 문지기 비서, 프록시(Proxy)다.
Ⅰ. 원본 객체(Real Subject) 직접 호출의 부담
- 어떤 객체(예: 데이터베이스 조회 객체, 초고화질 이미지 객체)들은 켜는 데만 엄청난 CPU와 RAM을 갉아먹습니다.
- 이걸 프로그램이 시작되자마자 모조리 다
new해서 메모리에 올려놓으면(Eager Loading) 성능이 개박살 납니다. - 또한, 아무나 DB 조회 객체에 다이렉트로 접속해서 민감한 정보를 열어보게 두면 해킹을 당합니다.
Ⅱ. 프록시 (Proxy) 패턴의 개념 🌟
- Proxy (대리인, 비서)
- 개념: GoF 구조 패턴 중 하나로, 어떤 무겁거나 보안이 필요한 진짜 객체(Real Subject)를 클라이언트가 직접 만지지 못하도록, 진짜 객체와 똑같은 껍데기(인터페이스)를 뒤집어쓴 '가짜 대리인 객체(Proxy)'를 앞에 세워두고, 이 대리인이 접근을 통제하거나(보안) 필요할 때만 진짜를 부르게(지연 로딩) 만드는 방어 및 지연 아키텍처 패턴입니다.
Ⅲ. 껍데기가 부리는 3대 마법 (프록시의 종류) 🌟 핵심 기출 🌟
클라이언트는 자기가 진짜 객체랑 대화하는 줄 알지만, 사실 가짜 대리인과 노가리를 까는 중입니다.
1. 가상 프록시 (Virtual Proxy) - "게으름의 미학, 지연 로딩(Lazy Loading)" 🌟
- 가장 많이 쓰이는 무기입니다.
- 앱을 켜면 일단 '가짜 비서(Proxy)' 객체만 가볍게 메모리에 올립니다.
- 유저가 스크롤을 내려서 드디어 이미지가 진짜 화면에 보여야 할 때! 비서가 뒤로 쓱 돌아서 "어, 진짜 필요하네?" 하며 그때서야 무거운 진짜 이미지 객체를
new해서 띄워줍니다. 화면 로딩 속도를 빛으로 만들어버리는 기술입니다.
2. 보호 프록시 (Protection Proxy) - "철통 문지기"
- DB 접근 껍데기를 쓰고 있는 비서입니다.
- 해커가 와서
데이터삭제()함수를 호출합니다. - 진짜 DB가 삭제되기 전에, 비서(Proxy)가 중간에서 낚아챕니다. "잠깐! 너 권한 검사해보니 평민이네? 넌 벤(Ban)이야!" 라며 진짜 객체에 도달하기도 전에 암살시켜버립니다 (접근 제어 보안).
3. 캐싱 프록시 (Caching Proxy) - "기억력이 좋은 비서"
- 유저가 날씨 정보를 요청합니다. 프록시가 진짜 기상청 서버(원본 객체)에 다녀와서 온도를 알려줍니다.
- 1초 뒤에 똑같은 요청이 옵니다. 프록시는 "어? 방금 기상청 갔다 왔는데 또 가기 귀찮게!" 라며 진짜 객체를 부르지 않고, 자기가 주머니(메모리)에 적어뒀던 방금 전 온도를 1초 만에 툭 던져줍니다 (캐싱 최적화).
Ⅳ. 구현의 핵심 뼈대
- 핵심 룰: 프록시(비서) 클래스는 진짜 객체(회장님) 클래스와 **반드시 똑같은 인터페이스(껍데기 조약)**를 상속받아야 합니다!
- 그래야 클라이언트(사용자) 입장에선 비서인지 회장님인지 전혀 눈치채지 못하고 똑같은
showImage()함수를 때리며 편하게 속아 넘어갈 수 있습니다.
📢 섹션 요약 비유: 프록시(Proxy) 패턴은 거물급 아이돌 스타(진짜 무거운 객체) 앞을 가로막고 있는 **'만능 매니저(대리인 객체)'**입니다. 옛날엔 동네 꼬마, 사생팬, 진짜 방송국 피디(클라이언트들)가 모두 다이렉트로 아이돌(진짜 객체)을 찾아가 옷깃을 잡아끌었습니다. 아이돌은 쉴 틈이 없어 과로사합니다(메모리 폭발, 보안 붕괴). 이를 막기 위해 소속사가 매니저(프록시)를 앞에 세웁니다. 이 매니저는 겉보기엔 아이돌의 명찰과 똑같은 옷(인터페이스)을 입고 있습니다. 1. 사생팬이 사인을 요구하면 매니저가 컷(보안 프록시 접근 통제) 해버립니다. 2. 잡지사가 예전 사진을 달라고 하면, 굳이 자고 있는 아이돌을 깨우지 않고 매니저가 자기 가방에 있던 예전 사진을 대신 던져줍니다(캐싱 프록시). 3. 진짜 방송국 피디가 와서 "생방송 무대 나가야 해!"라고 강력하게 요구하는 그 마지막 결정적 순간(함수 호출)에만! 매니저가 조용히 뒤로 가서 아이돌(Real Subject)을 깨워 무대 위로 올려보냅니다(지연 로딩). 진짜 핵심 자산이 피곤하게 닳거나 털리는 것을 막고, 문 앞의 비서가 궂은일을 싹 다 짬처리해 시스템을 극도로 최적화하는 방어의 꽃입니다.