본문 바로가기
테스트 주도 개발 시작하기 소개 최근에 테스트 주도 개발 시작하기라는 책을 구매했다. 책을 구매하기전에 아래와 같은 이유때문에 TDD관련 강의나 책을 찾아보고 있었는데 테스트 주도 개발 시작하기 라는 책이 딱 맞다고 생각해서 구매했다. 1. 회사에서 자바 프로젝트 개발시 표준 테스트 프레임워크로 Junit5를 사용하는데 Junit5를 기준으로 테스트 코드가 작성되어 있으면 좋겠다 2. 소프트웨어 테스트에대한 기초적인 용어나 테스트의 범위에 대한 설명과 테스트 코드를 잘 작성하는 방법등이 포함되어 있는 강의나 책이 있으면 좋겠다는 생각을 가지고 있었다. 테스트 주도 개발 시작하기 TDD(Test-Driven Development)는 테스트부터 시작한다. 구현을 먼저 하고 나중에 테스트하는 것이 아니라 먼저 테스트를 하고 그다음에 구.. 2020. 8. 9.
이펙티브 자바 3,4,5장 - 인스턴스화 막기/의존 객체 생성자 주입/ 싱글톤 보장 이펙티브 자바 3,4,5장 - 인스턴스화 막기/의존 객체 생성자 주입/ 싱글톤 보장 이펙티브 자바 3,4,5장을 읽고 정리한 내용이다. 1장,2장 내용과 마찬가지로 객체 생성과 파괴에 대해서 다루고 있다. 1장,2장의 내용은 아래 글에서 확인할 수 있다. 현재 5장까지 읽었는데 자바의 Collection Framework나 Spring Framework의 내부 구현체를 보면 정말로 이펙티브 자바에서 나온 패턴을 많이 사용하고 있는것을 확인할 수 있다. 정적 팩토리 메서드 (static factory method) 정적 팩토리 메서드 (static factory method) 이란? 생성자 대신 정적 팩토리 메서드를 사용할 수 없는지 생각 일반적으로 특정 클래스의 객체를 생성할 때 생성자를 사용해서 만든다.. 2020. 8. 6.
컨트롤러 테스트 @WebMvcTest vs @SpringBootTest Spring 에서 Test 하는 방법 스프링 프레임워크를 테스트 할때 스프링의 `ApplicationContext` 전체를 불러와서 테스트 하는 방법과 특정 레이어만 불러와서 테스트하는 방법이 있다. 전체 테스트는 프로젝트의 크기가 커지면 테스트 속도가 느려지기 때문에 통합테스트가 아닐때는 불필요하다. 유닛테스트를 할때는 특정 레이어만 테스트하는게 좋은 방법이다. 특정 레이어를 테스트할때는 레이어에 해당하는 빈만 들고오기 때문에 의존관계에 있는 다른레이어는 `Mock`을 이용해서 테스트를 해야한다. 기본적으로 통합테스트를 할때는 `@SpringBootTest` 애노테이션을 붙여서 테스트를 진행하면된다. 반면, 원하는 레이어만 테스트 할때는 `@MockMvcTest` 와 같이 특정 레이어를 테스트하기 위한.. 2020. 7. 16.
git 브랜치 삭제 branch를 삭제하는 방법 프로젝트를 관리할때 소스관리 전략에 따라서 여러개의 브랜치를 사용한다. 브랜치에서 작업하고 master에 merge한 후에는 브랜치 관리를 위해서 작업 브랜치는 삭제하는게 좋다. merge한 브랜치를 삭제해야하는 이유는 나중에 알아보고 branch를 삭제시키는 명령어를 알아보자. //delete branch locally git branch -d localBranchName //delete branch remotely git push origin --delete remoteBranchName merge한 branch를 삭제해야할까? master 브랜치로 보낸 pull request가 merge 되면 github상에 `Pull request sucessfully merged a.. 2020. 7. 15.
RequestContextHolder RequestContextHolder, HttpServletRequest `RequestContextHolder`를 알아보자. Spring 프레임워크의 전 구간에서 `HttpServletRequest`에 접근할 수 있게 도와주는 구현체이다. request를 서비스레이어까지 전달하지 않더라도 `RequestContextHolder`를 이용하면 된다. `HttpServletRequest`는 HTTP URI, Method, body, header, cookie, session 등의 정보를 포함하고 있다. `RequestContextHolder`가 없으면 컨트롤러 레이어에서 서비스 레이어로 내려주는 방식으로 해야하는데 코드가 더러워지고 DRY원칙을 지키지 못한다. `RequestContextHolder`를 활용.. 2020. 6. 29.
Java Spring과 Node.js 비교 서론 최근 면접에서 `Java`와 `Node.js`를 이용해서 백엔드 개발을 할때 어떤 차이가 있냐는 질문을 받았다. 이 질문에 나는 자바에서 스프링을 사용하는 경우 요청 하나당 하나의 스레드가 생성되고 Node.js는 이벤트 루프라고 불리는 싱글 스레드 하나가 모든 요청을 다 받고 I/O작업의 경우 비동기 방식으로 처리를 던져놓고 다른 일을 하고 있다가 I/O작업이 완료되면 이벤트 방식으로 요청이 완료됨을 알리는 방식으로 클라이언트에게 응답한다고 답했다. Java의 Spring을 이용하는경우와 Node.js를 사용하는경우를 좀 더 자세히 비교하기 위해서 이 글을 작성하였다. 전통적인 웹애플리케이션 요청 처리 spring webflux와 같은 차세대 기술이 아닌 spring mvc를 사용하여서 웹애플리케.. 2020. 5. 12.