본문 바로가기

전체 글

(730)
Nginx 엔진엑스는 동시접속 처리에 특화된 웹 서버 프로그램이다. 아파치 보다 동작이 단순하고, 전달자 역할만 하기 때문에 동시접속 처리에 특화 되어있다. 웹 서버의 역할은? 1) 정적 컨텐츠 전달 웹서버의 역할은 HTML,Css,js이미지 와 같은 정보를 웹 브라우저에 전송하는 역할을 한다. 2)리버스 프록시 nginx.conf파일에서 location지시어를 사용하여 요청을 배분한다. 클라이언트는 가짜 서버에 요청하면, 프록시 서버가 배후 서버로 부터 데이터를 가져온다. 프록시 서버가 Nginx, 리버스 서버가 응용프로그램 서버를 의미한다. nginx.conf -Nginx기본동작이외, 파일 확장자의 MIME type , 가상 호스트, 리버스 프록시를 위한 설정 파일들이 포함 접속자수, 동작 프로세스 수 등 퍼포..
[Spring] HandlerInterceptor prehandle, posthandle, afterCompletion Filter의 경우, DispatcherServlet이 실행되기 전에 수행되므로, Spring Context에 접근하기 어렵다. 하지만 인터셉터의 경우는, Dispatcher수행 이후에 실행이된다 따라서, Spring Context에 용이하게 접근할 수 있다. Spring 에서 작성위치는 servlet-context에 작성한다. Spring boot에서는 WebMvcConfigurerAdapter를 상속, 어떤 컨트롤러를 어떤 url에 매핑할지 정의 인터셉터는 handlerInterceptorAdapter를 상속 받아서 구현 (deprecated) -> HandlerInterceptor를 impl해서 사용 url 기반으로 제어한다. (..
[Springboot] logging 전략 관련 주저리... log4j -> logback 성능이 더 좋고, 메모리도 적게 사용한다. Spring profile을 사용할 수 있다. springboot starter-web에 포함 log4j -> logback -> log4j2 로 진화했다. @SLF4J는 프레임워크 대부분에서 어떤 방식으로든 구현되는 표준화된 API를 제공한다. 이 API를 통해 코드 안바꾸고, 로깅 프레임워크를 변경할 수 있다. sysout은? PrintStream 클래스의 println()의 내부구조에 동기화처리, 쓰레드당 한개만 쓸수 있다. 그래서 쓰레드하나가 쓰고있으면, 다른 쓰레드에서 Block이 걸리게된다. -정리- log4j와 같은 다양한 로깅 프레임워크에 대한 추상화 역할을 하는 라이브러리이다. 컴파일 시 하나의 로깅 프레임워크와 바..
[Java] Hash 동작방식 해시, 쉽게말하면 많은 것들이 있지만 Hash 기반으로 동작하는 hashMap에 대해서 동작방식을 정리한다. Object클래스 기준, hashCode메서드에 대한 설명이다. 해당 메서드는 오브젝트의 해시코드 값을 리턴하고, 두 오브젝트가 equals를 통해 같다고 판별되면 hashcode또한 동일해야한다. equals메서드를 통해 다르다고 판별되더라도, hashcode가 꼭 달라야하는 것은 아니지만 hashCode가 다르면, 해시 테이블을 사용할때 성능상 이점이 나온다. HashMap은 기본적으로 bucket배열을 16으로 설정한다. bucket이란, HashTable에 데이터를 담는 공간을 의미한다. 이 용량은 설정해 놓은 LOAD_FACTOR기준에 다다르면 자동으로 2배씩 증가한다. 용량을 작게 설정..
[Spring] HandlerInterceptor HandlerInterceptor는, 특정한 URI 호출을 가로채는 역할을 한다. 이를 이용하여, 기존 컨트롤러의 로직을 수정하지 않고도, 사전이나 사후 제어가 가능하다. preHandle 지정된 컨트롤러의 동작 이전에 수행할 동작 posthandle 지정된 컨트롤러의 동작 이후에 처리할 동작 Spring MVC의 dispatcher Servlet이 화면을 처리하기 전에 동작 afterCompletion DispatcherServlet이 화면을 처리한 후에 동작 Filter 와 Interceptor의 차이는 Dispathcher Servlet이 실행된 이전이냐, 후이다의 차이다. 추가로 Filter는 웹 애플리케이션 내 동작하기 때문에 Spring context에 접근하기 어렵다. 반면 인터셉터는 스프링..
[Java] Shallow Copy Deep Copy 깊은 복사란 -데이터 자체를 통째로 복사한다. -복사된 두 객체는 완전히 독립적인 메모리를 차지한다. -value type의 객체들은 깊은 복사를 하게 된다. 얕은 복사란 최소한의 복사만 한다. 인스턴스가 메모리에 새로 생성되지 않는다. 값자체를 복사하는 것이 아니라 주소값을 복사하여 같은 메모리를 가리킨다. 얕은 복사 (주소값을 공유) 깊은 복사 (값을 공유하여, 신규 객체 생성) -cloneable인터페이스 구현, 복사 생성자, 복사 팩터리 등등 인스턴스를 new로 신규로 만들어서, 새로운 인스턴스를 탄생, 값을 복사하여 신규 인스턴스를 생성한다.
[Java] 쿠키와 세션 공통점 : 웹 통신 간 유지하려는 정보를 저장하기 위해 사용하는 것 Http프로토콜의 특징이자 약점을 보완하기 위해 사용된다. 1. Connectionless 프로토콜 (비 연결지향) 클라이언트가 서버에 요청을 했을때, 그 요청에 맞는 응답을 보낸후 연결을 끊는 처리 방식이다. 그 요청에 맞는 응답을 보낸 후 연결을 끊는 처리 방식이다. -Http 1.1 버전에서 연결을 유지하고, 재활용 하는 기능이 Default로 추가되었다. (keep-alive 값으로 변경가능) 2.Stateless 프로토콜 (상태정보 유지안함) 클라이언트의 상태 정보를 가지지 않는 서버 처리 방식이다. 클라이언트와 첫번째 통신에서 데이터를 주고받아도, 두번째 통신에서 이전 데이터를 유지하지 않는다. 3. 실제로 데이터 유지가 필요..
[Spring] ControllerAdvice @Exceptionhandler같은 경우는 @Controller, RestController가 적용된 Bean 내에서 발생하는 예외를 잡아서 하나의 메서드에서 처리해주는 기능을 한다. 해당 컨트롤러에서 Exception이 발생하면 아래 핸들러에서 호출되어 처리가 된다. @ExceptionHandler가 하나의 컨트롤러를 위한 것이면, ControllerAdvice는 전역 모든 클래스에 대한, 모든 컨트롤러를 위한 예외를 잡아주는 역할을 한다. (특정 경로를 설정할 수도 있긴하다.) 주로 예외 처리를 위해 이렇게 사용되기는 하지만, initBinder와 함께 바인딩/ 검증 설정, ModelAttribute와 함께 사용하여, 전반에 걸친 모델 정보 설정을 해주는 등의 목적으로 사용할 수도있다. 1. Targ..