본문 바로가기

분류 전체보기

(42)
[GIT] fatal: bad object refs/heads/{branch} 문제상황 fatal: bad object refs/heads/feature/CICD 2 error: did not send all necessary objects 정말 아무것도 건들지 않았는데 해당 에러가 발생했다. 원본 브랜치에서 fetch도 안되고, 아무것도 안된다. 해결 현재 이상한 헤드를 참조하는게 이유라고 생각이 되었다. 해결한 방법은 다음과 같다. .git 에 들어가보니 2 가 붙은 파일들을 볼 수 있었다. 해당 파일들을 모두 삭제한다. 특히 refs/heads/{branch} 경로에 존재하는 문제 파일은 꼭 삭제하도록 한다. https://stackoverflow.com/questions/72515916/git-fatal-bad-object-refs-heads-2-master Git fata..
[데이터베이스] 인덱스(Index) 인덱스(Index)란? 인덱스는 데이터를 더 빠르게 검색하고 조회하는 기능을 제공하는 자료구조이다. 이름이 색인인 것처럼 책의 색인과 유사하게 작동하게 되는데, 책의 한 주제를 찾을 때 첫 장부터 순차적으로 조회하지 않고 목차를 확인하듯 DB 또한 책의 목차와 같이 색인을 통해 데이터를 빠르게 조회할 수 있다. 대부분의 인덱스는 B tree, 해시 구조를 사용하고, 해당 자료구조를 통해 조회 성능을 향상시킨다. 인덱스를 사용하는 이유 인덱스의 필요성은 데이터의 양이 많을 수록 높아진다. 인덱스를 사용하지 않는 경우 원하는 데이터를 검색하고 조회하기 위해서는 모든 데이터를 조회하여 WHERE 절에 맞는 조건이 만족하는지 비교가 필요하다. 데이터 N에 대한 모든 비교가 필요하므로, 조회시 O(N)의 비용이 ..
[데이터베이스] 리플리케이션(Replication) 리플리케이션이란? 데이터베이스 리플리케이션은 운용중인 데이터베이스의 복제본을 만들어 운용하는 것을 말한다. 리플리케이션은 실제 데이터의 백업, 시스템의 성능 향상 등에 사용이 된다. 원본 데이터베이스를 master, primary, leader 등으로 부르고 복제된 데이터베이스를 slave, secondary, replica 등으로 부른다. 리플리케이션의 목적 리플리케이션은 기본적으로 데이터베이스의 안정성을 높히기 위해 사용됩니다. 다양한 이유가 있지만 대표적인 목적은 다음과 같다. 데이터 무결성 및 복구 : 원본 데이터베이스에 문제가 생겼을 때 복제본을 통해 데이터를 복구할 수 있다. 데이터 가용성 및 서비스 연속성 향상 : 하나의 데이터베이스에 장애가 발생해도 다른 위치에서 데이터베이스를 사용할 수 ..
[데이터베이스] 샤딩(Sharding) Sharding이란? 하나의 데이터베이스 데이터가 커지게 되면 병목현상, 용량 부족 등의 성능에 안좋은 영향을 미치게 된다. 또한 이 문제들은 실제 서비스의 CRUD를 느리게 만드는 원인이 되고 사용자 경험까지 영향을 준다. 이런 문제를 해결하기 위해 사용되는 것이 샤딩이다. 샤딩은 데이터베이스를 작은 그룹들로 나누고 데이터들 또한 각 데이터베이스에 나누어 분할하는 것을 의미한다. 각 분할된 부분을 샤드라고 하고 여러 데이터베이스 서버에 분할하여 저장함으로써 부하 문제를 해결한다. 파티셔닝의 수평 분할(Horizontal partitioning)을 생각해 볼 수 있는데, 수평 분할이 하나의 데이터베이스 내에서 테이블의 데이터를 분할하는 방식이었다면 샤딩은 분할된 데이터를 다수의 데이터베이스에 보관한다. ..
[데이터베이스] 트랜잭션 격리 수준(Transaction Isolation Level) 트랜잭션 격리 수준(Transaction Isolation Level)이란? 데이터베이스에서 동시에 여러 트랜잭션이 수행될 때 발생하는 이상 현상에 대한 허용 수준이라고 볼 수 있다. 제약이 없을수록 제약사항이 없기 때문에 트랜잭션의 처리량은 증가하지만, 데이터의 불일치가 발생할 가능성인 높아진다. 트랜잭션의 동시성 문제를 발생하지 않도록 막을 수 있지만, 제약사항이 많아지고 처리할 수 있는 트랜잭션의 수가 줄어들어 DB의 처리량이 크게 하락하게 된다. 따라서 사용자가 트랜잭션으로 발생할 수 있는 문제들을 인식하고, 필요에 의해서 적절히 사용할 수 있도록 레벨을 나누었는데 그것이 트랜잭션 격리 수준(Transaction Isolation Level)이다. SQL:1992 표준에서 제시한 트랜잭션 격리 수..
[데이터베이스] 파티셔닝 파티셔닝이란? 데이터베이스 분할(Partitioning) 또는 파티셔닝은 데이터베이스를 여러 부분으로 분할하는 것이다. 데이터베이스 분할은 중요한 튜닝기법으로 데이터가 너무 커져서, 조회하는 시간이 길어질 때 또는 관리 용이성, 성능, 가용성 등의 향상을 이유로 행해지는 것이 일반적이다. 분할된 각 부분을 ‘파티션’이라고 부른다. - 위키백과 서비스 규모가 커지면서 DB의 크기 또한 커지게 되면 기존의 시스템에서 성능 저하와 메모리 부족 등의 문제가 발생 할 수 있다. 하나의 테이블에 너무 많은 데이터가 생겨 크기가 커지면 이런 문제들이 발생하게 되는데 이런 문제를 해결하기 위해 파티셔닝 기법이 사용된다. 목적 성능 Query의 성능을 향상시킨다. 풀 스캔에서 데이터를 읽어오는 범위를 줄여 성능을 향상시..
[데이터베이스] Database Connection Pool, DBCP Database Connection Pool 이란? 편의를 위해 DBCP로 칭하도록 하겠습니다. DBCP는 미리 연결된 Connection을 Connection Pool에 만들어두고, 필요에 의해 사용하고 반환함으로써 Connection을 재활용할 수 있게 해주는 기법을 의미한다. DBCP는 연결 생성, 연결 재사용, 연결 제한, 연결 유지, 연결 검사와 같은 주요한 기능을 제공한다. 연결 생성 : Connection을 얼마나 생성할 지 지정할 수 있다. 연결 재사용 : 생성된 Connection을 반환받아 재사용할 수 있다 연결 제한 : DBCP 내부의 Connection을 얼마나 개방할 지 제한한다. 이를 통해서 시스템 부하를 관리할 수 있다. 연결 유지 : Connection이 사용되고 있지 않아도..
2023.6.20 회고 내 기준에서 어려웠던 모던 자바 인 액션 스터디가 끝났다. Java 8부터 적용된 Stream, Optional, 함수형 프로그래밍, Reactive Programming 등 정말 다양한 개념과 기능들에 대해 학습했고, 완전히 이해하지 못한 개념도 있지만 필수적인 기능에 대한 부분들은 어느정도 깨우쳤다. 내 성격상 내가 공부하는 것에 대해 만족할만큼 이해를 하지 못하면 굉장히 찜찜하고 신경쓰이는데, 모던 자바 인 액션이 그랬다. 끝난 후에도 이 책의 개념을 내 것으로 만들지 못했다는 것에서 오는 찜찜함이 스트레스였지만, 현재 나에게 가장 우선순위가 높은 것은 취업이었고 시간은 한정적이기에 후일로 미루게 되었다. 중요한 개념인 것도 맞고 공부해야 하는 것도 맞지만 취업 준비를 하며 깨달은 것은 모든 부분들..