1주차 개인 회고

박재하·2023년 11월 10일
2

목표

개인의 성장 목표, 기술적 고민거리와 트러블 슈팅 경험 등을 문서로 정리합니다.
[피어세션]에서 받은 질문과 피드백을 정리하여 추가해두길 권장합니다.

  • 상시로 진행한 개인 회고 결과가 있다면 해당 기록으로 갈음할 수 있습니다.

회고

한마디

첫주부터 참 다사다난했습니다 ㅋ ㅋ 기획도 계속 변경되고, 간단할거라 생각했던 프로젝트 세팅부터 아주아주 많은 난관에 부딪혀 우당탕탕 그 잡채 !

그렇지만 그룹원들과 거의 매일같이 만나 머리를 맞대고 있으니 어떻게든 해결이 되는 기적을 여러 번 경험했습니다. 아직도 해결해나가야 할 일이 많지만, 이 멤버들과 함께라면 그 무엇도 두렵지가 않네요. 남은 5주도 ㅍㅇㅌㅍㅇㅌ 💥 💥 !

개인의 성장 목표

기술적 도전

  • 배포
    • GitHub Actions와 Docker를 활용한 CI/CD
    • AWS, NCP
      • 아키텍처 구조
      • 각 인스턴스들의 역할 : EC2(Server), Lambda(Cloud Functions), S3(Object Storage), VPC(VPC), ELB(Load Balancer), RDS(CloudDB) 등
    • NGINX
      • HTTPS(SSL/TLS) 구축하기
      • 로드 밸런싱 기능 활용
      • 보안 기능(IP/Port 스캐닝 차단 등) 활용
      • 리버스 프록시를 통해 프론트엔드, 백엔드, 스토리지 서버 등 요청 처리
  • DB
    • MySQL 동시성 제어
    • 쿼리 최적화
  • NestJS
    • NestJS LifeCycle
    • Test
      • TDD로 개발하기
      • 부하 테스트 및 로드 밸런싱을 통한 대용량 트래픽 대비

요약

  1. 클라우드 Infra 관리CI/CD에 초점을 둔 학습과 성장을 해보자!
  2. DB 쿼리 최적화트랜잭션 관리(동시성 제어)에 관해 학습과 성장을 해보자!
  3. NestJSTest(TDD, 부하 테스트)에 관해 학습과 성장을 해보자!

기술적 고민

NestJS

만들면서 배우는 NestJS 기초

AI Service 활용

Naver Cloud Platform에서 제공하는 AI Servies

GitHub Actions

GitHub Actions을 이용한 자동 배포

아키텍처 구조

백엔드 기술스택 선정이유

기술스택 선정이유 (NestJS, TypeORM, Docker, GitHub Actions)

데이터베이스 테이블 설계

데이터베이스 테이블 설계

(아래 내용과 종합하여 별도 포스팅을 작성할 예정입니다)

NestJS + TypeORM을 활용하여 Entity 구현

// user.entity.ts
import { Column, Entity, PrimaryGeneratedColumn } from 'typeorm';

@Entity()
export class User {
	@PrimaryGeneratedColumn()
	id: number;

	@Column({ type: 'varchar', length: 50, nullable: false, unique: true })
	username: string;

	@Column({ type: 'varchar', length: 100, nullable: false })
	password: string;

	@Column({ type: 'timestamp', default: () => 'CURRENT_TIMESTAMP' })
	created_at: Date;

	@Column({ type: 'varchar', length: 50, nullable: false, unique: true })
	nickname: string;

	@Column({ type: 'json', nullable: false })
	galaxy_style: string;
}
// board.entity.ts
import {
	Column,
	CreateDateColumn,
	Entity,
	Point,
	PrimaryGeneratedColumn,
	UpdateDateColumn,
} from 'typeorm';

@Entity()
export class Board {
	@PrimaryGeneratedColumn()
	id: number;

	@Column({ type: 'varchar', length: 255, nullable: false })
	title: string;

	@Column({ type: 'text', nullable: true })
	content: string;

	@Column({ type: 'blob', nullable: true })
	image: Buffer;

	@Column({ type: 'json', nullable: false })
	star_style: string;

	@Column({ type: 'point', nullable: false })
	star_position: Point;

	@Column({ type: 'varchar', length: 50, nullable: false })
	author: string;

	@CreateDateColumn()
	created_at: Date;

	@UpdateDateColumn()
	modified_at: Date;
}

앞으로 할 고민거리

  • AWS, NCP로 배포
    • 각 인스턴스 서비스들의 역할 및 인스턴스 구성 방법 고민
    • 인스턴스 생성 및 관리 실습
  • NGINX 기능 정리, 활용 방안 고민
    • 리버스 프록시, 로드 밸런싱, IP/Port 스캐닝 차단, HTTPS(SSL/TLS)
    • HTTPS 구현 방법 고민
    • 부하 테스트와 로드 밸런싱 방법 고민
  • NestJS TDD 구현 방식 정리
    • Controller, Service 테스트 코드 작성 방식 결정
    • Transaction을 활용한 DB CRUD 테스트
    • Code Coverage 고려
  • NestJS
    • Middleware 및 Enhancer(Guard, Interceptor, Exception Filter) 개념 정리 및 활용 방안 고민
    • 이미지 파일 저장 (리사이징, 확장자 통일, 스토리지 서버 저장)
  • DB
    • MySQL 동시성 제어
    • 쿼리 최적화 (+ 정규화, 인덱싱)
    • POINT, JSON 등 다양한 데이터 타입의 활용
    • MongoDB(NoSQL) 활용 방안

트러블 슈팅

NestJS + Yarn Berry 설정 문제 해결

NestJS + Yarn Berry 설정 문제 해결

git clone시 패키지 모듈 찾지 못하는 문제

profile
해커 출신 개발자

0개의 댓글