분류 전체보기 210

23.10.12 이벤트 루프

이벤트 루프 여러 비동기 작업을 관리하기 위한 구현체로 비동기 작업들을 모아서 관리하고 순서대로 실행할 수 있게 해주는 도구이다. 이벤트 루프의 페이즈 Timer Phase: 말 그대로 setTimeout이나 setInterval과 같은 함수가 만들어 내는 타이머들을 다룬다. Pending Callbacks Phase: pending_queue에 담기는 콜백들을 관리한다. 이 큐에 담기는 콜백들은 이전 이벤트 루프 반복에서 수행되지 못했던 I/O 콜백들이다. Idle, Prepare Phase: Node.js의 내부적인 관리를 위한 페이즈로 자바스크립트를 실행하지 않는다. Poll Phase: 새로운 I/O 이벤트를 다루며 watcher_queue의 콜백들을 실행한다. watcher_queue에는 I/O..

23.10.11 Node.js에서 비동기 처리

Node.js는 JS를 기반으로 한 싱글 스레드를 사용하는데 어떻게 비동기처리가 가능할까 하는 의문에서 찾아봤다. 비동기 처리를 위한 주요 요소 싱글 스레드 기반의 이벤트 루프: Node.js는 기본적으로 싱글 스레드로 동작합니다. 이벤트 루프는 콜 스택이 비어있을 때 콜백 큐에서 콜백 함수를 가져와 실행합니다. 이러한 방식으로 비동기 이벤트에 반응합니다. libuv 라이브러리: Node.js는 비동기 I/O 연산을 지원하기 위해 libuv 라이브러리를 사용합니다. libuv는 백그라운드에서 여러 스레드를 가진 스레드 풀을 관리하여 I/O 작업을 병렬로 처리합니다. I/O 작업이 완료되면, 해당 작업과 관련된 콜백이 콜백 큐에 추가됩니다. 비동기 I/O: Node.js는 파일 시스템 작업, 네트워크 요청..

23.10.10 ci/cd 다시 정리

기존에 정리한 것은 내용이 부족한 부분이 많아 다시 찾아보고 거기서 생긴 의문을 다시 추가했다. 지속적 통합 (Continuous Integration, CI): 목적: 코드 변경사항을 정기적으로 통합하여 소프트웨어 품질을 향상시키고, 개발 과정에서 발생할 수 있는 문제를 조기에 발견하고 해결합니다. 과정: 개발자들이 자신의 변경사항을 공유 코드 저장소(예: Git)에 자주(일반적으로 하루에 여러 번) 푸시(push)합니다. 코드가 저장소에 푸시될 때마다, 자동화된 빌드 및 테스트가 실행되어 코드 변경사항이 나머지 시스템과 잘 통합되는지 검증합니다. 이점: 버그를 빠르게 찾아내고 해결할 수 있으며, 소프트웨어의 품질을 지속적으로 유지할 수 있습니다. 지속적 배포 (Continuous Deployment)..

23.10.09 CORS 재정리

기존에 찾아봤던 내용이라 글이 있지만 다시 보기엔 너무 간단한 내용만 있어서 이것도 다시 정리한다. 물론 기존에 글도 도움이 된다. 내가 당시에 어떻게 이해를 했고 생각을 했었는지 보게 되면서 이렇게 새로 정리하면서 조금 더 깊게 알게된다. CORS Cross-Origin Resource Sharing의 약자이다. *출처가 다른 자원들을 공유한다는 뜻으로, 한 출처에 있는 자원에서 다른 출처에 있는 자원에 접근하도록 하는 개념이다. *출처 (Origin): Protocol + Host + Port 3가지가 같으면 동일 출처라고 한다. SOP Same-Origin Policy의 약자이다. 웹 페이지가 자신의 출처와 다른 출처의 리소스에 직접 접근하는 것을 막는 정책으로 기본적으로 웹 페이지가 다른 도메인에..

23.10.08 JWT

JWT는 JSON Web Token의 약자로, 웹에서 사용되는 JSON 형식의 토큰에 대한 표준 규격이다. Header (헤더): 토큰의 타입과 사용 중인 알고리즘(예: HMAC SHA256 또는 RSA)에 대한 정보를 포함한다. Payload (페이로드): 유용한 데이터나 *클레임을 포함한다. 일반적으로 사용자 정보나 다른 인증에 필요한 데이터가 들어간다. Signature (서명): 헤더와 페이로드, 그리고 '시크릿'을 사용해 생성된 서명입니다. 이 서명을 통해 정보가 변조되지 않았는지 검증할 수 있습니다. *클레임(Claim): JWT(JSON Web Token)의 페이로드(Payload) 섹션에 포함된 정보 단위를 의미한다. JWT의 동작 방식: 사용자가 로그인을 시도를 한다. 서버는 사용자의 자..

카테고리 없음 2023.10.13

23.10.07 ORM을 사용하면서 쿼리가 복잡해지는 경우

ORM을 사용하면 쿼리가 복잡해지는 경우가 종종 있다. 아무래도 내가 쿼리문을 직접 작성한 게 아니라서 다소 비효율적으로 나올 수도 있다. 원인 파악: ORM이 복잡한 쿼리를 생성하는 원인을 정확히 파악하세요. 쿼리의 복잡성은 연관 관계, 조인, 서브쿼리 등의 다양한 요소에 의해 발생할 수 있습니다. Raw SQL 사용: ORM이 생성하는 쿼리가 너무 비효율적인 경우, 직접 SQL을 작성하여 사용할 수 있습니다. 대부분의 ORM 도구는 Raw SQL 쿼리를 지원합니다. 쿼리 최적화: ORM 도구에서 제공하는 쿼리 최적화 기능을 활용하거나, 데이터베이스 엔진의 쿼리 플랜을 확인하여 쿼리를 개선할 수 있습니다. Fetch 전략 변경: ORM에서 제공하는 다양한 fetch 전략(Eager Fetch, Lazy..

23.10.06 REST API

REST API 많이 들어봤는데 이게 정확히 무엇일까? REST (Representational State Transfer)의 약자로 자원을 이름으로 구분하여 해당 자원의 상태를 주고받는 모든 것을 의미한다. HTTP URI(Uniform Resource Identifier)를 통해 자원(Resource)을 명시하고, HTTP Method(POST, GET, PUT, DELETE, PATCH 등)를 통해 해당 자원(URI)에 대한 *CRUD Operation을 적용하는 것을 의미한다. *CRUD Operation: "Create, Read, Update, Delete"의 첫 글자를 따서 만든 약어로, 대부분의 컴퓨터 소프트웨어에서 데이터와 관련된 네 가지 기본 연산을 의미한다. 구성요소 : 자원 (Res..

23.10.05 콜백헬

NestJS 강의에서 비크립트를 사용했었다. 사용한 경험이 있었기 때문에 어렵지 않았는데 내가 사용한 방법과 달라서 찾아보던 중에 갑자기 예전에 그냥 아 이런거구나 하고 넘어갔던 콜백헬을 파고들게 되었다. 콜백함수 사용 const bcrypt = require('bcrypt'); // 솔트의 라운드 수를 정합니다. 라운드 수가 높을수록 보안이 강화되지만 처리 시간이 늘어납니다. const saltRounds = 10; // 사용자로부터 받은 비밀번호 const myPlaintextPassword = 'my_password'; // 솔트를 생성하고 비밀번호를 해시화합니다. bcrypt.genSalt(saltRounds, function(err, salt) { if (err) throw err; // 비밀번..

23.10.04 프레임워크 라이브러리

라이브러리 (Library): 라이브러리는 일련의 함수, 클래스, 모듈 또는 리소스의 집합입니다. 이러한 코드와 리소스는 특정 기능을 수행하거나 작업을 쉽게 할 수 있도록 도와줍니다. 라이브러리는 일반적으로 개발자가 직접 호출하거나 사용하는 코드에서 필요한 함수 또는 클래스를 선택적으로 사용할 수 있습니다. 라이브러리는 독립적으로 실행되지 않으며, 개발자가 필요한 기능을 불러와 사용하는 방식으로 통합됩니다. 예제: Python에서의 NumPy (수치 계산 라이브러리), jQuery (JavaScript DOM 조작 라이브러리) 등 프레임워크 (Framework): 프레임워크는 애플리케이션 또는 시스템을 개발하기 위한 구조와 규칙을 정의하는 데 중점을 두고 있습니다. 개발자는 프레임워크가 제공하는 구조 안..

23.10.03 도메인 주도 설계 (Domain-driven design, DDD)

도메인 주도 설계 도메인 패턴을 중심에 놓고 설계하는 방식을 일컫는다. 도메인 요구사항이나 소프트웨어로 해결하려고 하는 문제 영역을 나타낸다. 주요 구성 요소 : 유비쿼터스 언어(Ubiquitous Language) 팀 내에서 사용되는 공통 언어를 의미합니다. 모든 사람이 같은 용어로 도메인의 복잡성을 이해하고 의사소통 할 수 있도록 합니다. 엔터티 (Entity) 고유한 식별자(ID)를 가지며, 시간이 지나도 변하지 않는 특성을 갖습니다. 도메인 내에서 식별 가능한 객체로, 그 상태나 행동이 비즈니스 로직에 따라 변할 수 있습니다. 값 객체 (Value Object) 고유한 식별자를 갖지 않습니다. 불변성(Immutable)을 갖으며, 속성의 조합으로 구별됩니다. 도메인 내에서 특정 값을 나타내는 객체..