데이터베이스
-
[MongoDB] MongoDB 사용하며 헷갈리는 부분 정리데이터베이스/Mongodb 2023. 3. 29. 20:46
틀린 내용을 발견하신 경우 말씀 부탁드립니다! 🙇 MySQL에 익숙했던 나로서 MongoDB를 사용하며 막막했던 것은 설계를 어떻게 해야 좋을지였다. 그리고 또 하나, Nest.js에서 비슷한 내용을 DTO, Interface, Schema 등 여러 개의 폴더와 파일로 나누어서 관리를 하는데, 굳이 왜 이렇게 해야 하는지 감이 잘 안 왔다. 개인적으로 답답했던 부분을 알아보는 김에 MongoDB 개념까지 가볍게 정리해 보기로 했다🔥 1. MongoDB 란 NoSQL 기반 DBMS의 하나(NoSQL에 대해서는 밑에서 정리). MongoDB는 DB안에 Collection들이 존재하고, Collection안에 Document가 존재한다. 아래는 관계형 DBMS 구조와 MongoDB 구조를 비교한 것이며, 주..
-
[MongoDB] DB 털림 (랜섬웨어)데이터베이스/Mongodb 2023. 3. 25. 18:32
발견아침에 테스트 앱에서 데이터가 보이지 않았다. docker 컨테이너 문제인가 싶었으나, 확인해 보니 mongodb 컬렉션이 사라졌다. mongo db log를 확인해 보았다. dropDatabase..? $ sudo docker logs mongodb -t --since 2023-03-23T20:30:00 ... 2023-03-23T22:42:37.906849231Z {"t":{"$date":"2023-03-23T22:42:37.906+00:00"},"s":"I", "c":"COMMAND", "id":20337, "ctx":"conn1746","msg":"dropDatabase - starting","attr":{"db":"READ__ME_TO_RECOVER_YOUR_DATA"}} 2023-03-23..
-
[MongoDB] Date type 필드의 default 설정시 Date.now와 new Date() 중 어떤 걸 사용해야할까?🧐데이터베이스/Mongodb 2023. 3. 5. 16:52
틀린 내용이 있을 수 있습니다. 발견하시면 말씀 부탁드립니다! 🙇 Nest.js 환경에서 mongoose 패키지를 사용해 스키마를 정의한 뒤 mongodb에 데이터를 저장했다. 이후 데이터를 조회해 보니 이상한 점이 있었다. 저장 시점이 다른데 DB상에는 생성 시간이 동일하게 기록돼 있던 것이다. 데이터 생성시간은 mongoose schema에서 default로 생성되게끔 했기에 스키마 파일을 살펴보았다.@Schema() export class Path { @Prop({ type: String, required: true }) tag: string; @Prop({ type: String, required: true }) coordinateList: string; @Prop({ type: Object, r..
-
[MySQL] 쿼리성능 개선하며 알게된 것 기록 📝데이터베이스/MySQL 2022. 8. 20. 20:38
사내 운영툴 메인 페이지의 로딩 속도가 너무 느린 이슈가 있었고 호출되는 API의 응답속도가 거의 2초 이상 소요되는 것을 발견했다. 현재 서비스를 사용하고 있는 브랜드와 매장 및 각 매장의 상태 값과 포스 신호 수신 여부 등에 대한 데이터를 한 번에 가져오는 API이기는 하나, 몇십만 건의 데이터도 아닌데 이 정도로 속도가 느린 건 문제 있다고 판단했다. 해당 API에서 사용하는 프로시저는 2개였고 각각 약 1.2초, 0.6초 이상 걸리는 슬로우 쿼리였다. (보통 1초 이상 걸리는 경우를 슬로우 쿼리라고 판단하나, 데이터 양이 많지 않은데 0.6초나 걸리면 이 역시 슬로우 쿼리다.) 가져오는 데이터 양을 줄이는 방법도 속도 개선을 하는 방법 중 하나이지만, 그전에 근본적인 원인부터 고치는 게 맞다고 생..
-
[MySQL] Timestamp 타입과 Datetime 타입의 차이 🕰데이터베이스/MySQL 2022. 8. 14. 21:03
이 포스팅을 하게 된 이유는 업무 중 우연히 어떤 에러를 발견했기 때문이었다. 당시 데이터 만료 기간을 설정하는 중이었고 특정 조건에서는 만료 기간을 과거 날짜로 세팅하여 데이터 제공을 중단하기로 했다. 그런데 이 과정에서 Timestamp 타입에 알맞지 않은 값이라는 에러가 발생했고 이에 대해 MySQL 날짜 타입인 Timestamp와 Datetime의 차이가 궁금해졌다. INSERT INTO mydb.tb_test(date_datetime, date_timestamp) VALUES('1970-01-01', '1970-01-01'); 차이점 1 Timestamp 타입은 1970-01-01 00:00:01 ~ 2038-01-19 08:44:07까지의 데이터만 지원하고, Datetime 타입은 1000-0..
-
[MySQL] 숫자가 포함된 문자열 정렬데이터베이스/MySQL 2022. 7. 6. 21:27
📝 오늘 업무 하면서 알게 된 것 기록! 업무중에 다수의 지점을 이름 기준으로 정렬해야 했는데 지점명에 한글, 영문뿐만 아니라 숫자도 포함이 된 상황이었다. 처음에는 단순히 아래처럼 쿼리를 작성했다. (회사에서 실제로 사용했던 쿼리를 여기다가 그대로 적을 수는 없으니 ORDER BY 부분만 참고) SELECT tb_a.area_name FROM group.tb_area AS tb_a ORDER BY tb_a.area_name; 숫자와 문자알아서 구분되어 정렬될 거라고 생각했으나 사진과 같이 숫자 부분이 예상과 다르게 정렬되었다. 결론부터 이야기하자면 MySQL에서 텍스트 타입의 숫자는 문자로 인식된다.(당연한 얘기긴 하지만...) 그렇기 때문에 숫자는 숫자대로 문자는 문자대로 기준에 맞게 정렬하기 위해..
-
[MySQL] Table Lock (feat. Deadlock 💀)데이터베이스/MySQL 2022. 4. 18. 02:10
틀린 내용을 발견하시면 말씀 부탁드립니다! 🙇 특정 테이블이 업데이트될 때 동작하는 트리거에서 수정할 부분이 있어 수정 후 저장을 하려고 했는데 계속 Table Lock 걸리는 이슈가 생겼다. 이슈는 (팀장님이) 해결했는데,-뭔지는 모르겠지만 트랜잭션 1개가 계속 동작하고 있었고 해당 트랜잭션을 kill하니 트리거 수정 내용이 정상 반영됨- 정확히 어떤 상황에서 Lock이 발생하고 이를 해결하기 위해 뭘 확인해야 하는지 궁금한 관계로 이번 기회에 정리하기로 했다. SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX; # 문제있는 트랜잭션을 찾아 TRX_ID를 kill cf) INFORMATION_SCHEMA.INNODB_TRX: 트랜잭션이 락 때문에 대기 상태인지 뿐만 아니라 ..
-
[MySQL] 테이블의 auto increment number 가져오기데이터베이스/MySQL 2022. 3. 28. 07:25
고유키가 필요할 때 테이블의 auto increment를 활용하는 경우가 있다. 이럴 때 사용할 수 있는 쿼리. SELECT `AUTO_INCREMENT` FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = [db name] AND TABLE_NAME = [table name]; 이외에 참고할 수 있는 쿼리를 정리한 링크 (상황에 따라 알맞은 것을 사용하면 될 것 같다) https://thispointer.com/4-ways-to-get-last-inserted-id-of-a-mysql-table/#four 4 ways to get last inserted id of a MySQL table – thisPointer To provide the best experi..