TIL 60

내일배움캠프 13주차 금요일 TIL

전체적인 엔티티 관계 오류 수정 후 스네이크 네이밍 전략까지 적용한 폴더를 dev에 업로드 한후 각자 dev를 소스로 개인 브랜치를 생성하여 작업을 진행하였다.내가 맏은 list 기능 구성을 위해, 먼저 list 엔티티를 참고하였다.// listimport { Board } from 'src/boards/entities/board.entity';import { Card } from 'src/cards/entities/card.entity';import { Entity, PrimaryGeneratedColumn, Column, CreateDateColumn, UpdateDateColumn, ManyToOne, OneToMany, JoinColumn,} from 'typeorm';@Entity..

TIL 2025.01.24

내일배움캠프 13주차 목요일 TIL

오늘은 트렐로 팀 프로젝트 API 명세서 작성, NestJS 기본 디렉터리 구조 구성, 엔티티 파일 구성을 진행하였다.CLI 명령어(nest g module, nest g controller, nest g service 등)을 활용하여 폴더/파일을 자동생성하였고 src 폴더 내에 기능별로 폴더가 추가될 예정이다.엔티티 작성기존 작성한 ERD를 피드백 받은 후 db테이블 구조를 적용하기 위한 엔티티 파일을 작성하였다.@Entity 데코레이터로 어떤 테이블에 매핑할 지,  @PrimaryGeneratedColumn(), @Column()으로 어떤 컬럼을 가질지 지정할 수 있었다.// trelloProject/src/users/entities/user.entity.tsimport { Entity, Prim..

TIL 2025.01.23

내일배움캠프 13주차 화요일 TIL

두 수를 입력받아 두 수의 최대공약수와 최소공배수를 반환하는 함수, solution을 완성해 보세요. 배열의 맨 앞에 최대공약수, 그다음 최소공배수를 넣어 반환하면 됩니다. 예를 들어 두 수 3, 12의 최대공약수는 3, 최소공배수는 12이므로 solution(3, 12)는 [3, 12]를 반환해야 합니다.function solution(n, m) { let arr = []; // 유클리드 호제법을 통해 최대공약수를 구하는 함수 function gcd (n, m) { if (m === 0) return n; return gcd(m, n % m); } // 두 수의 곱을 최대공약수로 나누면, 최소공배수를 구할 수 있음 function lcm (n, m) { ..

TIL 2025.01.21

내일배움캠프 12주차 금요일 TIL

오늘 프로젝트를 완료하였다.3계층 아키텍처 이해가 API 설계를 수월하게 만들었지만 의사소통 부재가 곧 기능 누락으로 이어진다는 교훈을 얻었다앞으로는 팀원들이 어떤 기능을 어느 정도까지 진행하고 있는지 주기적으로 체크해야겠다고 다짐했다. 프로젝트에서 3계층 아키텍처를 적용해보면서 레이어별 역할과 책임이 명확해져서 API 설계에 자신감을 얻었다.코드 흐름을 파악하기 훨씬 쉬워졌고, 협업에도 큰 도움이 되었다고 느꼈다.

TIL 2025.01.17

내일배움캠프 12주차 목요일 TIL

내가 작성한 리뷰 API 정리Repository (데이터 접근 계층)Prisma ORM을 통해 DB와 직접 통신하는 계층입니다.주로 findMany, findUnique, create, update, delete 같은 메서드를 통해 리뷰를 CRUD(조회/생성/수정/삭제) 합니다.비즈니스 로직 없이 쿼리만 담당하며, 결과를 반환해 줍니다.Service (비즈니스 로직 계층)Repository를 주입받아, 유효성 검사와 비즈니스 규칙을 처리합니다. 예:별점이 1~5 범위인지 검사중복 리뷰(결제 건당 1개) 여부 확인정렬(최신순) 등 추가 로직필요한 로직을 수행한 후, Repository를 호출하여 DB에 접근하고, 결과값을 가공해 Controller로 전달Controller (프레젠테이션 계층)Express..

TIL 2025.01.16

내일배움캠프 11주차 WIL

이번 주는 백오피스 프로젝트를 새롭게 시작하며, 3계층 아키텍처 구조를 학습하고 이를 프로젝트에 적용한 점이 가장 큰 성과였다. 특히 리뷰 CRUD API를 작성하며 각 계층의 역할을 명확히 이해하는 데 집중했다. 컨트롤러, 서비스, 리포지토리 계층 간의 유효성 검증 작업을 구분하며, 비즈니스 로직은 서비스 계층에 집중하고, 데이터베이스 검증은 리포지토리 계층에서 처리하도록 설계했다. 이러한 구조는 코드의 가독성과 유지보수성을 높이는 데 큰 도움을 줬다.또한, 실시간 알림 기능을 구현하기 위해 웹소켓(Socket.IO)을 활용했다. 초기에는 서버와 클라이언트 간 데이터 흐름이 낯설었지만, 테스트용 HTML 파일과 임시 코드를 작성하며 점차 이해할 수 있었다. 이를 통해 주문 현황을 실시간으로 업데이트하는..

TIL 2025.01.10

내일배움캠프 11주차 금요일 TIL

웹소켓을 통한 실시간 알림을 위해 서버 측 웹소켓 구성과 임시 html파일을 구성 후 테스트하였다.import express from 'express';import dotenv from 'dotenv';import cookieParser from 'cookie-parser';import { Server } from 'socket.io';import http from 'http'; // Node.js 기본 내장 모듈import cors from 'cors'; // CORS 모듈 import 추가import fs from 'fs/promises'; // 파일 시스템 모듈로, Promise 기반으로 파일을 읽고 쓸 수 있게 해줌...// express 객체 생성const app = express();// ex..

TIL 2025.01.10

내일배움캠프 11주차 목요일 TIL

오늘 3계층 코드를 완성하고 API 테스트까지 완료하였다.추후 변경될 여지가 있지만 일단 대부분의 유효성 검사를 서비스 계층에 몰아 작성되는 것을 기준으로 완성시켰다.// src/repositories/reviews.repository.jsimport { prisma } from '../utils/prisma/index.js';class ReviewsRepository { #orm; constructor(orm) { this.#orm = orm; } // 음식점 별 리뷰 findALLReviewByRestaurantId = async (restaurantId) => { const resReviews = await this.#orm.review.findMany({ where: ..

TIL 2025.01.09

내일배움캠프 11주차 수요일 TIL

어제 작성한 reviews.repository.js를 프로젝트에서 팀원들끼리 정한 형식에 따라 변경하였다.// src/repositories/reviews.repository.jsimport { prisma } from '../utils/prisma/index.js';class PostsRepository { #orm; constructor(orm) { this.#orm = orm; } findAllReviews = async () => { // ORM인 Prisma에서 review 모델의 findMany 메서드를 사용해 데이터를 요청합니다. const reviews = await this.#orm.review.findMany(); return reviews; }; fin..

TIL 2025.01.08