전체 글153 [Project] 댓글 기능 컨트롤러와 서비스코드 작성 저번 글에서 해시태그 검색 기능까지 구현하였다. 일반적인 게시판이면 게시글들을 쓰면 거기에 댓글을 달 수가 있다. 구현해보도록 하겠습니다. ArticleCommentController RequiredArgsConstructor @RequestMapping("/comments") @Controller public class ArticleCommentController { private final ArticleCommentService articleCommentService; @PostMapping("/new") public String postNewArticleComment(ArticleCommentRequest articleCommentRequest) { articleCommentService.saveA.. Project/project-board 2022. 8. 3. find vs get (네이밍 컨벤션과 JPA에서의 내부 동작 차이) 프로젝트를 하면서 getReferenceByid라는것을 알았는데요 여기에 대해서 정리해 보도록 하겠습니다. 여기서 getReferenceByid는 findById와 다른데요. 간단하게 알아 보겠습니다. Optional findById(ID id) : 탐색하다. 탐색 결과가 없을 수 있음. 내부 예외 발생 없음. T getOne(ID id) : 가져오다. 가져오려는 대상이 없을 시, 내부에서 예외 발생. (EntityNotFoundException) getOne은 Deprecated 되었고 대신 getReferenceById 가 권장됨. getReferenceById는 EntityManager#getReference 를 사용하며, 조회된 entity 내부값 접근 전까지 lazy loading처리함. Rep.. JPA 2022. 8. 3. [Batch] Execution 데이터 공유 스프링 배치에서는 데이터를 공유할 수 있습니다. BATCH_JOB_EXECUTION Job이 실행되는 동안 시작/종료 시간, job 상태 등을 관리 BATCH_JOB_EXECUTION_CONTEXT Job이 실행되며 공유해야할 데이터를 직렬 화해 저장 BATCH_STEP_EXECUTION Step이 실행되는 동안 필요한 데이터 또는 실행된 결과 저장 BATCH_STEP_EXECUTION_CONTEXT Step이 실행되며 공유해야할 데이터를 직렬 화해 저장 저번 글에서 적은 내용입니다. 위와같이 Job과 Step 에는 EXECUTION과 EXECUTION_CONTEXT 가 있습니다. 두 개가 데이터를 저장하는 역할을 합니다. 여기서 BATCH_JOB_EXECUTION_CONTEXT와 BATCH_STEP_E.. Spring Boot/Batch 2022. 7. 28. [Batch] 메타데이터, 메타 테이블 이전글에서 간단하게 Spring Batch가 수행되게 구현해보았습니다. JobRepositoy db또는 메모리에 스프링배치가 실행할 수 있도록 배치 메타데이터로 관리하는 클래스입니다. 메타데이터는 나중에 더 자세히 알아보겠습니다. 여기에 이어지는 글입니다. 메타 데이터란, 데이터를 설명하는 데이터라고 보시면 됩니다. 위키피디아보다 나무위키가 더 설명이 잘되어있어 나무위키 링크를 첨부합니다 Spring Batch의 메타 데이터는 다음과 같은 내용들을 담고 있습니다. 이전에 실행한 Job이 어떤 것들이 있는지 최근 실패한 Batch Parameter가 어떤것들이 있고, 성공한 Job은 어떤것들이 있는지 다시 실행한다면 어디서 부터 시작하면 될지 어떤 Job에 어떤 Step들이 있었고, Step들 중 성공한 .. Spring Boot/Batch 2022. 7. 28. [Batch] 스프링 배치 시작하기 배치란? 배치작업은, 데이터를 실시간으로 처리하는게 아니라, 일괄적으로 모아서 처리하는 작업을 의미한다. 가령, 하루동안 쌓인 데이터를 배치작업을 통해 특정 시간에 한꺼번에 처리하는 경우가 이에 해당한다. 은행의 정산작업과 같은 업무에서 이런 일괄처리를 수행하게 되며 사용자에게 빠른 응답이 필요하지 않은 서비스에 적용할 수 있다. 특정 시간이후에는 자원을 거의 소비하지 않는 것이 특징이다. 큰 단위의 작업을 일괄 처리 대부분 처리량이 많고 비 실시간성 처리에 사용 - 대용량 데이터 계산, 정산, 통계, 데이터베이스, 변환 등 컴퓨터 자원을 최대로 활용 - 컴퓨터 자원 사용이 낮은 시간대에 배치를 처리하거나 - 배치만 처리하기 위해 사용자가 사용하지 않는 또 다른 컴퓨터 자원을 사용 사용자 상호 작용으로 .. Spring Boot/Batch 2022. 7. 28. [java] stream 스트림이란? 자료가 묘여 있는 배열이나 컬렉션 또는 특정 범위 안에 있는 일련의 숫자를 처리하는 기능이 미리 구현되어 있다면 프로그램의 코드가 훨씬 간결해지고 일관성 있게 다룰 수 있습니다. 예를 들어 배열 요소를 특정 기준에 따라 정렬(sorting)하거나, 요소중 특정 값은 제외하고 출력하는(filter) 기능처럼 말입니다. 이렇게 여러 자료의 처리에 대한 기능을 구현해 놓은 클래스가 스트림(stream)입니다. 스트림을 활용하면 배열, 컬렉션 등의 자료를 일관성 있게 처리할 수 있습니다. 자료에 따라 기능을 각각 새로 구현하는 것이 아니라 처리해야 하는 자료가 무엇인지와 상관없이 같은 방식으로 메서드를 호출할 수 있기 때문에 다른 말로는 자료를 추상화했다고 표현할 수 있습니다. 배열을 예로 들어 보.. Java 2022. 7. 27. [JUnit5] 마이그레이션 기본적으로 스프링 부트로 프로젝트를 만들면 spring boot-starter-test 에 JUnit5 가 포함되어 있고 junit-vintage-engine은 빠져있습니다. 지금은 공부를 하고 있으니깐 추가해줍니다. // https://mvnrepository.com/artifact/org.junit.vintage/junit-vintage-engine testImplementation group: 'org.junit.vintage', name: 'junit-vintage-engine' 이러면 jupiter가 아닌 그냥 junit @Test 어노테이션이 생깁니다. package me.jisu.javatest; import org.junit.Before; import org.junit.Test; publi.. Spring Boot/JUnit5 2022. 7. 22. [JUnit5] JUnit 5: 확장 모델 JUnit 4의 확장 모델은 @RunWith(Runner), TestRule, MethodRule 이 있는데 JUnit 5의 확장 모델은 단 하나, Extension 이다. 등록방법에는 3가지가 있다. 등록 방법 선언적인 등록 @ExtendWith 프로그래밍 등록 @RegisterExtension 자동 등록 자바 ServiceLoader 이용 @ExtendWith package me.jisu.javatest; import jdk.jfr.Threshold; import org.junit.jupiter.api.extension.AfterTestExecutionCallback; import org.junit.jupiter.api.extension.BeforeTestExecutionCallback; import.. Spring Boot/JUnit5 2022. 7. 22. [Junit5] junit-platform.properties 위와 같이 test/resources/ 밑의 파일을 만들어 주면된다. junit.jupiter.testinstance.lifecycle.default = per_class junit.jupiter.conditions.deactivate = org.junit.*DisabledCondition junit.jupiter.displayname.generator.default = \ org.junit.jupiter.api.DisplayNameGenerator$ReplaceUnderscores junit.jupiter.testinstance.lifecycle.default = per_class 인스턴스를 하나로 공유하겠다. junit.jupiter.conditions.deactivate = org.junit.*Di.. Spring Boot/JUnit5 2022. 7. 22. [JUnit5] 테스트 순서 테스트의 순서는 정해져 있지 않습니다. 하지만 작성한 순서대로 결과 값이 뜨기 떄문에 순서가 적은 순서대로 나오는것처럼 보이는데 이것을 믿고 작성한 순서대로 테스트가 실행된다! 이렇게 믿으면 안됩니다. 왜냐하면 저번글에 작성했던 테스트 클래스의 인스턴스는 기본전략이 테스트메소드마다 생성하기때문에 그런데요. 이것의 이유가 의존성을 낮추고 다른 테스트의 영향을 안 미치게 하기위해서, 즉 각각의 테스트 메소드는 독립적으로 실행되어야 테스트가 잘되는지 알수있기 때문입니다. 하지만 내가 원하는 순서대로 테스트를 작성하고 싶을 때도 있습니다. 시라니오 테스트, 회원가입을 하고 로그인을하고 글을작성하고 닉네임을 변경하고 등등 유스케이스를 테스트하는경우 이 모든 것들이 스테이트 풀하고 상태정보가 유지되게 데이터를 공유.. Spring Boot/JUnit5 2022. 7. 22. [JUnit5] 테스트 인스턴스 @DisplayNameGeneration(DisplayNameGenerator.ReplaceUnderscores.class) class StudyTest { int value = 1; @FastTest @Test @DisplayName("스터디 만들기 ╯°□°)╯ fast") void create_new_study() { System.out.println(value++); Study actual = new Study(10); assertEquals(actual.getLimit(), 10); assertThat(actual.getLimit()).isGreaterThan(0); } @SlowTest @DisplayName("스터디 만들기 \uD83D\uDe31 slow") @Test void create_n.. Spring Boot/JUnit5 2022. 7. 22. [JUint5] 테스트 반복하기 @RepeatedTest @RepeatedTest(10) void repeatTest() { System.out.println("test"); } @RepeatedTest(10)을 하면 10번 테스트를 반복할 수 있다. 반복 횟수 가져오기 @RepeatedTest(10) void repeatTest(RepetitionInfo repetitionInfo) { System.out.println("test" + repetitionInfo.getCurrentRepetition() + "/"+ repetitionInfo.getTotalRepetitions()); } RepetitionInfo를 인자로 받아서 횟수를 알 수 있다. repetitionInfo.getCurrentRepetition() : 현재 몇번째인.. Spring Boot/JUnit5 2022. 7. 22. 이전 1 ··· 4 5 6 7 8 9 10 ··· 13 다음