일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 코테준비
- querydsl
- 스프링 공부
- Axon framework
- 카프카
- nestjs공부
- 기술공부
- 스프링부트
- 스프링공부
- nestjs
- 스프링부트공부
- DDD
- Kafka
- nestjs스터디
- 스프링
- JPA예제
- 프로그래머스
- K8S
- Flutter
- JPA스터디
- 알고리즘공부
- 코테공부
- 자료구조공부
- 플러터 개발
- JPA 공부
- 자바공부
- 플러터 공부
- JPA
- 기술면접공부
- JPA공부
- Today
- Total
목록Develop/[Spring] (96)
DevBoi
인터셉터를 오랜만에 구현해볼겸, 로깅 및 로그인 여부 체크 용도의 인터셉터 두개를 구현해보자 단순한 LoggingInterceptor를 생성 하여 빈으로 등록하고, WebConfig를 별도로 생성 및 빈으로 등록하여, 해당 인터셉터를 등록해준다. 우선 간단하게 사용자가 요청하는 URI과 Ip 정보를 로그로 찍게 한다. 단순히 로깅용 인터셉터만 생성하는 것이 아닌, 별도로 로그인 여부를 판별하는 인터셉터도 생성해보자 우선 Redis나 스프링 시큐리티를 사용하기 전 이니까, 로그인 성공시에 쿠키에만 해당 쿠키값을 저장 해놓고 해당 쿠키값을 체크해서 로깅을 해보자 로그인 성공 시에 단순히 쿠키에 값을 넣고, 인터셉터로 쿠키 값의 이름을 체크해서, 값 이있는지 있다면, 그 값이 Y인지를 체크하는 인터셉터를 생성..
간단하고도 하고 내가 싫어하는 프론트 단 무료 공개 코드로 적용 간단하게 index html을 생성 플리마켓에서 운용하는 컴퓨터 한대가 아니라 여러대에서 접속해서 대기표를 받을 수 있게하려면? 대기표 받는 페이지를 여러 곳에서 접속한다면? 어플리케이션 기본 모니터링 설정도 하는게 조음 왜냐? 여러대의 트래픽이 몰릴 수 있기 때문에! Spring boot actuator를 적용해보자! implementation 'org.springframework.boot:spring-boot-starter-actuator' management: endpoints: web: base-path: /management exposure: include: - "*" localhost:8080/management 를 입력하면, 이..
1. Gradle vs Maven 빌드 관리 도구? (프로젝트 생성, 테스트 빌드,배포, 외부라이브러리 다운로드) 우선 빌드 자동화 도구는, 프로젝트 내에서 작성한 Java코드와 프로젝트 내에 필요한 각종 xml, properties, jar파일들을 JVM이나 WAS가 인식할 수 있도로고 패키징 해주는 과정을 빌드 자동화 도구라고 할 수 있다. -프로젝트 생성, 테스트 빌드, 배포 등의 작업을 위한 전용 프로그램이라고 할 수 있다. -애플리케이션 개발을 하면서, 일반적으로 개발에 필요한 외부 라이브러리를 다운로드하고 해당 라이브러리를 사용하여 개발해야하는 상황이 많다. 이때 각 라이브러리 들을 번거롭게 모두 다운받을 필요없이, 빌드도구 설정파일에 필요한 라이브러리 종류와 버전들 종속성 정보를 명시하여, ..
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는 해당 컨트롤러 내에서만 동작한다. 해당 컨트롤러 안에서 ..