RequestContextHolder
·
Spring
- 스프링 프레임워크에서 HttpservletRequest에 접근하게 도와주는 구현체 - contoller, service, dao등등 전 구간에서 HttpServletRequest에 접근할 수 있도록 함 - static한 ThreadLocalMap을 만들어 놓고, servlet이 호출되면 key를 thread로 하여 제공받은 HttpServletRequest를 보관함 ThreadLocal - 하나의 쓰레드에서 읽고 쓸 수 있는 지역변수 thread-local을 관리하는 클래스 - servlet이 종료될 때, 해당 thread를 key로 갖는 HttpServletRequest를 map에서 제거함 - 호출된 servlet이 동일하면, 어느곳에서든 같은 HttpServletRequest를 꺼내서 쓸 수 있게..
Reactive Programming & Spring Webflux
·
Spring
Reactive Programming - 등장 배경 : 작은 모바일 디바이스, 모바일 멀티 코어 프로세스까지 너무나 다양한 환경에서 애플리케이션이 배포되며, 이에 따라 사용자는 더욱 더 빠른 처리를 기대함. - 데이터 스트림이나 변경에 대해 반응적으로 동작하는 프로그래밍 패러다임 - 함수형 프로그래밍 기법 사용 - 비동기적인 이벤트 중심의 개발을 효과적으로 처리 가능 - Project Reactor / ReactiveX / RxJava와 같은 스트림에서 사용 - non-blocking형식 ( 기존의 블록킹 형식의 리퀘스트는, 워커 스레드가 처리를 하는동안 서블릿 스레드가 응답을 기다려야했음. 반면 논블록킹 리퀘스트는 이벤트 핸들러와 콜백을 모든 요청에 포함하여, 스레드풀에 요청을 위임하고, 다음요청을 처..
토비의 스프링 3장
·
Spring
- 템플릿 : 바뀌는 성질이 다른 코드 중에서 변경이 거의 일어나지 않으며, 일정한 패턴을 유지되는 특성을 가진 부분을 자유롭게 변경되는 성질을 가진 부분으로부터 독립시켜 효과적으로 활용할 수 있도록 하는 방법 - 기존의 DAO 코드는 dao를 통해 커넥션 풀을 생성하고, 디비에 접근하여 쿼리를 실행하고, 커넥션 풀을 반환해주는 플로우. try-catch-finally 문을 통해 혹시 모를 예외상황에 대비하여 커넥션 풀을 반환하는 코드를 짤 경우, 여러개의 dao을 만들때마다 try-catch-finally를 제대로 사용하였는지 코드를 검수해야함. - 템플릿 메소드 패턴: 상속을 통해 기능을 확장해서 사용하는 패턴으로, 변하지 않는 부분은 슈퍼 클래스에 두고 변하는 부분은 추상메서드로 정의하여 서브 클래..
토비 스프링 2장. 테스트
·
Spring
2.1 UserDaoTest - 테스트란, 예상하고 의도했던 대로 코드가 정확히 동작하는지 확인해서 코드를 확신할 수 있게 해주는 작업 - 테스트를 통해 결함을 제거하는, 일명 디버깅 과정을 거치게 되고, 최종적으로 테스트가 성공하면 모든 결함이 제거됐다는 확신을 가질 수 있다. - 웹을 통한 테스트의 문제점 : 1. 특정 기능만을 테스트하고 싶은데(ex.DAO), DAO뿐만 아니라, 해당 코드를 웹에서 실행시키기 위해 서비스 클래스, 컨트롤러, JSP뷰 가지 다 만들어야 테스트가 가능함. 2. 테스트 하는 도중에 에러가 나면, 어디에서 에러가 났는지 전체 코드를 뒤져야 함. => 이를 해결하기 위해서는, 한가지 관심사에 집중할 수 있게 작은 단위로 코드를 짜야하고, 이 작은 단위의 코드에 대해서 Uni..
토비의 스프링 1장. 오브젝트와 의존관계
·
Spring
- 스프링은 객체지향적 - 스프링은 객체지향의 설계, 전략, 검증된 best practice를 프레임워크 형태로 손쉽게 적용할 수 있도록 함 1.1 초난감 DAO - 자바빈의 규약을 따르는 오브젝트 생성 package springbook.user.domain; public class User { String id; String name; String password; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Stri..
업무에 쓰인 Bean Validation 정리
·
Spring
javax.validation패키지에 포함된 어노테이션으로, api의 값을 입력받을때 유효성을 체크하기 위해 사용한다. * javax.validation은 SpringBoot프로젝트에 포함되어 있다고 한다. 메소드의 매개변수에 @Valid를 선언하여 해당 객체의 유효성을 검사할 수 있다. public ResponseMessage selectApples(@Valid RequestDTO requestDto) { } Request클래스의 필드에 적용한 Valid Annotation @NotBlank - null, "", " " 모두 허용하지 않는다. @Positive - 필드값이 0이 아닌 양수인지 확인한다.
ClassPathResource
·
Spring
프로젝트의 resource파일은 빌드 후 CLASS_PATH에 저장됨 여기서 CLASS_PATH란 JVM이 클래스를 찾는 기준이 되는 경로를 의미함 CLASS_PATH에 resource 디렉터리 하위의 경로 있음 스프링에서는 설정한 class_path경로를 손쉽게 찾아줄 수 있는 ClassPathResource 클래스를 제공한다. ClassPathResouyrce classPathResource = new ClassPathResource('resources폴더 하위의 특정 폴더 및 파일');​ 리소스에 대한 정보를 리턴하는 여러가지 메서드 존재 getFile() : 파일 객체 getFileName() : 파일 이름 getInputStream() : InputStream 객체 getPath() : 파일 경..
thymeleaf에서 스프링 환경변수 사용하기
·
Spring
위처럼 사용하면 스프링 환경변수 값을 화면단 thymeleaf내에서도 사용할 수 있다.
@JsonProperty
·
Spring
https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-annotations @JsonProperty는 변수를 원하는 key값으로 직렬화시 활용할 수 있는 annotation임 public class Sample{ @JsonProperty("customer_name") private String customerName; } 해당 도메인 객체를 ObjectMapper클래스를 이용하여 출력하면, customerName이 아닌, customer_name으로 키 값이 출력되는 것을 확인할 수 있음.
takoyummy
'Spring' 카테고리의 글 목록 (2 Page)