가장 먼저 코드로 본 web 요청 인터페이스는 WebClient였고, 명확하고 직관적이여서 자주 썼다. 그런데 현재 프로젝트에서는 RestTemplate과 WebClient가 혼재되어있어서, 이 둘에 대해서 조금 알아볼까 한다. 뭐가 더 먼저 나왔을까 : RestTemplate WebClient vs RestTemplate으로 치면 스택오버플로우 글 하나가
SpringJava애스팩트 지향 스프링 소프트웨어 시스템의 기능이 애플리케이션의 여러 곳에 적용되어야하는 경우, 적용 부분마다 이 기능을 호출하는 일은 그다지 바람직하지 않다. 로깅, 보안 트랙잭션 관리 같은 기능은 대부분의 애플리케이션에서 공통적으로 나타나지만 그렇다고 해서 해당 애플리케이션 객체들이 적극적으로 처리해야할 기능은 아니다. 이런 기능을 가리켜 횡단 관심사 라
SpringJavaAOP규칙 1 생성자 대신 static Factory 메소드 사용을 고려하자. 일반적으로 인스턴스를 생성할 때는 생성자를 사용합니다. 다만 다른 사람들도 유용하게 사용할 하도록 하는 방법은 바로 public static 팩토리 메소드 를 두는 것입니다. public static 팩토리 메소드는 다음과 같이 해당 클래스의 인스턴스를 하나 생성하여 반환하는 방식입니
JavaSpringEffective javaclean codeLogger SLF4j 를 일단 기본 로깅 파사드로 생각하고 말해보자. Log4j 는 두가지 버전이 있다. Log4j 1, Log4j 2 Log4j 1을 보완하려고 나온 Logback 이 있다. 현재 우리 프로젝트 에서는 SLF4j 와 Logback의 조합을 사용하고 있다. Log4j 2 가 Logback 보다 성능이 더 낫고, Async Logger를 지
LoggerSpringSlf4jSpring-boot 를 intelliJ에서 사용하면, 설정 시에 Actuator 를 사용할 수 있습니다. actuator는 스프링 부트 어플리케이션의 상태를 편리하게 확인할 수 있는 도구이지만, 그렇기 때문에 실 서비스에서는 공격 등을 대비하여 막아두어야하는 도구이기도 합니다. 오늘은 간단하게 actuator 의 명령어와, 실 배포 대비 방법을 알아봅니다
SpringLibraryJava단위테스트는 뭔가요? 외부에 의존성이 없는 소프트웨어 단위의 테스트. 단위테스트는 빨라야한다. Working Efficiently with Legacy Code 의 저자는 테스트 실행시간이 0.1초가 넘어가면 단위테스트가 아니라고 말했다. BDD Behavior Driven Development - Given : 조건. ~가 주어졌을 때 - When: ~를
TestSpringJava상황 기존에 통합테스트로 돌고 있던 web client 테스트가 있다. 외부 API를 찔러보는 테스트인데, 이에 필요한 파라미터는 해당 web client 내부에서 가져오는 방식이다. 이때 무거운 통합테스트가 아니라, 직접 파라미터를 set해주는 가벼운 단위 테스트를 만들고 싶다. 기존 통합테스트 java @SpringBootTest public class
JavaSpringDTO DTO 는 클라이언트와 데이터를 교환하기 위해서 형식을 정해놓은 것이다. 예를 들어 화면에 상품과 그에 대한 리뷰가 같이 필요하다면, java @Data @Accessor public class Home { private Long id; private Product product; private Review review; } 와 같이 여러개를 감싸서
SpringAnnotationJava상황 어떤 값이 유효한지 검사를 해야 하는데, 해당 값은 entity나 DTO에서 받을 때 매번 유효성 검사를 해야한다. 이런 경우 대개 Validator를 사용해야하는데, Validator와 Annotation을 함께 사용하여 깔쌈하게 만드는 법을 알아본다. Annotation은 뭐더라 Annotation 어노테이션 주석이라는 뜻, 보통 생각하는 // /
JavaSpringAnnotation매번 일반 API 만 하다가 처음으로 Spring Batch 를 작성할 일이 생겼습니다. 이럴 때를 대비해서 저장해둔 jojoldu님의 Spring batch 가이드 를 참고해서, 기본적인 내용을 학습하고 Tasklet으로 실제 Batch를 작성했던 내용을 정리합니다. 배치 어플리케이션이란 간단하게 배치 어플리케이션이 무엇인지 정리해봅니다. 배치 는 일괄처
BatchSpringDataSpring Security 업무에서 사용하고 있으면서도, 쉽게 정리하기는 어려운 것 중 하나가 spring security 였는데요. 간단한 예제로 spring security를 적용할 기회가 있어 개념과 예제 코드를 정리해보려고 합니다. 설정은 다루지 않으니 이미 있는 코드를 보고 이해를 하시려는 분들께 추천합니다. Spring Security란? 자,
SecuritySpring제어의 역전 Spring 을 처음에 배울 때 마주하는 개념이 IoC 혹은 DI이다. 컴퓨터 용어는 전반적으로, 아는 사람 이 보면 기가 막힌 용어지만 한눈에 알아보기는 어렵게 만들어진 것 같다. 이 역시 대표적인 사례이다. johngrib님의 블로그를 복습차원에서 보다가 다시 이 개념을 마주했다. IoC를 가장 잘 설명한 것 토비의 스프링 3.1 의 구절이다
TermSpring서론 thumbnail nginx 와 spring boot, 그리고 spring boot 가 기본적으로 제공하는 embedded tomcat 의 조합은 이제는 너무 흔하게 쓰는 조합이다. tomcat 은 서블릿 컨테이너를 제공하고, spring boot는 스프링 컨테이너를 조작해서, 실제로는 서블릿 컨테이너와 소통을 하면서 애플리케이션을 제공한다. 흔히 스
TomcatErrorSpring새로운 팀에서, 일부 모듈은 spring, 일부 spring boot 로 구현되어 있다는 점을 발견했다. 친절한 온보딩 가이드 덕분에 얼기설기 spring + tomcat 조합으로 spring 모듈을 띄웠지만, 매번 boot 만 사용한 덕분에 spring + tomcat 조합을 😅 설치해본 적도 없다는 걸 깨닫고 이번 기회에 정리해본다. tomcat 알잖
SpringTomcatbanner 서론 스프링에서 로컬 캐시를 적용할 때 항상 나오는 그 이름. ehcache 코드로 먼저 접하다보니, 영문도 모르고 ehcache.xml 설정만 보고 아 자바 구현체 로컬캐시구나? 정도까지만 이해하곤 했다. 언제까지 그럴순없지. 오늘은 스프링 프로젝트에서 ehcache 를 적용하는 방법을 알아본다. cache? ehcache 공홈의 설명 을 인
SpringCache이 글은 토비의 스프링 3.1 Vol.2 스프링의 기술과 선택 : 3장 스프링 MVC 를 정리 & 참고하였습니다. 서론 스프링은 의도적으로 프레젠테이션 계층의 아키텍처 과, 비즈니스 서비스 계층 + 데이터 액세스 계층을 담은 컨텍스트를 분리해두었다. 각각을 - 서블릿 애플리케이션 컨텍스트 - 루트 애플리케이션 컨텍스트 라고 일컫는다. 이중 우리가 알아볼 S
Spring결론 tomcat 의 기본 spring session timout 은 30분이다. https://docs.openkm.com/kcenter/view/okm-6.4/configuring-tomcat-session-timeout.html scrn capture 그러니까 30분까지는 세션이 유지된다.... 내가 만약 직접 세션 / context를 날려주지 않으면
SpringTomcatSpring Cloud 가 하는 역할 분산시스템을 개발하는 것 자체가 어렵다. 네트워크 레이어~ 어플리케이션 레이어까지 다양한 복잡성이 있고, 코드를 클라우드 네이티브하게 만든다는 것 자체가 12 가지를 고려해야한다는 것을 의미한다. Spring Cloud는 클라우드에서 어플리케이션을 실행하는데 필요한 많은 서비스를 제공한다. spring cloud arc
SpringSpring Cloudinjects mocks 가 동작하지않아요 - ExtendWith - @Mock object - @InjectsMocks 위 처럼 했는데도 sut이 null 로 나와요 junit4 인 경우 @Test의 패키지가 import org.junit.jupiter.Test; junit5이면 @Test의 패키지가 import org.junit.jupiter.api.T
SpringMockito문제상황 같은 batch job A 가 있다. 이 batch job의 job parameters 중 하나가 time 인데, time 은 꼭 있어야하는 parameter 중 하나다. 하지만 코드 상에서는 time이 null 인 경우, 현재 시간을 넣도록 설정해두었다. 이 배치 job A 를 각각 jenkins 의 다른 item으로 설정해두었다. 하나는 wit
Spring그날이 왔다. 여러가지 api 콜을 합쳐서 다시 하나의 응답으로 만들어 내보내주는 코드를 보는데, 이해를 전혀 못하겠는 때가.. 그래서 이번주는 Reactive Programming 101이다. 처음에 구현체로 내가 마주한 건 바로 Project Reactor다. Project Reactor 는 Spring 프레임워크를 만든 pivotal에서 제공하는 오픈
SpringReactive Programming