[Linux] Linux에서 SpringBoot jar 파일 서비스 등록해 자동실행 되게 하기(+ 서비스 관련 기본 명령어들) 서비스 등록을 위한 설정 파일 작성하기 1. 서비스 만들기 vi /etc/systemd/system/${service name}.service [Unit] Description=Service Description After=syslog.target network.target postgresql.service [Service] ExecStart=/bin/bash -c "exec java -jar /usr/local/server/test.jar" Restart=on-failure RestartSec=10 User=root Group=root [Install] WantedBy=mult..
[Redis] Redis의 기본 명령어(Strings, List, Set, Sorted Set, Hash, expire) Redis 기본 자료 구조 및 명령어 Strings Key - Value의 형식을 가지는 자료구조 get key - key에 해당하는 value를 가져오기 set key value - key에 value를 저장 del key - key를 삭제 List Redis Collection 중 하나로 redis Strings의 묶음 자료구조 List라는 이름만 볼땐 LinkedList 같지만 뭔가 Dequee같다 lpush key value - List의 index 0 쪽으로 데이터를 넣기 rpush key value - List의 index last 쪽으로 데이터를 넣기 lrange key ..
[Spring] Jpa insert default value 알아보기 Spring JPA를 사용하면 데이터베이스 테이블에 새로운 레코드를 삽입할 때, 기본값(default value)을 지정할 수 있습니다. 데이터베이스에서 기본값을 지정하면 JPA에서 이를 인식하여 적용할 수 있습니다. 이 글에서는 JPA에서 기본값을 삽입하는 방법을 소개하고, @DynamicInsert, @DynamicUpdate, @PrePersist, @PreUpdate 어노테이션을 활용하여 기본값을 삽입하는 방법을 알아보겠습니다. 1. columnDefinition JPA에서는 엔티티 클래스의 필드에 @Column 어노테이션을 사용하여 데이터베이스 테이블의 컬럼 정보를 설정할 수 있습니다. @Column 어노테이션에는 다양한 속성..
java for문 vs forEach문 성능 알아보기 1. for문 for문은 배열과 컬렉션의 모든 요소에 대해 인덱스를 이용하여 접근하는 방법입니다. for문은 요소를 읽기 전용으로 접근할 때 가장 효율적입니다. int[] arr = {1, 2, 3, 4, 5}; for (int i = 0; i < arr.length; i++) { System.out.println(arr[i]); } 2. forEach문 forEach문은 Java 5부터 지원하는 향상된 for문입니다. forEach문은 배열과 컬렉션의 모든 요소에 대해 순서대로 접근하는 방법입니다. forEach문은 요소를 수정하지 않고 읽기만 할 때 가장 효율적입니다. List list = Arrays.asList(1, 2, 3, 4, 5); fo..
[Java] 자바 코드 실행 시간 구하는 방법 알아보기 1. System.currentTimeMillis()와 System.nanoTime() 메서드를 사용하는 방법 System.currentTimeMillis() 메서드는 현재 시간을 밀리초 단위로 반환 long startTime = System.currentTimeMillis(); // 실행 시간을 측정하고자 하는 코드 long endTime = System.currentTimeMillis(); long elapsedTime = endTime - startTime; System.out.println("Elapsed time: " + elapsedTime + "ms"); System.nanoTime() 메서드는 현재 시간을 나노초 단위로 반환 long ..
[Spring] JPA native query 사용시 dto mapping 방법 알아보기 1. EntityManager를 사용하여 Native Query 실행 @PersistenceContext private EntityManager entityManager; public List getMyDtoList() { String sql = "SELECT * FROM my_table"; Query query = entityManager.createNativeQuery(sql, MyDto.class); List myDtoList = query.getResultList(); return myDtoList; } EntityManager를 사용하여 Native Query를 실행하고, 이를 DTO 객체에 매핑합니다. 위..
[Spring] JPA In 절 사용방법 알아보기 Spring JPA에서 IN절은 여러 개의 값으로 쿼리를 작성하는 방법입니다. IN절을 사용하여 복수 개의 값으로 필터링할 수 있으며, JPQL, Native Query 및 QueryDSL에서 모두 사용할 수 있습니다. 아래 3가지 방법으로 Spring JPA In절 사용방법을 알아보겠습니다. 1. JPQL에서 In절 사용하기 JPQL에서 IN절을 사용하여 쿼리를 작성하는 방법은 다음과 같습니다. 예를 들어, Customer 엔티티 클래스가 있다고 가정해 봅시다. @Entity public class Customer { @Id private Long id; private String firstName; private String lastName; priv..
[Spring] DB커넥션풀과 Hikari CP 알아보기 1. DB커넥션 풀이란? DB 커넥션 풀은 DB 연결을 관리하는 기술입니다. DB 연결은 매우 비싼 작업이며, 매번 연결을 생성하는 것은 성능적으로 비효율적입니다. 따라서, DB 연결을 미리 생성하여 풀(pool)에 저장해 두었다가 필요할 때마다 풀에서 연결을 가져와 사용하고, 사용이 끝난 연결을 다시 풀에 반환하는 방식으로 동작합니다. 2. Hikari CP란? HikariCP는 Java에서 사용되는 DB 커넥션 풀 라이브러리 중 하나입니다. HikariCP는 가볍고 빠른 성능을 제공하면서도 안정적이다. 1. Hikari CP 특징은? 1.빠르고 가벼움 HikariCP는 코드가 간단하고 가벼워서 빠른 속도와 적은 메모리 사용량을 제공합니다. 그리..
Over-fetching vs Under-fetching 알아보기 1. Over fetching Over-fetching은 클라이언트가 필요로 하지 않는 정보를 서버에서 받아오는 것을 의미합니다. 예를 들어, 클라이언트가 사용자 이름만 필요한데, 서버에서는 사용자 정보의 모든 필드를 반환하는 경우입니다. 이 경우, 클라이언트는 필요하지 않은 데이터를 받아와서 불필요한 데이터 전송량이 증가하게 되고, 서버 부하가 증가합니다. 2. Under fetching Under-fetching은 클라이언트가 필요로 하는 정보를 얻기 위해 여러 번의 요청을 보내야 하는 것을 의미합니다. 예를 들어, 사용자 정보를 조회하는 API가 있다고 가정해봅시다. 이 API에서는 사용자 정보와 함께 해당 사용자의 게시글 목록도 반..
[Spring] default_batch_fetch_size의 작동원리 알아보기 Spring에서 default_batch_fetch_size는 Hibernate의 설정 중 하나로, 지연 로딩을 사용하는 엔티티에서 일괄 조회할 때 fetch size를 설정하는 옵션입니다. 설정 값은 정수 형태로 지정되며, 한 번의 쿼리로 가져올 엔티티 수를 결정합니다. 예를 들어, default_batch_fetch_size를 20으로 설정하면, 쿼리 한 번으로 20개의 엔티티를 가져올 수 있습니다. 이렇게 일괄 조회를 하면 데이터베이스와의 통신 횟수가 감소하게 되어 성능 향상을 기대할 수 있습니다. 문제점 default_batch_fetch_size를 지나치게 크게 설정하면 네트워크 및 메모리 문제가 발생할 수 있습니다..