특정 데이터가 삭제되지 않았을 때는 중복을 허용하지 않고, 삭제(논리)된 경우에는 중복이 가능하게 요청을 받았다. 예를 들어 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..
환경 - MacOs (M2) brew를 이용하여 Mysql을 설치하고 사용 중인데, MariaDB를 설치하려고 하니 충돌이 일어나서 사용할 수 없다고 한다. 검색을 해보니 mysql 포트를 변경하거나 완전히 삭제하라고 한다. 1. 터미널을 열고 cd /etc 로 이동 2. sudo nano my.cnf 를 입력 후 [mysqld] 라고 입력된 부분을 찾는다. - (my.cnf가 없을 경우 생성), (mysqld도 마찬가지) 나는 없어서 만듦 3. 아래 사진과 같이 입력 (원하는 포트로 입력할 것) 4. brew services stop mysql, brew services start mysql 명령어를 사용하여 재시작 5. 정상적으로 포트가 변경된 것을 확인 (sudo lsof -i:3307)
Querydsl의. orderBy() 메서드를 살펴보면 OrderSpecifier 매개변수로 받는다. 아주 간편하게 정렬을 하는 방법을 기록해 본다. private OrderSpecifier pageableToOrderSpecifier(Pageable pageable) { Sort.Order sortOrder = pageable.getSort().get().collect(Collectors.toList()).get(0); Order order = sortOrder.getDirection().isAscending() ? Order.ASC : Order.DESC; PathBuilder sort = new PathBuilder(WorldCup.class, "worldCup").get(sortOrder.getP..
이상형월드컵 게임을 위해 랜덤 정렬이 필요했다. 그래서 querydsl에서 사용해 보려고 관련 자료들을 찾아보았다. .orderBy(NumberExpression.random().asc()) 해당 방법을 사용하면 SQLSyntaxErrorException이 발생하며, MySql 버전이 맞지 않는다고 한다. 그래서 우선은 @Query 어노테이션을 이용해서 직접 작성해 주었다. @Query("SELECT c FROM Candidate c WHERE c.worldCup.id = :worldCupId ORDER BY RAND() LIMIT :teamCount") 해당 방법으로 해서 개발을 진행하다 문득 querydsl에도 방법이 있지 않을까 싶어 좀 더 찾아보니 방법이 있었다. .orderBy(Expressio..
시작하게 된 계기 이전에 진행했었던 프로젝트에서 다양한 부분에서 부족함을 많이 느꼈고, 백엔드의 모든 부분에 대해 직접 개발해보고자 하는 욕심도 있었다. 무엇보다 나만의 서비스를 운영해보고 싶다는 생각도 있었다. 그래서 백엔드 1인, 프런트엔드 1인으로 진행을 해보고자 한다. 이상형월드컵 선택 이유 ? 예전에 여자친구와 여러 가지 선택지 중에서 하나를 고르려다 어떤 걸 고를지 몰라 한참 고민했던 적이 있다. 그때 이상형월드컵 서비스에 접속해서 나만의 월드컵 만들기를 이용한 적이 있다. 그런데 그때 월드컵을 만들려면 각종 사진들을 미리 다운로드해서 준비해왔어야 했고, 이를 보자마자 귀찮아서 창을 닫았던 기억이 있다. 그래서 오로지 편리함에 초점을 맞추어 제작해 보고자 한다. 간략한 설계 현재 검색창에 이상..