backend/Spring 16

[Spring] WebClient DataBufferLimitException WebFlux 오류 해결

글 작성시의 버전 Springboot : 2.3 버전 / Spring webflux : 5.2 버전 문제 WebClient를 통해 데이터를 가져오는데 데이터의 용량이 너무 커서 메모리 버퍼사이즈가 초과해서 DataBufferLimitException: Exceeded limit on max bytes to buffer : 262144 에러가 발생했습니다. 해결 application memory 이슈를 피하기 위해 Codecs는 버퍼 데이터 사이즈를 제한을 두었습니다. 기본값으로 256KB이고, 만약 이 값이 충분하지 않을 경우에는 기본 코덱 설정값을 바꿔줘야합니다. WebClient를 build시 codec 설정을 넣어주면 되는데요. 특정사이즈(예 10MB)로 하고 싶다면? 10 * 1024 * 1024..

backend/Spring 2022.04.10

[SpringData JPA] query method predicate keywords - null이 아닌 빈값을 제외하고 싶을때

보통은 컬럼값에 null이거나 null이 아닌 값을 쿼리하는 경우가 많은데 가끔 빈값으로 데이터를 채워 넣고 빈값("")이 아닌 데이터를 쿼리해서 리턴해야할 경우가 있다. 예) phoneNumber != "" Spring Data JPA에서 기본으로 제공하는 repository method명에는 isEmpty나 isBlank같은건 없다. 대신 method의 argument로 빈값("")을 넘겨 받도록 하고 Not 을 써주면 된다. repository.findByPhoneNumberNot("") https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repository-query-keywords Spring Data JPA - Referen..

backend/Spring 2021.10.14

[Junit5] SpringBoot 2에 JUnit5 적용

이 문서는 SpringBoot2.0 의 기본인 Junit4 대신에 Junit5를 적용해보면서 정리해봅니다. (기준 버전 junit 5.5.1, SpringBoot 2.0 버전) 공식 문서의 축약 버전입니다. 참고. SpringBoot 2.2.0 버전에서는 junit5 에서는 기본으로 변경됨. https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.2-Release-Notes#junit-5 JUnit5 ? JUnit 5은 기존버전과 다르게 3개의 sub-project로 이뤄져있다. JUnit 5 = JUnit Platform + JUnit Jupiter + JUnit Vintage JUnit Platform : JVM 기반 테스팅 프레임워크를 ..

backend/Spring 2019.08.22

[Junit5] SpringBoot2+Junit5 에서 TestEngine with ID 'junit-jupiter' failed to discover tests 오류 해결방법

Spring Boot 의 기본 junit4 대신 junit5(2019.7월 말 현재 최신버전인 junit 5.5.1 )를 쓰기 위해 설정하는 도중 만난 오류가 있어서 공유합니다. 개발 환경 IngelliJ IDEA gradle 5.0 Spring Boot 2.1.0.RELEASE Spring Boot 의 기본 junit4 대신 junit5(2019.7월 말 현재 최신버전인 junit 5.5.1 )를 쓰기 위해 설정하는 도중 만난 오류가 있어서 공유합니다. Spring Boot 의 기본 junit4 버전 제외. (build.gradle) testImplementation('org.springframework.boot:spring-boot-starter-test') { exclude module: 'juni..

backend/Spring 2019.07.26

[Spring] Lazy Initialization in Spring Boot 2.2 - 번역

Lazy Initialization in Spring Boot 2.2 https://spring.io/blog/2019/03/14/lazy-initialization-in-spring-boot-2-2 위의 글을 읽다가 조금만 번역해 보았습니다. 잘못된 부분이 있을 수 있으니 있다면 제보해주세요~ What Does it Mean to be Lazy? Spring Framework는 기본적으로 application context가 refresh될때 context의 모든 bean을 생성하고 dependency들을 inject(주입)된다. 대조적으로 bean definition이 느리게 초기화되도록 설정되면, 필요할 때까지는 dependency가 inject되지 않는다. Lazy Initialization 활성..

backend/Spring 2019.07.16

[SpringSecurity] Authentication(인증) 관련 클래스와 처리

Spring Security에서의 Authentication(인증)과 관련된 클래스와 내부 처리에 대해 알아보겠습니다. Spring Security에 대해 큰 흐름은 알지만, 처음부터 적용하는게 아니면 어떤 권한을 주고 권한 체크하는 로직만 추가하거나 수정하며 생각없이 쓰게 되는데, 어떤 흐름으로 되는지 전보다 좀 더 살펴볼 기회가 있었고 Spring Security의 각 클래스들이 어떤 일을 하는지에 대해 두서없이 소소하게 정리해봅니다. 이 글에서 Spring Security Version은 3.2.5 버전이 기준입니다. 1. 인증과 인가란 무엇인가? 인증 절차를 거친후 인가 절차를 진행! 1) 인증(Authentication) : 해당 사용자가 본인이 맞는지를 확인하는 절차. 2) 인가(Authori..

backend/Spring 2016.01.25

[Spring] @Autowired의 Before/After

Spring framework 2.5에 추가된 @Autowired annotation에 관한 글을 보고 정리. 알고있는 내용이기에~ 그냥 가볍게 Before 와 After code Before - @Autowired annotation이 없었을 때 applicationContext.xml에서 설정 EmpDao의 bean을 inject public class EmpManager { private EmpDao empDao; public EmpDao getEmpDao() { return empDao; } public void setEmpDao(EmpDao empDao) { this.empDao = empDao; } ... } 이랬던 코드가~ 바뀐다. After applicationContext.xml에서 설정..

backend/Spring 2009.04.29

[Spring] 스프링에서 VelocityTools 환경설정

스프링에서 벨로시티 뷰 템플릿 엔진을 사용하고 있는데 여기에 편리한 tools를 사용하기 위해서 필요한 설정을 기억하기 위해 기록합니다. VelocityTools는 벨로시티 템플릿에서 숫자나 날짜, url등의 포맷팅을 지원하는 툴이고, VelocityTools프로젝트에는 GenericTools, VelocityView, VelocityStruts 세개의 부분으로 나눠져 있습니다. 보통 GenericTools를 많이 쓸일이 많기 때문에~ 조금 정리해보면, Generic Tools에는, DateTool A tool for manipulating and formatting dates. MathTool A tool for performing floating point math. NumberTool A tool ..

backend/Spring 2008.03.20

[Spring] 스프링 MVC를 이용한 웹 요청 처리

스프링 MVC를 이용한 웹 요청 처리 구성요소 DispatcherServlet : 클라이언트의 요청을 전달받음. 컨트롤러에게 클라이언트의 요청을 전달하고 컨트롤러가 리턴한 결과 값을 view에 전달하여 알맞은 응답을 생성하도록 한다. HandlerMapping : 클라이언트의 요청 URL을 어떤 컨트롤러가 처리할 지를 결정 Controller : 클라이언트의 요청을 처리한 뒤, 그 결과를 DispatcherServlet에 알려줌. ModelAndView : 컨트롤러가 처리한 결과 정보 및 뷰 선택에 필요한 정보를 담는다. ViewResolver : 컨트롤러의 처리 결과를 생성할 뷰를 결정 View : 컨트롤러의 처리 결과 화면을 생성 캐릭터 인코딩 처리를 위한 필터 설정 요청 파라미터의 캐릭터 인코딩이 ..

backend/Spring 2008.03.13

[Spring] Bean과 BeanFactory의 후처리

빈의 후처리 스 프링은 빈의 생명주기에 끼어들어 빈의 설정을 재검토하거나 바꿀 수 있는 2개의 기회를 제공한다. 후처리는 어떤 이벤트가 발생한 후에 처리되는 것이라고 추측할 수 있다. 이벤트란 빈이 설정되거나 인스턴스화되는 것을 말한다. BeanPostProcessor 인터페이스는 빈이 생성되거나 묶인 후에 변경할 수 있는 두개의 기회를 제공 Interface BeanPostProcessor에서는 두개의 메소드를 제공한다 postProcessBeforeInitialization : 빈이 초기화(afterPropertiesSet(), 빈의 커스텀 init-method 호출)되기 직전에 호출 postProcessAfterInitialization : 빈이 초기화된 직후에 호출 빈 팩토리의 후처리 BeanFa..

backend/Spring 2008.02.12

[Spring] 자동 묶기(Autowire)

자동 묶기(Autowire) 자동 묶기의 네 종류 byName : 묶고자 하는 특성의 이름과 동일한 이름이나 ID를 가진 빈을 컨테이너에서 찾는다. 빈을 찾지 못하면 그 특성을 묶이지 않은 채로 남는다. byType : 묶 고자 하는 특성의 타입과 동일한 타입을 가진 빈을 컨테이너에서 찾는다. 빈을 찾지 못하면 그 특성은 묶이지 않은 채로 남고, 하나 이상의 빈을 찾게 되면 org.springframework.beans.factory.UnsatisfiedDependencyException을 던진다. Constructor : 묶고자 하는 빈의 생성자 중 하나의 파라미터와 맞는 하나 이상의 빈을 컨테이너에서 찾는다. 모호한 빈이나 생성자가 발견될 경우 org.springframework.beans.facto..

backend/Spring 2008.02.12

[Spring] 세터 주입(Setter Injection)의 대안

세터 주입(Setter Injection)의 대안 - 생성자 주입(Constructor Injection) 세터 주입은 빈 특성을 설정하고 묶을 수 있는 직관적인 방법이지만, 한 가지 단점은 변경될 수 있는 모든 특성이 세터 메소드를 통해서 사용할 수 있다고 가정하는 것에 있다. 하지만 빈이 이와 같은 방식으로 작동하기를 원하지 않을 때, 이런 유형의 빈이 인스턴스화될 때에는 어떤 특성도 설정될 수 없으며, 따라서 빈이 유효하지 않은 상태로 있을 가능성이 있다. 어떤 특성들은 빈이 생성될 때 한 번만 설정되고 그 이후에는 변경될 수 없도록 만들고 싶은 경우도 있다. 이는 세터를 통해 모든 특성을 공개하는 경우에는 곤란해진다. 대안은 일부 특성들은 생성자 를 통해 설정될 수 있도록 빈을 설계하는 것이다. ..

backend/Spring 2008.02.05

[Spring] 빈 묶기(Bean wiring)

빈 묶기(Bean wiring) XML로 묶기 : 다음을 이용해 스프링 컨테이너가 XML을 통한 빈 묶기를 지원한다. XmlBeanFactory ClassPathXmlApplicaionContext FileSystemXmlApplicationContext XmlWebApplicationContext 프로토타입과 싱글톤 비교 스프링의 모든 빈은 싱글톤. getBean()의 호출에 의해서든 묶기를 통해서든 간에, 컨테이너가 빈을 배포할 때에는 항상 그 빈의 완전히 동일한 인스턴스를 내줄 것이다. scope="singleton" scope="prototype" 프로토타입 빈을 정의하는 것이 유리할 때 프로토타입을 정의한다는 것은 실제 하나의 빈을 정의하는 것이 아닌, 청사진을 정의한다는 의미다. 그 다음엔 그..

backend/Spring 2008.02.05

[Spring] 스프링 컨테이너의 두 종류

스프링 컨테이너의 두 종류 컨테이너 안의 빈(Bean) 컨 테이너는 스프링 프레임워크의 핵심이다. 스프링 컨테이너는 제어 역행(IoC)을 사용해 애플리케이션을 구성하는 컴포넌트들을 관리한다. 여기에는 협력하는 컴포넌트간의 연관관계를 생성하는 것이 포함된다. 그렇게 함으로써 객체는 좀더 명확하게 이해할 수 있고, 재사용이 가능해지며, 단위테스트가 쉬워진다. 스프링 컨테이너의 두 종류 org .springframework.beans.factory.BeanFactory 인터페이스로 정의되는 빈 팩토리 기본적인 의존성 주입을 지원하는 가장 간단한 형태의 컨테이너 org .springframework.context.ApplicationContext 인터페이스로 정의되는 어플리케이션 컨텍스트. 프로퍼티 파일의 텍스..

backend/Spring 2008.02.05

[Spring] Spring 환경설정

/**************************************************************************스프링 공부하면서 정리한 내용을 그냥 올려봅니다. 혼자 놀다가 중간에 에러난 부분도 기억삼아 올려놓은것이어서 내용이 틀릴수도 있답니다. 이글은 "스프링 인 액션" 책을 열심히 보며 쓴 글입니다~ @author 버리 **************************************************************************/ 프로젝트 설정 1. Spring 다운로드(http://www.springframework.org/download)최신버젼을 다운로드하고, 사용할 JAR파일들을 dist 디렉토리에서 선택한 다음에 빌드 클래스 경로와 애플리케이션 ..

backend/Spring 2008.01.28

[Spring] Hitting the database

* Hitting the database 1) Spring의 DataAccessException java.sql.SQLException은 checked Exception입니다. 즉, 개발자가 try-catch로 잡아줘야 합니다. 이는 코드를 난잡하게 만들수 있습니다. 그리고 SQLException이 제공하는 예외는 Spring에 비해서 매우 종류가 많지 않습니다. DataAccessException은 SQLException이나 HibernateException등과 같이 특정 기술에 의존적인 예외를 던지지 않기때문에, 데이터 접근 인터페이스가 구현에 의존적인 예외가 아닌 스프링의 일반적인 DataAccessException을 던지게 함으로써, 특정한 퍼시스턴스 구현에 결합되는 일을 방지합니다. DataAc..

backend/Spring 2007.11.04