개발

    [Spring] Controller 슬라이스 테스트 트러블슈팅 과정

    [Spring] Controller 슬라이스 테스트 트러블슈팅 과정

    아 더 작게 테스트 하고싶다. 기존 체스 미션의 컨트롤러 테스트는 @SpringBootTest 어노테이션을 통해 테스트를 진행했습니다. 해당 어노테이션은 실제 애플리케이션과 관련된 빈을 모두 주입하고 jdbc까지 관련하여 세팅 작업을 해야 했습니다. 컨트롤러와 관련된 빈만 주입하여 좀 더 작은 단위로 테스트를 진행할 수 있지 않을까? 이건 되는 걸로 아는데? 의 시작으로 어떻게 문제를 해결했는지 과정을 가볍게 적어보고자 합니다. 세부적인 내용은 포스팅을 따로 해보겠습니다. @WebMvcTest @WebMvcTest는 컨트롤러가 예상대로 작동하는지 테스트하기 위한 테스트 어노테이션이다. @Controller, @ControllerAdvice, @JsonComponent, Filter, WebMvcConfi..

    [Java] 데이터 타입, 변수

    [Java] 데이터 타입, 변수

    작년 백기선님의 자바 스터디를 참여했던 포스팅에서 약간 수정하여 포스팅중입니다. (추후 작성할 포스팅에 보조 설명 링크를 첨부하기 위해) 지금은 끝났지만 목차는 남아있기 때문에 자바를 공부를 하시는 분들은 깃헙 이슈에서 목차를 확인할 수 있습니다. https://github.com/whiteship/live-study GitHub - whiteship/live-study: 온라인 스터디 온라인 스터디. Contribute to whiteship/live-study development by creating an account on GitHub. github.com Primitive type 종류와 값의 범위 그리고 기본 값 The Java programming language is statically-t..

    [Java] 제네릭

    [Java] 제네릭

    제네릭 제네릭은 다양한 타입의 객체들을 다루는 메서드나 컬렉션 클래스에 컴파일 시의 타입 체크를 해주는 기능입니다. 왜 제네릭을 사용해야 하는가? 제네릭 타입을 이용함으로써 잘못된 타입이 사용될 수 있는 문제를 컴파일 과정에서 제거할 수 있습니다. 제네릭은 클래스와 인터페이스, 메서드를 정의할 때 타입(type)을 파라미터(parameter)로 사용할 수 있도록 해줍니다. ArrayList를 생성 시 제네릭을 사용하지 않고 생성을 했을 때 문제점을 찾아보겠습니다. List list = new ArrayList(); list.add(1); list.add(2); list.add(3); int index1 = (int)list.get(0); int index2 = (int)list.get(1); int in..

    [JUnit] @ParameterizedTest - @MethodSource 사용하기

    [JUnit] @ParameterizedTest - @MethodSource 사용하기

    들어가며 이전에 'Parameterized Test - 테스트를 효율적으로'라는 글을 올렸었는데 전부 학습한 내용이 아니라서 이번에 사용한 기능을 추가로 포스팅하려고 합니다. 이전에 다뤘던 테스트는 클래스, 문자열, 기본 타입, Enum, Csv를 사용한 테스트였습니다. 하지만 좀 더 복잡한 객체들을 파라미터로 테스트할 수 있는 방법이 있습니다. 테스트 코드를 예시로 보면서 설명하겠습니다. 로또 번호를 맞추는 테스트이고 맞힌 숫자에 따라 등수를 반환합니다. (실제 로또와 같은 원리로 동작하는 코드입니다.) private static final Number BONUS = new Number(7); private static final Lotto LOTTO = new Lotto(givenNumbers(1, ..

    슬랙(Slack)에 깃허브(Github) 알림 연동하기

    슬랙(Slack)에 깃허브(Github) 알림 연동하기

    들어가며 이번에 이펙티브 자바 스터디에 참여하게 되었는데 슬랙으로 깃헙 알림을 받도록 설정을 했습니다. 슬랙에서 깃허브에 있는 특정 레포지토리에서 PR, 이슈 등 알림을 받을 수 있습니다. 설정하는 방법은 간단합니다! Github app 설치하기 Github app이 설치되어 있지 않다면 설치를 해야합니다. 왼쪽 상단 더보기를 눌러 앱을 선택해줍니다. 아마 개발자 슬랙방이라면 이미 설치되어 있을 가능성이 높습니다. 설치되어있다면 다음 레포지토리 연동 부분부터 보시면 됩니다. 추가 버튼을 눌러주며 엑세스 권한을 설정에 맡게 허용하면 됩니다. 레포지토리 연동하기 알림을 받길 원하는 채널로 이동합니다. Github 앱이 올바르게 설치되었다면 채팅창에 /github 명령어를 사용할 수 있습니다. /invite ..

    [Java] package, import

    [Java] package, import

    👨‍💻 package 키워드 패키지란 폴더 또는 디렉터리를 의미한다. 자바에서 패키지란 관련된 인터페이스나 클래스를 적절히 배치할 수 있도록 만든 폴더 또는 디렉터리 API에서 제공되는 많은 클래스들이 패키지화되어 제공되고 있다. 자바 소스 파일에서 이 파일의 클래스나 클래스들이 속하는 패키지는 package와 함께 지정된다. 이 키워드는 일반적으로 소스 파일에서 처음 오는 키워드이다. 하나의 패키지 선언을 소스 파일에 선언할 때에는 다음과 같이 할 수 있다. package java.awt.event; 패키지 안에는 같은 이름의 클래스를 사용할 수 없으며 패키지가 다르면 상관없다. 패키지명은 관례에 따라 소문자로 작성한다. 그 외에도 몇 가지 규칙이 존재한다. 숫자로 시작할 수 없다. _ $ 문자를 제외..

    [JUnit] Parameterized Test - 테스트를 효율적으로

    [JUnit] Parameterized Test - 테스트를 효율적으로

    들어가며 특정 메서드의 결괏값을 확인할 때 반복문을 사용하거나 여러 개의 단위 테스트를 만들어 엣지 케이스와 올바른 값을 확인합니다. 하지만 하나의 테스트에서 진행할 수 있는 방법이 존재합니다. 예를 들어 소수 값을 확인하는 메서드가 다음과 같습니다. public class Numbers { public static boolean isOdd(int number) { return number % 2 != 0; } } 소수를 테스트 하기위해 여러 테스트를 만들거나 반복문을 사용하지 않고 다음과 같이 테스트가 가능합니다. @ParameterizedTest @ValueSource(ints = {1, 3, 5, -3, 15, Integer.MAX_VALUE}) // six numbers void isOdd_Sho..

    [zsh] zsh alias - 단축키 만들기

    [zsh] zsh alias - 단축키 만들기

    zsh alias 추가하기 특정한 디렉터리에 들어가기 위해 cd Desktop/code/... 를 매번 입력해서 들어갔다면 이 글은 아주 유용할 겁니다. 단축키를 만들어 사용하는 방법에 대해 소개하겠습니다. . zshrc 파일 편집하기 vi ~/.zshrc alias 추가하기 파일 아래쪽으로 내려가다 보면 다음과 같은 라인을 만나게 됩니다. (대문자 G를 입력하면 가장 마지막 라인으로 커서가 이동합니다.) # Example aliases # alias zshconfig="mate ~/.zshrc" # alias ohmyzsh="mate ~/.oh-my-zsh" 예시처럼 alias를 등록하면 됩니다. i를 눌러 INSERT 모드로 변환해주세요. 그다음 원하는 명령어를 형식에 맞게 추가해주세요. alias ..

    [Git] 특정 브랜치 Clone하기

    특정 브랜치 clone clone 하려는 저장소의 브랜치가 많을 경우 특정한 브랜치만 clone 하는 방법이 있다. git clone -b {branch_name} --single-branch {repository_url} 예시 git clone -b yhh1056 --single-branch https://github.com/yhh1056/java-racingcar.git 특정 브랜치 추가 single branch로 clone한 뒤 다른 브랜치를 가져오고 싶어 졌다. 원격에 있는 브랜치를 가져오는 방법은 다음과 같다. git remote set-branches --add origin {remote_branch_name} git fetch origin {remote_branch_name}:{local_b..

    [리팩토링] Composing Methods

    들어가며 리팩터링을 하는 방법은 다양하지만 대부분 메서드를 구성하는 것에 사용됩니다. 오늘은 메서드를 분리해보면서 간단하면서도 강력한 Composing Methods에 대해 알아보고자 합니다. 코드는 자바로 되어있지만 다른 언어를 사용하시는 분들도 읽는데 무리 없이 최대한 쉽게 코드를 작성해보겠습니다. Composing Methods 지나치게 긴 메소드는 악의 근원입니다. 논리를 쉽게 파악할 수 없게 만들고 변경하기도 어렵게 만듭니다. Composing methods는 코드 중복을 제거하고 메서드를 간소화하며 향후 개선할 수 있는 기반을 만들어줍니다. Extract Method 메서드의 라인이 길수록 의도를 파악하기 어려워집니다. 리팩터링의 주된 이유이고 Extract Method(메서드 추출)는 리팩터..