전체 글
-
Spring BeanSpring 2022. 7. 25. 23:40
스프링은 어노테이션, Java 혹은 xml 기반으로 bean 을 정의하면 객체를 bean 으로 등록하여 개발자가 편하게 주입 받아 사용할 수 있습니다. 이번 포스팅에선 Spring Bean 과 Spring IoC 컨테이너에 대해 알아보겠습니다. Bean 이란? 스프링 IoC 컨테이너가 관리하는 객체를 의미합니다. A bean is an object that is instantiated, assembled, and otherwise managed by a Spring IoC container. - 스프링 공식문서 - 그렇다면 스프링 IoC 컨테이너란 무엇을 의미할까요? Spring IoC 컨테이너란? ApplicationContext 인터페이스가 Spring IoC 컨테이너를 대표합니다. Bean을 관..
-
Classicist TDD vs Mockist TDD책/단위 테스트 2022. 7. 25. 22:53
Classicist TDD vs Mockist TDD 테스트를 구성하다 보면 실제 객체를 사용해서 테스트를 구성해야 할 지 아니면 Mock 을 사용해서 구성해야 할 지 고민될 때가 많습니다. 이번 포스팅에서는 실제 객체 사용을 권장하는 Classcist 와 Mock 사용을 권장하는 Mockist를 비교하면서 Test 에 대해 알아보도록 하겠습니다. 시작전 해당 주제를 설명하기 앞서 Test Double 이란 용어를 먼저 설명하겠습니다. Test Double이란 영화에서 스턴트 더블 개념에서 비롯되어서 테스트를 진행하는 것입니다. 실제 객체를 활용하기에 어렵거나 비용이 많이 들 떄 사용하는 가짜 객체를 의미합니다. 테스트 더블에는 각각 Dummy, Fake, Mock, Spy, Stub 이 있습니다. Du..
-
트랜잭션 격리수준DataBase 2022. 7. 21. 21:21
트랜잭션 트랜잭션 이란 트랜잭션이란 여러 쿼리를 논리적으로 하나의 작업으로 묶어주는것을 이야기합니다. 돈 거래로 트랜잭션의 예시를 들어보도록 하겠습니다. 거래가 일어날 때의 과정은 다음과 같습니다. 우선 구매자의 계좌에서 10,000원을 출금합니다. 다음 판매자에 계좌에 10,000을 입금합니다. 이를 쿼리로 나타내면 이와 같이 나타낼 수 있습니다. UPDATE 문 : 구매자 계좌에 10,000 원 빼기 UPDATE 문 : 판매자 계좌에 10,000 원 더하기 마음처럼 되면 좋은데 출금 성공후 서버 다운이라든지 하는 이유로 오류가 생길 수 있습니다. 구매자의 계좌에서는 돈이 빠졌는데 판매자의 계좌에는 돈이 들어가지 않는 이런 상황을 방지하기 위해 나온것이 바로 트랜잭션입니다. 즉, 트랜잭션은 하나의 작업..
-
배포 방식도커와 쿠버 2022. 7. 19. 23:32
최근 회사에서 컨테이너화된 서비스를 사용하면서 여러 배포 방식이 있다는 것을 확인했습니다. 크게 사용하는 배포방식은 롤링 업데이트, 블루-그린 업데이트, 카타리 업데이트 이렇게 3개가 있습니다. 이번 포스팅에서는 3가지 배포 방식에 대해서 알아보겠습니다. 롤링 업데이트(Ramped 업데이트) 사용중인 인스턴스 내에서 새 버전을 교체하는 가장 기본적인 방식입니다. 이 방식은 서비스 중인 인스턴스 하나를 로드밸런서에서 라우팅 하지 않도록 한 뒤 새 버전을 적용해서 다시 라우팅합니다. 순차적으로 새로운 버전을 교체해줍니다. 장점 롤링 방식은 구성된 자원을 그대로 유지한 채로 무중단 배포가 가능하므로 관리가 편합니다. 인스턴스마다 차례로 배포를 진행하기 때문에 상황에 따라 손쉽게 롤백이 가능합니다. 단점 롤링 ..
-
MVCC카테고리 없음 2022. 7. 14. 00:19
MySQL 은 격리수준에 따라 레코드를 읽어오는 방식에 차이가 있습니다. 그 이유는 MVCC(Multi Version Concurrency Control)와 관계가 아주 깊습니다. 이번 포스팅에서는 MVCC 에 대해 알아보겠습니다. MVCC 를 지원하는 이유 MVCC 는 잠금을 사용하지 않는 일관된 읽기를 제공하기 위해 사용됩니다. MVCC 는 MySQL 에서만 제공하는 기능이 아닌 레코드 레벨의 트랜잭션을 지원하는 DBMS라면 제공하는 기능입니다. MySQL 은 MVCC를 언두 로그(Undo log) 를 이용해 이 기능을 구현합니다. 참고로 여기서 얘기하는 Multi Version 은 하나의 레코드에 대해 여러개의 버전이 동시에 관리된다는 의미입니다. 우선 설명을 위해 아래와 같은 테이블을 하나 만들고..
-
3. 단위 테스트 구조책/단위 테스트 2022. 7. 13. 23:13
3. 1 단위 테스트를 구성하는 방법 3.1.1 AAA 패턴 사용 AAA 패턴이란 (Arrange, Act, Assert)해당 패턴을 사용하면 테스트를 준비, 실행, 검증 3부분으로 나눌 수 있습니다. 코드로 나타내면 다음과 같습니다. import domain.Calculator; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; class CalculatorTest { @Test publi..
-
Spring에 비해 SpringBoot 가 가지는 특징Spring 2022. 7. 3. 00:42
TL;DR 자주 사용되는 라이브러리들의 버전 관리 자동화 spring-boot-starter : 관련 있는 모듈들의 모음을 제공해준다. spring-boot-starter-parent: 각 모듈의 현재 Spring Boot 버전에 가장 적합한 버전을 제공해준다. AutoConfig로 복잡한 설정 자동화 @EnableAutoConfiguration 내장 웹서버 제공 Embedded WAS Tomcat, jetty, undertow 모두 가능 모니터링 Actuator 그외 애플리케이션 자동 재시작과 리로딩(사용자 코드 변화를 감지하고 애플리케이션 재시작함), 라이브 리로드(HTML 이나 JS 등의 파일이 변경 되어도 다시 실행하지 않아도 됨) 를 지원하는 dev-tools 가 있다. 스프링 부트는 서블릿 컨..
-
Web Server, Application Server, WAS, Web Container(=Servlet Container)웹서버 2022. 6. 27. 20:16
여러 개발관련된 문서를 읽어보면 이 4가지 개념이 혼재되어서 사용되기도 하고 차이점을 두고 설명하기도 해서 읽을 때마다 항상 헷갈립니다. 이번 포스팅에서는 이 4가지 개념을 정리해보도록 하겠습니다. Web Server Client 는 HTTP 프로토콜을 이용하여 요청을 보내게 됩니다. 웹 서버는 이를 해석해 요청에 맞는 데이터를 보내주어야 합니다. 그에 맞는 데이터 형식으로 보내주는 것이 Web Server 가 할 일입니다. 웹 서버는 단순히 요청에 대한 데이터를 수정없이(static, 정적) 클라이언트에 보내주기만 하면 됩니다. 초창기 인터넷에서는 정적 데이터에 대한 수요가 높았기 때문에 기능적으로 WAS 를 따로 나누지 않고 웹 서버라는 개념을 통칭해서 사용했습니다. Application Server..