- Spring 썸네일형 리스트형 [Spring Hateoas 1.2] 소개 및 프로젝트 설정 1-1. HATEOAS 란? HATEOAS는 Hypermedia As The Engine Of Application State의 약자 하이퍼미디어를 REST API의 상태 정보를 관리하기 위한 메커니즘으로 활용하는 것 REST API에서 클라이언트에 리소스를 넘겨줄 때 특정 부가적인 리소스의 링크 정보를 넘겨주게 되며 이를 통해 REST API의 리소스 상태에 따른 관리 1-2. 사용하는 이유? HATEOAS를 쓰는 이유는 다음과 같은 기존 REST API의 단점을 보완 REST API는 앤드포인트 URL이 정해지고 나면 이를 변경하기 어렵다는 단점 존재, 만일 API의 URL을 변경하게 되면 모든 클라이언트의 URL까지 수정해야 하기 때문에 번거로워지므로 기존 다른 API를 지속적으로 추가하게 되어 U.. 더보기 [Spring Batch] cannot be cast to org.springframework.batch.item.~ 모니터링 배치를 만들 일이 생겼습니다. 미발송 데이터를 읽어 슬랙으로 알림 처리를 하는 배치인데, 리더를 구현 후 JUnit으로 테스트를 시도했더니 본 적 없던 에러가 발생했습니다. 늘 쓰던 JdbcPagingItemReader였는데... 레퍼런스의 예제와도 동일한데 아래와 같이 에러가 발생했습니다. java.lang.ClassCastException: com.sun.proxy.$Proxy254 cannot be cast to org.springframework.batch.item.support.AbstractItemCountingItemStreamItemReader java.lang.ClassCastException: com.sun.proxy.$Proxy254 cannot be cast to org.s.. 더보기 [Spring Batch] If you want to run this job again, change the parameters. 이전에 스프링 배치의 기본 개념을 설명한 글에서 JobParameter에 대한 간단한 설명을 한 적이 있습니다. https://halfstorage.tistory.com/31?category=857145 스프링 배치 기본 개념 스프링 배치는 스프링에서 기본적으로 제공하는 일괄처리를 위한 기능입니다. - Job 하나의 배치 작업을 Job이라고 하며, Job은 최소 하나 이상의 Step을 수행해야합니다. - JobInstance Job�� halfstorage.tistory.com "JobInstance와 JobParameters는 1:1 관계입니다." 1:1 관계를 지키지 않고 Job을 실행시키게 되면 처음 동작할 Job은 1:1 관계임으로 정상 동작하지만 두 번째 동작할 때부터는 아래와 같은 에러가 발생.. 더보기 [JPA] Embeddable, Embedded 한 테이블에 동일하게 받는 데이터를 저장할 일이 생겼습니다. 아래와 같이 일일이 선언해도 무방하지만, @Embeddable과 @Embedded 어노테이션이 있다는 것을 알게 되어 사용해봤습니다. - 기존 - @Embedded @Embedded를 사용하면 같은 형태의 데이터를 위와 같이 매핑정보를 분리하여 사용할 수 있습니다. 다만 @Embedded를 통해 다른 객체를 필드에 선언한 경우 해당 엔티티에서는 다른 컬럼명을 사용하기 때문에 @AttributeOverride로 재정의가 필요합니다. @Embedded를 사용하기 위해서는 @Embeddable이 필요합니다. 당연히 테이블에는 각 컬럼이 존재해야 합니다! 더보기 [JUnit 5] @TestMethodOrder 테스트 순서를 정할 수 있는 @TestMethodOrder 어노테이션입니다. 아래와 같이 @Order(n)를 사용해서 먼저 실행될 메소드를 지정할 수 있습니다. 더보기 [Spring] 기본개념 및 어노테이션 - 스프링은 자바 플랫폼을 위한 오픈소스 애플리케이션 * 크기와 부하 측면에서 경량화 * IoC 컨테이너로 애플리케이션의 느슨한 결합 * 의존성 주입을 통해 각 계층이나 서비스들간의 의존성 동기화 * 자바의 리플렉션을 이용해서 객체의 생명주기를 관리 - MVC * Model: 핵심적인 비즈니스 로직으로 DB를 관리 * View: 사용자에게 보여주는 화면 * Controller: 모델과 뷰 사이에서 정보교환을 할 수 있도록 연결시키는 역할 - 스프링에서 AOP * 관점 지향 프로그래밍의 약자로 비즈니스 로직의 앞 뒤에서 원하는 지점에 공통 관심사가 수행할 수 있게 하면서 중복 코드를 줄이는 방식(모듈화) * Bean에만 등록 - 스프링 DI (Dependency Injection) * 데이터 주입만 담당하.. 더보기 [JUnit 5] Assertion 1. assertEquals 같은 값인 경우인지(유효한지) 확인할 때 사용합니다. public static void assertEquals(Object expected, Object actual, String message) { AssertEquals.assertEquals(expected, actual, message); } 메시지만 출력할 경우 아래와 같이 String만 입력해도 무관합니다. 2. assertNotEquals public static void assertNotEquals(Object unexpected, Object actual, Supplier messageSupplier) { AssertNotEquals.assertNotEquals(unexpected, actual, message.. 더보기 [JUnit 5] 기본 JUnit 5 - java 8 이상. - spring-boot 2.2 이상에서 기본으로 JUnit5 제공 - 기본 어노테이션 @Test @BeforeAll / @AfterAll @BeforeEach / @AfterEach @Disabled 해당 어노테이션의 실행 순서는 아래와 같습니다. @DisplayName - 어떤 테스트인지 테스트 이름을 보다 쉽게 표현할 수 있는 방법을 제공하는 어노테이션. * intelliJ에서 결과 탭에 DisplayName으로 메소드명이 나오지 않는다면 이전에 포스팅한 글과 마찬가지로 설정을 변경해주세요! https://halfstorage.tistory.com/33 No tests found for given includes 테스트 코드 작성 후 실행을 시키려고 하니 아래와.. 더보기 이전 1 2 3 다음