728x90

 


2024.11.16

_ 22:09

pg-mem 설정 오류

https://springdream0406.tistory.com/225

 

pg-mem Nest에 Test DB로 설정하기

pg-mem을 Nest 프로젝트의 Test DB로 적용하기로 한 이유https://springdream0406.tistory.com/224 Test Code 2 (작성 중)통합테스트 코드를 작성해본 후, 대부분을 mock으로 처리해놓은 현재 유닛테스트에 대한 의

springdream0406.tistory.com

 


2024.11.13

_ 19:17

Test module 주입 관련 오류

https://springdream0406.tistory.com/222

 

Test Code의 module

테스트코드를 강의만 본 후 따라서 만들었다 보니 코드에 대한 이해도가 부족했었다.그 가장 큰 예가 test에서 만드는 module이다.솔직히 그부분은 그냥 강의 따라서 적었다 보니 크게 신경쓰지 않

springdream0406.tistory.com

 


2024.11.12

_ 10:00

CASCADE 설정 잘 몰라서 생긴 오류

https://springdream0406.tistory.com/221

 

TypeORM CASCADE

현재 진행중인 프로젝트 CMSPP는 auth와 user테이블로 회원가입 정보와 유저정보가 분리되어있다.그리고 개인적으로 auth테이블의 정보가 조회되는걸 최소화하고 싶어서 auth에서 user로 단방향 관계

springdream0406.tistory.com

 

Test Code의 Module을 잘 몰라서 생긴 오류

https://springdream0406.tistory.com/222

 

Test Code의 module

테스트코드를 강의만 본 후 따라서 만들었다 보니 코드에 대한 이해도가 부족했었다.그 가장 큰 예가 test에서 만드는 module이다.솔직히 그부분은 그냥 강의 따라서 적었다 보니 크게 신경쓰지 않

springdream0406.tistory.com


2024.11.11

_ 03:00

e2e Test에서 DB PK 초기화 안되서 생긴 오류

https://springdream0406.tistory.com/220

 

Nest e2e test DB PK 초기화

어제부터 강의 따라서 열심히 프로젝트에 e2e 테스트를 적용하고 있다. 어제 auth 테이블을 마치고 오늘은 user 테이블을 작업중인데, 어제 auth 테이블에서 겪었던 문제가 다시 나타났다.바로 db의

springdream0406.tistory.com

 


2024.11.10

_ 12:00

e2e Test에서 Guard를 통과 못해서 생긴 오류

https://springdream0406.tistory.com/219

 

NestJS e2e test 소셜(Guard) Mocking

e2e 테스트를 강의에서 배우고 현재 프로젝트에 적용하기 시작했다. 근데 처음부터 소셜 회원가입/로그인 로직을 만났다.. 일단 나는 커스텀가드를 만들어서 전역 설정하고, 몇몇 path에 커스텀

springdream0406.tistory.com


2024.10.31

_ 01:10

정확히 말하자면 오류는 아니고, 지식이 부족하여 원하는데로 변경을 못하다가 이번에 타입스크립트 강의를 보면서 제네릭에 대해 알게된 후 적용해서 변경했다.

// 선택년도로 데이터 필터링
  static filteringData(selectedYear: number | null, data: any) {
    if (!selectedYear) return data;
    return data?.filter(
      (item: any) => Utils.getYear(item.date) === selectedYear
    );
  }

위는 변경전 코드로 data의 타입이 any로 되어있다.

해당 함수의 data 파라미터로 전달되는 값들은 4가지로 정해져있었는데, 이를 data: A[] | B[] | C[] | D[] 이런식으로 넣으니 계속 에러가 발생했었다.

 

4개의 타입 모두 date라는 프로퍼티를 가지고 있기 때문에 잘 되야한다고 생각했는데, 공부를 하고보니 타입스크립트 입장에서는 4가지중 어떤건지 구분이 확실히 필요했었다.

 

때문에 앞서 말한데로 data의 타입을 4가지로 지정하게되면 4가지 타입에 대해 일일이 분기를 정하고 계산하는 불편하고 중복이 넘쳐나는 코드가 되었을 것이다.

그리고 리턴 타입역시 4가지로 지정이 되었을 것이고 이 함수를 사용하는 곳에서는 어떤 타입이 리턴되는지 정확히 알 수 없어서 제대로 사용이 안되었을 것이다.

// 선택년도로 데이터 필터링
  static filteringData<T extends TGFilteringData>(
    selectedYear: number | null,
    data: T[]
  ): T[] {
    if (!selectedYear) return data;
    return data?.filter((item) => Utils.getYear(item.date) === selectedYear);
  }

위 코드는 제네릭을 사용해서 바꾼 코드이다.

제네릭을 date 프로퍼티를 가진걸로 정하려다가, 강한 제약을 걸고 싶어서 실제 사용하는 A ~ D 타입들을 묶어 타입을 만들고 걸어주었다.

 

제네릭 덕분에 data의 타입이 유연하게 바뀌고, 리턴타입도 입력과 같다고 쉽게 설정이 가능하다보니 쉽게 재사용하기 편한 함수가 되었다.

728x90

'Projects > CMSPP(CM Solar Power Plant)' 카테고리의 다른 글

3. 구현  (3) 2024.11.18
2. 구상  (5) 2024.11.11
1. 발상  (0) 2024.06.10

+ Recent posts