¯\_(ツ)_/¯ 님의 글 52
Testcontainers로 Spring Boot 통합 테스트에 진짜 DB와 Kafka 띄우기 - @ServiceConnection, 컨테이너 재사용, CI 설정
통합 테스트를 H2 인메모리 DB로 돌려놓고 운영은 PostgreSQL로 하는 프로젝트를 자주 본다. 나도 예전엔 그렇게 했다. 빠르고 편하니까. 문제는 방언(dialect) 차이에서 터진다. H2…
린트(lint)란 무엇인가 - 정적 분석 도구의 유래와 포매터와의 차이
새 프로젝트를 세팅할 때 "린트도 같이 걸어주세요"라는 요청을 받는 일이 많다. 그런데 막상 물어보면 린트가 컴파일 에러를 잡는 건지, 코드 정렬을 해주는 건지 헷갈려 하는 경우가 적지 않다. 빌드…
Spring Boot @Async 스레드 폭증과 큐 적체 잡기: ThreadPoolTaskExecutor 설정과 MDC 전파
@Async 하나 붙였다가 운영에서 스레드가 이상하게 늘거나 응답이 밀리는 상황은 자주 온다. 그런데 그 원인을 검색하면 "@Async는 요청마다 스레드를 무한 생성해서 서버가 죽는다"는 설명이 많…
Spring Boot JPA N+1 쿼리 진단과 해결: generate_statistics, fetch join, @EntityGraph, @BatchSize
코드 리뷰나 성능 점검을 하다 보면 JPA N+1 얘기를 반복해서 하게 된다. 목록 화면 하나 열었을 때 쿼리가 몇 개 나가는지 물어보면 답이 바로 안 나오는 경우가 많고, 원인을 찾은 뒤에도 fe…
Feign Client
1. 소개 Netflix에서 만든 것으로 웹 서비스 클라이언트를 보다 쉽게 개발할 수 있도록 도와주는 도구이다. 2. 사용법 의존성 추가 (spring-cloud-starter-feign) @Ena…
Spring Dependency Injection (의존성 주입)
1. 개요 의존성 주입에 대해 보다 자세히 알아본다. 2. 의존성 연결 방법 @Required 어노테이션 사용 (Setter 메소드에 사용) @Autowired 어노테이션 사용 (생성자, 메소드, …
인터셉터 (Interceptor)
1. Interceptor란? Interceptor는 컨트롤러에 들어오는 요청(HttpRequest), 컨트롤러의 응답(HttpReesponse)를 가로채는 역할을 한다. 정식 명칭은 Handler…
Java와 Javascript 차이
1. 객체, 클래스 자바는 클래스로 표현하고 클래스는 생성자, 필드, 메소드 등을 가지고 있다. 객체를 인스턴스화하기 위해서는 생성자를 활용한다. 자바스크립트에서 객체를 생성하는 방법은 다음과 같다…
Eclipse에서 dispatcher-servlet.xml 파일 red 마크
1. 개요 2. 현상 Multiple annotations found at this line: - Referenced file contains errors (http://www.springframe…
GCP Cloud Source Repositories Quick Start
1. 개요 2. GCP 가입 3. 메뉴로 이동 https://cloud.google.com/source-repositories/?hl=ko 4. 생성 저장소 및 프로젝트를 생성한다. 5. 인증 인증…
Git Branch 종류
1. 개요 개발을 하다보면 코드를 여러 버전으로 복사해야 할 일이 생긴다. 그래서 코드를 통째로 복사하여 원래 코드와 무관하게 별도로, 독립적으로 개발을 진행하게 되는데 이것이 브랜치이다. 브랜치는…
S2I를 이용한 도커 이미지 빌드 테스트
1. 개요 2. S2I 설치 홈페이지 : https://github.com/openshift/source-to-image 1.2.0 다운로드 : https://github.com/openshift/…