분류 전체보기
-
@Value를 이용하여 application.yml에 등록한 property값을 읽어오는 경우가 있다 이러한 경우에 test를 작성할 때 원하는 값을 넣어주고 싶은 경우 어떻게 하는지 알아보도록 하자 크게 2가지의 상황으로 나누어 볼 수 있다 @SpringBootTest @SpringBootTest를 사용하지 않는 경우 @Component @Data public class TestComponent { @Value("${my.test.value}") public String initValue; public void printA() { System.out.println(initValue); } } @SpringBootTest public class UnitTest { @Autowired public Test..
[Test] 테스트 작성시 @Value 주입 방법@Value를 이용하여 application.yml에 등록한 property값을 읽어오는 경우가 있다 이러한 경우에 test를 작성할 때 원하는 값을 넣어주고 싶은 경우 어떻게 하는지 알아보도록 하자 크게 2가지의 상황으로 나누어 볼 수 있다 @SpringBootTest @SpringBootTest를 사용하지 않는 경우 @Component @Data public class TestComponent { @Value("${my.test.value}") public String initValue; public void printA() { System.out.println(initValue); } } @SpringBootTest public class UnitTest { @Autowired public Test..
2024.01.01 -
mysql에서는 다양한 방법의 중복 데이터 관리 방식이 있다 각각의 방식들을 한번 알아보도록 하자 insert ignore replace on dupicate key update 중복으로 인지하는 경우는 아래와 같다 데이터 삽입 시, PRIMERY KEY나 UNIQUE KEY가 중복되었을 경우 insert ignore 새로 추가로 온 insert 무시 INSERT IGNORE INTO TABLE_NAME (column1, column2, column3) VALUES ('kim', 1000, 0); replace 기존의 레코드를 삭제하고 다시 데이터 삽입 레코드가 삭제되고 다시 삽입되기 때문에 AUTO_INCREMENT로 ID값을 지정했을 경우 ID값이 변한다 REPLACE INTO TABLE_NAME (..
[MySQL] 중복 데이터 관리(on duplicate key update..)mysql에서는 다양한 방법의 중복 데이터 관리 방식이 있다 각각의 방식들을 한번 알아보도록 하자 insert ignore replace on dupicate key update 중복으로 인지하는 경우는 아래와 같다 데이터 삽입 시, PRIMERY KEY나 UNIQUE KEY가 중복되었을 경우 insert ignore 새로 추가로 온 insert 무시 INSERT IGNORE INTO TABLE_NAME (column1, column2, column3) VALUES ('kim', 1000, 0); replace 기존의 레코드를 삭제하고 다시 데이터 삽입 레코드가 삭제되고 다시 삽입되기 때문에 AUTO_INCREMENT로 ID값을 지정했을 경우 ID값이 변한다 REPLACE INTO TABLE_NAME (..
2023.12.26 -
ForkJoinPool java 7부터 사용가능한 Java Concurrency Framework 분할 정복(Divide and Conquer) 알고리즘과 유사한 구조 동일한 작업을 여러 개의 Sub Task로 분리(Fork)하여 각각 처리하고, 이를 최종적으로 합쳐서(Join) 결과를 만들어내는 방식 -> 대규모 작업을 빠르게 처리하는 데 도움 스레드풀의 큐(inbound queue)에 작업이 할당되면 pool 내의 스레드들이 해당 작업을 가져가서 수행한다. 각 스레드들은 다시 본인의 작업 큐(work queue)를 가진다. 각 스레드들의 작업 큐는 deque 자료구조를 가진다 (작업 스레드는 한쪽에서 꺼내 쓰고, 다른 스레드가 작업을 stealing 할 때 다른 한쪽을 사용) 작업 스틸링(Work ..
[Java] ForkJoinPool이란 (ParellelStream)ForkJoinPool java 7부터 사용가능한 Java Concurrency Framework 분할 정복(Divide and Conquer) 알고리즘과 유사한 구조 동일한 작업을 여러 개의 Sub Task로 분리(Fork)하여 각각 처리하고, 이를 최종적으로 합쳐서(Join) 결과를 만들어내는 방식 -> 대규모 작업을 빠르게 처리하는 데 도움 스레드풀의 큐(inbound queue)에 작업이 할당되면 pool 내의 스레드들이 해당 작업을 가져가서 수행한다. 각 스레드들은 다시 본인의 작업 큐(work queue)를 가진다. 각 스레드들의 작업 큐는 deque 자료구조를 가진다 (작업 스레드는 한쪽에서 꺼내 쓰고, 다른 스레드가 작업을 stealing 할 때 다른 한쪽을 사용) 작업 스틸링(Work ..
2023.12.21 -
gradle-plugin을 이용해서 spring-boot image를 쉽게 만들 수 있다 해당 task에서 어떻게 image를 생성하는지 알아보자 https://docs.spring.io/spring-boot/docs/current/gradle-plugin/reference/htmlsingle/#build-image 해당 문서에서 알아보려고 하는 내용에 대해서 가이드 하고 있다 Packaging OCI Images The plugin can create an OCI image from a jar or war file using Cloud Native Buildpacks (CNB). Images can be built using the bootBuildImage task. gradle plugin에서는 C..
[Gradle] bootBuildImage task (buildpack, builder)gradle-plugin을 이용해서 spring-boot image를 쉽게 만들 수 있다 해당 task에서 어떻게 image를 생성하는지 알아보자 https://docs.spring.io/spring-boot/docs/current/gradle-plugin/reference/htmlsingle/#build-image 해당 문서에서 알아보려고 하는 내용에 대해서 가이드 하고 있다 Packaging OCI Images The plugin can create an OCI image from a jar or war file using Cloud Native Buildpacks (CNB). Images can be built using the bootBuildImage task. gradle plugin에서는 C..
2023.12.15 -
스프링 부트 애플리케이션에서 dependency를 관리하는 방법은 2가지이다 io.spring.dependency-management plugin 이용 gradle native bom 지원 이용 io.spring.dependency-management plugin plugin에서 제공하는 property를 이용하여 버전 등의 customizing 가능 plugin : https://plugins.gradle.org/plugin/io.spring.dependency-management plugins { id 'org.springframework.boot' version '2.7.17' id 'io.spring.dependency-management' version '1.0.15.RELEASE' } depe..
[Gradle] dependency 관리 (related with maven bom)스프링 부트 애플리케이션에서 dependency를 관리하는 방법은 2가지이다 io.spring.dependency-management plugin 이용 gradle native bom 지원 이용 io.spring.dependency-management plugin plugin에서 제공하는 property를 이용하여 버전 등의 customizing 가능 plugin : https://plugins.gradle.org/plugin/io.spring.dependency-management plugins { id 'org.springframework.boot' version '2.7.17' id 'io.spring.dependency-management' version '1.0.15.RELEASE' } depe..
2023.12.04 -
Gradle에서는 plugin 기능을 제공한다. 그중에서도 java, java-libray plugin은 기능은 자바 프로젝트를 빌드하는데 거의 필수적으로 필요한 plugin들이다. apply plugin: 'java' apply plugin: 'java-library' java-libray는 java를 상속받은 plugin으로 java plugin이 제공하는 모든 configuration을 제공한다 추가적으로, java-libray plugin이 api configuration 제공 api로 선언된 의존성은 소비자의 compile classpath와 runtime classpath 모두에 포함 implementation configuration은 내부에서 사용되는 의존성을 선언하는 데 사용 implem..
[Gradle] dependencies - implementation, apiGradle에서는 plugin 기능을 제공한다. 그중에서도 java, java-libray plugin은 기능은 자바 프로젝트를 빌드하는데 거의 필수적으로 필요한 plugin들이다. apply plugin: 'java' apply plugin: 'java-library' java-libray는 java를 상속받은 plugin으로 java plugin이 제공하는 모든 configuration을 제공한다 추가적으로, java-libray plugin이 api configuration 제공 api로 선언된 의존성은 소비자의 compile classpath와 runtime classpath 모두에 포함 implementation configuration은 내부에서 사용되는 의존성을 선언하는 데 사용 implem..
2023.11.29 -
Java8에서의 변경된 내역들을 정리해 보도록 하겠습니다 PermGen 영역의 제거 ( to meta space ) Lambda Expression Stream API Interface ( default, static method ) Optional java.time 패키지 나즈혼( javascript engine ) PermGen 영역의 제거 Permanent Generation - Class의 Meta정보나 Method의 Meta정보, Static변수와 상수 정보들이 저장되는 공간, 흔히 메타데이터 저장 영역 위와 같은 Exception은 Heap의 구성 중, Permanent Generation의 memory가 부족한 현상입니다 PermGen 영역은 GC가 되지 않으며 클래스 메타 데이터를 저장하는..
[JAVA] Java8 변경 사항 ( java7 to java8)Java8에서의 변경된 내역들을 정리해 보도록 하겠습니다 PermGen 영역의 제거 ( to meta space ) Lambda Expression Stream API Interface ( default, static method ) Optional java.time 패키지 나즈혼( javascript engine ) PermGen 영역의 제거 Permanent Generation - Class의 Meta정보나 Method의 Meta정보, Static변수와 상수 정보들이 저장되는 공간, 흔히 메타데이터 저장 영역 위와 같은 Exception은 Heap의 구성 중, Permanent Generation의 memory가 부족한 현상입니다 PermGen 영역은 GC가 되지 않으며 클래스 메타 데이터를 저장하는..
2023.11.25 -
@Transactional은 Proxy 방식으로 동작한다 간략하게 어떻게 proxy가 생성되는지 알아보자 @Service @RequiredArgsConstructor public class TestService { public void insertTest(){ // do something } } public class TestServiceProxy{ private final TransactonManager tm = TransactionManager.getInstance(); public void insertTest() { try { tm.begin(); // 트랜잭션 전처리(트랜잭션 시작, autoCommit(false) 등) insertTest(); // 기존 로직 tm.commit(); // 트랜잭션..
[Spring] @Transactional 동작방식 및 주의사항@Transactional은 Proxy 방식으로 동작한다 간략하게 어떻게 proxy가 생성되는지 알아보자 @Service @RequiredArgsConstructor public class TestService { public void insertTest(){ // do something } } public class TestServiceProxy{ private final TransactonManager tm = TransactionManager.getInstance(); public void insertTest() { try { tm.begin(); // 트랜잭션 전처리(트랜잭션 시작, autoCommit(false) 등) insertTest(); // 기존 로직 tm.commit(); // 트랜잭션..
2023.11.21