백엔드 14일차

이동현·2023년 3월 30일
0

코드캠프 백엔드

목록 보기
13/29

1. generic 타입

// 1. 문자/숫자/불린 기본타입
// prettier-ignore
const getPrimitive = (arg1: string, arg2: number, arg3: boolean): [boolean, number, string] => {
  return [arg3, arg2, arg1];
};
const result = getPrimitive("철수", 123, true);

// 2. any 타입(그냥 자바스크립트랑 같음)
const getAny = (arg1: any, arg2: any, arg3: any): [any, any, any] => {
  console.log(arg1 + 100); //any는 아무거나 다 됨!
  return [arg3, arg2, arg1];
};
const result = getAny("철수", 123, true);

// 3. unknown 타입
const getUnknown = (arg1: unknown, arg2: unknown, arg3: unknown): [unknown, unknown, unknown] => {
  if (typeof arg1 === "number") {
    console.log(arg1 + 100); //t사용할 때 알아보고 써야 하며 조건을 걸지 않으면 에러 처리된다.
  }
  return [arg3, arg2, arg1];
};
const result = getUnknown("철수", 123, true);

// 4. generic 타입
//MyType이 return에 들어오는 값에 의해 타입이 계속 변하게 된다., 안전한 any정도로 생각하면 편하다.
function getGeneric<MyType1, MyType2, MyType3>(arg1: MyType1, arg2: MyType2, arg3: MyType3): [MyType3, MyType2, MyType1] {
  return [arg3, arg2, arg1];
}
const result = getGeneric("철수", 123, true);

// 4. generic 타입 -2
function getGeneric2<T1, T2, T3>(arg1: T1, arg2: T2, arg3: T3): [T3, T2, T1] {
  return [arg3, arg2, arg1];
}
const result = getGeneric2("철수", 123, true);

// 4. generic 타입 -3
function getGeneric3<T, U, V>(arg1: T, arg2: U, arg3: V): [V, U, T] {
  return [arg3, arg2, arg1];
}
const result = getGeneric3("철수", 123, true);

// 4. generic 타입 - 화살표 함수
// 타입 추론이 아닌 미리 타입을 명시할 수 있다, 사용자 입장을 배려한것
const getGeneric4 = <T, U, V>(arg1: T, arg2: U, arg3: V): [V, U, T] => {
  return [arg3, arg2, arg1];
};
const result = getGeneric4<string, number, boolean>("철수", 123, true); // 제네릭에서, 타입 명시가 필요한 상황

2. utility 타입

interface IProfile {
  name: string;
  age: number;
  school: string;
  hobby?: string;
}

// 1. Partial 타입
type aaa = Partial<IProfile>;

// 2. Required 타입
type bbb = Required<IProfile>;

// 3. Pick 타입(뽑아내는 것)
type ccc = Pick<IProfile, "name" | "age">;

// 4.Omit 타입(한가지 빼는것)
type ddd = Omit<IProfile, "School">;

// 5. Record 타입(각각 key value를 맵핑시켜 대입해준다.)
type eee = "철수" | "영희" | "훈이"; // Union 타입
let child1: eee = "철수"; //철수, 영희, 훈이만 됨
let child2: string = "사과"; //철수, 영희  훈이 사과, 바나나 다 됨

type fff = Record<eee, IProfile>;

// 6. 객체의 key들로 Union 타입 만들기
type ggg = keyof IProfile; // "name" | "age" | "school" | "hobby"
let myprofile: ggg = "hobby";

// 7. type vs interface 차이 => interface는 선언병합 가능
interface IProfile {
  candy: number; // 선언병합으로 추가됨
}

// 8. 배운것 응용
let profile: Partial<IProfile> = {
  candy: 10,
};

3. MYSQL

DBeaver를 통해 DB정보를 볼 수 있다.
mongodb - mongodb-compass
mysql - DBeaver

1) mysql 켜기

sudo systemctl start mysql = mysql켜기
sudo systemctl status mysql = 켜져있는지 상태 보기
sudo mysql -u root -p = 비번 치고 들어가기
use mysql = mysql 데이터베이스 쓰기
show tables;
slect *

2) DB 관리프로그램

dbeaver
3306 포트가 디폴트 값이다

package.json 있는 곳에서 yarn add typeorm
하지만 nest.js안에서 써야 하기에 yarn add @nestjs/typeorm mysql2 mysql2는 mysql에 접속할 수 있게 도와주는 도구

entity.ts 는 그전에 했던 module에 스키마를 적어줫던 곳과 같다.
//db 파일명은 뒤에 복수형 s를 안적어준다.
primartcolumn = 주 컬럼으로 자동으로 중복되지 않는 컬럼을 만들어준다.
백엔드 설정과 mysql동기화를 해줘야 한다.

이렇게 만든뒤 서버를 열면
dbeaver의 myproject안에 board가 생긴 것을 확인 할 수 있다.

3) 몽구스와 디비버의 차이

몽구스는 필터같은 역할이였다. 몽고디비 안에서 추가를 직접해도 제어 할수가 없었다. schema less구조였다.
mysql은 schema가 존재하기에 구조가 박혀져 있는 상태라 통째로 고쳐줘야 한다.
유연하지는 못하지만 규모가 커지더라도 구조가 박혀있어 안정감 있게 보기 편하다.

4. typeorm으로 db연결하기

data transfer object를 데리고 다니기 위한 객체
class typescript 타입이라 graphql용으로 스키마를 만들어 줘야한다.

graphgl Field에서 int는 import 해줘야한다.

5. docker packaging

0개의 댓글