숑숑이의 개발일기
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
[Network] TCP와 UDP란? TCP, UDP의 차이
Network/Network 2024. 3. 5. 15:48

TCP란? TCP(Transmission Control Protocol, 전송 제어 프로토콜)는 인터넷을 통해 디바이스에서 웹 서버로 데이터를 전송하는 네트워크 프로토콜이다. TCP/IP 프로토콜이라고 불리기도 한다. 연속성보다 신뢰성있는 전송이 중요할 때 사용하는 프로토콜로 메신저에서 친구랑 채팅을 하거나, 이메일을 보내거나, 온라인 동영상을 볼 때 TCP 프로토콜을 사용한다. 또한 데이터가 순차적으로 전송되므로 데이터 혼잡과 흐름 제어에 도움이 되며 오류를 쉽게 발견, 수정할 수 있다. TCP는 연결 기반으로 데이터를 전송하는 동안 수신자와 발신자 사이에 연결을 설정하고 유지한다. 데이터가 온전하게 도착하도록 보장하기 때문에 높은 신뢰성으로 가장 널리 사용되는 프로토콜이다. 연결을 성공해야 통신이 가..

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..