반응형 전체 글72 DB 분할? 이번 팀프로젝트를 진행하며, 처음으로 DB를 나누어서 서비스를 만들어보기로했다. 처음에는 프로젝트에서 DB를 나눈다는 것이 생소하게 느껴졌으나, DB를 나눠보자는 의견이 나와 이것저것 찾아보았다. DB분할은 어떨때 하는것일까?DB 분할 장점- 성능 향상:부하 분산: 데이터베이스를 분리하면 각 데이터베이스에 대한 부하를 분산시킬 수 있어 성능 향상캐싱 및 인덱싱 최적화: 각 데이터베이스를 개별적으로 최적화할 수 있어 더 나은 성능 구현- 관리 용이성:독립적인 스키마 변경: 하나의 데이터베이스에서 스키마를 변경할 때 다른 데이터베이스에 영향을 주지 않으므로 더 유연하게 스키마를 관리할 수 있다.데이터베이스 크기 제한: 데이터베이스 크기가 너무 커지는 것을 방지할 수 있어 관리가 더 쉬워진다. - 보안 강화:.. 2024. 7. 22. distinctAlias 문제 (쿼리 빌더) 알림기능을 구현하던중 알 수 없는 오류에 빠졌다. 쿼리가 'distinctAlias.Cards_card_id'라는 칼럼을 찾지 못한다는 것이다.알 수 없는 별칭을 찾으려는 TypeORM정확히 말하면, 이 부분은 알림 기능을 위해 카드의 이름과, 카드에 속한 worker들을 불러올 때 생긴 문제이다. cardRepository에서 직접 불러오는데 왜 저 별칭이 생기는 것일까? 의문인 점은 동일한 코드로 card service 파일에서는 잘 불러와졌다는 것이다. //카드 제목 조회 const card = await this.cardsRepository.findOne({ where: { cardId }, select: ['title'], relations: ['worker.. 2024. 7. 22. 웹소켓 웹 알림 기능 구현(할당받은 멤버에게만) 지난번 글을 통해 소켓을 통한 알림기능 구현을 결정했다. 알림 기능 프로세스결정 후 가장 처음으로 한 것은 프로세스의 흐름을 이해한 것이다.위 그림처럼 'client1'이 action을 하면 기존 흐름처럼 controller -> service로 동일하게 흘러간다.service에서 비즈니스 로직 수행을 마친 후, 다시 controller로 반환해주기 전에 작성해준 websoket gateway코드를 통해 해당 action에 대한 알림을 client들에게 보내주는 흐름이다.(소켓을 사용해 client와 server가 항상 연결되어있기때문에, 요청을 보내지 않은 clients들에게도 실시간 알림을 보내줄 수 있는것!) 알림을 주는 websocket gateway그 다음으로 한 일이 알림을 전해주는 역할을 하.. 2024. 7. 16. 댓글/상태변화 알림 기능 구현 (왜 http 요청이 아닌 웹소켓인가?) 이번 칸반보드 팀프로젝트에서 필수 구현 중 내가 맡은 댓글 CRUD를 빠르게 마쳤다. 그리고 처음으로 웹 알림 기능을 도전했다. 칸반 보드 내 카드에 변화가 생기거나, 댓글이 달릴 경우, 알림이 가는 기능이다. 사실 알림 기능에 대해 조금도 알지 못해서 처음부터 공부해나가는 느낌으로 공부하기 시작했다. 그렇게 알림기능 구현에 웹소켓을 이용한다는 것을 알게되었다. 기존 http 요청이 아닌 웹소켓을 사용하는 이유는 무엇일까?1. 실시간 양방향 통신웹소켓은 클라이언트와 서버 간에 지속적인 연결을 유지하여 양방향 통신을 가능하게 한다. 이는 사용자가 알림을 즉시 받을 수 있게 하며, 실시간 상호작용을 필요로 하는 기능에 적합하다. (HTTP는 클라이언트가 요청을 보내고 서버가 응답을 반환하는 단방향 통신 모델.. 2024. 7. 12. 칸반보드 프로젝트 LexoRank 트러블 슈팅 Trello 사이트같은 칸반보드를 구현해내는 팀프로젝트를 진행중이다. 이번 프로젝트의 가장 중요한 부분은 리스트와 카드의 이동(드래그 앤 드롭)이다. '잦은 이동이 있는 해당 로직을 어떻게 구현해 낼 것인가?' 팀원들과 이야기 나누고 찾아본 결과 우리팀은 LexoRank를 이용하기로했다.LexoRank 선정 이유LexoRank를 선택한 이유는 아래 글을 참고했다.https://techblog.lycorp.co.jp/ko/about-atlassian-jira-ranking-algorithm-lexorank Jira의 이슈 정렬 방식이 Integer 방식이 아니라고?!들어가며 안녕하세요. LINE+ Contents Service Engineering 조직에서 백엔드 개발을 하고 있는 김한솔, 문다정, 이현동.. 2024. 7. 11. NestJS 서버 포트 충돌 문제 해결(기존 포트 프로세스 죽이기) 이번 과제때 서버를 연결하는데, 포트 충돌이 일어났다. 이유는 내가 이미 3000번 포트를 사용중이기 때문에 연결을 할 수 없다는 것이다.오류 메시지[Nest] 194557 - 07/08/2024, 2:05:15 AM ERROR [NestApplication] Error: listen EADDRINUSE: address already in use :::3000 +2msError: listen EADDRINUSE: address already in use :::3000 at Server.setupListenHandle [as _listen2] (node:net:1898:16) at listenInCluster (node:net:1946:12) at Server.listen (node:net.. 2024. 7. 10. 공연 예매하기 (nest.js transactionalEntityManager) 공연 예매하기 기능 구현을 위해 nest.js에서의 첫 트랜젝션에 시도하게 되었다. express 때 트랜젝션에 대해 학습하긴 했지만, 팀플에서도 그렇고 항상 내가 맡은 부분은 트랜젝션이 필요하지 않은 부분이다보니 혼자의 힘으로는 첫 시도라고 할 수 있다. 막막하지만 처음이다 보니 한 발짝 더 나아가는 것 같아 설레는 마음도 들었다. 기본적인 예매 관련 세팅- create-reservation.dto.tsexport class CreateReservationDto { @IsInt() @IsNotEmpty({message:'공연 스케쥴 Id를 입력해주세요.'}) performanceScheduleId: number; @IsInt() @IsPositive() @IsNotEm.. 2024. 7. 9. 예매 가능여부 반환(메모리 내 계산 vs 데이터베이스 필드) 예매 상세페이지에서 현재 티켓이 예매가 가능한지 여부를 반환하는 코드를 구현해야 했다. 구현을 위해 머릿속에는 두가지 방법이 생각났다. 1. 조회 시점마다 남아있는 좌석 수를 확인해서 반환 할 것이냐 2. 데이터베이스 테이블 내에 가능 여부 필드를 따로 생성할 것인가 이다. 메모리 내 계산 vs 데이터베이스 필드 생성결정하기 전 각각의 장단점에 대해 알아보았다.1. 메모리 내에서 계산하여 추가 속성 반환장점유연성: isAvailable 필드를 필요에 따라 동적으로 계산할 수 있어, 조건이 변하더라도 쉽게 변경할 수 있다.데이터베이스 일관성: 데이터베이스 스키마에 영향을 주지 않으며, 추가 필드로 인한 데이터베이스 수정이 필요 없다.간단한 유지보수: 코드 내에서 필요한 필드를 추가하므로, 데이터베이스를.. 2024. 7. 8. 이전 1 2 3 4 5 ··· 9 다음 반응형