전체 글
![[친절한 SQL 튜닝] SQL / SQL 최적화 / SQL 옵티마이저 / 실행계획 / 옵티마이저 힌트](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FcP5U0t%2FbtsHiGrZ4Uh%2FAAAAAAAAAAAAAAAAAAAAADPrlPAn7MTEpdFTEPH04mM5rVDmFOacomknJqLTmm6s%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1759244399%26allow_ip%3D%26allow_referer%3D%26signature%3DgfETJq0z7nyC22qcL9XUIldthZE%253D)
[친절한 SQL 튜닝] SQL / SQL 최적화 / SQL 옵티마이저 / 실행계획 / 옵티마이저 힌트
SQL 이란..SQL도 프로그래밍 언어와 같은 '언어'이다.Query Language : 질의 언어인데Structured : 구조적이고집합적이고 선언적인 질의 언어이다. '선언적'인 것이 어떤 의미인지 몰라 찾아봤다.쉽게 이해할 수 있는 글이었다 : https://iborymagic.tistory.com/73 내용들 중 확 와닿았던 부분을 정리한다. '선언적'이란 것은, 우리가 무엇을 얻고자 하는가에 관해서만 묘사하고 있고, 그것을 어떻게 얻는가에 관해서는 알려주지 않는다. 현실에서는, '무엇'을 얻기 위해 어떻게 해야하는지는 이미 알고 있음을 기반하고 있다고 볼 수 있고코드에서는, 메서드 `add()`가 내부에서 어떤 것을 하는지 모르겠지만, 우선 이름만으로 이해 될 수 있다.사실 많은 선언적(Dec..
![[JUnit5] @Mock 필드 초기화 시점에 따른 @BeforeAll 이슈 (@BeforeEach, 테스트코드의 라이프 사이클)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FENuv1%2FbtsGsjqmnU9%2FAAAAAAAAAAAAAAAAAAAAAM2TrdnShhbryC3VOUTeMZdX7kKQyTLSWhS4BKG7HAuX%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1759244399%26allow_ip%3D%26allow_referer%3D%26signature%3DahuHyRm%252F8gGKivSu1zfFcEvUuw8%253D)
[JUnit5] @Mock 필드 초기화 시점에 따른 @BeforeAll 이슈 (@BeforeEach, 테스트코드의 라이프 사이클)
서론 테스트 코드를 작성하던 중 @BeforeAll 애노테이션을 사용하다가 @BeforeEach 와의 차이점, 그리고 테스트 코드의 라이프 사이클을 정리해보고자 글을 작성합니다. 문제 상황 InstantService 클래스 생성 시에 Mocking처리한 InstantRepository를 세팅하기 위해 아래와 같은 코드를 작성하면서 문제를 마주쳤습니다. @ExtendWith(MockitoExtension.class) class test { @Mock private InstantRepository instantRepository; private InstantService instantService; @BeforeAll void setUp() { instantService = new InstantService..
[JUnit5] 실패 케이스 테스트하기
JUnit5를 이용해 예외 발생 케이스를 테스트하는 방법을 알아봅니다.방법 1. assertThrows() 메서드 사용Exception 발생 여부 확인과 Exception 메시지를 비교할 수 있습니다.아래는 CafeKiosk 서비스 클래스의 add(~) 메서드에 0 혹은 음수를 전달했을 때 예외가 잘 발생하는지 확인하는 테스트 메서드입니다.class CafeKioskTest { @Test @DisplayName("[FAILED] 음료 수량으로 음수, 0은 불가능하다.") void addWithCount() { // given CafeKiosk cafeKiosk = new CafeKiosk(); // then Exception exce..
[테스트 코드] Controller Test Code / @WebMvcTest / 행위 검증
Controller 클래스의 테스트 코드를 작성하다 보면 컨트롤러 단에서 호출하는 서비스 메서드가 호출할 때 어떤 값이 필요하고 어떤 값을 반환하는지 정도의 검증을 하는 작업도 함께 진행한다. 컨트롤러 메서드는 아래와 같이 존재한다. (ApiResult 클래스는 외부 응답 시 공통적으로 사용하는 클래스이다.) @RestController @RequiredArgsConstructor public class ControllerA { private final ServiceA serviceA; @PostMapping("/a") public ResponseEnity controllerMethodA () { serviceA.methodA(); return new ResponseEntity(ApiResult.succ..
[디자인 패턴] 데코레이터 패턴
데코레이터 패턴이 무엇인지 알아보고 예제를 통해 이해하고자 합니다. 목표 데코레이터 패턴 이해 사용의 장단점 데코레이터 패턴 예제 데코레이터 패턴 데코레이터 패턴은 어떤 객체에 책임을 덧붙이는 패턴으로, 기능 확장이 필요할 때 기존 코드를 변경하지 않고 부가 기능을 동적으로(유연하게) 추가할 수 있도록 하는 패턴 입니다. 서브 클래스 대신 쓸 수 있는 유연한 대안이 됩니다. 예시 '에스프레소'라는 베이스를 만드는 머신기가 있는데, 고객들이 머신기에서 라떼와 모카, 바닐라 라떼도 만들수 있도록 해달라는 요청 사항이 들어옵니다. '에스프레소' 클래스를 상속받는 '우유' 클래스 -> 라떼 '에스프레소' 클래스를 상속받는 '모카 시럽' 클래..
![[Spring Batch] 1. 스프링 배치 공부 순서와 간단 소개](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2Fcc8aYE%2FbtsjnG3lKCa%2FAAAAAAAAAAAAAAAAAAAAAFQnyCauF8dgn9kqKDJoAGrKZY1SXI-sLKXjJsmVGFOV%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1759244399%26allow_ip%3D%26allow_referer%3D%26signature%3D%252FTLBs%252FNjS2jIlOZ6CDBbbkB04sc%253D)
[Spring Batch] 1. 스프링 배치 공부 순서와 간단 소개
기록 순서 1. 스프링 배치 소개 (탄생 배경, 적용 가능한 task, 아키텍처) 현재 글 2. 스프링 배치 시작 (스프링 배치 플젝 + 의존성 구성, 간단한 실습_job 구성+실행) 3. 스프링 배치 도메인 이해 (job, step, 등 각 도메인에 대한 이해_특징,기능,정의) 🌟🌟🌟 4. 스프링 배치 실행 (완성된 job 실행, 도메인 간 상호관계 및 흐름 파악) 체계적&유연한 배치 모델 구성 4. 아키텍처 Application 스프링 배치 프레임웍을 통해 개발자가 만든 배치 Job과 커스텀 코드 포함되어 있다. Batch Core Job을 실행, 모니터링, 관리하는 API로 구성 JobLauncher, Job, Step, Flow 등 Batch Infrastructure Application, Ba..