전체 글

전체 글

    [참고 글] Test Double<img src=">

    [참고 글] Test Double

    Stunt Double배우와 유사한 모습과 행위를 할 수 있어, 영화에서 위험하고 역동적인 액션을 대신 수행하는 사람. Stunt Man/Woman이라고도 함. 이러한 의미에서 가져온 Test Double.5가지 종류Dummy아무것도 하지 않는 깡통 객체.실제 객체를 모방하기만 한. 동작이나 행위에 대해 정의되어 있지 않음.Fake단순한 형태로 동일한 기능은 수행하나, 프로덕션에서 쓰기에는 기능이 부족한 객체Ex) FakeRepsotiroy : 실제 프로덕션에서는 DB에 직접 액세스하여 저장/조회하지만 Fake Repository에서는 memory map을 선언하고, 해당 객체에 저장/조회하는 방식으로 구현한다.ㄴ 이를 프로덕션에서 쓰기에는 기능이 부족함.Stub테스트를 수행하며 실제로 로직이 수행되지 ..

    [친절한 SQL 튜닝] 라이브러리 캐시 / 하드 파싱 / 바인드 변수와 SQL 공유

    [친절한 SQL 튜닝] 라이브러리 캐시 / 하드 파싱 / 바인드 변수와 SQL 공유

    라이브러리 캐시와 하드 파싱내부 프로시저를 반복 재사용할 수 있도록 캐싱해두는 메모리 공간이 있다. 라이브러리 캐시(Library Cache)이다.이 공간에 프로시저가 저장되면 SQL 최적화와 로우 소스 생성과 같은 SQL 최적화 과정을 매번 진행할 필요 없이SQL을 재사용할 수 있다.사용자가 SQL문을 전달하면 DBMS는 SQL을 파싱한 후에 이 SQL이 라이브러리 캐시에 존재하는지 먼저 확인하는데,존재하면 곧바로 '실행' 단계로 넘어간다.-> 소프트 파싱그런데 SQL이 라이브러리 캐시에 존재하지 않으면 SQL최적화와 로우 소스 생성 단계까지 모두 거친 후에 '실행' 단계를 수행한다.-> 하드 파싱 위 과정에 '하드 파싱'이라는 단어가 붙은 이유는 SQL 최적화 과정을 수행하는 것이 말 그대로 쉬운 과..

    [친절한 SQL 튜닝] SQL / SQL 최적화 / SQL 옵티마이저 / 실행계획 / 옵티마이저 힌트

    [친절한 SQL 튜닝] SQL / SQL 최적화 / SQL 옵티마이저 / 실행계획 / 옵티마이저 힌트

    SQL 이란..SQL도 프로그래밍 언어와 같은 '언어'이다.Query Language : 질의 언어인데Structured : 구조적이고집합적이고 선언적인 질의 언어이다. '선언적'인 것이 어떤 의미인지 몰라 찾아봤다.쉽게 이해할 수 있는 글이었다 : https://iborymagic.tistory.com/73 내용들 중 확 와닿았던 부분을 정리한다. '선언적'이란 것은, 우리가 무엇을 얻고자 하는가에 관해서만 묘사하고 있고, 그것을 어떻게 얻는가에 관해서는 알려주지 않는다. 현실에서는, '무엇'을 얻기 위해 어떻게 해야하는지는 이미 알고 있음을 기반하고 있다고 볼 수 있고코드에서는, 메서드 `add()`가 내부에서 어떤 것을 하는지 모르겠지만, 우선 이름만으로 이해 될 수 있다.사실 많은 선언적(Dec..

    테스트 환경에서 환경변수 설정하기

    테스트 환경에서 환경변수 설정하기

    서론 프로덕션 코드에서 설정 파일(application.yml) 내에 환경 변수 처리해 놓은 값을 사용하는 코드에 관해 테스트 코드를 작성하려 할 때는 환경변수 세팅을 해주어야 합니다. 어떤 방법이 제일 나을지 찾아보니, 여러 방식이 있어서 정리합니다. 테스트 환경에서 환경변수 설정하는 방법 1번째 방법) 테스트 코드에서 바라보는 환경설정 파일을 별도로 생성하는 방법. ⚠️ 애플리케이션 컨텍스트가 로드되는 테스트 코드이어야 함. (feat. @SpringBootTest) 프로덕션 코드에서 환경 설정 값들은 src/main/resources/application.yml (혹은 application.property) 에 위치해있을텐데, 테스트 코드에서도 로직 수행 시에 필요한 환경 설정 값들을 별도의 환경 ..

    [JUnit5] @Mock 필드 초기화 시점에 따른 @BeforeAll 이슈 (@BeforeEach, 테스트코드의 라이프 사이클)

    [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..

    [간단 정리] Spring Data Redis

    배경 회사에서 내가 운영하고 있는 애플리케이션 중에는 별도의 Redis 서버를 이용하여 로그인 기능을 제공하고 있는데, Spring Data에서 제공하는 Redis도 있다. 추후 쓸일이 있을 듯하여 어떤 차이가 있는지 어떤 용도로 사용될 수 있는지 간략히 알아보았다. Spring Data Redis Spring Data 의 일부로, Spring application 을 이용해 Redis의 손쉬운 설정 및 접근을 제공한다. 그리하여 사용자가 인프라 걱정으로부터 자유로울 수 있게 해준다. 임베디드 레디스 서버 일반적으로 실제 DB로써의 역할로써 사용하는 것보다는 별도의 저장소가 존재하고 이를 캐싱하여 성능을 향상시키는 역할로써 사용되는 듯하다. 의존성 spring-boot-starter-cache, spri..