Junit4 환경에서 찍은 강의를 보면서 @Test어노테이션에 해당 테스트의 Exception을 미리 처리하는 옵션을 줘서 처리하는 코드를 봤다. 하지만 나는 Junit5 환경이기 때문에 @Test(expected - ~)옵션이 없어져서 같은 코드를 사용하지 못한다. try catch로 하면 코드가 지저분해져서 expected옵션처럼 깔끔하게 처리하고 싶어서 찾아봤다. 처음 내가 Exception을 처리하고 싶었던 코드는 아래와 같다. try부분에서 Exception이 터지면 catch에서 걸러지고 return해서 테스트가 성공한다. fail()은 만약 return 되지 않고 fail()코드가 실행되면 테스트가 실패하는 함수이다. @Test public void 중복예외() throws Exception..
Backend
스프링의 IoC컨테이너는 Bean을 관리한다. 의존성을 관리해주고 객체들을 싱글톤으로 관리해주며 이번에 설명할 Bean의 생성과 소멸까지의 Lifecycle을 관리하는 역할 또한 가지고 있다. Spring Bean의 Life Cycle은 간단하게 보면 "객체 생성 > 의존관계 주입" 순서로 이루어진다. 그렇기 때문에 의존관계 주입이 다 끝난 이후에야 우리가 사용할 테이터에 값이 채워지며 전 초기화 단계에서는 null인 상태로 존재한다. 1. Spring Bean의 Lifecycle 1. 스프링 IoC 컨테이너 생성 2. Bean 생성 : IoC컨테이너는 컴포넌트 스캔을 통해 빈을 찾아서 등록한다(@Component, @Bean.. 등). 이 과정에서 기본 생성자를 호출하여 객체를 만든다. // 생성자 주..
1. 빈이 중복 조회되는 상황 현재 실습하고 있는 예제에서 상품을 주문했을 때 할인 정책을 DiscountPolicy라는 interface를 구현해서 사용하고있다. 이럴 때 DiscountPolicy 인터페이스 구현체는 고정 할인 fixDiscount와 할인률을 정해서 할인해주는 rateDiscount두개가 있다. orderServiceImpl에서 DIP를 지키기 위해 생성자 주입을 통해 인터페이스 타입 파라미터로 의존성을 주입받으려 할 때 현재 빈에는 fixdiscount와 rateDiscount 두개의 DisountPolicy 타입 빈이 등록돼있다. 스프링이 의존성 주입을 할 때 주입 대상을 타입 기준으로 조회를 하기 때문에 현재 상황에서는 DiscountPolicy 구현체 두개가 조회되어 expec..
스프링 리액트 통합 빌드 환경 구축하는 도중 빌드는 됐는데 빌드를 실행하려니까 빌드 파일에 접근을 못한다는 에러가 떴다 이건 빌드 파일이 있는곳에서 접근을 하지 않아서 빌드파일이 어디있는지 못 찾아서 그런것이다. 통합 빌드 커맨드 : java -jar demo-web-0.0.1-SNAPSHOT.jar 이때 빌드를 하는 방법은 1. 빌드 파일이 생성된 디렉터리로 이동 후 커맨드를 입력한다. 이러면 빌드 파일이 있는 경로를 안붙혀줘도 된다. 2. 빌드 파일이 생성된 디렉터리의 주소까지 붙혀서 빌드파일 디렉터리 커맨드를 입력한다. 빌드 파일은 mainProject/build/libs에 있다. 통합 빌드 커맨드 :java -jar build/libs/demo-web-0.0.1-SNAPSHOT.jar
Spring-React 통합 빌드 환경 구축 중 리액트 파일을 찾을 수 없어서 빌드를 실패했단다. 보통 다른 블로그들을 보면 아래의 코드를 build.gradle의 하단에 붙여넣기 하라고 한다. 아래 코드의 내용은 빌드를 할 때 프론드 경로에 있는 React 프로젝트를 빌드하고 SpringBoot 프로젝트 빌드 결과에 포함시킨다 이런 내용이다. def frontendDir = "$projectDir/frontend" sourceSets { main { resources { srcDirs = ["$projectDir/resources"] } } } // 생략 저 오류가 뜬 이유는 React 프로젝트를 만들 때 npx create-react-app을 한 경로와 내가 설정한 frontendDir이 일치하지 않..
현재 나는 군 복무중이라 인텔리제이를 사용하지 못하고 VSCode기반으로 하는 codespaces와 gitpod을 사용하고 있다. Spring - React 통합 빌드를 구축하는 과정에서 JDK 버전 오류가 나서 빌드가 안된다는 오류 메세지가 떴다. 이유는 확실히 모르겠지만 내 gitpod에서는 계속 자바 버전이 11로 잡혔다. 내 스프링 부트 버전은 3.2.1로 3.x.x 버전부터는 Java17이상부터 지원하기 때문에 그래들 빌드가 실행이 안됐다. 그래서 자바 업그레이드 하는 방법을 찾아서 기록해 두려고 한다.(또 언제 이럴지 몰라..) Spring - React 통합 빌드를 구축하는 과정에서 JDK 버전 오류가 나서 빌드가 안된다는 오류 메세지가 떴다. 설치 가능한 Java 버전 목록 조회 : sdk..
상속 관계에 있는 스프링 빈을 조회하는 방법에 대해 알아볼 것이다. 스프링 빈은 부모 타입으로 조회하면 자식 타입도 함께 조회한다. 1번 노드가 최상이 루트 빈인데, 모든 자바 객체의 루트는 Object 타입이기 때문에 1번 부모 빈을 포함한 전체 빈을 조회하고 싶으면 Object타입으로 조회하면 된다. 1. 부모 타입으로 조회 - 자식이 여러개 존재 @Test @DisplayName("부모 타입으로 조회시, 자식이 둘 이상 있으면, 중복 오류가 발생한다.") void findBeanByParentTypeDuplicate() { //DiscountPolicy bean = ac.getBean(DiscountPolicy.class); assertThrows(NoUniqueBeanDefinitionExcept..
Bean이란 스프링 컨테이너가 관리해주는 Java 객체이다. 이 스프링 빈을 조회하는 방법에 대해서 기록해서 기억하려고 한다. 스프링 컨테이너를 아래와 같이 AppConfig에 구현했다. @Bean을 통해 스프링 컨테이너에 아래의 메서드들을 빈으로 등록했다. 현재 컨테이너에는 memberService, memberRepository, orderService, discountPolicy가 등록되어있다. @Configuration public class AppConfig { @Bean public MemberService memberService() { System.out.println("Call AppConfig.memberService()"); return new MemberServiceImpl(memb..
1. IoC(Inversion of Control)이란? Inversion Of Control을 그대로 번역해 보면 제어의 역전이다. 기존 자바 프로그램에서는 각 객체들이 프로그램의 흐름을 결정하고 필요한 객체를 직접 new ~ 해서 객체를 생성하고 사용했다. 즉 모든 작업을 프로그래머가 제어하며 추상 객체가 아닌 구현 객체가 프로그램의 제어 흐름을 스스로 조종했다. 다르게 말하면 의존성이 높은 코드를 만드는 것이다. 하지만 프로그램의 제어 흐름에 대한 권한을 직접 제어하는, 즉 의존성이 높은 코드는 코드의 유지 보수를 어렵게 하고 재사용을 방해한다. 그렇기 때문에 객체에 대한 제어권을 객체가 직접 가지고 있는 것이 아니라 외부에서 관리하는 것을 제어의 역전(IoC)라고 한다. 프로그램은 내가 어떤 유형..
1. Overloading이란? 클래스 내에 동일한 이름을 가진 메서드가 여러개 존재하더라도 매개변수의 갯수, 매개변수의 타입이 다르면 메서드 이름을 변경하지 않고 사용할 수 있다. public class Member() { private String name; private String job; private int age; public void printInfo(String name) { System.out.println("이름 : " + name); } public void printInfo(String name, String job) { System.out.println("이름 : " + name); System.out.println("직업 : " + job); } public void print..