전체 글 (19) 썸네일형 리스트형 프록시 패턴(Proxy Pattern) 요약특정 객체에 대한 접근을 할 때, 대리자(proxy) 를 통해 접근 시킬 수 있도록 하는 패턴지연 로딩, 접근 제어, 로깅, 캐싱 등의 다양한 기능들을 실제 객체 접근 전에 포함시킬 수 있다. 도식클라이언트(사용자) 가 특정 명령을 사용한다고 할 때, 이 명령을 사용하기 전, 후 어떠한 추가 처리과정을 행하고 싶을 때 프록시 패턴을 적용할 수 있다. 만약, 특정 명령을 사용할 때 사용자는 몰라도 되는 캐싱을 넣는 다던가(플라이웨이트 패턴과 조합). 싱글턴으로 구현된 객체를 런타임 시에 바로 생성하지 않고 첫 참조 시에 생성, 명령 사용 전 후 로깅을 한다던가 하는 처리를 할 수 있다. 플라이웨이트 패턴(Flyweight pattern) 요약반복적으로 사용되는 객체를 재활용하여 메모리의 부담을 덜어주자. 도식무거운 객체를 자주, 많이 생성하다보면 메모리가 힘들어할 수 있다. 이때 메모리를 최적화 해줄 수 있는 패턴 중 하나이다. 자주 사용되는 객체를 인메모리에 키와 객체 형태로 캐싱해버리고 같은 키로 다음에 또 찾을 때는 이미 생성되어 캐싱된 객체를 반환하는 것이다.물론, 주의할 점이 보인다. 반복적으로 사용되지 않는 객체를 캐싱할 경우 (Map 등) 오히려 부담만 커질 수 있다는 점이다. 퍼사드 패턴(Facade Pattern) https://nirobase.me/posts/210112-facade-pattern/요약클라이언트에게 구체적인 부분을 숨기자. 클라이언트의 코드에서 의존성을 최소화 시켜보자. 도식 복잡한 서브 시스템들을 숨기고 클라이언트(사용자) 에게 퍼사드에 대한 의존만 시킬 수 있다.물론, 퍼사드가 적용된 부분에 서브 시스템들의 의존은 그대로 모두 포함되겠지만 한번 포장해서 제공함으로써,클라이언트가 포장된 api 부분만을 알아도 사용할 수 있게끔한다. 즉, 여러 서브 시스템들에 대한 이해도가 높지 않아도 된다는 것이다. (퍼사드 제공자가 그것을 의도적으로 감추었기 때문에) 또한, 퍼사드로 감싸면서 기존 기능을 사용하는데에 더 명확한 메서드를 제공할 수 있으며, 필요한 값만을 요구할 수 있다. 웹 서버와 웹 애플리케이션 서버 둘의 관계 웹 서버(Web Server)와 웹 애플리케이션 서버(Web Application Server) 의 관계에 대해 정리를 해보자.일단 이름이 긴 관계로 웹 애플리케이션 서버의 경우 WAS 로 줄여부르겠다.우선 가장 간단하게 구성할 수 있는 두가지 방법이다.1. 첫번째, 클라이언트가 자원을 요구하면 웹 애플리케이션 서버가 모두 처리한다. 처리 과정에 있어서 DB 접근이 필요한 로직이 있다면 이 또한 WAS 에서 역할을 맞아서 처리한다. 2. 두번째, 클라이언트가 자원을 요구하면, 정적 자원의 경우 Web Server가 처리해준다. 그 외로 정적 자원이 아닌 경우엔 WAS 를 통해 처리된다. Web Server웹 서버는 HTTP 를 기반으로 동작하며, 호스트 서버로의 요청에 대한 관리를 한다. 웹 .. Log4J2 취약점 CVE-2021-44228 Spring Boot 대응 2021-12-10 현재, Log4J2 라이브러리에 새로운 제로데이 보안 취약점이 발견되었다. 공격자가 원격으로 코드를 실행할 수 있으며 이는 log4j-core 에서 동작한다. Log4j version 2.15.0 에서 수정, 보완 되었다. (원천 차단은 아니겠지만서도) spring-boot-starter-logging 의존성에 포함된 log4j-to-slf4j 와 log4j-api 자체만으로는 악용될 수 없다. log4j-core 로그 메세지에 사용자의 입력을 로깅하고 있는 시스템에서 취약하다.대응 방법은 현재 log4j verison을 2.15.0 이상을 사용하는 것이며, 메이븐, 그래들 사용자의 경우 대처방법은 다음과 같다. Maven 사용자의 경우엔 프로퍼티를 pom.xml 에 추가한다. .. 해쉬 테이블과 충돌, 넌 누구야? 면접에서 자료구조에서 해쉬 테이블을 구현한다 가정했을 때 가장 중요하게 고려해야할 점은 무엇인지에 대한 질문을 받았다. 하지만, 기억에서 잊혀져버린 기본중의 기본을 답하지 못한 것을 반성하며 다시 한번 정리를 해놓으려고 한다.우선 해쉬 테이블은 (Key, Value) 쌍으로 이루어진 데이터를 저장하는 자료구조이다.해쉬 테이블은 빠른 검색을 장점으로 내세울 수 있는데, 이것은 내부적으로 버킷을 사용하기 때문이다.버킷은 데이터 쌍에서 Value 가 저장되는 부분을 말한다.그럼 Key 는? 이라고 생각할 수 있는데, key 는 해쉬 함수를 통해 index(hash) 로 변환되어 Value 를 가르키게 된다. 즉, Key 만 있다면 즉시 Value 값을 찾아갈 수 있게 되는 것.때문에 해쉬 테이블 구조의 검색은.. 프로젝트 멀티 모듈로 분해(1) 프로젝트를 완성을 위한 핵심적인 데이터베이스 구축을 끝마쳐가는 시점. 기존 시스템에선 관리자에게 문의를 넣어 관시스템 관리자가 정보를 수정하거나 등록할 수 있도록 설계했다. 하지만, 아무리 생각해봐도 사장님이 직접 등록하거나 수정해야하는 서비스도 필요할 것 같았고. 역시나 추가적으로 개발하게 되었다. 이 시점에서 찾아오는 문제가 하나 있었는데, 기존 백엔드 서비스는 정말 순수한 api 방식만을 쓰자! 라는 일종의 컨벤션을 가지고(물론 레이어 격리 설계 등..여러가지가 포함되지만) 있었다. 하지만 사장님 관리자 페이지 또한 이 방식을 그대로 이어나갈 것인가? 라는 질문에는 '글쎄?' 라는 생각이 들었다. 왜냐하면 Gorakulist 프로젝트의 경우 관리자 페이지에 필요한 서비스가 그다지 많지 않았고 SPA.. Intellij IDEA, Extract Method(ctrl+alt+m) 단축키가 안될 때 IntellijIDEA 의 다른 단축키는 되는데 Extract Method (ctrl+alt+m) 만 안되는 문제가 생겼다. 분명 어제까진 잘 되었는데...삽질해서 해결한 내용을 공유한다. 해결방법 : Geforce Experience 의 게임 내 오버레이 기능을 해제하거나 Geforce Experience 의 Ctrl+Alt+M 단축키를 교체한다.근래에 블렌더를 만지기 시작하면서 NVIDIA 스튜디오 드라이버로 교체해서 설치했는데 그게 화근이였다.NVIDIA 드라이버는 설치할 때 Geforce Experience 도 제공한다. 난 종종 사용할 일이 있어서 같이 설치했다. 문제는 Geforce Experience 의 게임 내 오버레이 기능에 있었다. 게임 내 오버레이 기능은 게임을 하는 중에 특정 단축키.. 이전 1 2 3 다음