항해14기 본과정/항해14기 개발일지 55

[항해 14기] 개발일지25 (Node.js 5lv 과제)

5레벨 리뷰 1. 과제 요구 사항 1) 4레벨을 레이어드 아키택쳐로 재구성 2. 구상 1) 계층 분해 공부 후 적용 2) 라우트/컨트롤러/서비스/레포 로 분해 3) 스웨거/트랜잭션/액세스,리프레쉬토큰 적용 3. 구현 1) Directory Structure 2) 기존 라우트에서 기능을 분해하여 컨트롤러/서비스/레포로 분리 3) 리팩토링 - 선 제출 후 남은 주특기 기간동안 스웨거/트랜잭션/액세스,리프레쉬토큰/테스트코드 등 진행 예정 4. 리뷰 1) 5lv - 프로젝트를 만들 때 레이어드 아키택쳐로 설계가 가능해짐 - 컨트롤러/서비스/레포지토리 각 계층의 역할을 명확히 인지함 - 레이어드 아키택쳐로 설계시 장/단점을 알게됨 2) 고찰 - 레포지토리에서 오는 값들을 서비스에서 받을 수 있게 가공해줘야했는데,..

[항해 14기] 개발일지24 (Layered Architecture Pattern)

Node.js 심화 1. Architecture Pattern 1) 정의 - 소프트웨어의 구조를 구성하기 위한 가장 기본적인 토대를 제시 - 각각의 시스템과 역할이 정해져있고, 해당 시스템들의 관계와 규칙등이 포함 2) 특성 - 검증된 구조로 개발을 진행하기 때문에 안정적인 개발 가능 - 도메인이 복잡할수록 모델/코드의 관리가 용이 3) 대표적인 종류 - 저장소 패턴 : 모든 데이터가 메모리에 존재하는 것처럼 가정하고, 이를 추상화함 - 서비스 계층 패턴 : usecase의 시작과 끝의 진행과정을 명확하게 정의 - 작업 단위 패턴 : 비즈니스 트랜잭션의 영향받은 개체의 리스트를 관리, 변화 기록(원자적 연산 제공) - 애그리게이트 패턴 : 데이터의 정합성을 강화 4) 아키택쳐 패턴 도입 전 고민 사항 -..

[항해 14기] 개발일지23 (Prettier, Socket, Domain)

Node.js 심화 1. Prettier 1) 코드 서식 - 일관적으로 처리하면 오타 감소, 가독성 상승 - 협업 시 코드 충돌 방지 2) 코드 컨벤션을 통하여 규약 통일 - JS 코딩 컨벤션 예시(https://ui.toast.com/fe-guide/ko_CODING-CONVENTION) 3) Prettier - 코드 서식 관리 도구 - 기본 규칙(https://prettier.io/docs/en/configuration.html#basic-configuration) 4) vscode - 익스텐션으로 간단하게 사용 가능 5) npm - npm i prettier -D - .prettierrc.js 생성 이후(app.js파일과 같은위치), 아래 코드 입력 { "printWidth": 80, // 줄 바꿈..

[항해 14기] 개발일지22 (Node.js 4lv 과제)

4레벨 리뷰 1. 과제 요구 사항 1) ERD 작성 2) 댓글 추가 3) 좋아요 기능 추가 2. 구상 - 3레벨과 동일하게 댓글부분 mongoose -> sequelize로교체 - 좋아요 테이블 추가, 좋아요 라우터 추가 - 게시글 테이블에 좋아요 추가 - 유저가 좋아요를 누를 시 좋아요 테이블에 값추가, 취소시 값 삭제 - 좋아요 on/off 시 게시글 테이블의 좋아요 수 변경 3. 구현 1) ERD 2) Directory Structure 3) 댓글 기능 추가 - 3레벨에 작성했던 댓글 기능 재활용, 문법만 교체 4) 좋아요 기능 추가 - like 라우터, 모델, 테이블 추가, post테이블에 likes 추가 - like테이블에 userid와 postid 저장 및 참조 - 좋아요 on off는 테이블..

[항해 14기] 개발일지21 (Node.js 3lv 과제)

3레벨 리뷰 1. 과제 요구 사항 1) MySQL 사용 - 2레벨 과제의 MongoDB를 MySQL로 변경 - mongoose를 sequelize로 변경 2) ERD 작성 2. 구상 - API 명세서대로 진행 - 몽구스/몽고디비 부분 전부 mysql/시퀄라이즈로 교체 3. 구현 1) ERD - Users와 Posts는 1:N관계 - userid를 Users에서 참조 2) Directory Structure 3) MySQL 교체 - 몽구스crud를 시퀄라이즈crud로 교체 - 연결 db를 mysql로 교체 - 몽구스 스키마 mysql model로 교체 - migration 적용 4. 리뷰 1) 3lv - SQL의 개념과 쿼리 명령어를 익힘 - MySQL 사용법을 익힘 - sequelize 사용법을 익힘 2..

[항해 14기] 개발일지20 (Sequelize, Migration)

Node.js 숙련 1. Sequelize 1) 구성 - migration과 model - migration은 Sequelie CLI를 이용하여 MySQL에 테이블을 생성하기 위해 사용 - model은 table과 column의 속성값을 설정하고 MySql과 Express를 연결 시킴 2) 사용 방식 - 테이블 모델 생성: npx sequelize model:generate --name Posts --attributes title:string,content:string,password:string - model이 생성되고, model을 Sequelize시킨 migration 파일 생성(model의 시퀄라이즈 적용 결과 데이터) - 이후 npx sequelize db:migrate를 진행하면 위의 사항들이..

[항해 14기] 개발일지19 (SQL, Sequelize)

Node.js 숙련 1. SQL 1) 개요 - vscode my sql익스텐션에서 쿼리명령어로 진행가능 - db : 테이블/컬럼으로 구성 (고도화된 엑셀 개념) 2) 쿼리 명령어 - 테이블 생성 - 데이터 삽입 - 데이터 조회 3) 제약조건 - 컬럼들간의 제한사항을 관리하고, 조건을 위반하는 데이터를 방지하여 데이터베이스의 완전성을 보장하는 규칙 - 데이터가 결함없이 완벽한 상태인 무결성(Integrity)을 지키기 위해 만들어진 개념 - 테이블을 분석할 때 설정된 컬럼 속성들을 바탕으로 해당 테이블이 어떤 역할을 하는지 명확하게 인지 가능 4) 제약조건 종류 - 테이블 데이터의 고유성을 보장하는(Primary Key) - 빈 값을 허용하지 않는 조건(Null) - 특정 컬럼이 중복된 키를 가질 수 없는..

[항해 14기] 개발일지18 (쿠키/세션, JWT, RDS)

node.js 숙련 1. 쿠키/세션 1) cookie - 브라우저가 서버 응답으로 Set-Cookie 헤더를 받은 경우 해당 데이터를 저장한 뒤 모든 요청에 포함하여 보냄 - 데이터를 여러 사이트에 공유할 수 있기 때문에 보안에 취약 - 쿠키는 `userId=user-1321;userName=sparta` 와 같이 문자열 형식으로 존재하며 쿠키 간에는 세미콜론`(;)` 으로 구분 2) session - 쿠키를 기반으로 구성된 기술 - 클라이언트가 언제나 데이터를 확인 할 수 있던 쿠키와는 다르게 세션은 데이터를 서버에만 저장하기 때문에 보안성이 좋음 - 사용자가 많은 경우 서버에 저장해야 할 데이터가 많아져서 서버 컴퓨터가 감당하지 못하는 문제 발생 - cookie-parser : 요청된 쿠키를 req...

[항해 14기] 개발일지17 (Node.js 1LV 과제, 2LV 과제)

2레벨 리뷰(1레벨 포함) 1. 과제 요구 사항 1) 개요 - express, 몽고디비, jwt, 쿠키파서 이용 - 게시판 게시글/댓글 CRUD 구현, 예외처리, 로그인/회원가입 구현 2) 로그인/회원가입 API - 닉네임 조건, 비밀번호 조건, 예외처리, req조건 - jwt,와 cookie이용 3) 게시글 CRUD - 특정 조건으로 조회, 상세 조회 구현 - 작성/수정/삭제 시 상요자 인증진행, 예외처리 4) 댓글 CRUD - 게시글과 동일 2. 구상 - API 명세서대로 진행 - 게시글이 지워질 경우 소속된 댓글도 삭제하는 기능 추가 3. 구현 1) Directory Structure 2) 스키마 - user : 닉네임과 패스워드, 닉네입은 유니크값 지정 - index : 생략 - post : 명세..

[항해 14기] 개발일지16 (Git, EC2)

Git, AWS - EC2 1. Git 1) git - 체계적인 개발과 프로그램의 배포를 도와주는 형상 관리 도구, 또는 버전 관리 시스템 2) 형상 관리 도구 - 프로젝트의 개발 단계에서 소스 코드의 버전을 효과적으로 관리하기 위함 - 같은 파일을 여러명이서 동시에 작업할 수 있음 3) repository - 모든 파일의 변경 사항을 저장할 수 있는 저장소 - Local Repository : local저장소 - Remote Repository: GitHub와 같이 Git 서버에서 제공되는 Repository 4) commit - 이전 변경사항 기준으로 새로 변경된 내용을 기록하는 단위 5) branch - 공동 작업시 충돌 방지를 위한 시스템 6) git ignore 자동 생성 사이트 https://..