Which is good for my web app, PostgreSQL vs MySQL

Question ) postgresql 과 mysql 각 장점과 단점을 알려줘, 현재 threejs 웹앱과 연동할 데이터베이스를 구축하려하는데 둘중 어떤것을 사용한게 좋을지 추천해줘, 혹시 그밖의 데이터베이스가 있다면 알려줘

Three.js 웹앱과 연동할 데이터베이스를 구축하려는 상황에서 PostgreSQL과 MySQL의 장단점을 고려해보는 것이 중요합니다. 이 두 가지 데이터베이스는 가장 널리 사용되는 오픈 소스 관계형 데이터베이스 시스템(RDBMS) 중 하나이며, 각각의 특성과 기능이 프로젝트의 요구 사항에 따라 적합할 수 있습니다.

PostgreSQL의 장점과 단점

장점:

  1. 고급 SQL 기능 지원: PostgreSQL은 표준 SQL과 더불어 창 함수, CTE(Common Table Expressions), 서브쿼리, 트리거 등 다양한 고급 SQL 기능을 지원합니다. 복잡한 쿼리와 데이터 조작에 적합합니다.
  2. 확장성 및 커스터마이징: PostgreSQL은 확장 모듈과 사용자 정의 함수를 통해 기능을 확장할 수 있습니다. 다양한 타입의 데이터(예: JSON, XML, 배열)를 지원하며, NoSQL 기능도 제공합니다.
  3. ACID 준수 및 데이터 무결성: PostgreSQL은 트랜잭션의 ACID(Atomicity, Consistency, Isolation, Durability) 특성을 철저히 준수하며, 데이터 무결성 보장에 강점을 가지고 있습니다.
  4. 복잡한 데이터 모델링 지원: 다중 테이블 관계나 제약 조건을 포함하는 복잡한 데이터 모델을 효율적으로 관리할 수 있습니다.
  5. 대규모 데이터 처리: 빅데이터를 다루는 데 있어 뛰어난 성능을 보입니다. 대용량 데이터 분석과 고급 통계 기능을 필요로 하는 경우 적합합니다.

단점:

  1. 학습 곡선: 고급 기능과 다양한 설정 옵션으로 인해 처음 사용하는 경우 학습 곡선이 있을 수 있습니다.
  2. 성능 튜닝의 필요성: 성능을 최적화하기 위해서는 여러 가지 설정을 조정해야 할 수 있으며, 초기 설정보다는 추가적인 튜닝이 필요할 수 있습니다.

MySQL의 장점과 단점

장점:

  1. 사용의 용이성: MySQL은 설치와 설정이 비교적 간단하며, 직관적인 인터페이스로 인해 배우기 쉽습니다.
  2. 높은 읽기 성능: 읽기 작업(SELECT 쿼리)에 대해 매우 뛰어난 성능을 보입니다. 웹 애플리케이션의 경우 읽기 작업이 많은 경우에 유리합니다.
  3. 광범위한 지원 및 커뮤니티: MySQL은 매우 큰 사용자 커뮤니티를 가지고 있어, 문제 해결에 대한 다양한 자료와 지원을 받을 수 있습니다.
  4. 다양한 엔진 지원: MySQL은 여러 스토리지 엔진(InnoDB, MyISAM 등)을 지원하여 상황에 맞는 데이터베이스 환경을 구성할 수 있습니다.
  5. PHP와의 친화성: PHP와의 연동이 쉽고, LAMP 스택(Linux, Apache, MySQL, PHP/Perl/Python)의 일부로 널리 사용됩니다.

단점:

  1. 제한된 고급 기능: PostgreSQL에 비해 일부 고급 SQL 기능이 부족할 수 있으며, 복잡한 쿼리 처리에 있어 제한이 있을 수 있습니다.
  2. ACID 준수의 한계: 기본적으로 InnoDB 엔진을 사용하는 경우 ACID를 준수하지만, MyISAM과 같은 엔진은 트랜잭션을 지원하지 않으며 데이터 무결성 측면에서 취약할 수 있습니다.
  3. 확장성의 한계: 매우 큰 규모의 데이터베이스 또는 복잡한 데이터 모델링의 경우 PostgreSQL에 비해 확장성이 떨어질 수 있습니다.

추천 및 고려사항

Three.js와 같은 웹앱에서 사용할 데이터베이스를 선택할 때 고려해야 할 몇 가지 요소는 다음과 같습니다:

  1. 데이터 복잡성: Three.js 웹앱이 단순한 CRUD(생성, 읽기, 업데이트, 삭제) 작업 위주라면 MySQL이 적합할 수 있습니다. 하지만 복잡한 데이터 모델이나 고급 SQL 기능이 필요하다면 PostgreSQL이 더 나은 선택이 될 것입니다.
  2. 성능 요구사항: 읽기 작업이 주로 이루어지는 경우 MySQL이 적합할 수 있지만, 데이터 무결성이나 트랜잭션 안정성이 중요한 경우 PostgreSQL이 더 나은 성능을 제공합니다.
  3. 확장성 및 미래 요구사항: 프로젝트가 확장 가능성을 고려해야 한다면 PostgreSQL이 더 나은 선택이 될 수 있습니다.

그 밖의 데이터베이스

  • SQLite: 경량 데이터베이스로, 파일 기반 데이터베이스를 원하는 소규모 프로젝트에 적합합니다. 설치가 필요 없고 매우 가벼운 점이 장점입니다.
  • MongoDB: 비관계형(NoSQL) 데이터베이스로, 복잡한 관계를 다루지 않거나 JSON과 같은 문서 기반 데이터를 효율적으로 관리해야 하는 경우에 유리합니다.
  • MariaDB: MySQL의 포크로, MySQL과 호환되면서도 몇 가지 추가 기능과 성능 개선을 제공합니다.

결론

Three.js 웹앱에 어떤 데이터베이스가 적합한지 결정하는 것은 프로젝트의 구체적인 요구 사항에 따라 달라집니다. 단순하고 읽기 위주이며 확장성이 필요 없는 경우 MySQL이 적합할 수 있지만, 복잡한 데이터 처리와 고급 기능이 필요하거나 미래의 확장성을 고려한다면 PostgreSQL이 더 나은 선택일 것입니다. NoSQL의 유연성이 필요하다면 MongoDB도 고려해볼 수 있습니다.

How to build Lightsail WebServer

아마존 인스턴스 환경 구축 과정
1 – https://kounjeong.tistory.com/6
2 – https://makepluscode.tistory.com/175
yum이란?
https://dololak.tistory.com/331

servlet 에 대하여
https://java-is-happy-things.tistory.com/23

2024.06.25
Amazon Lightsail QuasarXR 0.1 인스턴스 생성
mysql 설치
java 설치
nvm 설치 nodejs 설치 https://tecadmin.net/install-nvm-on-amazon-linux/ (curl 방식은 에러로 실패)

2024.06.28
next.js 빌드 불가(Amazon Linux2 인스턴스의 node.js 18.x 이상 버전 필요) 로 인스턴스 삭제
Ubuntu 인스턴스 새로 만듬

2024.06.27
mysql, nginx, node.js, git 설치
QuasarXR 프로젝트 클론 후 next.js 빌드 성공
pm2 설치 후 프로젝트 실행, nginx 서버 설정후 실행 완료, 인스턴스 ip주소로 사이트 확인

초보 창업가의 21가지 실수

그릿 BD 의 글에서 발췌
https://maily.so/gritbd/posts/6eb9ffc5 << 상세내용 링크 클릭

  1. 비지니스 플랜을 상세하게 만든다
  2. 재무 계획을 완벽하게 세운다
  3. 정교하고 치밀한 보고서에 집착한다
  4. 그럭저럭 사랑받는 제품을 대중용으로 만든다
  5. 상세한 작업 설명서를 토대로 개발한다
  6. 처음 만든 비지니스 모델에 집착한다
  7. 경쟁을 너무 의식한다
  8. 차별화를 너무 의식한다
  9. 있으면 좋은 기능을 추가한다
  10. 처음부터 제품 디자인이나 사용성의 세부 사항에 집착한다
  11. 처음부터 시스템 자동화와 최적화를 실시한다
  12. 비지니스 모델이 완성되기 전에 적극적으로 사람을 고용한다
  13. 직접 관계가 없는 네트워크 행사나 술자리에 참석한다
  14. 경력이 화려한 영업자나 사업 개발 담당자를 고용한다
  15. 비지니스 모델 검증이 끝나기 전에 파트너십이나 독점 계약을 맺는다
  16. 영업보다 마케팅이나 PR에 집중한다
  17. 역할 분담을 엄밀하게 한다
  18. 기밀 유지 협약을 맺는다
  19. 수탁 개발이나 위탁 업무를 필요 이상으로 받는다
  20. 업계 전문가의 조언에 의지한다
  21. 벤처 투자자에게 적극적으로 접근한다

npm 빌드 오류(new Hash / error:0308010)

집에서 쇼룸을 실행해보려고 했더니 다음과같은 오류가 발생했다.

Error: error:0308010C:digital envelope routines::unsupported
    at new Hash (node:internal/crypto/hash:67:19)
    at Object.createHash (node:crypto:130:10)
    at module.exports (/Users/user/Programming Documents/WebServer/untitled/node_modules/webpack/lib/util/createHash.js:135:53)
    at NormalModule._initBuildHash (/Users/user/Programming Documents/WebServer/untitled/node_modules/webpack/lib/NormalModule.js:417:16)
    at handleParseError (/Users/user/Programming Documents/WebServer/untitled/node_modules/webpack/lib/NormalModule.js:471:10)
    at /Users/user/Programming Documents/WebServer/untitled/node_modules/webpack/lib/NormalModule.js:503:5
    at /Users/user/Programming Documents/WebServer/untitled/node_modules/webpack/lib/NormalModule.js:358:12
    at /Users/user/Programming Documents/WebServer/untitled/node_modules/loader-runner/lib/LoaderRunner.js:373:3
    at iterateNormalLoaders (/Users/user/Programming Documents/WebServer/untitled/node_modules/loader-runner/lib/LoaderRunner.js:214:10)
    at iterateNormalLoaders (/Users/user/Programming Documents/WebServer/untitled/node_modules/loader-runner/lib/LoaderRunner.js:221:10)
/Users/user/Programming Documents/WebServer/untitled/node_modules/react-scripts/scripts/start.js:19
  throw err;

검색해보니 Node.js 내부에서 openssl (암호화) 관련 소스에서 발생하는 에러 같았다.
환경설정 옵션을 변경해주면 해결이 되는 듯 하다.

https://stackoverflow.com/questions/69692842/error-message-error0308010cdigital-envelope-routinesunsupported

Continuous Collision Detection

CCD 에 대한 블로그 글 : https://justdoitproject.tistory.com/30

Subject about Collision Detection Copilot Answers

충돌 검사(Collision Detection)는 그래픽스, 게임, 로봇공학 등 다양한 분야에서 사용되는 기술입니다. 충돌 검사는 물체들이 서로 충돌하는지 여부를 판단하는 기술로, 물체의 모양, 크기, 위치, 속도 등을 고려하여 충돌 여부를 검사합니다. 충돌 검사 기법에는 다음과 같은 것들이 있습니다.

  • Bounding Volume Hierarchy(BVH): 물체를 계층적으로 구성하여 충돌 검사를 수행하는 기법입니다. BVH는 물체들을 AABB(Axis-Aligned Bounding Box)와 같은 기하학적 도형으로 둘러싸고, 이를 계층적으로 구성하여 충돌 검사를 수행합니다. BVH는 빠른 검사 속도와 높은 정확도를 가지고 있습니다.
  • Sweep and Prune(SAP): 충돌 가능성이 있는 물체들을 축 방향으로 정렬하여 충돌 검사를 수행하는 기법입니다. SAP는 축 방향으로 정렬된 충돌 가능성 리스트를 유지하며, 이를 이용하여 충돌 검사를 수행합니다. SAP는 충돌 검사 속도가 빠르지만, 정확도가 낮습니다.
  • GJK 알고리즘: 두 볼록 다각형(Convex Polygon)의 교차 여부를 검사하는 알고리즘입니다. GJK 알고리즘은 두 볼록 다각형의 Minkowski 차(Minkowski Difference)를 구한 후, 이를 이용하여 교차 여부를 검사합니다. GJK 알고리즘은 정확도가 높지만, 계산 비용이 높습니다.
  • SAT 알고리즘: 두 다각형의 축 정렬 경계 상자(AABB)가 겹치는지 여부를 검사하는 알고리즘입니다. SAT 알고리즘은 두 다각형의 모든 축에 대해 충돌 여부를 검사하며, 충돌이 발생한 축을 찾아내어 충돌 여부를 판단합니다. SAT 알고리즘은 정확도가 높고, 계산 비용이 낮습니다.

이상으로, 충돌 검사 기법에 대해 간단히 소개해드렸습니다. 더 궁금하신 점이 있으시면 언제든지 물어보세요. 😊

움직이는 물체 A의 속도가 너무 빠른 나머지 deltaTime 이전과 후의 위치가 물체 B를 충돌하지 않고 통과하는 현상을 검사하는 방법은 다양합니다. 이러한 현상이 발생하는 이유는 물체 A가 이동하는 동안 충돌 검사를 수행하는 시간 간격이 너무 크기 때문입니다. 이를 해결하기 위해서는 다음과 같은 방법들이 있습니다.

  • Continuous Collision Detection(CCD): 물체 A가 이동하는 동안 충돌 검사를 여러 번 수행하여, 물체 B와 충돌할 가능성이 있는 시간 구간을 찾아내는 기법입니다. CCD는 물체 A의 이동 경로를 여러 개의 작은 구간으로 나누어, 각 구간에서 충돌 검사를 수행합니다. 이를 통해 물체 A가 물체 B와 충돌할 가능성이 있는 시간 구간을 찾아내고, 이를 이용하여 충돌 검사를 수행합니다. CCD는 물체 A의 속도가 빠른 경우에도 충돌 검사를 정확하게 수행할 수 있습니다.
  • Swept Sphere: 물체 A를 구 형태의 더미 물체로 대체하여 충돌 검사를 수행하는 기법입니다. 물체 A가 이동하는 동안 더미 물체도 함께 이동하며, 물체 B와 충돌할 가능성이 있는 시간 구간을 찾아냅니다. 이를 이용하여 충돌 검사를 수행합니다. Swept Sphere는 CCD보다 계산 비용이 적지만, 정확도가 낮을 수 있습니다.
  • Conservative Advancement: 물체 A가 이동하는 동안 충돌 검사를 수행하여, 물체 B와 충돌할 가능성이 있는 시간 구간을 찾아내는 기법입니다. Conservative Advancement는 물체 A의 이동 경로를 여러 개의 작은 구간으로 나누어, 각 구간에서 충돌 검사를 수행합니다. 이를 통해 물체 A가 물체 B와 충돌할 가능성이 있는 시간 구간을 찾아내고, 이를 이용하여 충돌 검사를 수행합니다. Conservative Advancement는 CCD와 비슷한 원리로 동작하지만, 계산 비용이 적습니다.

이상으로, 움직이는 물체 A의 속도가 너무 빠른 나머지 deltaTime 이전과 후의 위치가 물체 B를 충돌하지 않고 통과하는 현상을 검사하는 방법에 대해 간단히 소개해드렸습니다. 더 궁금하신 점이 있으시면 언제든지 물어보세요. 😊

[Github] Restore deleted branch

회사 여러 프로젝트 중 내가 전담하고 있는 webgl프로젝트를 submodule로 물려서 사용하는 프로젝트에서 branch를 변경/삭제 하고 나서 jenkins 빌드를 걸었는데 해당 브랜치를 찾을수 없다는 에러 메세지가 나오면서 빌드가 되지 않는 상황이 발생했다.

원래 이런 상황에서는 jenkins 환경 셋팅을 변경하여 submodule 의 타겟 브랜치를 변경하여 진행하면 되지만 담당자가 휴가중인 관계로 부득이하게 리모트 서버에 브랜치를 되돌려야하는 상황이 발생하여 삭제한 것을 되돌리는 방법을 찾아보았다.

아래는 브랜치를 되살리는 방법을 적어둔 블로그 링크이다.

https://shanepark.tistory.com/317