TIL 67

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

문제가 시작된 이유:글을 올리려고 할 때 "잘못된 요청(Bad Request)"이라는 에러가 발생했음.에러 메시지에 "유효하지 않은 JSON"이라는 내용이 포함됐음.초기 의심:파일을 업로드할 때 문제가 있을 것 같았음.문제가 어떻게 해결됐는지:요청 확인:글을 올리기 위해 클라이언트가 보내는 데이터에는 제목, 내용, 그리고 파일이 포함됐음. 이 데이터는 FormData 형식이었음.문제의 원인:클라이언트에서 데이터를 보낼 때, 모든 요청이 "application/json"으로 설정됐음. 그런데 파일을 보낼 땐 이 설정이 잘못된 거였음.그래서 서버가 JSON 데이터를 기대했는데, 실제로는 다른 형식의 데이터가 와서 오류가 발생했음.문제 해결 방법:글을 올릴 때 데이터가 FormData인지 확인하고, FormD..

TIL 2025.03.04

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

2025년 2월 11일 오후회의기획 단계에서 웹 소켓을 활용한 마피아 프로젝트를 그대로 할 것인지 아니면 턴 제 게임을 할 것인지 고민했고 어렵지만 다양한 기능들을 활용할 수 있는 마피아 게임을 하기로 결정했다.그리고 이번 주에는 프로젝트에서 활용될 도커, 레디스, 소켓 등등을 혼자 자습해 알아오기로 약속했다.마피아 프로젝트에 대한 ERD 를 작성하며 마무리했고 연결 관계가 잘 됐는지는 내일 다시 튜터님에게 확인해야겠다.저녁회의마피아 프로젝트에 관한 API를 세분화 시키고 배정하여 작성했다.

TIL 2025.02.11

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

Today I Learned오늘은 프로젝트 진행 중 여러 상황을 겪으면서 중요한 교훈을 얻었다.잦은 푸쉬와 테스트의 중요성전날 개인 브랜치에서 충분히 테스트한 코드가 dev 브랜치에 머지되자 전체 테스트가 실패하는 문제가 발생했다. 이 경험을 통해, 작은 변경이라도 자주 푸쉬하고 테스트를 진행해야 전체 시스템에 미치는 영향을 조기에 파악할 수 있다는 것을 배웠다.발표 및 프로젝트 준비의 체계적 관리 필요성간략한 발표 준비 후 발표를 진행했지만, 기술 선택의 이유와 시행착오에 대해 충분히 설명하지 못한 점이 아쉬웠다. 발표 준비에 충분한 시간을 할애하고, 왜 특정 기술이나 방법을 선택했는지 명확하게 전달하는 것이 중요하다는 것을 깨달았다.이 두 가지 경험을 바탕으로 앞으로는 더 자주, 더 꼼꼼하게 테스트하..

TIL 2025.02.07

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

1. OOP 기본 개념 이해 1.1. 객체 (Object) 현실 세계의 물체나 개념을 소프트웨어로 표현한 것. 예시: 자동차, 사람 등.1.2. 클래스 (Class) 객체를 생성하기 위한 설계도. 객체의 속성과 메서드를 정의. 예시: class Car { ... }1.3. 속성 (Attribute) 객체가 가지는 데이터. 객체의 상태를 나타냄. 예시: 자동차의 색상, 속도.1.4. 메서드 (Method) 객체가 수행할 수 있는 행동. 객체의 기능을 정의. 예시: start(), stop() 같은 함수.더보기클래스 (Class): 공장객체 (Object): 자동차속성 (Attribute): 자동차의 특성(색상, 모델, 연비 등)메서드 (Method): 자동차의 기능(시동, 가속, 제동 등)OOP를 적용하는..

TIL 2025.02.06

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

1. CI(Continuous Integration)란?개념:개발자가 코드를 변경하여 커밋하거나 푸시할 때마다 자동으로 빌드, 의존성 설치, 린트 검사, 테스트 실행 등 일련의 검증 과정을 수행하는 시스템이다. 수행 트리거는 yml 파일 내에서 설정할 수 있다.실행 방식:GitHub Actions와 같은 도구를 사용하면, 커밋(push) 또는 풀 리퀘스트(PR) 이벤트가 트리거될 때 미리 작성된 워크플로우(예: ci.yml) 파일에 따라 작업들이 자동으로 실행된다.결과 처리:만약 린트 검사나 테스트 등에서 문제가 발생하면, 해당 단계에서 오류가 발생하여 전체 CI 파이프라인이 실패하게 됩니다. 이는 보통 브랜치 보호 정책을 통해 PR 머지가 진행되지 않도록 하여, 문제를 해결한 후에야 코드가 통합되도록 ..

TIL 2025.02.04

내일배움캠프 15주차 월요일 TIL

NestJS TrelloProject 컨트롤러, 서비스 테스트 파일 구성> jest, @nestjs/testing 모듈 사용1. lists.controller.spec.ts 구성 컨트롤러 테스트 > 컨트롤러가 요청을 받았을 때 서비스의 메서드를 올바르게 호출하는 지, 올바른 결과를 반환하는지 검증해야함Jest  문법1. describe() 함수관련된 테스트 케이스들을 그룹화하는데 사용. 첫 번째 인자는 테스트그룹 명칭 문자열, 두 번째 인자는 해당 그룹에서 실행해야할 텟스트 케이스를 정의한 함수 describe('ListsController', () => { // 여기에 ListsController 관련 테스트 케이스 작성});2. it 메서드test() 함수와 함께 특정 개별 테스트 케이스를 정의하는데..

TIL 2025.02.03

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

금일은 리스트 기능의 API 테스트를 진행하였다.1. 리스트 생성속한 Board는 이미 생성되어 있을것이기 때문에, 클라이언트에서 보드에 대한 BoardId를 전달해주는 것을 상정하고 진행하였다.  2. 리스트 업데이트리스트에서 수정할 수 있는 텍스트는 타이틀이 유일하므로, 앞서 서술한 BoardId와 함께 수정할 타이틀을 클라이언트로 부터 전달 받는다.3. 포지션 업데이트 클라이언트에서 사용자의 포지션 변경 요청에 따른 최종 위치를 lists 배열로 전달해주는 것을 상정하고 진행하였으며, BoardId와 position 값 조합의 고유성을 지키기 위한 유효성 검증을 추가하여 진행하였다. 유효성 검증 리스트1. 전달받은 리스트와 db에 속한 리스트 개수가 같은지2. 전달받으 리스트들의 id가 실제로 지정..

TIL 2025.01.31

내일배움캠프 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