분류 전체보기 210

23.07.04 네트워크 전에 기본부터

맨날 서버 클라이언트를 언급하는데 그게 뭘까? 서버란 네트워크 상에서 서비스를 제공하는 장비, 클라이언트는 반대로 네트워크상에서 서버에게 서비스를 요청하는 장비라고 한다. 쉽게 말해 서버는 판매자고 클라이언트는 소비자라고 이해하면 쉬울 것 같다. 그리고 이 역할이 내가 또 회사에 돈을 벌기 위해 열심히 일하는 판매자가 되기도 하고 집에서 유튜브 보면서 쿠팡을 뒤지는 소비자가 되기도 하는 것처럼 상황에 따라 바뀔 수도 있다. 쉽게 지나치는 용어 중 하나고 일을 하면서 대화하면서도 많이 사용하는 용어이기에 제대로 아는게 중요할 것 같다. 그리고 쉽게 볼 수 있는 랜선, PC를 교체하거나 이사를 가거나 인터넷 연결에 문제가 생기면 매번 랜선을 찾았다. 그럼 이 랜선에서 랜(LAN)은 뭘 의미하는지 그래도 내가..

23.07.03 대칭키와 공개키

대칭키란 암호화한 데이터를 서로가 같은 키를 가지고 복호화를 하는 방식이며 장점은 공통적으로 사용하는 키만 가지고 있으면 되기에 성능적인 소모가 적다. 하지만 만약에 한 명이라도 키를 분실하거나 이 키가 복제된다면 모두가 보안에 취약해진다는 단점이 있다. 공개키는 비대칭키라고도 불리며 이름 그대로 공개된 공개키와 공개되지 않은 개인키가 존재하는데 두 개의 키가 짝을 이루어 하나의 키로 암호화 된 데이터는 다른 키로만 복호화 할 수 있다. 즉, 공개키로 암호화시 개인키로만 풀 수 있고 개인키로 암호화한 것은 공개키로만 풀 수 있다. 따라서 개인키만 잘 관리하면 되기에 대칭키보다는 보안이 강화된다. 하지만 두 개의 키가 쌍이 되어 암호화 복호화 과정이 복잡해지고 공개키를 계속 공개 상태로 유지하고 있어야 해..

23.07.02 LV2 API 테스트

페어와 같이 각자의 기능 구현을 마치고 개인 테스트를 마치고 병합 후에 다시 서로 확인하면서 테스트를 하는데 피드백을 받았다. 내가 만들기로 했던 인증 미들웨어 부분에서 강의에서 배웠던 게 고정된 틀처럼 자리 잡아서 _id가 필요없는데 jwt 토큰 발급에 추가하고 이를 통해 인증을 했었다. 그런데 같이 이야기 하다보니까 _id와 이를 가상의 컬럼으로 만드는 작업이 필요가 없었다. 그 부분들을 nickname 라는 다른 대체제가 있었고 실제로 과제에서 요구한 조건에서는 저것을 이용해 처리하였기에 아마 _Id대신 이를 사용하는 것을 의도한 것 같다. // users.js UserSchema.virtual("userId").get(function () { return this._id.toHexString();..

23.07.01 LV2 과제 중

LV1과제를 마치고 LV2 과제가 시작되었다. 요구 조건에 에러처리가 더 세분화되어서 전체 try catch문만 사용한다고 해결되진 않기에 문제가 많았었다. //! 게시물 못 찾을 때 에러(24자리 고정) const posts = await Posts.findById({ _id: _postId }).exec() 게시글을 찾지 못한 경우에 대한 처리를 해야하는데 findById에서 맞는 값이 없다면 _id가 문자열이 아니기에 타입이 다르다고 서버가 꺼지는 문제가 발생했다. 이에 대하여 여러 시도를 해봤다. 저 부분을 중첩 try catch로 처리 하자. 일단 해결은 되었다 하지만 보기에 불편하고 이렇게 처리하면 당장은 쉬울지 몰라도 계속된 에러 처리에서 실수가 발생하기 쉽다. 그래서 다른 방법을 찾아본다...

23.06.30 자료구조 8. 힙(Heap)

힙은 트리의 일종으로 완전이진트리이다. 그러면 왜 힙을 또 따로 분리를 했을까? 트리랑은 뭐가 다를까? 했을 때 힙은 부모 노드와 자식 노드 간의 대소 관계가 확실하다. 예를 들어 부모노드가 더 큰 경우 전체 트리에서 부모노드는 항상 자식 노드보다 크며 반대의 경우에도 전체에 똑같은 규칙이 적용된다. 이러한 구조가 필요한 이유는 우선순위에 따른 작업을 하기 위해서이다. 우리도 살다 보면 우선적으로 먼저 해야 하는 일들이 있고 이것에 순서가 일정하지 않은 경우가 있다. 가장 나중에 들어온 일인데 가장 중요한 경우도 혹은 애매하게 10번째 들어온 일이 4번째로 중요한 일로 처리될 수도 있다. 그래서 이럴 때 힙을 사용하여 우선순위 큐를 만드는 게 가장 효율적이다. 우선순위 큐란 말처럼 큐와 비슷한 형태지만 ..

23.06.29 주특기 2주차 강의 보는 중

강의 내용에 따라서 진행을 하던 도중에 문제가 생겼다. 똑같이 따라했는데 왜 난 실행이 안될까 하면서 하나하나 다 비교해보고 찾아보는데 변수명이나 다른 부분이 하나도 없었다. 그래서 여러 방법들을 시도했다. 조회 기능이 안되니까 그 부분을 try catch로 확인해보자 그래도 똑같이 에러가 발생했다. 그러면 어디서 문제가 생길까 이어지는 부분을 찾아보자 했을 때 장바구니 조회에는 상품에 이미지를 저장하지 않는데 강의에서 잘 실행된 결과에서는 이미지를 가져온다 "그 이미지를 어디서 가져올까" 해서 이미지가 들어간 상품 목록과 상세 조회 부분을 마찬가지로 try catch로 확인해보니 상세 조회 부분이 문제였다. 어딘지 찾았으니 다 콘솔을 찍어본다. 그래서 원인을 알아냈다. router.get("/goods..

sort() 활용

정수 배열 array와 정수 n이 매개변수로 주어질 때, array에 들어있는 정수 중 n과 가장 가까운 수를 return 하도록 solution 함수를 완성해주세요 조건에서 확인하니 모두 양수이다 빼서 절대 값이 가장 작은 것만 구하면 될 것 같은데 가까운 수가 중복이면 더 작은 수 function solution(array, n) { let result = 0 for (i = 1; i Math.abs(n - array[i])) { result = i } else if (Math.abs(n - array[result]) === Math.abs(n - array[i])) { array[result] < ..

23. 06.27 LV1 과제 완료

주특기 1주차 과제를 완료했다. 생각보다 문제도 많았지만 최대한 과제가 요구하는 것들을 맞춰서 진행을 했다. 아래 내용들 모두 문제가 있었고 그 부분에 대해서 찾아보고 확인하며 해결했던 방법들이다. router.post("/:_postId/comments", async (req, res) => { const { _postId } = req.params; const { user, password, content } = req.body; 게시글에 대한 댓글을 다는 생성하는 부분이다. 처음엔 이 댓글을 다른 라우터로 분리하려고 시도했지만 다른 라우터로 분리 했을 때 postId를 가져오지 못해서 결국 게시판 라우터에 같이 작성을 했다. 이건 피드백을 받을 예정이며 댓글 생성 시 postId를 같이 저장을 해서..

23. 06.26 입문주차 과제 중

이제 강의 다 듣고 과제를 만드는 중인데 강의에서 알려준 내용에 약간 찾아보라는 식의 내용들이 추가 되어 있었다. DB에 저장을 하면서 id와 시간이 같이 저장이 되어야하는데 id는 자동으로 생기는 값 같았기에 넘어갔는데 저장된 시간을 어떻게 처리할까 하다가 const timeElapsed = Date.now(); const today = new Date(timeElapsed); const createdAt = today.toISOString(); 구글링을 통해서 현재 시간까지 경과된 시간을 가져오고 그것을 날짜 데이터로 바꾼 다음에 과제에서 요구하는 날짜 형식이 ISO와 같아서 이를 DB에 내가 입력한 body내용과 함께 저장되게 했다. 나중에 기술 매니저님에게 조언을 듣기로는 스키마에 디폴트값을 설정..

스택을 사용하는 문제

짝지어 제거하기는, 알파벳 소문자로 이루어진 문자열을 가지고 시작합니다. 먼저 문자열에서 같은 알파벳이 2개 붙어 있는 짝을 찾습니다. 그다음, 그 둘을 제거한 뒤, 앞뒤로 문자열을 이어 붙입니다. 이 과정을 반복해서 문자열을 모두 제거한다면 짝지어 제거하기가 종료됩니다. 문자열 S가 주어졌을 때, 짝지어 제거하기를 성공적으로 수행할 수 있는지 반환하는 함수를 완성해 주세요. 성공적으로 수행할 수 있으면 1을, 아닐 경우 0을 리턴해주면 됩니다. 정리하면 2개가 붙있는지 확인 후 제거하고 제거한 문자열을 다시 붙여서 위 과정 반복 일단 앞에 인덱스를 확인해서 같으면 제거 3개가 붙어있다면 두개만 제거해야하나? 제거 후 반복은 어떻게? 3개가 연속되어도 2개만 제거하는 게 맞았다 제거 후 반복은 처음엔 재..