숑숑이의 개발일기
article thumbnail
[Spring] 스프링 입문 - 코드로 배우는 스프링 부트 #6 스프링 DB 접근 기술
Backend/Spring 2024. 6. 16. 15:26

H2 데이터베이스 설치아래의 링크에서 1.4.200 버전을 설치한다. 만일 이미 설치후 실행까지 했다면 ~/test.mv.db 파일을 꼭 삭제 해야한다.https://www.h2database.com/html/download-archive.html Archive Downloads www.h2database.com 맥 사용자의 경우 cmd에서 권한주기 : chmod 755 h2.sh실행방법h2가 설치된 경로에 있는 bin 폴더에 들어가 아래의 명령어를 cmd에서 입력맥 : ./h2.sh윈도우 : h2.bat 스프링 통합 테스트@SpringBootTest : 스프링 컨테이너와 테스트를 함께 실행함@Transactional : 테스트 케이스에 해당 어노테이션이 존재하면 @test 어노테이션이 붙어있는 테스트 ..

article thumbnail
[DB] Gap Lock, Record Lock, Next Key Lock
Backend 2024. 3. 4. 10:39

실제 Inno DB 내부에서는 여러 트랜잭션들이 경합되고 있는 상황에서 최대한의 성능을 위해 여러 방식의 다양한 락(Lock)을 조합해서 사용하고 있다. 이 과정에서 각 트랜잭션이 획득한 락들은 해당 트랜잭션이 commit/rollback 되어 종료될 때까지 유효한다. MySQL에서의 락의 종류 MySQL에서 사용되는 락은 크게 아래와 같이 나눌 수 있다. 스토리지 엔진 레벨 : 테이블의 데이터를 다루기 위한 락 레코드 락(Record Lock) 갭 락(Gap Lock) 넥스트 키 락(Next Key Lock) 자동 증가 락(Auto Increment Lock) MySQL 엔진 레벨 : 테이블이나 데이터베이스 등과 같은 부분을 위한 락 레코드 락(Record Lock) 일반적으로 레코드 락은 테이블 레코..

article thumbnail
[DB] ERD란? ERD의 정의와 특징
Backend 2024. 2. 23. 03:27

ERD란? 객체-관계 모델(Entity-Relationship Modeling)은 세상의 사물을 개체(Entity)와 개체 간의 관계(Relationship)로 표현하는 데이터 모델링 방식으로 개념적 데이터 모델링 단계에서 사용된다. ERD는 개체 관계도라고도 불린다. 개체, 관계 및 속성에 대한 다양한 표기법을 사용하여 데이터베이스 구조를 시각화하기 때문에 데이터베이스의 구성 요소간 관계를 쉽게 파악하고, 데이터베이스를 이해하고 분석하는데 도움을 받을 수 있다. 장점 구조를 시각적으로 표현하기 때문에 복잡한 구조도 쉽게 이해할 수 있다. 데이터 중심 설계를 가능하게 한다. (=일관성, 정확성 및 효율성을 유지할 수 있다.) 데이터베이스의 설계자, 개발자, 관리자 간의 의사 소통을 원활하게 한다. 개념적..

article thumbnail
[DB] 클러스터 인덱스와 넌클러스터 인덱스
Backend 2024. 2. 16. 02:36

인덱스 요약 데이터를 빠르게 검색할 수 있게 해주는 객체로, 컬럼을 정렬한 후 데이터를 빠르게 찾을 수 있도록 도와주는 역할을 한다. 책으로 비유하자면 색인을 의미한다. 그렇다면 인덱스를 생성하면 무조건 데이터를 빠르게 검색할 수 있을까? 인덱스를 무작정 생성하는 것은 좋은 방법이 아니다. 인덱스 생성시 디스크 공간이 필요하고, 인덱스를 가진 테이블에 DML(insert, delete, update) 작업을 할 경우 더 많은 비용과 시간이 필요하기 때문이다. 그래서 인덱스를 생성할 때에는 테이블의 의도를 정확하게 파악한 후 상황에 맞게 적절한 컬럼으로 Clustered Index와 Non Clustered Index를 구성해야 한다. 클러스터 인덱스 클러스터 인덱스(Clustered Index)의 사전적..

article thumbnail
[DB] RDBMS란? RDBMS에서 지원하는 ACID
Backend 2024. 2. 14. 00:15

RDBMS(관계형 데이터베이스) Relational Database Management System의 약자로 서로 관련된 데이터 지점에 대한 접근을 저장 및 제공하는 데이터베이스 유형이다. 데이터를 테이블에 직관적으로 간단하게 나타내는 관계형 모델을 기반으로 한다. 관계형 데이터베이스에서 테이블의 각 행은 키라는 고유 ID가 포함된 레코드이다. 테이블의 열에는 데이터의 속성이 들어가있다. 각 레코드에는 일반적으로 각 속성에 대한 값이 있으므로 데이터 포인트 간의 관계를 손쉽게 설정할 수 있다. 정리하자면 관계형 데이터베이스는 테이블로 구성되고, 각 테이블은 행(row)와 열(column)으로 이루어져 있다. 각 열(column)은 특정 데이터 유형을 가지고 있으며, 각 행은 데이터 레코드(record)를..

article thumbnail
[JAVA] HashMap이란? 해시충돌(Hash Collision) 발생시 자바는 어떻게 대처할까?
Backend/JAVA 2024. 2. 7. 02:22

HashMap HashMap은 Map의 대표적인 구현 클래스로, Key값의 중복을 허용하지 않는다. Map의 구조인 key-value쌍으로 구성되어 있는것이 특징이다. 즉, 두 Key 객체의 hashCode()값이 같고, equals() 메서드가 true를 반환한다면 같은 객체로 인식한다. HashMap은 입출력 순서가 동일하지 않을 수 있고 초기 저장 용량의 기본값은 16이다. 원소의 개수가 16개가 넘어갈 경우 자동으로 늘어난다. 일정 사이즈가 넘어가면 자동으로 TreeMap으로 변환된다. static final int TREEIFY_THRESHOLD = 8; static final int UNTREEIFY_THRESHOLD = 6; list 형태를 사용하지 않고 HashMap을 사용하는 이유는 성능..

article thumbnail
[JAVA] ArrayList와 LinkedList의 차이점은?
Backend/JAVA 2024. 2. 5. 02:35

ArrayList ArrayList는 대표적인 List 구현 클래스로, List가 지니고 있는 대표적인 특징인 데이터를 인덱스로 관리하는 기능과 저장 공간을 동적으로 관리하는 기능 등을 그대로 지니고 있다. 조회 각 데이터의 index를 가지고 있고 무작위 접근이 가능하기 때문에, 해당 index의 데이터를 한 번에 가져올 수 있다. 삽입 List의 크기를 삽입될 자료만큼 늘리는 연산을 수행한다. 삽입될 자료의 위치를 기준으로 기존의 데이터들을 이동하는 연산을 수행한다. 해당 위치에 자료를 입력한 후 삽입연산을 마친다. 삭제 삭제될 자료가 위치한 인덱스의 자료를 삭제한다. 삭제한 자료의 인덱스를 기준으로 이후의 자료들을 이동하는 연산을 수행한다. List의 맨 마지막 인덱스는 비어있는 상태로 연산을 마친..

[JAVA] Java Generic의 공변, 반공변, 무공변
Backend/JAVA 2024. 2. 2. 04:24

자바에서 우리가 가장 쉽게 접하고 있는 제너릭의 예시는 List가 있다. 아래는 List 내부 구현 코드이다. public interface List extends Collection { boolean add(E e); E get(int index); /***/ } List는 제네릭을 활용하므로, 우리는 다양한 타입의 List를 선언할 수 있다. 또한, List에 잘못된 타입의 값을 추가하는 경우 컴파일 타임에 예방을 해준다. // 다양한 타입의 List 선언가능 List messages = new ArrayList(); List users = new ArrayList(); // 잘못된 타입의 값을 컴파일 에러를 통해 예방 List codes = new ArrayList(); codes.add("1");..

[JAVA] 불변 객체(Immutable Object)란?
Backend/JAVA 2024. 2. 1. 14:47

불변 객체(Immutable Object)란? 객체 지향 프로그래밍에 있어서 불변객체는 생성 후 그 상태를 바꿀 수 없는 객체를 말한다. 그렇기에 생성이후 신뢰할 수 있는 객체가 된다. 대표적인 불변객체로는 Boolean, Integer, String, BigDecimal.. 이 존재한다. 불변이라는 키워드를 놓고 보면 final이라는 예악어가 생각날 수 있는데, 단순히 final을 사용한다고 해서 불변객체를 만드는 것이 아니다. final 예약어를 사용시 각 효과는 아래와 같다. 변수 : 값을 수정할 수 없는 상수로 만들어줌 메소드 : Overriding을 할 수 없음 클래스 : 상속이 불가능 함 즉, 객체 선언시 final을 사용한다고 하더라도 객체 내부상태는 변경할 수 있다. 불변 객체 장점 Thr..

[JAVA] 스레드에서의 경쟁상태(Race condition)
Backend/JAVA 2024. 1. 30. 04:23

Race condition이란? 임계영역(critical section: 공유 메모리에 접근하는 프로그램의 일부)이 두 개 이상의 스레드에 의해 동시에 실행되는 조건으로 정의할 수 있다. 다르게 말해 특정 공유 리소스를 얻기 위해 두개 이상의 스레드가 함께 경쟁하는 조건으로 정의.(동시성 버그, deadlock과 밀접한 연관이 있음) 이는 프로그램의 잘못된 동작으로 이어진다. 예시코드 3개의 쓰레드가 공유하는 변수 c의 값을 조정한다. public class Counter implements Runnable { private int c = 0; public void increment() { try { Thread.sleep(10); } catch (InterruptedException e) { //Aut..