분류 전체보기

DataBase/My-Batis

Out Of Memory Error. MyBatis Batch Insert 시 OOME 방지.

1. 일반적인 경우의 MyBatis Insert. 어떤 로직을 거쳐 생성된 객체 100만개를 DB에 insert 해야 하는 상황이다. private List getMemoList() { List list = new ArrayList(); // 100만번 loop를 돌아 100만개의 요소를 생성해 list에 add 한다. for (int i = 0; i < 1_000_000; i++) { MemoDTO memo = new MemoDTO(); memo.setMemberId(1); memo.setMemo("메모 테스트 입니다!메모 테스트 입니다!"); list.add(memo); } return list; } 위와 같이 MemoDTO 객체를 100만개 임의로 생성해서 List에 넣었다. 위 객체를 DB에 in..

☕️Java/Test

[JUnit BDD TDD] 테스트 코드 작성 팁

테스트 코드 작성 스타일. Classist. Mockist. and Hybrid. 테스트 코드를 작성하다 보면 각자의 스타일에 따라 작성 방식이 달라지게 된다. @Sql 어노테이션을 이용해서 작성한 SQL 스크립트를 테스트 코드 실행에 사용하는 Classist 스타일과 Mock 클래스를 inject 해서 사용하게 되는 Mockist 스타일로 나눌 수 있다. 1. Classist. Class를 있는 그대로 사용해 테스트 하는 스타일을 classist라고 한다. Sql 스크립트를 이용해서 하는 테스트의 경우에는 DB 쿼리 수행 부터 서비스 계층까지 한 번에 테스트 할 수 있다는 장점이 있다. @SpringBootTest class TestClass { @Autowired CalculateService cal..

☕️Java/Date API

[Java 날짜 API] Date to LocalDate, LocalDateTime, DateTime.

Java 날짜 API. Date. LocalDate. LocalDateTime. DateTime. Java의 날짜 API는 우여곡절이 많았다. Java 1.0에서 처음 등장한 Date객체는 사용성과 안정성이 매우 떨어지는 API 였다. 때문에 JodaTime과 같은 Open Source 날짜 API가 한동안 사용되 왔다. 그러다 JDK 1.8 버전이 등장하면서 비로소 java.time 패키지가 제공되며 공식적으로 개선된 날짜 API가 릴리즈 되었다. 위와 같은 이유로 기존 레거시 코드에서는 Date를 사용하고 있는 상태가 많다. Date 객체를 LocalDateTime 객체로 서서히 migration 해가야 하는 상황에 있다면, 이들 날짜 API 간에 형변환 해야 하는 상황이 많을 것이다. 그래서 아래에..

☕️Java/Java Basic

Java의 날짜 API 변천사.

결론 java.util.date 클래스와 Calendar 객체 대신. 1.8에서 지원하는 java.time 패키지의 날짜객체들을 사용하는 것이 좋습니다. 기존의 Java 날짜 객체의 문제점 Java 1.0은 날짜와 관련된 Date객체를 함께 출시 했습니다. import java.util.Date; Date now = new Date(); // 2022-12-05 23:35:02. 생성. 그러나 1.0 에서 지원하는 Date 객체는 여러가지 문제점을 가지고 있었습니다. 햇갈리는 생성자 설계 Date객체 생성자의 파라미터들은 순서대로 '연-월-일 시간-분-초'의 값을 갖습니다. 그렇다면 아래와 같이 파라미터를 입력해서 '2022-12-05 23:45:00' 값을 갖는 날짜 객체를 생성할 수 있을까요. Dat..

엑셀

셀을 범위로 선택하는 법.

적용하려는 셀이 A10 부터 A25 까지라면? A10:A25 로 입력하면 된다.

엑셀

엑셀에 행별로 문구를 커스텀 하는 방법

="INSERT INTO table_name (`name`, `type`, `address`, `record_type`, `sales_month`, `amount`, `country_code`, `purchase_code`, `item_code`, `updated_at`, `created_at`) VALUES ( '"&B11&"' , '"&C11&"', "&F11&" , '"&G11&"', "&H11&","&K11&", '"&A11&"', "&I11&", '"&J11&"', now(), now());" 위와 같이 " " 에 넣고자하는 문구를 넣고, & 와 셀 위치인 A12 같은 것을 연결해 붙인다. & 가 코딩에서 문자열 합칠때 + 와 같은 역할을 한다. ex) A2가 "철수" 일 때. ="안녕 "&A2..

☕️Java/Java Basic

List를 1000건씩 삽입하는 방법.

방법 1. subList 메서드를 이용한 방법. for (int i = 0; i < data.size(); i += 1000) { memberMapper.bulkRegister(data.subList(i, Math.min(i + 1000, data.size()))); } - subList를 활용한 방법은 OOME를 야기 할 수 있다. subList를 활용해서 쪼개진 List를 만들 때 마다 constructor에서 새로운 List를 할당해 주기 때문이다. 방법 2. 단순 반복문으로 매 1000건 마다 insert 해주는 방식. List partedData = new ArrayList(); for (int i = 0; i < data.size(); i++) { partedData.add(data.get(i..

☕️Java/Java Basic

Java partition list by size.

1000개 단위로 리스트를 짜르려면, sublist 와 반복문을 사용한다. https://stackoverflow.com/questions/5824825/efficient-way-to-divide-a-list-into-lists-of-n-size Efficient way to divide a list into lists of n size I have an ArrayList, which I want to divide into smaller List objects of n size, and perform an operation on each. My current method of doing this is implemented with ArrayList objects in Java. Any stackoverf..