본문 바로가기

컴퓨터/데이터베이스

(10)
데이터베이스 외래키를 안쓰는 이유 처음 데이터베이스 관련 공부를 할때 테이블 사이에 연관관계를 맺어주는것을 진행할때,외래키(Foreign key)를 만들어 관계를 형성해주었습니다 하지만 실무에서 테이블을 설계할때 외래키는 제외하고 쓰는경우가 많은데 어떤이유떄문인지 알아보겠습니다  외래키(Foreign key) 외래키는 데이터 무결성(Data integrity)을 위해서 사용된다 예를들어, 위 사진에 보이듯이 학생(부모) 테이블과 수강(자식) 테이블이 있다고 가정할때,학생 테이블에 학번과 수강 테이블에 학번을 외래키로 설정해주게 되면학생 테이블중 학번 칼럼에 없는값은 수강 테이블에 등록할수 없다 무조건 부모테이블에 외래키로 설정된 칼럼에 값이 있어야만 자식테이블에도 변경 작업이 가능한것입니다데이터의 무결성을 지키는것은 비즈니스적인 측면에서..
MySQL vs PostgreSQL 어떤 차이점이 있을까? 오늘날 가장 대중적으로 쓰이는 DBMS는 단연코 MySQL 이라고 할수있다빠른속도와 접근성이 좋기떄문에 공부하는 DBA나 프로젝트에서 데이터관리 목적으로 자주 쓰이곤 한다 데이터가 계속해서 누적될때마다 대량의 데이터 작업은 필연적으로 느려지기 마련이다MySQL에서 제공되는 방식은 대량에 데이터를 처리하기에는 한계가 있었는데 이에 따라 대용량 데이터 처리에 특화되있는 PostgreSQL를 도입하기위해 어떤 차이점이 있을까  선호도  Stack Over Flow에서 설문조사한 결과 세계적으로 자주 사용되는 데이터베이스가 어떤것이 있는지 투표를 진행하였다2022년에는 MySQL이 46퍼센트로 PostgreSQL보다 근소하게 앞서있는것을 확인할수있다 점점 대용량 데이터 처리에 중요성을 느끼는 기업들은 MySQL..
데이터베이스 빠른 검색을 위한 인덱스(INDEX) 우리가 데이터베이스를 통해 여러가지 작업을 할때 빠질수없는 쿼리문중 하나인 WHERE 조건을 자주 접해봤을것이다서비스를 운영하면서 많은양의 데이터가 저장된 데이터베이스 테이블에서 원하는 데이터를 가져오기위해서는 일반적으로 Full Scan을 통해서 가져오게되는데 Full Scan이란 모든데이터를 전부 한번씩 보고 원하는 데이터를 찾는것을 말하는데 이는 곧 100만건의 데이터가 저장되어있다면 100만건 전부다 확인하여 원하는 데이터를 구한다는 것을 의미한다이렇게 Full Scan으로 검색하는것은 적은 데이터에서는 그렇게 문제될것은 없지만 데이터가 많아진다면 검색해야될 데이터도 같이 늘어나게되므로 비효율적이다 만약 2개이상의 조건이 걸려있게되면 검색시간은 기하급수적으로 늘어나게된다이것을 해결하기위해서 Ind..
데이터베이스 트랜잭션의 사용처와 특징 데이터베이스의 강력한 기능중 하나인 트랜잭션을 이해하고 어느때 사용하면 좋을지, 장점은 뭐고 단점은 어떤것이 있는지 살펴보고, 트랜잭션이 가지는 특징에 대해서 알아보도록 하자   트랜잭션이란?  우선 먼저 트랜잭션의 뜻을 알아보면 ' 하나의 논리적 기능을 수행하기 위한 작업의 단위 ' 라고 설명할수있다해당 뜻은 우리가 서비스를 진행함에 따라 여러개의 쿼리문이 엮이는 상황을 흔히 볼수있을것이다당장 예를들어봐도 조회수 100 이상의 게시물을 인기 게시물 테이블로 옮기고싶을때 이런작업을 거칠수있다 게시물 테이블에 조회수 100이상의 게시물을 SELECT 한다 (1)SELECT 한 게시물테이블을 인기 게시물 테이블로 옮기는 INSERT 작업을 한다 (2)게시물 테이블에 조회수 100이상의 게시물의 삭제상태를 1..
데이터베이스의 Lock의 특징과 장단점 우리가 학사관리 시스템에서 수강신청 가능인원이 마지막 1명이 남았다고 가정해보겠다2명이 동시에 정원이 1명남은 과목에 신청을 넣게되면 어떤일이 벌어지게될까? 수강신청 기능은 트랜잭션으로 묶여져있으며, 여러개의 쿼리를 거쳐서 데이터베이스의 저장이 되고 수강신청 가능인원이 1명 감소하게된다(예시) 2명이 동시에 버튼을 눌러 수강신청을 하면 동시에 트랜잭션이 시작되어 2명이 수강신청하게되면 1명이 초과되기때문에 해당 시스템에는 엄연히 문제가 있다고 볼수있다사용자가 적은 서비스에서는 일어날확률이 적을수는 있겠지만 그렇다고 안일어난다는 보장도 하지못한다 이러한 문제를 어떻게해결할까?나이스하게도 데이터베이스에서는 Lock이라는 개념을 지원한다 이번글을 통해서 Lock이 무엇이고 장단점이 뭐고, 특징이 무엇인지 차근..
데이터베이스 데이터타입과 최적화 데이터베이스에 사용되는 칼럼의 데이터타입이 뭐가있는지 알아보고 어느상황에 어떻게 사용하면 좀더 나은 최적화를 할수있을지 알아보도록 하자    문자형 데이터타입말그대로 문자를 저장할수있는 타입이다 (ex '안녕', 'ABC', '123') 데이터타입설명CHAR(n)고정된 길이의 데이터타입 지정된 길이보다 작은 길이의 데이터가 입력될경우에는 나머지가 공백으로 채워진다VARCHAR(n)가변된 길이의 데이터타입 지정된 길이보자 작은 길이의 데이터가 입력될경우에는 해당 길이만큼만 채워진다TINYTEXT최대 255Byte의 문자열 데이터 타입TEXT최대 65535Byte의 문자열 데이터 타입MEDIUMTEXT최대 16777215Byte의 문자열 데이터타입JSON.JSON타입의 문자열 데이터JSON 타입의 데이터는 ..
MySQL 프로시저(Procedure)의 의미와 실행해보기 프로시저(Procedure)여러 쿼리를 한번에 수행하는 것을 프로시저(Procedure) 라고 한다  우리가 SQL을 사용할때 SELECT, CREATE, UPDATE, DELETE 등 쿼리문을 사용하여 DB를 조작해원하는 데이터를 핸들링한다하지만 이러한 간단한 작업만 있으면 좋겠지만 현실은 그렇지않습니다여러개의 쿼리가 하나의 로직을 수행하기 위해 묶여 돌아가는 복잡한 작업하는 경우가 흔하게 발생하는데 우리는 이것을 Java단에서 해결하기위해 Service 로직들을 만들어서 하나로 묶는 Transaction(트랜잭션) 작업을 하곤합니다  트랜잭션의 설명은 여기 게시물에서 확인할수있습니다   이외에도 DB에서는 함수(Function) 과 프로시저(Procedure) 라는 기능을 지원하는데우리가 트랜잭션을이..
관계형 데이터베이스와 NoSQL에 대한 이야기 우리가 흔히 많이듣고 접하는 데이터베이스는 관계형 데이터베이스(RDB) 일것이다전자정부프레임워크라고 해서 공공기관에서 하는 여러 개발프로젝트는 Spring과 RDB인 MySQL, Oracle 등 거의 정형화 되있다고 보면된다 여기서 전자정부프레임워크는 왜 주로 관계형 데이터베이스들이 많은것일까?이것에 대한 고민으로 부터 시작해서 관계형 데이터베이스의 장점과 단점 그리고 어느때 쓰면좋은지, 관계형데이터베이스의 단점을 보완하기 위해서 나온 방법은 무엇이고 NoSQL의 장점과 단점도 알아보도록 하자       관계형 데이터베이스의 데이터 저장형식관계형 데이터베이스는 흔히 정형화된 데이터들을 관리하는데 주로쓰이는데 테이블과 튜플, 그리고 안에있는 속성으로 엑셀의 표와같은 형태로 저장되게된다   자 여기서이제 주..