본문 바로가기
What I Learned

[NBCAMP | Spring 6기] 62일차 TIL + 프록시 패턴

by ㅇ달빛천사ㅇ 2024. 9. 24.
728x90

👈  이전글

[NBCAMP | Spring 6기] 61일차 TIL + 옵저버 패턴, 빌더 패턴


KDT 실무형 스프링 백엔드 엔지니어 양성과정 6기

 


🗝 오늘의 학습 키워드 : 디자인 패턴 프록시 패턴



📖 공부한 내용 본인의 언어로 정리하기

프록시 패턴(Proxy Pattern)

대리자, 대변인

 


특정 객체의 대리자나 대변인 역할을 하는 프록시 객체를 제공하는 디자인 패턴


장점

  • 접근 제어
    • 클라이언트가 실제 객체에 직접 접근하지 못하도록 제어
    • 접근 관리 및 권한 검사
  • 지연 초기화 
    • 실제 객체의 생성 및 초기화를 지연시키는 데 사용
    • 필요한 순간에만 생성 및 초기화하여 성능 최적화
  • 캐싱
    • 결과를 캐싱
    • 중복 계산을 피하고 성능 향상
  • 유효성 검사
    • 실제 객체에 접근하기 전에 데이터의 유효성 검사를 통해 검증
  • 원격 엑세스
    • 원격 프록시를 사용하여 다른 시스템에서 실행 중인 객체에 접근 가능
    • 분산 시스템에서 객체 간 통신 용이


단점

  • 복잡성 증가
    • 추가적인 객체 도입으로 인한 코드 복잡성 증가
  • 성능 저하
    • 프록시 객체 접근 시, 추가적인 오버헤드 발생 가능, 일부 성능 저하 발생 가능
  • 디자인 복잡성
    • 프록시 패턴 오용 시, 코드를 과도하게 복잡하게 만들 수 있음

구조

  • Subject
    • Proxy와 RealSubject가 모두 구현하는 인터페이스
      • Subject에 대한 구현체
        • RealSubject : 클라이언트가 직접 상호작용하는 실제 객체
        • Proxy
    • 클라이언트가 프록시와 실제 대상을 동일하게 다룰 수 있도록 정의 
    • 클라이언트가 접근할 객체
  • Proxy
    • RealSubject를 감싸며 실제 작업을 수행하는 주체
    • 클라이언트와 RealSubject 사이에 위치한 중간 객체
    • RealSubject와 같은 이름의 메서드 구현(인터페이스 사용)
    • RealSubject에 대한 참조 변수를 가짐
    • RealSubject와 같은 이름의 메서드 호출 > 그 값을 클라이언트에게 반환
    • 클라이언트의 요청을 처리하기 전이나 후에 추가적인 작업을 수행할 수 있다.

정리

제어 흐름을 조정하기 위해 중간에 계층(Proxy)을 도입하여

여러 기능을 추가하거나 제어하면서

실제 서비스를 대신 수행하는 패턴

 

    • 개방 폐쇄 원칙(OCP)
    • 의존성 역전 원칙(DIP)
      준수
Proxy 배우면서 생각난 하와이안 무스비!

📗 참고 자료


오늘의 회고

부모님댁에서 공부를 하니 너무 편하다^^
서울에서와 같은 일과였지만 같이 식사하고 이야기 나누고 살을 부대낄 가족이 있다는 것이 얼마나 감사한 일인지 새삼스럽게 또 느낀하루였다.
이제 날도 많이 쌀쌀해져서 여름같던 추석이 지나고 진짜 가을이 온 것 같다.
푸른 하늘에 양때구름이 정말 예쁘게 떠 있었다.
근데 저녁에 창문 열고 공부하다가 감기에 걸린 것 같다.
콧물이 가시질 않는다.ㅜㅜ
카카오 로그인에서 인가코드 가져오는 것 때문에 HTML파일을 사용했었는데
프론트엔드 구현 없이 사용하는 방법을 찾았다.
postman에서 Mapping한 URL로 Get요청을 보내면
https://kauth.kakao.com/oauth/authorize?client_id={REST_API_KEY입력}&redirect_uri=http://localhost:8080/app/login/kakao&response_type=code
아래 URL로 Redirect해서 응답을 받으면 body에 continueURL이 뜨는데
그 링크를 클릭하면 따로 HTML 파일을 만들지 않아도 로그인 페이지로 연결이 되어서
로그인이 가능했다.
그래서 UserController와 KakaoService 클래스의 코드만 살짝 수정해서 github에 올렸다.
이제 테스트 코드를 작성해야하는데
Push할 때, merge하는 과정에서 내가 작성했던 코드들이 다 날아가버리는 바람에
처음부터 테스트 코드를 작성해야했다.ㅜㅜ
local에서도 commit을 잘해야겠다고 다짐했다.
UserService 테스트 코드작성은 문제가 없는데
UserController 테스트 코드를 작성하는데서 막혔다.
튜터님께서 잘 안된다고 말씀은 드려서 뒤에 필요하면 따로 시간을 가지리고 했다.
계속 Invalid Token 에러가 떠서 ChatGPT에게도 물어보았는데 결국 해결하지 못했다.
내일은 그냥 작성할 수 있는 부분부터 테스트 코드를 빨리 마무리 지어야겠다.
다른 팀원분들은 기능들을 많이 구현하셔서 인증, 인가랑 카카오 로그인만 강의보고 따라 구현한 내가 쫄린감이 조금 있었는데
테스트 코드를 제대로 익히는 시간이라 생각하고 이 부분을 마스터 하기위해 노력해야겠다.



💭 내일 학습할 것은 무엇인지

  • 테스트 코드 작성 끝내기
  • API 수정





👉  다음글







 

728x90