2025/09 25

[21일차]유효성 검사, err처리, 모듈화

현대의 웹 애플리케이션은 사용자에게 안정적이고 예측 가능한 서비스를 제공해야 한다. 이를 위해 개발자는 기능 구현뿐만 아니라, 예외 상황에 대비하고 코드의 품질을 지속적으로 관리해야 할 책임이 있다. 1. 유효성 검사 (Input Validation)1.1. 유효성 검사의 필요성유효성 검사는 애플리케이션으로 들어오는 모든 외부 데이터(주로 사용자 입력)가 우리가 기대하는 형식과 규칙에 부합하는지 확인하는 과정이다. 이는 애플리케이션의 안정성과 데이터 무결성을 지키는 첫 번째 방어선이다.주요 목적:데이터 무결성 유지: 데이터베이스나 시스템이 잘못된 형식의 데이터로 손상되는 것을 방지.보안 강화: SQL Injection 또는 XSS와 같은 악성 입력으로부터 애플리케이션 보호.예측 가능한 동작 보장: 유효..

Programmers 2025.09.30

[20일차]"SQL: 기본키, 외래키, 데이터 타입, 그리고 JOIN

기본키(PK)와 외래키(FK)의 정의와 존재 이유기본키 (Primary Key)정의: 테이블 내 각 행(Row)을 고유하게 식별하는 하나의 열(Column) 또는 열들의 조합이다.특징:단일 테이블 내에서 반드시 유일해야 한다.NULL 값을 가질 수 없다.존재 이유:데이터의 무결성을 보장한다.테이블의 각 행을 식별할 수 있도록 한다.외래키 (Foreign Key)정의: 한 테이블의 특정 열이 다른 테이블의 기본키를 참조하도록 설정된 키이다.특징:테이블 간의 관계를 정의한다.외래키는 참조 무결성을 유지한다(즉, 참조된 데이터는 반드시 존재해야 한다).존재 이유:테이블 간 관계를 설정하여 관계형 데이터베이스를 구성한다.데이터 일관성을 유지한다.기본키와 외래키 생성 방법테이블을 생성할 때 설정기본키 설정CREA..

Programmers 2025.09.29

[독학]Nest.js 에서 오랜만에 본 데코레이터 정복기

데코레이터와 메타데이터에 대한 핵심 정리데코레이터란 무엇인가?데코레이터는 코드에 부가적인 동작을 추가할 수 있는 도구이다. 메서드, 클래스, 변수에 자동으로 기능을 추가하는 선언적 프로그래밍 방식이며, 런타임에 동작을 감싸거나 수정하고 메타데이터를 추가하여 동작을 동적으로 제어할 수 있다.예: 특정 메서드가 호출되기 전에 권한 검사를 하도록 추가하거나, 메서드 실행 후 로깅 작업을 추가할 수 있다.함수 모듈화와 데코레이터의 차이함수 모듈화의 특징: 특정 동작을 함수로 분리하여 호출 시점에 직접 끼워 넣는다. 호출마다 명시적으로 작성해야 하므로 반복이 많아지고, 코드가 길어질 수 있다.데코레이터의 특징: 코드에 직접 끼워 넣는 대신, 메서드 위에 선언적으로 추가 작업을 붙인다. 공통 로직을 캡슐화하여 가독..

카테고리 없음 2025.09.27

[독학]Nest.js 대비 정리

NestJS 아키텍처 정리NestJS는 확장성과 유지보수성을 극대화하기 위해 설계된 서버 프레임워크로, 객체 지향 프로그래밍의 원칙과 모듈화 아키텍처를 기반으로 한다. 이 글에서는 NestJS의 주요 구성 요소와 각 요소의 역할, 그리고 상호작용 방식을 정리한다.NestJS 아키텍처: 레스토랑 비유NestJS의 구성 요소는 레스토랑의 운영 방식과 유사하다. 아래 표는 각 구성 요소의 역할을 비유적으로 설명한다.구성 요소레스토랑 비유핵심 역할클라이언트 (Client)손님API를 통해 서버에 특정 기능(요리)을 요청한다.컨트롤러 (Controller)웨이터손님의 주문(요청)을 받고 주방(서비스)에 전달하며, 완성된 요리(응답)를 손님에게 가져다준다.DTO (Data Transfer Object)주문서 양식주..

[19일차]관계형 데이터베이스 관리 시스템(RDBMS) 개념과 주요 특징

DBMS와 RDBMSDBMSDBMS(Database Management System)는 데이터베이스를 관리하고 운영하는 소프트웨어이다. 사용자는 DBMS를 통해 데이터베이스와 상호작용하며 데이터를 생성, 조회, 수정, 삭제(CRUD)할 수 있다.RDBMSRDBMS(Relational Database Management System)는 관계형 데이터베이스 관리 시스템을 의미한다. 이는 DBMS의 한 종류로, 데이터를 2차원 테이블(Table) 형태로 구성하며 테이블 간의 관계(Relationship)를 통해 데이터를 관리한다. 대표적인 RDBMS로는 MySQL, PostgreSQL, Oracle 등이 있다.RDBMS의 장점과 특징RDBMS는 데이터를 체계적으로 구조화하여 관리하므로 데이터의 일관성과 무결성..

Programmers 2025.09.25

[과제] Express 실행 구조 요약 및 정리

Express 애플리케이션의 실행 구조 보고서Express의 실행 구조Express 애플리케이션은 미들웨어(Middleware)의 연속적인 체인으로 구성되며, 클라이언트가 요청을 보냈을 때 요청이 처리되는 방식은 단계별로 명확하게 정의되어 있다. 클라이언트 요청은 app.js 파일에 정의된 미들웨어 스택을 순차적으로 통과하며, 최종적으로 응답을 반환한다.실행 과정HTTP 요청 수신 및 미들웨어 스택 시작:클라이언트의 요청이 Express 애플리케이션으로 전달된다.최상단 미들웨어의 순차적 실행:app.use()로 등록된 미들웨어가 순차적으로 실행된다. 이 과정에서 요청의 데이터를 전처리하거나 특정 조건을 확인한다.주요 미들웨어:app.use(logger("dev"));// → 요청이 들어올 때마다 로그를 ..

[18일차]웹 애플리케이션 동작 원리, ERD와 관계 예시

라우팅과 데이터 모델링 보고서1. 라우팅 (Routing)URL, 서버, 라우팅, 핸들러의 관계라우팅은 클라이언트가 요청한 URL(Uniform Resource Locator)에 따라 서버가 어떤 핸들러(Handler)를 실행할지 결정하는 과정이다. 이 관계는 웹 애플리케이션의 핵심 동작 원리로, 다음과 같이 설명할 수 있다.URL (클라이언트의 요청): 사용자가 브라우저 주소창에 특정 주소(https://example.com/users)를 입력하면, 클라이언트는 해당 URL로 서버에 요청을 보낸다.서버(Server): 서버는 클라이언트의 요청을 가장 먼저 수신하는 주체이다.라우터(Router): 서버 내에서 동작하는 라우터는 수신된 요청의 URL 경로(/users)와 HTTP 메서드(GET, POST ..

Programmers 2025.09.25

[17일차]Object.keys() , 모듈화, API 설계

1. Object의 빈 상태 확인 방법JavaScript에서 객체가 비어있는지 확인하는 데에는 Object.keys()를 활용하면 된다.1.1 Object.keys()Object.keys() 메서드는 주어진 객체의 속성 이름들을 일반적인 반복문과 동일한 순서로 순회되는 열거할 수 있는 배열로 반환한다. 이 배열의 길이가 0인지 확인하여 객체가 비어있는지 판단할 수 있다.const obj = {};if (Object.keys(obj).length === 0) { console.log("객체는 비어있습니다.");}2. 함수로 만들어 빼두면 좋은 점 (모듈화란)모듈화(Modularization)란, 소프트웨어의 복잡한 문제를 해결하기 위해 전체 시스템을 독립적인 기능을 수행하는 작은 단위인 모듈(Module..

Programmers 2025.09.24

[16일차]핸들러, Array.prototype.find(), == 와 ===, 예외처리

핸들러(Handler): 특정 이벤트를 처리하는 메서드핸들러는 특정 이벤트나 조건이 발생했을 때, 이를 처리하기 위해 지정된 함수나 코드 블록이다. 이벤트 기반 프로그래밍에서 핵심적인 역할을 담당하며, 사용자의 입력, 시스템의 알림, 데이터의 변화 등 다양한 상황에 대한 반응을 정의한다.예를 들어, 웹 페이지의 버튼을 클릭했을 때 특정 동작을 수행하게 하려면 '클릭 이벤트'에 대한 핸들러를 등록해야 한다.JavaScript const button = document.getElementById('myButton');// 'click' 이벤트가 발생했을 때 실행될 핸들러 함수function handleClick() { console.log('버튼이 클릭되었습니다!');}// 버튼에 클릭 이벤트 핸들러를 등..

Programmers 2025.09.24

[15일차]forEach와 map, 리팩토링, HTTP Status Code

forEach와 map의 핵심 차이점forEach와 map은 둘 다 배열의 각 요소를 순회하는 고차 함수이지만,목적과 반환값에서 근본적인 차이가 있다.1. forEach목적: 단순 반복 실행forEach는 배열의 각 요소를 가지고 주어진 함수(콜백)를 단순히 실행하는 것이 목적이다.각 요소에 대해 어떤 '행동(Action)'을 수행하고 싶을 때 사용한다.반환값: undefinedforEach는 항상 undefined를 반환한다.즉, 메서드 호출의 결과로 새로운 값을 만들어내지 않는다.예시 코드 (DB에 저장)// 가상의 DB 객체const db = { save: (data) => console.log(`${data.productId}번 상품 DB에 저장 성공!`)};const newOrders = [ ..

Programmers 2025.09.21