Database

    [DataBase] typeORM find시 어떤 칼럼을 기준으로 찾아야 빠를까?

    프로젝트로 nestJS 와 Mysql(TypeORM)을 사용했습니다. entity에서 find 혹은 findOne을 하는 경우 unique한 값인 id 값으로 찾아오는 경우가 있는데 다른 칼럼(예를 들면 email)도 unique할 수 있습니다. 따라서 email로 찾아도 값은 동일할 것입니다. 여기서 id값과 email의 차이는 id의 경우 auto increment로 설정되어있고 email은 그렇지 않다는 점입니다. 이 경우 email은 랜덤하기 때문에 시간이 오래 걸릴 것이고 id값은 정렬되어있기 때문에 빠르게 탐색할 것이다.라는게 저의 가정이었습니다. 하지만 검색 결과 DB는 B-Tree라는 다른 자료 구조를 가진다는 것을 알았습니다. B-Tree 자료구조는 2가지로 나뉘는데 선형 자료구조와 비선..

    [SQL] Subquery

    Subquery 하나의 SQL 쿼리 안에 또다른 SQL 쿼리가 있는 것 kakaopay로 결제한 유저들의 정보 보기 -- 1 -- select u.user_id , u.name , u.email from users u inner join orders o on u.user_id = o.user_id where o.payment_method = 'kakaopay' -- 2 -- select u.user_id , u.name , u.email from users u where u.user_id in ( select user_id from orders where payment_method = 'kakaopay' ) where 안에 들어가는 subquery select * from users u where u.u..

    [SQL] Inner Join, Left Join, Union

    inner join select * from users u inner join point_users p on u.user_id = p.user_id '오늘의 다짐' 정보에 과목 정보를 연결해 과목별 '오늘의 다짐' 갯수를 세어보자! select co.title, count(co.title) as checkin_count from checkins ci inner join courses co on ci.course_id = co.course_id group by co.title 유저의 포인트 정보가 담긴 테이블에 유저 정보를 연결해서, 많은 포인트를 얻은 순서대로 유저의 데이터를 뽑아보자! select * from point_users p inner join users u on p.user_id = u.us..

    [WIL] ORM, noSQL vs SQL

    ORM(Object-Relation Mapping)이란? 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑해주는 것을 말합니다. 기존에는 DB의 값을 뽑아오기 위해서는 쿼리라는 명령문으로 값을 가져와야 했습니다. 물론 값을 추출하는 것 뿐만 아니라 삽입, 삭제, 수정 등의 구문도 있습니다. 서버 개발자가 DB에 접근하기 위해서 쿼리문을 써야했지만 ORM을 사용함으로서 어플리케이션에서 기존의 언어로도 DB에 접근이 가능해졌습니다. ORM은 Object modeling과 Relational modeling을 이해해야합니다. 객체를 만드는 클래스와 관계형 DB사이의 차이가 존재하기 때문에 ORM을 사용하여 연결합니다. 장점 1. 쿼리문을 직접 사용하지 않고 entity를 객체로 표현할 수 있습니다. 2. 객..

    [Database] ORM과 DB의 차이

    ORM(Object Relational Mapping)이란 객체 - 관계 매핑입니다. OOP에서 쓰이는 객체라는 개념을 구현한 클래스와 RDB에서 쓰이는 데이터인 테이블을 자동으로 매핑하는 것을 말합니다. 그러나 클래스와 테이블은 서로가 기존부터 호환가능성을 두고 만들어진 것이 아니기 때문에 불일치가 발생하는데, 이를 ORM을 통해 객체 간의 관계를 바탕으로 SQL문을 자동으로 생성하여 불일치를 해결합니다. 따라서 ORM을 이용하면 따로 SQL문을 짤 필요없이 객체를 통해 간접적으로 데이터베이스를 조작할 수 있게 됩니다. 장점: 1. 완벽한 객체지향적인 코드 ORM을 이용하면 SQL문이 아닌 클래스의 메서드를 통해 데이터베이스를 조작할 수 있어, 개발자가 객체 모델만 이용해서 프로그래밍을 하는 데 집중할..

    [MySql] WSL2에서 MySQL 설치 및 실행하는 법

    MySQL 설치 WSL2 터미널에서 아래 명령어로 Ubuntu 패키지를 업데이트합니다. sudo apt update 아래 명령어로 mysql을 설치합니다. sudo apt install mysql-server 설치확인하고 버전 번호를 확인합니다. mysql --version MySQL 시작 해당 명령어로 mysql을 실행합니다. sudo /etc/init.d/mysql start 위 명령어를 실행한 후에 아래와 같은 에러가 발생한다면 su: warning: cannot change directory to /nonexistent: No such file or directory 아래와 같이 명령어를 실행해줍니다. (리눅스OS에 따라 상이) # Ubuntu sudo service mysql stop sudo ..

    ORA-12519 TNS :no appropriate service handler found

    오라클 접속 도중 해당 에러를 발견했습니다. 찾아보니 접속할 수 있는 Process의 갯수가 정해져있기 때문에 나온다는 오류인데 SQL>SELECT * FROM v$resource_limit where resource_name='processes'; -- 접속 프로세스의 수를 확인하고 SQL> ALTER system SET processes=200 scope=spfile; -- 200으로 늘려준다. SQL> shutdown immediate; SQL> startup; 해당 명령어를 작성하면 해결이 된다는데 해결이 되지 않고 똑같은 오류가 또 생겼기에 다른 방법을 찾아봤습니다. 처음에 cmd 창에서 SQL>sqlplus/nolog SQL>connect sys/'password' as sysdba 이렇게 입..