728x90
Java & Spring
54

OneToOne 관계에서 자식 엔티티를 삭제했을 경우 발생하는 DataIntegrityViolationException

Errororg.springframework.dao.DataIntegrityViolationException: could not execute statement; SQL [n/a]; constraint ["FK7FUJUGL45E8HKHKIO47O2IW29: PUBLIC.ARTICLE FOREIGN KEY(ARTICLE_FILE_ID) REFERENCES PUBLIC.ARTICLE_FILE(ID) (CAST(1 AS BIGINT))"; SQL statement:delete from article_file where id=? [23503-214]]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execu..

Java & Spring 2024.01.03

Redis의 SpinLock을 사용한 동기화 문제 해결

위와 같이 A라는 계좌를 thread1이 사용하고 있을때 동시에 thread2를 사용한다고 할 때 동기화 문제가 발생한다. 구체적으로 두 thread가 동시에 실행하게되면 처음 A계좌에있는 10,000원을 가져다 사용하기 때문에 마지막에 실행을 완료한 thread의 결과가 최종 결과가 된다. 해당 동기화 문제를 해결하기 위해 Redis의 SpinLock을 사용할 수 있다. SpinLock이란 뮤텍스처럼 한 시점의 하나의 스레드에만 접근할 수 있도록 하며 접근하지 못한 다른 스레드들은 접근 할 수 있을 때까지 루프를 돌며 재시도를 하는 것이다.spring-redisDependency 추가implementation 'org.springframework.boot:spring-boot-starter-data-r..

Java & Spring 2023.12.28

[JAVA] Singleton Pattern (싱글톤 패턴)

Singleton Pattern (싱글톤 패턴)은 특정 클래스에 대해서 객체 인스턴스가 하나만 만들어질 수 있도록 해주는 패턴이다. 대신 전역 변수를 사용하게되면 애플리케이션이 시작될 때 생성되고 사용하지 않을 경우 자원만 잡아먹는 꼴이 된다. 하지만 싱글톤 패턴은 필요할 때만 객체를 만들 수 있다. 기본 구현 public class Singleton { private static Singleton uniqueInstance; private Singleton() {} public static Singleton getInstance() { //인스턴스가 생성되지 않았다면 생성 if (uniqueInstance null) { uniqueInstance = new Singleton(); } return uni..

Java & Spring 2023.12.02

Check Exception vs Uncheck Exception

예외 기본 규칙 1. 예외 처리 예외를 처리하기위해 try-catch문을 사용 2. 예외 던짐 예외를 처리하지 않고 계속 던지면 main()의 경우 시스템이 종료되며 웹 애플리케이션의 경우 WAS가 예외를 처리하는데 주로 개발자가 지정한 오류 페이지를 보여준다. Check Exception 체크 예외인 Exception과 그 하위 예외는 모두 컴파일러가 체크한다. 체크 예외는 잡아서 처리하거나 밖으로 던져야한다. 그렇지 않으면 컴파일 에러가 발생한다. 예외를 처리할 수 없을 경우에는 throws 예외를 필수로 선언해주어야 한다. 장점 개발자가 실수로 예외를 누락하지 않도록 컴파일러를 통해 문제를 잡아준다. 단점 개발자가 모든 체크 예외를 반드시 잡거나 던지도록 처리해야한다. 모든 하위 메소드들에 선언한 ..

Java & Spring 2023.11.10

[Java] LinkedList

새로운 객체를 삽입하거나 삭제하기 간편 물리 메모리를 연속적으로 사용하지 않아도 되기 때문에 관리가 간편 ArrayList는 중간 인덱스의 객체를 제어하면 뒤의 객체의 인덱스가 1씩 앞으로 당겨지기때문에 빈번한 객체 삭제와 삽입이 일어나는 곳에서는 ArrayList보다 링크만 변경하면되는 LinkedList가 좋은 성능을 발휘 ArrayList는 내부 배열에 객체를 저장하여 인덱스로 관리하지만 LinkedList는 인접 참조를 링크하여 체인처럼 관리 수정 과정 탐색, 삽입, 삭제: O(n) 시작과 끝의 삽입, 삭제: O(1) ArrayList vs LinkedList 구분 순차적으로 추가/삭제 중간에 추가/삭제 검색 ArrayList 빠름 느림 빠름 LinkedList 느림 빠름 느림 메소드 정리 값 추..

Java & Spring 2023.10.20

[Java] HashMap

Map? 키(key)와 값(value)으로 구성된 Entry 객체를 저장하는 구조 key와 value는 모두 객체 key는 중복 저장될 수 없으며 value는 중복 저장 가능 Map 컬렉션에는 HashMap, Hashtable, LinkedHashMap, Properties, TreeMap 등이 있음 Map의 공통 메소드 메소드 설명 put(key, value) 주어진 키로 값을 저장하며 새로운 키일 경우 null을 반환하고 동일한 키가 있을 경우 값을 대체하고 이전 값을 리턴 containsKey(key) 주어진 키가 있는지 여부 containsValue(value) 주어진 값이 있는지 여부 entrySet() 키와 값의 쌍으로 구성된 모든 Map.Entry 객체를 Set에 담아 반환 get(key) ..

Java & Spring 2023.10.19

[Java] JVM과 Java의 실행 순서

JVM(Java Virtual Machine) 자바 소스 파일(*.java)를 컴파일링한 바이트 코드 파일(*.class)는 해석하고 실행할 수 있는 가상의 운영체제가 필요하다. 그것이 JVM(Java Virtual Machine)이다. 운영체제별로 프로그램을 실행하고 관리하는 방법이 다르기 때문에 JVM은 운영체제에 종속적이다. 운영체제별로 제공되는 JDK 또는 JRE를 설치하면 자동으로 JVM이 설치된다. 즉, JVM도 운영체제별로 설치된다. 소스 파일(*.java) 작성 컴파일러(javac.exe)로 컴파일 생성된 바이트 코드 파일(*.class)는 JVM(java.exe)에 의해 해석되고 해당 운영체제에 맞게 기계어로 번역 후 실행

Java & Spring 2023.10.12

[Java] 배열과 리스트를 정렬할 수 있는 방법 정리

Arrays.sort() 배열을 오름차순 정렬 import java.util.Arrays; int[] array = {2, 6, 3, 1}; Arrays.sort(array); // [1, 2, 3, 6] Collections.sort() 컬렉션(List, Set)을 오름차순 정렬 import java.util.Collections; import java.util.List; import java.util.ArrayList; List list = new ArrayList(); list.add(3); list.add(1); list.add(6); list.add(2); Collections.sort(list); // [1, 2, 3, 6] Comparable TreeSet과 TreeMap은 정렬을 위해 ja..

Java & Spring 2023.10.09

[Java] Stack 정리

Stack 나중에 넣은 객체가 먼저 빠져나가는 LIFO(Last In First Out) 구조 그래프 깊이 우선 탐색(DFS)에 사용 대표적인 예로 JVM 스택 메모리가 있다. 스택 메모리에 저장된 변수는 나중에 저장된 것부터 제거된다. import java.util.Stack; // E: 리턴 타입 Stack stack = new Stack(); 메소드 설명 push 주어진 객체를 스택에 추가 peek 스택의 맨 위(뒤) 객체를 가져온다. 객체를 스택에서 제거하지 않는다. pop 스택의 맨 위(뒤) 객체를 가져온다. 객체를 스택에서 제거한다. clear 스택 비우기

Java & Spring 2023.10.09
728x90