Programmers 87

[35일차]Node.js 에러 핸들링: 기본부터 실전 프로젝트 적용까지

자바스크립트의 기본적인 에러 객체와 처리 방식(try-catch)부터, 실제 Express 프로젝트에서 JWT 인증 에러와 비즈니스 로직 에러를 어떻게 효과적으로 관리하는지에 대해 설명한다.1. 자바스크립트 에러의 기본에러 객체의 종류자바스크립트는 다양한 유형의 내장 에러 객체를 제공하여, 에러의 원인을 명확히 알려준다.Error(): 가장 일반적인 런타임 에러 객체이다. 개발자가 직접 에러를 생성할 때 주로 사용된다.SyntaxError(): 코드의 구문이 자바스크립트 문법에 맞지 않을 때 발생한다. (예: 괄호 불일치)ReferenceError(): 존재하지 않는 변수나 함수를 참조하려고 할 때 발생한다.TypeError(): 값이 예상된 타입이 아닐 때 발생한다. (예: null의 프로퍼티에 접근 ..

Programmers 2025.10.29

[34일차]SQL 데이터 관리와 Node.js에서의 효율적인 사용법

SQL 데이터 삭제 명령어: DELETE, DROP, TRUNCATE 비교 분석1. 데이터 삭제 명령어의 종류와 특징SQL에서 데이터를 삭제하는 명령어는 크게 DELETE, DROP, TRUNCATE 세 가지로 나눌 수 있으며, 각각의 역할과 동작 방식에 차이가 있다.DELETEDELETE는 데이터 조작 언어(DML)에 속하며, 테이블의 데이터를 행(row) 단위로 삭제하는 명령어이다.동작 방식: WHERE 절을 사용하여 특정 조건을 만족하는 행만 선택적으로 삭제할 수 있다. 만약 WHERE 절을 생략하면 테이블의 모든 행을 삭제한다.트랜잭션: DELETE 작업은 트랜잭션 로그에 각 행의 삭제 기록을 남기므로, 작업 속도가 상대적으로 느리다. 하지만 이 덕분에 ROLLBACK을 통해 데이터를 복구하는 것..

Programmers 2025.10.28

[33일차]Node.js의 논블로킹 I/O와 비동기 처리 방식

1. 기존 서버의 한계: '기다림의 비효율', 블로킹 I/ONode.js가 등장하기 전, Java, PHP, Ruby 등으로 만들어진 대부분의 서버는 '요청 하나당 스레드(Thread) 하나' 방식으로 동작했다.스레드(Thread): 서버가 처리하는 작업의 단위로, '일꾼'에 비유할 수 있다.이 방식의 가장 큰 문제는 I/O(입출력) 작업에서의 '기다림', 즉 블로킹(Blocking)이다.식당 비유: 스레드-퍼-리퀘스트(Thread-per-Request) 방식손님(요청)이 오면, 종업원(스레드) 한 명이 그 손님에게 전담 배정된다.손님이 스테이크(DB 조회, 파일 읽기 등)를 주문한다.담당 종업원은 주방에서 요리가 끝날 때까지, 다른 아무 일도 하지 않고 그 앞에서 가만히 기다린다. (블로킹 발생)만약 ..

Programmers 2025.10.27

[32일차]나의 book_market 프로젝트 추가 기술 정리 보고서

JHParrrk/book_market 프로젝트 기술 보고서1. 보고서 개요본 문서는 JHParrrk/book_market 프로젝트에 적용된 개인적으로 학습하거나 발전시킨 핵심 기술과 설계 패턴을 분석합니다. 분석은 크게 데이터베이스 설계 및 활용, 견고한 아키텍처, 보안 및 안정성, 그리고 유연한 API 설계의 네 가지 관점에서 진행됩니다.2. 데이터베이스 중심의 문제 해결 및 최적화복잡한 비즈니스 로직을 어플리케이션 코드가 아닌, 데이터베이스의 고급 기능과 최적화된 설계를 통해 해결하여 성능과 효율을 모두 확보하려고 노력하였습니다.2.1. 재귀 CTE를 활용한 계층 구조 데이터 탐색도입 이유categories 테이블은 parent_id를 통해 스스로를 참조하는 자기 참조(Self-Referencing)..

Programmers 2025.10.24

[31일차]데이터베이스 무결성 관리, 스키마 개선 작업 결과

데이터베이스 무결성 관리: 중복 키 에러와 외래 키 제약 조건데이터베이스 설계에서 데이터의 일관성과 정확성을 유지하는 것은 매우 중요하다. 이를 위해 사용되는 UNIQUE 제약 조건과 FOREIGN KEY 제약 조건의 개념, 그리고 이와 관련된 오류 및 명명 규칙에 대해 알아본다.1. Duplicate Key on Write or Update 에러이 오류는 데이터베이스의 고유성(Uniqueness) 제약 조건을 위반했을 때 발생한다. 주로 MySQL/MariaDB 환경에서 Error Code: 1062. Duplicate entry '...' for key '...'와 같은 형태로 나타나며, 테이블에 새로운 데이터를 삽입(INSERT)하거나 기존 데이터를 수정(UPDATE)할 때, 특정 컬럼에 이미 존재..

Programmers 2025.10.23

[30일차]COUNT, AS, 서브쿼리, EXISTS

COUNT(), AS, 서브쿼리(Subquery), EXISTS의 개념과 나의 코드에서 사용 사례를 통해 분석한다.1. COUNT() 함수COUNT()는 SQL의 집계 함수(Aggregate Function) 중 하나로, 특정 조건을 만족하는 행(row)의 개수를 세는 데 사용된다.1.1. 개념COUNT(column_name)은 해당 컬럼에서 NULL이 아닌 값의 개수를 반환하며, COUNT(*)는 NULL 값과 관계없이 모든 행의 수를 반환한다. WHERE 절과 함께 사용하면 특정 조건을 만족하는 행의 개수만 집계할 수 있다.1.2. 코드 내 활용 사례: countBooksbook.service.js의 countBooks 함수는 검색 조건에 맞는 도서의 총개수를 조회하여 페이지네이션(Pagination..

Programmers 2025.10.22

[29일차]SQL 시간 범위 검색, parent_id, 페이지네이션

1. SQL 시간 범위 검색: DATE_ADD, DATE_SUB데이터베이스에서 특정 기간 내의 데이터를 조회할 때 DATE_ADD와 DATE_SUB 함수는 매우 유용하게 사용된다. 이 함수들은 날짜 및 시간 값에 특정 간격을 더하거나 빼서 동적인 시간 범위를 설정할 수 있게 해준다.1.1. DATE_ADD(date, INTERVAL expr unit)DATE_ADD 함수는 지정된 날짜(date)에 특정 기간(INTERVAL expr unit)을 더한 결과를 반환하는 함수이다.date: 기준이 되는 날짜 또는 시간 값 (예: '2025-10-20', NOW())INTERVAL expr unit: 더하고자 하는 시간 간격. expr은 숫자, unit은 YEAR, MONTH, DAY, HOUR 등의 시간 단위..

Programmers 2025.10.21

[28일차]플레이스홀더 활용, 데이터베이스 테이블 분리

1. 개발 초기 환경 구성을 위한 플레이스홀더(Placeholder) 활용프로젝트 초기 단계에서는 실제 데이터가 준비되지 않은 경우가 많다. 이때, 디자인 레이아웃과 기능 개발을 원활하게 진행하기 위해 임시 데이터를 채워 넣는 플레이스홀더(Placeholder)를 사용한다. 본 프로젝트에서는 텍스트와 이미지에 각각 로렘 입숨과 픽숨을 활용했다.가. 로렘 입숨 (Lorem Ipsum)로렘 입숨은 출판 및 그래픽 디자인 분야에서 의미 없는 텍스트를 채우기 위해 사용하는 표준 더미(dummy) 텍스트다. 개발 과정에서는 다음과 같은 목적으로 사용한다.콘텐츠 독립적 디자인 검증: 실제 문구가 정해지기 전에 텍스트가 들어갈 공간의 레이아웃, 폰트, 크기, 색상 등이 디자인 시안대로 올바르게 표현되는지 확인할 수 ..

Programmers 2025.10.20

[과제] 도서 전체 및 상세 조회 API 구현 흐름, 결과

도서 검색 및 목록 조회 흐름도서 검색 및 목록 조회는 사용자가 원하는 조건(카테고리, 검색어)에 맞는 도서 목록을 페이지네이션과 함께 제공하는 기능입니다.실행 간단 흐름도클라이언트 → 서버:GET /books/search?category_id=1&keyword=시간&page=1&limit=10Controller:req.query에서 필터링 및 페이지네이션 파라미터 추출bookService.searchBooks 호출Service:비즈니스 로직 없이 필터 객체를 Repository로 전달bookRepository.searchBooks 호출Repository:조건에 따라 동적 SELECT 쿼리 생성LIMIT와 OFFSET을 사용해 페이지네이션 처리DB에서 도서 목록 조회 후 반환Controller:조회된 도..

Programmers 2025.10.20

[27일차]Node.js 프로젝트 구조, 암호화 인증 시스템

1. Node.js 프로젝트 구조 설계효율적인 개발과 유지보수를 위해 프로젝트의 구조를 체계적으로 설계하는 것은 필수적이다. 본 프로젝트는 계층형 아키텍처(Layered Architecture)를 기반으로 구조를 설계했다.프로젝트 구조.├── database/ # 데이터베이스 연결 및 설정├── middleware/ # 인증, 유효성 검사 등 미들웨어├── modules/ # 기능별 모듈 (도메인)│ └── users/│ ├── user.controller.js│ ├── user.service.js│ └── user.repository.js├── routes/ # API 라우팅 설정├── utils/ ..

Programmers 2025.10.17