본문 바로가기

전체 글76

알고리즘 문제 정리(명예의 전당1, 2016년, 카드뭉치, 과일 장수) 문제1 : 명예의 전당1"명예의 전당"이라는 TV 프로그램에서는 매일 1명의 가수가 노래를 부르고, 시청자들의 문자 투표수로 가수에게 점수를 부여합니다. 매일 출연한 가수의 점수가 지금까지 출연 가수들의 점수 중 상위 k번째 이내이면 해당 가수의 점수를 명예의 전당이라는 목록에 올려 기념합니다. 즉 프로그램 시작 이후 초기에 k일까지는 모든 출연 가수의 점수가 명예의 전당에 오르게 됩니다. k일 다음부터는 출연 가수의 점수가 기존의 명예의 전당 목록의 k번째 순위의 가수 점수보다 더 높으면, 출연 가수의 점수가 명예의 전당에 오르게 되고 기존의 k번째 순위의 점수는 명예의 전당에서 내려오게 됩니다.이 프로그램에서는 매일 "명예의 전당"의 최하위 점수를 발표합니다. 예를 들어, k = 3이고, 7일 동안 .. 2024. 7. 1.
호이스팅과 클로져 그간 공부했던 것들을 복습할 수 있는 마지막 기회인 오늘 무엇을 복습하는 것이 가장 적절할까 고민하던 중 기초때 배웠던 호이스팅과 클로져가 떠올랐다. 그 이후로 배운 실제로 코딩할 때 사용하는 것들은 하다보면 익숙해짐으로써 알게되는 과정이라면 이 부분의 경우 지금이 아니면 나중에 복습하기 정말 쉽지 않을 것 같았다. 그렇게 오랜만에 호이스팅과 클러져 개념에 대해 찾아보았다. 개발에 대해 정말 하나도 모르던 시절(그래봤자 1~2달 전이지만) 나름 열정이 가득했어서 진짜 자료를 보고 보고 또 봐서 이해하려했는데, 도무지 이해가 가지 않았었다. 이 개념을 이해하기 위해 블록 스코프, 함수 스코프 등등을 알았어야 했는데 그것들에 대한 개념도 제대로 잡혀있지 않다보니 쉽지 않았던 것 같다. 지금도 다시 봐도 그렇.. 2024. 6. 27.
과제 리팩토링 (메뉴 원하는 카테고리 순서로 정렬) 지난번 팀프로젝트에서 구현한 메뉴를 원하는 카테고리 순서로 조회하는 부분에서의 피드백을 받았다. 기존 코드는 숫자로 저장하여 order by를 통해 정렬한 후, 각 카테고리 텍스트를 매핑해주었는데 데이터베이스 자체에 메뉴의 카테고리 텍스트로 저장하는 것이 좋다는 피드백을 받은 것이다. 그래서 텍스트로 저장한 후, sort를 통해 정렬해서 내보내도록 리팩토링을 진행하였다. - 데이터베이스에서 불러오기 (텍스트로 저장된 menuType)async function readAll(restaurantId) { try { // 데이터베이스에서 메뉴를 읽어올 때 메뉴타입 순으로 정렬하여 가져오기 const menus = await prisma.menu.findMany({ where: { rest.. 2024. 6. 26.
복습 그동안 소소하게 궁금했던것들 정리 (스키마 관계 설정, 모듈 export default) 감사하게도 캠프 중 지금까지 공부했던 것 중 부족한 부분을 공부할 수 있는 시간을 주셨다. 안그래도 이해가 잘 가지 않는 부분을 적어놓고 주말중 복습을 진행할 예정이었는데, 이번 기회로 이 부분을 꼼꼼하게 채워나갈 수 있게 되었다.지금 내가 부족한 부분이 인증, 인가 미들웨어, 오류 처리, 트렌젝션, 로그 정도로 크게 나눌 수 있을 것 같다. 인증, 인가 부분은 지속적으로 프로젝트를 진행하며 계속 한 부분이긴하지만, 팀프로젝트에서 어쩌다보니 내가 CRUD만 주구장창 맡게되면서 생각보다 이해도가 높지 않다. (대신 CRUD랑 데이터베이스쪽은 생각보다 마스터가 되어있다.) 과거 들었던 강의들을 다시 듣고 구현했던 코드들을 다시 보며 공부를 진행하고있다. 아직 이 부분은 정리할 정도로 깔끔하게 마무리된 것 같.. 2024. 6. 25.
npm 글로벌 설치 오류 이번에 TypeScript를 배우기 시작하면서 TypeScript를 글로벌로 설치해야했다. 그리고 역시나 오류가 났다. 이놈의 맥북은 뭐가 한 번에 깔리는 일이 없다. 이번 기회에 매번 겪은 npm을 통해 global로 설치를 진행할 때 나타난 오류에대해 정리해보려 한다.npm i typescript -g 오류애초에 첫 접근부터 바로 오류가 나버렸다. npm이 글로벌하게 설치하려는 TypeScript 패키지를 저장할 디렉토리에 대한 권한 부족으로 발생했는데, macOS나 Linux 시스템에서는 시스템 레벨의 디렉토리에 npm 패키지를 글로벌하게 설치하려면 관리자 권한이 필요하다고 한다.해결 방법- npm의 글로벌 설치 경로 변경권한이 부족했기 때문에, npm의 글로벌 설치 경로를 사용자 홈 디렉토리 내의.. 2024. 6. 24.
Prisma의 connect 기능 과제와 팀플을 반복하며 기본적인 CRUD는 이해가 된 것 같고 이제 그 안에서 데이터를 조금 더 자유롭게 다룰 수 있도록 공부하고있다. 오늘은 그 중 connect 기능에 대해 정리해보려 한다.개발을 하다보면 데이터베이스의 테이블 하나만 이용하지 않는다. 한개의 테이블을 속 외래키를 사용해 여러 테이블과 연결시켜 데이터를 불러오고 정리하여 반환한다. 그 때 중요한 역할을 하는 것이 connect이다.connect란?connect는 Prisma에서 제공하는 기능 중 하나로, 관계형 데이터베이스의 관계를 설정하고 관리할 때 사용한다. 특히 외래 키(Foreign Key)를 사용하여 테이블 간의 관계를 설정하고 데이터를 연결하는 데 사용된다.- 역할관계 설정: connect는 데이터베이스 모델에서 정의된 관계.. 2024. 6. 21.
NOT FOUND 오류 핸들링 오류 팀프로젝트로 배달 서비스를 만드는 과정에서 발생한 오류 하나를 정리하려 한다.  문제 상황존재하지 않는 메뉴 조회시 NOT FOUND 오류를 발생시키는 코드를 추가하였다.prisma의 findUnique를 통해 존재하지 않는 값을 조회할 경우, null 값이 반환되어야 한다고 생각하고, 따로 추가적인 처리 없이 그대로 반환하도록 설정해주었다. 그러나 TypeError가 뜨며, null 값이 반환되어서 menu를 찾을 수 없다고 오류가떴다. 문제  찾기처음에는 null 값이 떠서 menu를 찾을 수 없는 것이 당연하고 그것을 의도했는데, 이것이 오류가 뜬다는 것이 이해가 가지 않았다. 하지만 한참을 고민하다 null이 뜨는 menu가 내가 의도한 null이 아닐 수 있다고 생각하고 하나씩 찾아보기 시작했다.. 2024. 6. 21.
배달 메뉴 목록 정렬 기능 구현(같은 카테고리에서 낮은 가격 순으로) 이번 팀프로젝트를 진행하며 항상 그렇지만 수많은 에러에 마주했다. 정리해야할 글이 많은데 오늘은 복잡할줄 알았는데 의외로 간단했던(?) 배달 메뉴 목록 정렬에 대해 정리해보려한다. 메뉴 목록 정렬은 어떻게 진행하는게 좋을까?메뉴 목록 조회를 구현하던 중 든 생각이다. 이전에는 이 부분에 대해 명시되어있었는데, 이번 프로젝트는 자유도가 조금 더 있는 편이다보니 고민이 시작됐다. 팀프로젝트인 만큼 팀원들과 대화를 나눠보았다.  (1) 카테고리 별 구성우선 우리는 메뉴 타입을 body로 받고있었다. 이것을 통해 다른 배달어플들처럼 각 메뉴의 카테고리별로 유저들에게 보였으면 하는 마음이 들었다. 우리는 메뉴 타입을 '메인', '사이드', '음료' 이렇게 세가지로 나누었다. (2) '메인' -> '사이드' -> .. 2024. 6. 20.