특정 데이터가 삭제되지 않았을 때는 중복을 허용하지 않고, 삭제(논리)된 경우에는 중복이 가능하게 요청을 받았다. 예를 들어 email이라는 컬럼이 위와 같이 되어야 한다고 하자.'test@test.com'이 이미 사용되고 있다. 그렇다면 더 이상 다른 사용자는 해당 이메일을 사용할 수 없다. 그러나 해당 로우가 삭제되었다면, 즉, deleted_at이 기록된 경우에는 더 이상 email은 존재하지 않는 것으로 간주되어 중복이 가능하도록 설정해야 한다. 그냥 deleted_at과 원하는 컬럼을 묶어서 UNIQUE로 지정하면 되지 않을까?-- email과 deleted_at을 묶어서 유니크로 지정ALTER TABLE usersADD CONSTRAINT UK_email_deleted_at UNIQUE(e..
새로운 프로젝트를 시작하기에 앞서 Nest.js, MySQL과 함께 사용할 ORM을 선택해야 하는 상황이 왔다. 다양한 ORM이 존재하지만 Prisma, TypeORM 둘 중 하나를 선택하기로 했다. 많은 글에서 두 ORM의 장단점을 비교하고 있지만, 성능 비교는 많지 않았고, 그마저도 최신자료는 없었다. Benchmark: Prisma VS TypeORM Prisma and TypeORM are possibly the main ORM choices for the JavaScript ecosystem in 2022, so I have... dev.to 뭐 어쨋든 참고해 보자면 위 글은 2년 전 자료이고, PostgreSQL을 사용했다고 한다. 대략 요약하자면, 전반적으로 거의 비슷하나 Prisma가 근소..
개발환경 node: v20.10.0 nestjs: v10.0.0 typeorm: v0.3.20 mysql2: v3.9.2 mysql: v8.0.0 문제. AsText does not exist Mysql의 Point 타입을 사용해서 좌표 관련 기능을 구현하던 중, 문제가 발생했다. typeorm의 조회관련 메서드를 사용해 DB에 SELECT 쿼리를 보냈더니 다음과 같은 에러가 발생했다. QueryFailedError: FUNCTION db-name.AsText does not exist 원인. 대략 찾아보니 타 DB에는 공간(Spatial) 관련 타입을 처리할 때, AsText와 같은 함수가 존재해 이를 이용해서 조회를 할 수 있다고 한다. 그래서 Typeorm이 DB에서 해당 타입을 조회할 때, AsT..
NestJS는 모듈과 서비스를 효과적으로 구성하고 관리할 수 있는 강력한 기능을 제공합니다. 오늘은 NestJS에서 서비스를 공유하는 두 가지 방법인 의존성 주입(Dependency Injection)과 모듈 임포트에 대해 알아보겠습니다. NestJS는 모듈과 서비스를 사용하여 애플리케이션을 구성합니다. 모듈은 애플리케이션의 부분을 나타내며, 서비스는 비즈니스 로직을 처리하고 데이터를 관리합니다. 상황 가정 1. Flowers와 Places라는 기능이 있다고 가정 (nest g resources flowers, nest g resources places) 2. FlowersController에서 PlacesService를 사용하고 싶음 3. 단, PlacesService를 새로 생성하는 것이 아닌 하나의..
nestjs + typeORM을 공부하던 중 특정 컬럼에 대해 유니크 속성을 주어야 하는데, 두 가지 방법이 보였다. 첫 번째는 변수에 @Column 데코레이터를 사용하는 것이고, 두 번째는 클래스에 @Unique 데코레이터를 사용하는 것이다. 두 방법 모두 유니크 속성을 부여한다는 것은 동일하지만 약간의 차이가 있다. 유니크 속성을 각각 부여하느냐, 합쳐서 부여하느냐의 차이다. @Column({ unique : true }) 일반적으로 원하는 특정 컬럼에 유니크 속성을 주기 위해 사용할 수 있다. @Column({ unique: true }) first: string; @Column({ unique: true }) second: string; 이러한 방식으로 생성된 제약조건을 살펴보면 각각 컬럼별로 두..
nodejs express 공부를 하고 있는데, 쿼리를 작성하던 중 문득 생각이 들었다. ` SELECT * FROM users WHERE user_id = ? ` mariadb 모듈에는 query 함수가 있는데, 첫 번째 인자로 쿼리 문자열 받고, 두 번째 인자로 쿼리의 플레이스홀더(? 부분)에 해당하는 부분을 배열 형태로 받는다. 세 번째 인자로 콜백함수를 받는다. 여기서 ${} 형태로 작성하면 가독성과 유지보수 측면에서 더 좋지 않나? 라는 생각이 들었다. ` SELECT * FROM users WHERE user_id = ${userId} ` 이런 식으로 작성하고 두 번째 인자를 생략하면 정상적으로 작동된다. 하지만 또 한편으로 드는 생각이 굳이 첫 번째 방식으로 작성하고 두 번째 인자로 배열을 ..
프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 1. 문제 요약 두 문자열의 자카드 유사도를 구하시오. 2. 접근 방법 문자열이 주어질 때, 알파벳의 경우에만 원소로 사용한다는 점을 이용합니다. 2글자까지만 사용하기 때문에 경우의 수는 26 * 26이 됩니다. 각각의 문자열을 검사하여 26 * 26의 int[][] 배열에 담아줍니다. 문제를 읽어보면 교집합 A ∩ B는 원소 "1"을 min(3, 5)인 3개, 합집합 A ∪ B는 원소 "1"을 max(3, 5)인 5개 가지게 된다. 라고 힌트를 주고 있습니다. 이전 단계에서 생성한 배열에 힌트를 그대로 사용..
11725번: 트리의 부모 찾기 루트 없는 트리가 주어진다. 이때, 트리의 루트를 1이라고 정했을 때, 각 노드의 부모를 구하는 프로그램을 작성하시오. www.acmicpc.net 1. 문제 요약 루트 없는 트리가 주어진다. 이때, 트리의 루트를 1이라고 정했을 때, 각 노드의 부모를 구하는 프로그램을 작성하시오. 2. 파이썬 2 - 1. BFS 백준 - 2606 바이러스 [BFS] 2606번: 바이러스 첫째 줄에는 컴퓨터의 수가 주어진다. 컴퓨터의 수는 100 이하인 양의 정수이고 각 컴퓨터에는 1번 부터 차례대로 번호가 매겨진다. 둘째 줄에는 네트워크 상에서 직접 연결되어 e-room.tistory.com 2 - 2. 코드 N = int(input()) tree = [[] for _ in range(..
1991번: 트리 순회 첫째 줄에는 이진 트리의 노드의 개수 N(1 ≤ N ≤ 26)이 주어진다. 둘째 줄부터 N개의 줄에 걸쳐 각 노드와 그의 왼쪽 자식 노드, 오른쪽 자식 노드가 주어진다. 노드의 이름은 A부터 차례대로 알파 www.acmicpc.net 1. 문제 요약 이진 트리를 입력받아 전위 순회(preorder traversal), 중위 순회(inorder traversal), 후위 순회(postorder traversal)한 결과를 출력하라. 2. 접근 방법 새로운 노드로 이동할 때마다 순회별 방문 순서를 반복한다고 생각하면 됩니다. 순서가 헷갈릴 수 있는데, 세 단계를 반복하면 쉽습니다. 예시) 전위 순회의 경우 현재 노드 출력 왼쪽 이동 오른쪽 이동 2 - 1. 전위 순회 ABDCEFG /..