Develop
테스트 더블(Test double) 정리
TDD(Test Driven Development) 방법으로 개발을 하려고 하던, 몇몇 기능에 대해서만 테스트 코드 작성을 위해서든.. 테스트 코드 작성을 위해 이런저런 내용을 찾다보면 자주 보게되는 테스트 더블(Test double)가 정확히 무엇인지에 대해 정리한 글 참고한 내용은 마틴 파울러의 글1, 마틴 파울러의 글2, xunitpattenrs의 Test Double 및 테스트 더블의 각 항목 설명 테스트 더블(Test double) 이란? 테스트 2배! 는 당연히 아니고.. 영화에서 배우가 다칠 수 있는 위험한 장면등을 촬영할 때 대역을 사용하는 경우, 이 대역을 스턴트맨(stuntman)이라고 지칭하는데 이를 좀 더 넓은 범위에 적용(예를 들어 드라마, 뮤직 비디오 등등 모든 범위)하여 지칭을..
클린 코드를 읽으며 끄적임
실제로 클린 코드를 읽기 시작한 지는 좀 오래되었는데.. 이것저것 한다고 방치해뒀다가 다시 제대로 읽기 시작했다.. 각설하고, 개발 관련 서적 추천에 항상 들어있는 로버트 C. 마틴이 저술한 '클린 코드'를 읽다가 마음에 와닿는 내용이 있어 기록을 해두고자 작성하는 글 클린 코드의 도입부에는 깨끗한 코드에 대한 정의를 유명한 개발자들에게 물어본 내용을 나열한 부분이 있다. 그중 '론 제프리스'의 정의가 정말 마음에 와닿고 공감되어 다음부턴 해당 방식을 실천해 보자는 마음이 들었으며, 해당 내용과 생각을 기록해두는 게 좋겠다는 생각에 이렇게 글을 쓰게 되었다. 론 제프리스는 여러 문단으로 깨끗한 코드에 대한 정의를 하였는데, 그중 가장 가슴에 와 닿은 내용은 다음과 같다. 모든 프로그램이 아주 유사한 요소..
MockMvc & WebTestClient & REST Assured
Controlle단 유닛 테스트에 대해 알아보던 중 Spring REST Docs까지 흘러들어가 공식문서를 훑어보던 중 의존성을 추가하는 부분에서 다음과 같은 부분을 발견하였다. (공식문서) Add a dependency on spring-restdocs-mockmvc in the testImplementation configuration. If you want to use WebTestClient or REST Assured rather than MockMvc, add a dependency on spring-restdocs-webtestclient or spring-restdocs-restassured respectively instead. 위 내용을 간단하게 정리하자면 MockMvc 대신 WebTe..
JPA에 대한 끄적임
들어가기에 앞서... 해당 포스팅은 JPA에 대해 두서없이 간략하게 정리한 내용입니다. 그렇기에 간략히 "이런 흐름인가 보다~" 정도로만 봐주시면 감사하겠습니다. 혹여나 틀린 내용이 있다면 댓글로 알려주세요 JPA란? JPA(Jakarta Persistence API)란 Java 진영에서 제공하는 ORM(Object Relational Mapping) 기술 간단하게 말하자면 Java를 사용하면서 데이터를 RDB에 어떻게 관리할 것인가?에 대한 API Jakarta EE application programming interface specification that describes the management of relational data in enterprise Java applications. - J..
Spring - 클래스 초기화 방법 비교 (PostConstruct, EventListener)
예전에 Spring 프로젝트에서 Spring 기동 시 Bean으로 등록하는 클래스의 초기화 방법을 포스팅한 적이 있다. 이때는 Bean으로 등록하는 클래스가 정상적으로 생성되어 의존성 주입(DI)까지 끝난 후 초기화가 되도록 하는 방법으로 @PostConstrcut 어노테이션을 사용한 초기화 방법을 주 내용으로 기록하였었다. 이후 @EventListener(ApplicationReadyEvent.class)를 사용하여 초기화하는 방식도 알게 되어 두 방법의 차이점에 대해 기록하고자 한다. @PostConstruct 해당 어노테이션을 사용한 초기화 동작은 언급했듯 DI까지 다 끝나고 정상적으로 클래스가 생성된 이후 수행된다. 즉, 클래스가 생성된 직후 해당 어노테이션을 적용한 초기화 메서드가 실행된다고 보..
Spring Converter & Formatter
개발을 하다 보면 타입을 변환해야 하거나 특정 포맷에 맞춰 변환해야 하는 경우가 상당히 많다. 특히 웹 개발 관점에서 보자면 HTTP를 통한 데이터 통신은 전부 문자열(String)으로 되어있기 때문에 숫자나 날짜 등의 입력이나 출력 시 변환이 필수적으로 들어가게 된다. 이렇게 필수적으로 들어가는 변환을 매번 직접 하기에는 상당히 귀찮고 번거로울 것이다. 그렇기에 Spring에서는 이러한 기능을 수행하는 Converter와 Formatter라는 것을 지원하고 있다. 해당 기능들은 다음과 같은 동작에서 적용되어 사용된다. Spring MVC request parameter @RequestParam @ModelAttribute @PathVariable 설정 파일의 값 (properties, yml 등) @V..

Spring MVC - 예외 처리(API)
들어가기에 앞서 Spring에서 예외 발생 시 전체적인 흐름 및 에러 페이지 처리에 대한 내용은 이전 글에서 다루고 있으므로 이전 글을 참고해 주세요. 링크 : Spring MVC - 예외 처리(Error page) 에러 페이지 처리와 다른 점 뷰 템플릿 또는 정적 페이지로 예외 처리를 하는 경우에는 Spring의 도움을 받는다면 HTML 파일만 추가하여 손쉽게 해결할 수 있었다. (예외 처리를 직접 커스터마이징 하는 것은 다른 이야기) 하지만 이는 HTML 페이지를 전달할 때의 이야기이고.. API의 경우 예외 발생 시 HTML 페이지를 전달하면 안 되고 예외에 따른 JSON 포맷의 응답 데이터를 반환해야 한다. 추가로 HTTP 응답 코드도 적절하게 설정해야 할 것이다. 결국 HTML 페이지로 예외 처..
Codewars 6kyu - Counting Duplicates 문제 풀이
문제 설명 Count the number of Duplicates Write a function that will return the count of distinct case-insensitive alphabetic characters and numeric digits that occur more than once in the input string. The input string can be assumed to contain only alphabets (both uppercase and lowercase) and numeric digits. Example "abcde" -> 0 # no characters repeats more than once "aabbcde" -> 2 # 'a' and 'b' "a..

Spring MVC - 예외 처리(Error page)
Spring MVC에서 예외 발생시 흐름 및 처리하는 방법에 대해 간단하게 정리를 한 내용입니다. 해당 정리 글에서는 예외 발생 시 전체적인 흐름 및 에러 페이지 처리에 대한 내용을 다루며, API의 예외 처리는 다루지 않습니다. 들어가기에 앞서 Spring MVC의 예외 처리에 대한 내용에 들어가기에 앞서 필터와 인터셉터 등에 대한 HTTP 요청의 흐름을 아는 것이 우선이므로 이에 대해 간략히 알아보고 들어가도록 하겠습니다. HTTP 요청 흐름 HTTP 요청에 따른 흐름은 위 이미지와 같이 WAS에서 Servlet Filter를 통과하여 Spring Interceptor를 통과하게 됩니다. (Filter와 Interceptor에 대한 자세한 내용은 "Servlet Filter & Spring Inter..

Servlet Filter & Spring Interceptor
Servlet Filter와 Spring Interceptor는 웹과 관련된 공통 관심 사항에 대한 내용을 처리하기 위한 기능이며, 차이점은 어디서 제공하는 기능이냐? 적용되는 위치가 어디냐?로 나누어 볼 수 있다. 여기서 공통 관심 사항이란 단어를 보고서 AOP(Aspect Oriented Programming)를 떠올릴 수 있겠으나 웹과 관련된 공통 관심 사항의 경우에는 HTTP header나 URL 정보 등이 필요한데 이러한 정보를 FIlter 및 Interceptor에서 제공하기 때문에 이를 이용하는 것이 좋다. 웹과 관련된 공통 관심 사항의 대표적인 예시로는 어떠한 요청이 들어왔는지를 기록하기 위한 로깅 기능 또는 특정 요청에는 인증/인가된 유저만 접근이 가능하도록 하는 인증/인가 기능이 있다...