본문 바로가기

분류 전체보기88

JdbcTemplate batchUpdate()를 이용한 Batch insert 프로젝트 진행 중 대량의 insert를 수행할 필요가 있었습니다. 시나리오는 아래와 같습니다. 1. ticket 이 만료되면 ticket_record 가 생성됩니다. ticket_record는 만료시간, 활성시간(단위: 초) 필드를 가집니다. 2. 하루가 종료되는 시점에 만료되지 않은 ticket 이 존재하면 일괄적으로 만료시켜야 합니다. 3. ticket 의 일괄 만료에 따라 ticket_record 의 일괄 생성이 필요합니다. JPA saveAll() @Test void saveAll() { //given List members = new ArrayList(); for(int i=0; i 2023. 4. 24.
문자열 StringBuilder 더하기 연산을 통해 새로운 문자열을 만들면 문자의 배열을 복사하면서, 새로운 문자열 객체가 생성된다. 길이가 N인 새로운 문자열을 만드는데 O(N)이 소요된다. StringBuilder는 새로운 문자열을 만들지 않고 내부 배열에서 직접 수정한다. 문자열의 길이가 너무 길어지면 배열 크기를 늘려주기 때문에 O(N)의 시간 복잡도를 가지나 이는 가끔 일어나는 작업이기 때문에 기대 시간 복잡도는 O(1)이 된다. 메서드 역할 시간 복잡도 StringBuilder.toString() 구성한 문자열을 String 형식으로 반환한다. O(N) StringBuilder.append(char c) 문자 c를 문자열 끝에 이어 붙인다. O(1) StringBuilder.length() 구성한 문.. 2023. 4. 20.
an attempt was made to access a socket in a way forbidden by its access permissions. Docker를 이용해 컨테이너를 이것저것 띄우다 보면 해당 포트를 사용할 수 없다는 메시지와 함께 제목과 같은 오류를 만날 수 있다. 명령어를 통해 확인해보면 일정 범위의 포트를 이용할 수 없는 상태라는 것을 알 수 있다. netsh interface ipv4 show excludedportrange protocol=tcp 아래 명령어를 통해 winnat 서비스를 중지시킨 후 다시 실행하면 포트 제외 범위가 줄어들어 원하는 포트를 이용할 수 있다. net stop winnat net start winnat 2023. 4. 17.
[Session] Redis 세션 클러스터링 세션 기반 인증 수행시 세션에 관한 정보는 서버 메모리에 저장된다. 때문에 다중 서버 환경에서는 서버 간 세션을 공유 또는 동기화를 수행해주어야 한다. 세션 동기화를 위한 대표적인 방법 중 하나인 Redis를 이용한 세션 클러스터링을 구현해보도록 한다. 본 게시물은 구글링을 통한 몇몇 블로그와 아래 문서를 참조하였습니다. Spring Session - Spring Boot :: Spring Session After adding the required dependencies, we can create our Spring Boot configuration. Thanks to first-class auto configuration support, setting up Spring Session backed by.. 2023. 4. 15.
MySQL, Spring 프로젝트 연동시 예약어 문제 언젠가는 상위 버전으로 업그레이드할 수 있으므로 향후 예약어도 살펴보는 것이 좋습니다. 이러한 단어는 상위 버전의 MySQL을 다루는 설명서에서 찾을 수 있습니다. (MySQL 공식 문서 9.3 Keywords and Reserved Words 중)(DeppL 번역) 일반적으로 group 이라는 이름은 대표적인 예약어 중 하나이다. 때문에 JPA를 배울때도 예제 프로젝트에서 @Table(name = "groups") 라는 애노테이션은 항상 따라다녔다. 이번 프로젝트에도 Group 이라는 엔티티가 포함되어 있어 @Table(name = "groups") 애노테이션을 통해서 테이블 이름에 예약어를 사용하지 않도록 하였고, H2 내장 DB에서도 잘 작동되는 것을 확인하였다. Caused by: java.sql.. 2023. 4. 12.
[Spring REST Docs] 활용하기 1. 문서 커스텀하기 @Data public class MemberCreateRequest { @NotNull @Size(min = 2, max = 20) private String name; @Size(min = 2, max = 20) private String nickname; @Max(value = 200) private int age; } @Data public class PostsGetRequest { @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) private LocalDate date; @Size(min = 1) private String title; private int page; private int size; public PostsGetRequest.. 2023. 4. 10.