본문 바로가기

분류 전체보기138

데이터베이스 인덱스란 무엇인가요? (MySQL vs. SQL Server) 데이터베이스 인덱스란 무엇인가요? (MySQL vs. SQL Server)MySQL에서 B-Tree 인덱스란 무엇인가요?SQL Server에서 Clustered Index와 Non-Clustered Index의 차이점데이터베이스 인덱스란 무엇인가요?데이터베이스에서 인덱스는 테이블의 데이터에 대한 검색 속도를 높이기 위해 사용하는 데이터 구조입니다. 인덱스를 사용하면 전체 테이블을 스캔하지 않고도 빠르게 데이터를 찾을 수 있습니다. 인덱스는 책의 목차와 비슷한 역할을 합니다. 목차를 통해 특정 주제를 빠르게 찾을 수 있듯이, 인덱스를 통해 데이터베이스에서 원하는 데이터를 효율적으로 검색할 수 있습니다.MySQL과 SQL Server에서의 인덱스데이터베이스 관리 시스템(DBMS)마다 인덱스의 구현 방식과 지.. 2024. 8. 12.
MySQL에서 B-Tree 인덱스란 무엇인가요? 데이터베이스 인덱스란 무엇인가요? (MySQL vs. SQL Server)MySQL에서 B-Tree 인덱스란 무엇인가요?SQL Server에서 Clustered Index와 Non-Clustered Index의 차이점MySQL에서 B-Tree 인덱스란 무엇인가요?MySQL에서 가장 일반적으로 사용되는 인덱스 유형은 B-Tree 인덱스입니다. B-Tree 인덱스는 다양한 쿼리 유형에 대해 효율적인 성능을 제공하기 때문에 널리 사용됩니다. B-Tree 인덱스의 구조와 작동 원리에 대해 자세히 알아보겠습니다.B-Tree 인덱스의 개념B-Tree(균형 트리)는 데이터베이스 인덱싱에서 가장 일반적으로 사용되는 데이터 구조 중 하나입니다. B-Tree 인덱스는 데이터를 정렬된 순서로 유지하며, 검색, 삽입, 삭제가.. 2024. 8. 12.
C# 동기화 기법: lock, Mutex, Semaphore 동시성 프로그래밍에서는 여러 스레드가 동일한 리소스에 접근할 때 발생할 수 있는 문제를 방지하기 위해 다양한 동기화 기법을 사용합니다. C#에서는 lock, Mutex, Semaphore와 같은 동기화 메커니즘을 제공합니다. 이 글에서는 각각의 동기화 기법에 대해 설명하고, 예제 코드를 통해 어떻게 사용하는지 알아보겠습니다.C# 프로젝트 생성먼저, Visual Studio를 사용하여 새로운 C# 콘솔 애플리케이션 프로젝트를 생성합니다.Visual Studio를 엽니다."Create a new project"를 클릭합니다."Console App (.NET Core)"를 선택하고 "Next"를 클릭합니다.프로젝트 이름과 위치를 지정한 후 "Create"를 클릭합니다.lock 문법lock은 C#에서 제공하는 .. 2024. 7. 29.
GitHub 계정별 자격 증명 설정 가이드 GitHub 계정별 자격 증명 설정 가이드GitHub 계정을 여러 개 사용하는 경우, 각 리포지토리별로 다른 자격 증명을 설정하는 것이 필요합니다. 이 블로그에서는 Windows 환경에서 SSH 키와 HTTPS URL을 사용하여 리포지토리별로 자격 증명을 설정하는 방법을 소개합니다. 이 가이드를 따라하면 여러분도 쉽게 각 리포지토리마다 다른 GitHub 계정을 사용할 수 있습니다.1. SSH 키를 사용하는 방법1.1. Git Bash를 사용하여 SSH 키 생성Git Bash 설치:먼저 Git 공식 웹사이트에서 Git을 다운로드하고 설치하세요.Git Bash 실행:설치가 완료되면 Git Bash를 실행합니다.SSH 키 생성:Git Bash 터미널에서 다음 명령어를 사용하여 SSH 키를 생성합니다.ssh-k.. 2024. 7. 22.
Redis를 이용한 트랜잭션 처리와 분산 락 구현 Redis는 뛰어난 성능과 간단한 사용법으로 많이 사랑받는 인메모리 데이터 구조 저장소입니다. Redis의 다양한 기능 중에서도 트랜잭션과 분산 락은 분산 시스템에서 중요한 역할을 합니다. 이번 포스트에서는 SETNX 명령어를 중심으로 Redis에서 트랜잭션을 처리하고 분산 락을 구현하는 방법을 설명하겠습니다.Redis 트랜잭션 처리Redis에서 트랜잭션을 처리하기 위해 MULTI, EXEC, DISCARD, WATCH와 같은 명령어들을 사용할 수 있습니다. 하지만 간단한 경우에는 SETNX 명령어를 사용하여 트랜잭션 없이도 원자적으로 값을 설정할 수 있습니다.SETNX 명령어SETNX는 "SET if Not Exists"의 약자로, 주어진 키가 존재하지 않을 때만 값을 설정합니다. 이는 경쟁 상태를 방.. 2024. 7. 16.
MySQL 현재 시각 조회(NOW, SYSDATE) 두 함수 모두 현재의 시간을 반환하는 함수로서 같은 기능을 수행한다. 하지만 NOW()와 SYSDATE() 함수는 작동 방식에서 큰 차이가 있다. 하나의 SQL에서 모든 NOW() 함수는 같은 값을 가지지만 SYSDATE() 함수는 하나의 SQL 내에서 호출되는 시점에 따라 결괏값이 달라진다. CASE 1. NOW() CASE 2. SYSDATE() NOW() 함수를 사용한 첫 번째 예제에서는 두 번의 NOW() 함수 결과가 같은 값을 반환했다. 하지만 두 번째 예제에서 사용된 SYSDATE() 함수는 SLEEP() 함수의 대기 시간인 2초 동안의 차이가 있음을 알 수 있다. SYSDATE() 함수는 이러한 특성 탓에 두 가지 큰 잠재적인 문제가 있다. 첫 번째로는 SYSDATE() 함수가 사용된 SQL.. 2022. 7. 5.
MYSQL 사용자 계정 추가 (비밀번호관리) 1. MySQL 사용자 계정 추가 (인증플러그인) 2. MYSQL 사용자 계정 추가 (비밀번호관리/잠금) 기본 예 1 2 3 4 5 6 7 8 9 CREATE USER 'user'@'%' IDENTIFIED WITH 'mysql_native_password' BY 'password' REQUIRE NONE PASSWORD EXPIRE INTERVAL 30 DAY ACCOUNT UNLOCK PASSWORD HISTORY DEFAULT PASSWORD REUSE INTERVAL DEFUALT PASSWORD REQUIRE CURRENT DEFUALT; cs 3. PASSWORD EXPIRE 비밀번호의 유효 기간을 서정하는 옵션이며, 별도로 명시하지 않으면 default_password_lifetime 시스템.. 2022. 6. 28.
MySQL 사용자 계정 추가 (인증플러그인) 1. MySQL 사용자 계정 추가 (인증플러그인) 2. MYSQL 사용자 계정 추가 (비밀번호관리/잠금) 기본 예 1 2 3 4 5 6 7 8 CREATE USER 'user'@'%' IDENTIFIED WITH 'mysql_native_password' BY 'password' REQUIRE NONE PASSWORD EXPIRE INTERVAL 30 DAY ACCOUNT UNLOCK PASSWORD HISTORY DEFAULT PASSWORD REUSE INTERVAL DEFUALT PASSWORD REQUIRE CURRENT DEFUALT; cs 1. IDENTIFIED WITH (인증플러그인) MySQL 서버의 기본 인증 방식을 사용하고자 한다면 IDENTIFIED BY 'password' 형식으로.. 2022. 6. 27.
MySQL 인덱스 스캔(Index Scan) Index Range Scan 인덱스에서 조건을 만족하는 값이 저장된 위치를 찾는다. 이 과정을 인덱스 탐색(Index Seek)이라고 한다. 탐색된 위치부터 필요한 만큼 인덱스를 차례대로 쭉 읽는다. 이 과정을 인덱스 스캔(Index Scan)이라고 한다 읽어 들인 인덱스 키와 레코드 주소를 이용해 레코드가 저장된 페이지를 가져오고, 최종 레코드를 읽어온다. Index Full Scan 인덱스의 처음부터 끝까지 모두 읽는 방식을 인덱스 풀 스캔이라고 한다. 대표적으로 쿼리의 조건절에 사용된 컬럼이 인덱스의 첫 번째 카럼이 아닌 경우 인덱스 풀 스캔 방식이 사용된다. 인덱스의 크기는 테이블의 크기보다 작으므로 직접 테이블을 처음부터 끝까지 읽는 것보다는 인덱스만 읽는 것이 효율적이다. 인덱스뿐만 아니라 .. 2022. 5. 11.
Vue 프로젝트 파일 - node_modules : npm으로 설치된 패키지 파일들이 모여 있는 디렉토리 - public : 웹팩(webpack)을 통해 관리되지 않는 정적 리소스가 모여 있는 디렉토리 - src/assets : 이미지, css, 폰트 등을 관리하는 디렉토리 - App.vue : 최상위(Root) 컴포넌트 - main.js : 가장 먼저 실행되는 자바스크립트 파일로써, Vue 인스턴스를 생성하는 역할 - .gitignore : 깃허브에 업로드 할 때 제외할 파일 설정 - babel.config.js : 바벨(Babel) 설정 파일 - package.json : 프로젝트에 필요할 package를 정의하고 관리하는 파일 - package-lock.json : 설치된 package의 dependency 정보를 관리.. 2022. 5. 7.
npm options --save 실무에서 프로젝트를 계속 개발하다 보면 설치된 패키지가 많아진다. 만약 다른 팀원들과 공동 작업을 하고 있다면 매번 패키지 파일 전체를 공유 하는 것은 말이 안되다. 그래서 패키지를 설치할 때 --save 옵션을 사용한다.  --save 옵션을 사용하면 package.json파일에 설치한 패키지 정보가 추가 된다. 그래서 package.json만 공유하여 npm install 만 하면 서로 공유 하는 것과 동일한 효과를 볼 수 있다. Git으로 소스를 관리할 때도 유용하다.  끝 2022. 5. 2.
[MS-SQL] Comment 수정 컬럼 수정 EXEC sp_updateextendedproperty @name = N'MS_Description', @value = '내용 입력', @level0type = N'Schema', @level0name = dbo, @level1type = N'Table', @level1name = '테이블명', @level2type = N'Column', @level2name = '컬럼명'; 테이블 수정 EXEC sp_updateextendedproperty @name = N'MS_Description', @value = '내용', @level0type = N'Schema', @level0name = dbo, @level1type = N'Table', @level1name = '테이블명'; 2022. 2. 25.
[자료구조]큐(Queue) - 리스트 연결 리스트로 큐를 구현하면 동적 할당의 성질에 의해 메모리의 한계까지 큐의 크기를 늘릴 수도 있고, 또 큐가 아주 작을 때에도 메모리도 조금 밖에 차지하지 않는다. 단순 연결 리스트를 이용하여 큐를 구현하는 것은 약간의 무리가 있다. 큐를 구현하려면 앞 노드의 위치와 뒷 노드의 위치를 모두 알고 있어야 하므로 할 수 없이 이중 경결 리스트를 사용하여야 한다. 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101.. 2016. 5. 16.
[자료구조]큐(Queue) - 배열 큐는 입구와 출구가 따로 있는 긴 통이라고 생각하면 된다. 큐는 접근이 제한된 자료구조이며 행위적 측면을 부여받은 추상적 자료형이기 때문에 큐를 조작하는 방법은 두가지로 제한되어 있다. 큐를 조작하는 방법은 put 동작과 get 동작이 있다. 큐에 자료를 집어넣을 때는 뒤(rear)에서 집어넣는다. 이 집어넣는 동작은 put 동작이라고 한다. 그리고 큐에서 자료를 얻어낼 때는 앞(front)에서 얻어낸다. 이 자료를 얻는 동작은 get 동작이라고 한다. 배열을 이용해서 큐를 구현하는 것은 문제가 없어 보이지만 문제가 많다. 배열을 이용한 큐의 구현은 자료를 저장할 배열과 앞과 뒤를 가리키는 변수만 있으면 될 것같다. 하지만 큐에 자료를 집어 넣고 빼는 동작을 계속하다보면 rear와 front는 계속 증가.. 2016. 5. 12.
[자료구조]스택(Stack) - 연결리스트 연결리스트 자체가 동적인 할당을 통해서 구현되기 때문에 연결리스트를 이용해서 구현되는 스탹은 매우 유연하다. 연결 리스트를 이용하여 스택을 구현할 때의 장점은 현재 스택에 저장되어 있는 자료 만큼만 메모리를 잡아먹기 때문에 메모리가 절약되고 스택의 크기가 메모리가 허용하는 한도에서 커질 수 있다는 것이다. 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788#include #include // 리스트 노드 typedef struct _node{ int key; .. 2016. 4. 12.