프로젝트21 Nest.js, SSE(server sent event)를 이용해 알림띄우기(해결안됨) 1. 개요 이번에 구현할 서비스는 사용자가 작성한 댓글과 컬렉션에 각각 좋아요나 북마크 갯수가 일정 수 이상 추가됐을시 알림을 띄워주는 기능이다. 마이페이지의 알림 버튼을 누르면 사용자와 관련된 알림이 뜨게 하고싶은게 이번 구현 목표 추가로는 사용자를 다른 사용자가 팔로우 했을때도 알림을 띄우고싶다. 이건 아마 댓글, 북마크와 비슷할거같아서 먼저 끝내놓고 구현해 볼 계획이다. 이 기능을 구현하기 위해 가장 먼저 떠오른건 소켓이다. 웹소켓은 양방향 통신을 이용해 대표적으로는 채팅서비스를 만들때 많이 사용하는 기술이다. 하지만 서치를 좀 해본 결과, 내가 구현할 기능은 양방향 통신이 필요없을것으로 예상되었고 보통 알림서비스를 만들기 위해서는 SSE를 많이 사용한다는것을 알게 되었다. 그럼 둘의 차이는 무엇일.. 2024. 4. 22. api를 이용한 스크래핑 성능 개선 퍼페티어를 이용해 스크래핑을 완성하였으나, 성능이 너무나 뒤떨어졌다. 데이터 스크래핑을 해야하는 페이지는 사용자에게 쾌적한 사용을 주기 위해서인지 스크롤을 해서 해당 페이지에 도착했을때 해당 데이터가 네트워크 탭을 통해 들어오게 된다. 이런 특성 때문에 퍼페티어상에서도 직접 스크롤을 해야하고, 리뷰 목록을 가져올때도, 아무튼 모든걸 하나하나 클릭을 해서 가져오는데에 비해 가져올 데이터는 많아서 느려도 너무 느렸다.. 작품 데이터 상위 20개만 가져온다고 해도 먼저 랭킹페이지에서 20위까지의 상세페이지 링크를 긁어모으고, 하나하나 들어가서 원하는 데이터를 가져와야한다. 이 와중에 스크롤도 해야하고 리뷰버튼은 더보기 버튼의 css 선택자가 달랐다... 뭐 이런 문제는 차치해도 성능이 큰 문제였다. 저렇게만 .. 2024. 4. 15. 퍼펫티어를 이용한 크롤링(2) 크롤링 한 데이터를 json으로 변환해서 로컬에 저장한 후, 그 데이터를 다시 파싱해서 db에 넣었다. 그렇게 한 이유는 일단 크롤링 한 데이터들이 db에 들어가기전 제대로 정제된 상태인지 눈으로 확인하고싶었고, 만약 db에 저장했을때 잘못된 정보가 있다면 수정하기 위해서 이 방법을 이용했다. 현재는 굳이 데이터를 json파일로 만들고, 그걸 다시 파싱해서 db에 넣고.. 너무 비효율적이라 수정할 계획이다. 일단 여태까지 삽질한 코드들을 블로그에 올리려 한다. fs를 이용해 path에 있는 파일을 읽고 json으로 파싱한다. async readJson(path: string, files: string[]) { const postPromises = files.map(async (file) => { cons.. 2024. 4. 11. 퍼펫티어를 이용한 크롤링(1) 퍼펫티어 npm 설치 npm i puppeteer 페이지 띄우는 코드 const url = ridibooks.ridiPage; const browser = await puppeteer.launch({ headless: true, }); const page = await browser.newPage(); 로그인, 진짜 별거 없다.. 실제로 로그인 페이지를 띄워서 로그인 정보를 입력 후 클릭한다. async login(page: any, url: string) { const { pageBtn, submitBtn, textCursor1, textCursor2 } = ridibooks.login; await page.goto(url); await page.waitForSelector(pageBtn); await.. 2024. 4. 11. 최종프로젝트 https://www.notion.so/teamsparta/1-dbe5da002a084e20bc120b8260836a03 회빙환(절대 풀네임을 물어봐선 안돼..) | Notion API 명세 - 큰 기능으로 토글화 해서 관리해보세요! teamsparta.notion.site 팀노션 https://www.notion.so/teamsparta/Daily-Scrum-780342274e014429b9cf9dc78f31e9aa Daily Scrum | Notion Built with Notion, the all-in-one connected workspace with publishing capabilities. teamsparta.notion.site 데일리 스크럼 프로젝트 소개: 웹소설 & 웹툰 종합정보 플랫폼.. 2024. 4. 9. db 선택 요구사항 1. 스키마가 고정되어있나요? - 고정되어있다고 볼수있나? 2. 그렇게 빠른 속도를 요하나요? - 아님 3. 많은변화예상: 팔로우/언팔로우 기능 4. 스크래핑해온 정보들 - 작품(제목, 내용, 작가이름, 별점, 작품에 대한 리뷰, 플랫폼) => 여러곳에서 스크래핑 해오니 어디에는 이런 정보가 있을거고, 어디에는 이런 정보가 없을수도 있음(키워드?) 5. 우리는 분석적/일관성 있는 데이터 저장이 필요한가? 1. 몽고디비 대용량 데이터 처리에 유리 고성능, 고가용성 및 쉬운 확장성 제공 NoSQL, Document 지향 데이터베이스 json 과 binary json 으로 저장함 장점: 스키마리스디자인?/ 희소한 데이터소스 또는 변경되는 데이터 모델을 갖는 곳에서 유리 수평적확장에 뛰어남 단점: 안정.. 2024. 3. 27. To-DuBu: KPT 회고록 Keep 현재 만족하고 있는 부분 프로젝트 진행하다보니 완성도 있는 코드를 쓸 수 있게 되어서 좋았다 즉각적인 소통, 원활한 소통이 되어서 좋았다. 깃 사용하면서 커밋메시지 잘 날린거같고 체계적으로 깃을 사용해본거같아서 좋았습니다. 어려운 문제있을때 팀원들과 함께 해결이 가능해서 좋았다. 평소보다 복잡한 로직을 체험해볼수있어서 좋았다. Problem 불만인 부분 시간이 짧아서 불가피하게 지피티의 도움을 받았다. 좀 더 주체적으로 짤 수 있었다면 좋겠다. 사전에 계획한 기한을 엄수하지 못함. 코드 컨벤션을 설정해두지 않아 관련한 사소한 트러블이 많았음. 네스트 사용이 익숙치않아 가드나 전략 사용에 있어 어려움이 있었다. Try 해결책, 지금당장 가능한것 지피티보다 공식문서 활용하기. 더 노력한다... 더 .. 2024. 3. 25. 트렐로) 팀 프로젝트 기록 👾 트렐로 프로젝트란? 심화 주차에서는 기존 프로젝트 주차에서 보다 더 가치가 있는 프로젝트를 만드는데에 도전해보려고 합니다. 바로 “프로젝트 협업 도구”를 만드는 것입니다. 우리는 이번 심화 주차에서는 Trello를 만들어보려고 합니다. 작업을 생성 및 관리하고 작업 상태를 업데이트하는 등 여러 기능을 개발하며 각각의 기능에 실제로 어떤 기술이 필요하고 어떻게 문제를 해결해야 하는지를 직접 경험해볼 수 있어요! 또한, 프로젝트 주제가 주제다보니 전반적인 개발 프로세스에 대해 좀 더 깊게 생각해보는 시간을 가질 수 있게 되는 시간이 될 것입니다. 이를 통해 여러분들이 다른 개발자들과 원활하게 협업하는 능력이 키워지길 바랍니다! 👾 프로젝트 소개 프로젝트명: To-DuBu 개발일정: 3/18 ~ 3/25 .. 2024. 3. 18. 프로젝트 회고 우리동네 동아리(우동) 같은취미를 가진 사람들과 모여 동아리를 개설하고, 게시글 또는 댓글로 반응이 가능한 뉴스피드 프로젝트 회원가입시 입력한 관심사를 기반으로 모임을 추천 받을 수 있는 기능이 있으며, 유저들간 팔로우 또한 가능하다. 작업기간 2/8 ~ 2/14 발표자료 시연 영상 https://youtu.be/Q1-tJS5b10A?si=aCp0zaKAduO5fl8v api 구현, 일부지만 프론트 작업한것, 카카오 로그인, 노드메일러를 이용한 메일 인증 기능을 담은 영상이다. 피드백 기본기능을 충실하게 구현 잘 했다. 관심사 기반 추천 기능 외에 로그인 하지 않은 사용자를 위한 랜덤조회 기능까지 서비스 고민에 대한 흔적이 보여 좋았다. 아쉬웠던점은 불필요한 컬럼이 많았다는것. 이것들을 정리하면 좋겠다는.. 2024. 2. 15. 이전 1 2 3 다음