728x90 반응형 전체 글91 SQL과 NoSQL의 차이 데이터베이스는 현대 애플리케이션의 핵심 요소로, 데이터의 저장, 관리, 검색을 효율적으로 수행하는 역할을 합니다. 이 중에서도 SQL과 NoSQL은 가장 널리 사용되는 데이터베이스 유형으로, 각각의 특성과 장단점이 뚜렷합니다. 이번 글에서는 SQL과 NoSQL의 차이점에 대해 자세히 살펴보고, 어떤 상황에서 어떤 데이터베이스를 선택해야 하는지에 대한 짧은 글을 작성해 보려고 합니다. 1. SQL 데이터베이스란? SQL(Structured Query Language) 데이터베이스는 관계형 데이터베이스(RDBMS)로도 불리며, 데이터를 테이블 형태로 저장하고 관리합니다. SQL은 데이터베이스와 상호작용하기 위한 표준 언어로, 데이터의 삽입, 조회, 수정, 삭제 등을 수행하는 데 사용됩니다.주요 특징스키마 .. 2024. 11. 10. 두 달 일을 시작한 지 두 달이 지나면서 업무에 점차 익숙해지고 동료들과의 관계도 가까워졌습니다. 처음 목표로 했던 이상적인 회사 분위기는 아니었지만, 모든 상황에서 배울 점을 찾으려는 긍정적인 자세로 임했습니다. 이 기간 동안 회사에 이익을 가져다줄 수 있는 방안을 모색하고 적용한 결과, 회사와 본인 모두에게 이득이 되는 성과를 이루어냈습니다. 초기에는 기본적인 업무들이 아닌가 하는 의문이 들었으나, 외부 전문가들과의 소통을 통해 이러한 노력들이 실제로 큰 도움이 된다는 피드백을 받으며 자신감을 얻게 되었습니다.🙂앞으로는 더 적극적으로 다양한 프로젝트에 참여하고 동료들과의 협업을 통해 시너지를 창출할 계획입니다. 또한, 회사의 전반적인 프로세스를 개선하고, 개인의 역량도 함께 발전시킬 것입니다. 지속적인 학.. 2024. 11. 9. 모니터링의 중요성 : 성능 비교의 기회 웹 애플리케이션 개발에서 성능 최적화는 사용자 경험과 서비스 안정성에 직접적인 영향을 준다고 생각합니다. 하지만 성능을 최적화하려면 현재 시스템의 상태를 정확히 파악하는 것이 필수적입니다. 여기서 모니터링의 중요성이 부각됩니다. 최근 저의 경험을 바탕으로 모니터링이 얼마나 중요한 역할을 하는지 공유하고자 합니다. 상황 배경이전 상황: ASP.NET 환경에서 프론트엔드와 백엔드 로직을 모두 처리.수정된 상황: Next.js에서 NestJS 서버를 거쳐 .NET 서버로 요청이 전달되어 로직이 실행된 후 결과를 반환.새로운 아키텍처로 전환한 후 데이터베이스에 부하가 걸리기 시작했습니다. 비효율적인 쿼리문을 찾아내고, .NET 서버로 가던 요청을 NestJS로 이전하여 개선을 시도했지만, 서버 간의 속도 차이로.. 2024. 11. 8. 효율적인 Monorepo 브랜치 전략: 안정적인 배포를 위한 가이드 안녕하세요! 오늘은 여러 클라이언트 애플리케이션과 서버 애플리케이션을 포함하는 Monorepo 환경에서 효과적인 브랜치 전략을 구축하는 방법에 대해 이야기해보려 합니다. 이 전략은 코드 품질을 유지하고, 모든 서비스에 걸쳐 원활한 배포 프로세스를 보장하기 위해 설계되었습니다. 📒 소개Monorepo는 여러 프로젝트를 하나의 저장소에서 관리하는 방식으로, 코드의 재사용성과 일관성을 높이는 데 유용합니다. 하지만 여러 애플리케이션이 함께 개발되고 배포되다 보면 브랜치 관리가 복잡해질 수 있습니다. 이에 따라, 효율적인 브랜치 전략을 수립하는 것이 중요합니다. 📗 워크플로우 이미지 참고워크플로우의 전반적인 흐름을 이해하기 위해 위 이미지를 참고하세요. 이미지 설명배포 브랜치 'master'제품으로 출.. 2024. 11. 7. [ CodeSignal ] 재귀를 이용한 팩토리얼 계산: 메모이제이션 재귀는 복잡한 문제를 단순하고 이해하기 쉬운 코드로 표현할 수 있게 해주는 강력한 프로그래밍 기법입니다. 그러나 때로는 재귀 호출이 과도하게 발생하여 성능 저하나 스택 오버플로우와 같은 문제가 생길 수 있습니다. 이 글에서는 재귀를 사용하여 리스트의 각 정수에 대한 팩토리얼을 계산하는 방법을 살펴보고, 메모이제이션(memoization)을 통해 어떻게 성능을 향상시킬 수 있는지 알아보겠습니다. 팩토리얼이란?팩토리얼은 수학에서 자연수의 곱을 의미하며, 기호 n!로 표기합니다.정의:n ! = n × ( n − 1 ) × ( n − 2 ) × ⋯ × 1( 0 ! = 1 ) (예외적으로 0의 팩토리얼은 1로 정의됩니다.)예를 들어:3 ! = 3 × 2 × 1 = 65 ! = 5 × 4 × 3 × 2 × 1 = .. 2024. 10. 8. [Monorepo] Monorepo 환경에서 ts-rest, zod, 그리고 tRPC 사용에 대한 고찰 최근 프로젝트에서 monorepo 구조를 채택하여 클라이언트와 서버 코드를 함께 관리하고 있습니다. 클라이언트는 모두 Next.js로 작성되었고, 서버는 NestJS를 사용하고 있습니다. 현재는 ts-rest와 zod를 활용하여 타입 안전성과 데이터 유효성 검사를 구현하고 있지만, tRPC를 알게되었고 도입하는 것이 좋을지 고민이 되었습니다. 이에 따라 각 도구의 장단점을 분석하고, 우리의 프로젝트 환경에 가장 적합한 선택을 찾아보았습니다. ts-rest와 zod의 조합 장점타입 안전성 강화: ts-rest를 통해 서버와 클라이언트 간의 타입을 공유할 수 있어 런타임 오류를 줄일 수 있습니다.유효성 검사: zod를 사용하여 입력 데이터의 유효성을 검증함으로써 안정적인 API를 구축할 수 있습니다.R.. 2024. 9. 20. [Monorepo] Monorepo 구축하기 제가 속한 팀에서는 10개 이상의 프론트 서버를 운영 중인데, 다양한 서비스와 서버를 운영하다 보니, 코드 중복과 유지보수의 복잡성, 그리고 서버 비용 증가와 같은 문제들이 발생했습니다. 이로 인해 코드 중복과 관리의 복잡성이 커졌고, 이를 해결하기 위한 방법을 고민한 끝에, 저는 모노레포(Monorepo)를 도입하기로 결정했습니다. 왜 모노레포인가? 여러 아키텍처 옵션 중 모노레포(Monorepo)를 선택한 이유는 여러 가지입니다. 멀티레포(Multi-repo)와 비교했을 때, 모노레포는 코드 중복 문제와 유지보수 복잡성 측면에서 큰 이점을 제공합니다. 특히 멀티레포 구조에서는 각 프로젝트가 별도의 저장소로 관리되기 때문에 공통 코드나 라이브러리를 여러 번 작성해야 하며, 서로 다른 버전을 관리하는 .. 2024. 9. 12. Node.js의 내부 작동 방식을 이해하기 Node.js의 내부 작동 방식을 이해하기 위해, Node.js의 핵심 구성 요소인 V8 엔진, 이벤트 루프, 그리고 명령줄 옵션 파서에 대해 설명하겠습니다. 이를 위해 Node.js의 소스 코드 일부를 분석하며, 각 구성 요소가 어떻게 구현되어 있는지 살펴보겠습니다. 1. V8 엔진과 메모리 관리 V8 엔진이란?V8은 구글이 개발한 오픈 소스 자바스크립트 엔진으로, 자바스크립트 코드를 기계어로 컴파일하여 실행합니다. Node.js는 이 V8 엔진을 사용하여 서버 측에서 자바스크립트를 실행합니다. Node.js는 C++로 작성된 코드를 통해 V8 엔진과 상호작용합니다. 메모리 관리: NodeArrayBufferAllocator ( node_internals.h )NodeArrayBufferAllo.. 2024. 8. 17. Node.js의 내부 구조를 이해하기 Node.js의 내부 구조를 이해하기 위해 node.cc, node_main.cc, 그리고 관련 헤더 파일들(node_internals.h, node_options-inl.h)을 함께 살펴보겠습니다. 이들 파일은 Node.js의 초기화, V8 엔진의 설정, 이벤트 루프 관리, 그리고 명령줄 옵션 파싱 등 Node.js의 핵심 기능을 구현하는 데 사용됩니다. 1. node.cc와 node_main.cc Node.js의 초기화와 시작node.cc와 node_main.cc는 Node.js 애플리케이션이 시작될 때 실행되는 주요 함수들을 포함하고 있습니다. 여기에서 Node.js가 초기화되고, V8 엔진이 설정되며, 이벤트 루프가 시작됩니다. Start 함수 (node_main.cc)node_main.c.. 2024. 8. 16. 이전 1 2 3 4 5 6 ··· 11 다음 728x90 반응형