일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- DDD
- Kafka
- querydsl
- JPA스터디
- Flutter
- 코테준비
- nestjs
- 카프카
- 플러터 공부
- 프로그래머스
- 자료구조공부
- 스프링
- JPA공부
- JPA
- 알고리즘공부
- 플러터 개발
- JPA예제
- 기술면접공부
- Axon framework
- K8S
- 스프링 공부
- 자바공부
- 스프링공부
- 스프링부트공부
- 스프링부트
- 코테공부
- nestjs스터디
- JPA 공부
- 기술공부
- nestjs공부
- Today
- Total
목록Develop (320)
DevBoi
initBinder는 컨트롤러 레벨에서 들어오는 요청에 다양한 설정이 가능하다 WebDataBinder를 파라미터로 받는 메소드를 사용하고, 특정 컨트롤러 단에서 바인딩이나, 검증 설정을 변경하고 싶을때 사용한다. @InitBinder(“Event”) 요로케 쓰면 Event객체에 대해서만 가능하다 추가로, webDataBinder를 통해서, 커스텀 에디터(특정 날짜필터)등록이 가능하다 만약에 , id에 대한 바인딩을 막고싶다면, 해당 과 같이 선언하게 되면 바인딩은 Null로 잡히게된다. 만약에 특정 객체에 대해서 검증에 대한 벨리데이션을 추가하고싶다면, support에 정의하고 validate에서 사용하면된다. 그리고 이닛바인더에서, event로 한정하고 벨리데이터를 추가하면된다. 벨리데이터를 빈으로 ..
다국어 처리에 대한 값을 지정할 수있다. 예를 들면, Session에 로케일 정보를 넣을수 있는데 이런식으로 사용할 수 있다. 스프링 5부터는 LocaleResolver이라는 인터페이스를 사용할 수 있다. 구현체로는 SessionLocaleResolver 가 있는데 이는 httpsession에 locale정보를 저장한다. 컨트롤러에서 직접 세션에 로케일 정보를 넣어줄 수도있지만 인터셉터로 이를 구현할 수 도있다. 단, 인터셉터로 이를 구현할때는, 파라미터로 언어값을 넘겨줘야한다. 이런식으로 인터셉터에 대한 빈 선언과, 인터셉터에 추가를 해준다. 메시지 파일은 이렇게 basenames라는 이름으로, message.messageSource로 하게되면, 기본 이름이 된다. 이는 다국어에 필요한 파일이 50개라..
prehandle, posthandle, afterCompletion Filter의 경우, DispatcherServlet이 실행되기 전에 수행되므로, Spring Context에 접근하기 어렵다. 하지만 인터셉터의 경우는, Dispatcher수행 이후에 실행이된다 따라서, Spring Context에 용이하게 접근할 수 있다. Spring 에서 작성위치는 servlet-context에 작성한다. Spring boot에서는 WebMvcConfigurerAdapter를 상속, 어떤 컨트롤러를 어떤 url에 매핑할지 정의 인터셉터는 handlerInterceptorAdapter를 상속 받아서 구현 (deprecated) -> HandlerInterceptor를 impl해서 사용 url 기반으로 제어한다. (..
log4j -> logback 성능이 더 좋고, 메모리도 적게 사용한다. Spring profile을 사용할 수 있다. springboot starter-web에 포함 log4j -> logback -> log4j2 로 진화했다. @SLF4J는 프레임워크 대부분에서 어떤 방식으로든 구현되는 표준화된 API를 제공한다. 이 API를 통해 코드 안바꾸고, 로깅 프레임워크를 변경할 수 있다. sysout은? PrintStream 클래스의 println()의 내부구조에 동기화처리, 쓰레드당 한개만 쓸수 있다. 그래서 쓰레드하나가 쓰고있으면, 다른 쓰레드에서 Block이 걸리게된다. -정리- log4j와 같은 다양한 로깅 프레임워크에 대한 추상화 역할을 하는 라이브러리이다. 컴파일 시 하나의 로깅 프레임워크와 바..
HandlerInterceptor는, 특정한 URI 호출을 가로채는 역할을 한다. 이를 이용하여, 기존 컨트롤러의 로직을 수정하지 않고도, 사전이나 사후 제어가 가능하다. preHandle 지정된 컨트롤러의 동작 이전에 수행할 동작 posthandle 지정된 컨트롤러의 동작 이후에 처리할 동작 Spring MVC의 dispatcher Servlet이 화면을 처리하기 전에 동작 afterCompletion DispatcherServlet이 화면을 처리한 후에 동작 Filter 와 Interceptor의 차이는 Dispathcher Servlet이 실행된 이전이냐, 후이다의 차이다. 추가로 Filter는 웹 애플리케이션 내 동작하기 때문에 Spring context에 접근하기 어렵다. 반면 인터셉터는 스프링..
@Exceptionhandler같은 경우는 @Controller, RestController가 적용된 Bean 내에서 발생하는 예외를 잡아서 하나의 메서드에서 처리해주는 기능을 한다. 해당 컨트롤러에서 Exception이 발생하면 아래 핸들러에서 호출되어 처리가 된다. @ExceptionHandler가 하나의 컨트롤러를 위한 것이면, ControllerAdvice는 전역 모든 클래스에 대한, 모든 컨트롤러를 위한 예외를 잡아주는 역할을 한다. (특정 경로를 설정할 수도 있긴하다.) 주로 예외 처리를 위해 이렇게 사용되기는 하지만, initBinder와 함께 바인딩/ 검증 설정, ModelAttribute와 함께 사용하여, 전반에 걸친 모델 정보 설정을 해주는 등의 목적으로 사용할 수도있다. 1. Targ..
이전에 공부한 ModelAttribute는, 전달 받은 값도탐색을 하지만, 세션에 있는 값도 탐색을 한다. 해당 과 같이 작성을 하면 Model 객체에 저장시 세션에 저장될 key을 저장한다. 즉 model에 test라는 값을 넣으면 자동으로 세션에 넣어준다. 해당 과 같이 사용하면, modelAttribute로 세션에 있는 값도 탐색을 한다. 처음 호출할때 오류가 발생할 수있지만 별도 ModelAttribute메서드를 선언하게 되면, 해당 메서드 별 인터셉트 같이 베이스로 돌기때문에 값을 넣어줄수있다. 만약에 모든 세션이 종료되면, SessionStatus 객체의 setComplete를 활용하여 지울 수 있다. @SessionAttributes는 해당 컨트롤러 내에서만 동작한다. 해당 컨트롤러 안에서 ..
정확히는 Spring 의 싱글톤 과 자바 static을 이용한 싱글톤 패턴의 차이라고 볼 수 있다. 여러 객체들이 하나의 인스턴스를 공유 한다는 개념은 같다. 하지만 해당 인스턴스의 생명주기에서는 큰 차이를 보인다. 1. 공유 기준 java static 의 공유 범위는 클래스 로더 기준 스프링 싱글톤의 공유 범위는 어플리케이션 컨텍스트 기준 클래스 로더기준이라고 하면, 톰캣 기준, webapp부분을 계층 적으로 관리한다. 만약에 webapp1, webapp2가 있다면, war파일 기준으로 다른 파일에 있는 클래스들끼리는 참조할 수 없다. 만약, 싱글 톤 기반으로 어플리케이션 컨텍스트 기준으로 공유하게 된다면 하나의 war파일 안에는 web.xml에 등록된 여러개의 servlet이 있을수있다. Spring..
커맨드 객체에 대한 기능에 대해서 알아야 한다. 서블릿의 생명주기 서블릿 컨테이너가 서블릿 인스턴스의 init()메서드를 호출하여, 초기화한다. 서블릿이 초기화된 다음부터 클라이언트가 요청을 처리할 수 있다. 각 요청은 별도 스레드로 처리하고, 이때 서블릿의 service메서드를 호출한다. 이안에서 HTTP 요청을 받고, 클라이언트로 보낼 HTTP응답을 만든다. get,post에 따라서 doGet이나 doPost등으로 위임하여 처리한다. 서블릿 컨테이너 판단에 따라 서블릿을 메모리에서 내려야할 시점에 destroy를 호출한다. 서블릿은 개발자가 Http요청 메시지를 편리하게 사용할 수 있도록 HTTP 요청 메시지를 파싱한다. 결과를 HttpServletRequest객체에 담아서 제공한다. HttpServ..
Jacoco를 사용하여, Test coverage를 확인하여보자 TestCoverage는 테스트 결과에 대한 성공 실패에 대한 결과를 레포트성으로 출력해주는 툴이라고 생각하면된다. 흔히 테스트 결과에 대한 내용을 문서화할수있다는 것이 테스트 코드 작성의 장점중 하나인데, 해당 장점을 극대화 시켜준다. 테스트 메소드에 대한 것들을 전체적으로 집합하여 보여준다. 방법은 간단하게 플러그인 설치 및 연동이라...그렇게 도움은 안되고 참고 정조만 하면 좋을듯 하다. 테스트코드 작성중 놓친 부분에 대한 부분을 report로 제공해준다. 콘솔로 실행하면, html이 하나 생성이 되는데,(build/jacocohtml) 해당 경로에 있는 html 레포트에서 우리가 작성한 테스트 메서드 내 테스트 케이스에 대해서 놓친게..