Back-End Developer 69

.map() 및 JavaScript 배열 메소드 (1)

.map() 과 .every() 는 모두 배열을 다룰때 사용된다는 점과, 사용방법이 같다는 공통점을 가지고 있지만 사용 목적에 대한 차이점이 있다. .map() 은 배열의 각 요소에 식을 적용하고, 적용된 요소들로 새로운 배열을 생성한다. .every() 는 배열의 각 요소들이 조건에 맞는지 검사하고, true와 false를 반환한다. const numbers = [1, 2, 3, 4, 5]; const squaredNumbers = numbers.map((num) => num * num); // squaredNumbers: [1, 4, 9, 16, 25] .map()은 for문 처럼 배열의 각 요소들을 하나씩 꺼내 식에 대입해 결과값을 얻고, 얻은 결과값들을 모아 새 배열을 생성한다. (기존 배열과 길..

개발/JavaScript 2023.08.10

언젠가 사용하게 될 Prisma ORM 옵션 종류 및 설명 (4)

1. in - where에 조건을 배열로 걸기 (배열의 항목 중 하나라도 일치하는 모든 데이터 가져오기) const users = await prisma.user.findMany({ where: { id: { in: [1, 2, 3], }, }, }); where에 걸고싶은 조건이 여러개일때 배열로 묶어서 In으로 전달한다. userId: 1, userId: 2, userId: 3 이렇게 세명의 user를 찾고싶을때 findFrist를 세번 사용해 한명씩 불러오기는 매우 비효율적이다. findMany로 모든 유저를 다 불러온 다음 그 중에서 원하는 userId만 선택하기엔 데이터가 얼마 없을땐 괜찮을지 몰라도 데이터가 다량으로 쌓였을땐 속도저하의 원인이 될 수 있다. 이런 상황에서 findMany에 in..

개발/PrismaORM 2023.08.08

언젠가 사용하게 될 Prisma ORM 옵션 종류 및 설명 (3)

1. some - 배열 중 하나라도 일치하는 데이터를 찾을 때 (일대다 관계에서 사용) const product = prisma.product.findFirst({ where: { photos: { some: { { url: "2.jpg" }, } } }, }) some을 사용하면 배열 중 한개의 데이터라도 일치하는 항목을 불러온다. 일대일 관계에서는 데이터가 배열일 수 없으니 some을 사용하지 않고 다대다 관계에서는 따로 테이블을 생성해 관리해 some을 사용하지 않으므로 일대다 관계에서 사용된다. Product 테이블 id name 1 상품 A 2 상품 B 3 상품 C Photos 테이블 id url product_id 1 1.jpg 1 2 2.jpg 1 3 3.jpg 2 4 2.jpg 3 db가 ..

개발/PrismaORM 2023.08.02

언젠가 사용하게 될 Prisma ORM 옵션 종류 및 설명 (2)

이번 글에서는 제목에 맞지 않지만 자주 사용하는 옵션들도 다뤄볼 계획이다. 1. upsert - 데이터가 존재한다면 update, 존재하지 않는다면 create const result = await prisma.user.upsert({ where: { email: 'example@email.com', // 기존 데이터를 찾을 조건 }, update: { username: 'newUsername', // 기존 데이터의 필드를 업데이트할 값 }, create: { email: 'example@email.com', // 새로운 데이터를 추가할 값 username: 'newUsername', }, }); where의 조건으로 데이터를 찾고, 일치하는 데이터가 존재한다면 update를 실행, 존재하지 않는다면 c..

개발/PrismaORM 2023.08.01

언젠가 사용하게 될 Prisma ORM 옵션 종류 및 설명 (1)

1. distinct - 중복 제거 const uniquePostTitles = await prisma.post.findMany({ distinct: ['title'], }); distinct에 중복 제거를 적용하고싶은 컬럼명을 작성하면 된다. [ { Id: 1, title: 'abc', }, { Id: 2, title: 'efg', }, { Id: 3, title: 'abc', }, { Id: 4, title: 'efg', }, ] 위와 같은 데이터에 사용할 경우 [ { Id: 1, title: 'abc', }, { Id: 2, title: 'efg', } ] 이처럼 중복된 필드값을 가지고 있는 데이터들은 그 중 더 낮은 id값을 가지고 있는 데이터 한개만 표시된다. 2. cursor - 리스트를 특정..

개발/PrismaORM 2023.07.31

소셜로그인 구현 시 작동 순서 및 과정

1. 유저가 소셜로그인 버튼을 누르고 ID, PW 입력 2. 해당 소셜에서, 유저가 입력한 ID와 PW가 올바른지 확인 3. 올바른 로그인 정보일시 소셜에서 브라우저로 시크릿 코드를 전송 4. 브라우저는 소셜에게 받은 시크릿 코드를 백엔드로 전달 5. 백엔드는 브라우저에게 받은 시크릿 코드를 소셜로 다시 전송 (로그인 요청한 유저와 동일한지 확인 과정) 6. 소셜에서 백엔드에게 받은 시크릿 코드와 브라우저에게 전송했던 시크릿 코드가 일치하는지 확인 7. 일치 시 소셜에서 백엔드로 해당 유저의 AccessToken과 프로필을 전송 8. 백엔드는 소셜에서 받은 유저의 프로필이 db에 없으면 회원가입을 진행하고, 있으면 로그인 처리

개발/JavaScript 2023.06.07

Prisma Transaction이란?, $transaction 사용 방법

트랜잭션이 대체 뭘까!!!! 그게 뭐냐면~ 데이터베이스에 대한 작업이 여러개 일 때 그 작업들을 하나로 묶어줌 (like... 파워포인트에서 그룹화 같은 역할...) 여러개의 작업이 한개의 로직을 구성하고 있을때 사용할 수 있음~! 묶여진 모든 작업들이 성공적으로 실행을 마쳐야만 데이터베이스에 저장됨 한 작업이라도 실패를 하거나 중간에 오류가 발생하면 묶여진 데이터 내에서 이전에 했던 작업들을 다시 원상복구~ 예를들면 transaction(계란후라이 만들기) { 1. 가스레인지 불 켜고, db에 불켜기 true로 체크하기 2. 프라이팬에 기름 두르고, db에 기름 두르기 true로 체크하기 3. 냉장고에서 계란 꺼내고, 남은 계란 갯수 db에 update하기 4. 프라이팬에 계란 올리고, 완성까지 걸린 ..

개발/PrismaORM 2023.06.01

엔드포인트 500 오류 해결 / param으로 받아오는 엔드포인트와 중복 주의

멋지게 코드를 짜고 test를 돌리니 더 멋지게 500에러가 떴다. 500에러는 서버오류인걸 알고 있었기에 내가 잘못 짠 코드가 있나 확인을 했다. 근데 아무리 확인해도 코드 넘 잘 짰음.. 에러 메시지를 다시 확인해보니 이상하게도 어느 부분에서 오류가 났는지는 나타나지 않고 [Nest] 3589 - 2023. 05. 31. 오후 12:47:41 ERROR Object: { “statusCode”: 500, “timestamp”: “2023-05-31T03:47:41.648Z”, “path”: “/my”, “message”: “”, “name”: “” } 계속 이렇게만 뜨는거임 client에서 요청을 보내는 엔드포인트가 잘못 설정됐을 수도 있어서 swagger랑 post man을 확인해봤는데 넘 멀쩡함..

오류 해결/API 2023.06.01

자주 사용되는 HTTP 상태코드(statusCode) 종류와 의미

- 200: 요청이 성공적으로 처리됨 - 201: 요청이 성공적으로 처리되었고 새로운 리소스가 생성됨 - 400: 서버가 요청을 이해하지 못했거나 잘못 된 요청임 - 401: 클라이언트가 인증되지 않았거나 유요한 인증 자격이 없음 - 403: 서버에 의해 요청이 거부됨 클라이언트가 리소스에 접근 할 권한이 없음 - 404: 요청한 리소스가 서버에서 찾을 수 없음 - 407: 클라이언트가 프록시 서버를 통해 요청을 보내기 위해 인증이 필요함 - 500: 서버에서 발생한 내부 오류

개발/HTTP 2023.05.26

ssh 키 만들기, 삭제하기, 보기, 찾기, github 등록하기

github가 갑자기 권한이 없다면서 pull과 push를 거부했다.. ^^ 이유를 찾아보니 ssh키를 github에 등록해야한단다;; 그게 대체 뭐임 자세히 알지는 못했는데 대충 이해한대로 적어본다면 내 컴퓨터에서 발급한 키를 github 계정에도 등록을 해줘야 하는것 같다. - ssh 생성 명령어: ssh-keygen - ssh 조회 명령어: cat ~/.ssh/id_rsa.pub - ssh 삭제 명렁어: rm -rf .ssh 이 세가지만 복붙하면 된다. 1. 터미널을 연다 2. ssh-keygen 를 입력해서 ssh키를 생성한다. 2-1. 이미 ssh키가 있다면 어쩌구 저쩌구 경고문이 나올거임. 근데 나는 헷갈려서 그냥 삭제하고 다시 만들었음 2-2. rm -rf .ssh 를 입력해서 기존 ssh키..

오류 해결/Linux 2023.05.25