-
카테고리
-
세부 분야
백엔드
-
해결 여부
해결됨
nodebird express clone
21.09.17 22:50 작성 조회수 193
1
공부삼아 혼자서 이것저것 clone 을 하고있는데여
hashtag 부분에서
typeorm 에서는 findOrCreate 가 없는것 같은데 무슨 메서드를 사용해야할까요 ?
답변을 작성해보세요.
1
조현영
지식공유자2021.09.17
SJ
2021.09.18
안녕하세요 ! ㅎㅎ 가르쳐주신대로 잘 되지않아서 ㅠㅠㅠ 다시 코드를 고쳐봤는데요 .
질문자가 많으셔서 다시 얘기해드리면 , node express 강좌를 nest 로 클론하고 있구용
hash 부분을 할려고합니다.
현재 이렇게 작성을해서
hashtag 가 테이블에 존재하지 않는다면 , hashtag 를 insert 하고 있구요 .
hashtag 가 테이블에 존재한다면 insert 하지 않고 해당하는 hashtag 를 find 해서 가져오게 됩니다.
그렇게 해서 manytomany 테이블에 boardId 와 hashId 를 insert 하고 있습니다.
현재 정상적으로 데이터베이스에 insert 되는것을 확인했는데여 .
코드가 너무... 길어진것 같아서 혹시나 다른 방법으로 코드를 효율적으로 짤수있을까해서 질문남깁니다. ㅎ
그럼 즐건 추석되세요
조현영
지식공유자2021.09.18
사실 반복문 안에서 쿼리를 돌리는 게 좋지 않습니다. 저라면 먼저 select 한번으로 해시태그를 검색하고, 없는 해시태그를 찾아낸 뒤 insert로 한번에 생성하고, 다시 걔네들을 find한 뒤 postHashtag에 관계설정해줄 것 같습니다. 그럼 네번에 됩니다
조현영
지식공유자2021.09.21
HashSliceLowcase.map 안에 getMany 하는 것도 반복문 내부 쿼리입니다. hashtag.hash IN(...hash)을 사용해서 한 방에 쿼리하세요.
SJ
2021.09.21
엇.. 감사합니다 ! :)
그리고 또 질문할것이 , hashtag 를 할때 , board 에서 body 로 받을땐 , hash 에 대한 값도 받기에 ,
1. boardService 에다가 hash 테이블에 insert 하는것까지 했는데 ,
그렇게 되면 , hash Controller 와 hash Service 에서는 사실 hash 리스트를 받고 get 하는 코드 밖에 없을것같은데 , 그래도 board Service 에 만들지 말고
nest g mo hash
nest g s hash
nest g co hash
생성한뒤에 구현하는게 맞는거죠 ?
2. 정상적으로 돌아가긴 했지만 .. 반복문 내에서 쿼리를 돌리는것이 왜 안좋은가요 ?
조현영
지식공유자2021.09.21
1. 분리하셔도 되긴합니다. 다만 라우터는 없으니 컨트롤러는 안 만드셔도 됩니다.
2. 쿼리를 많이 날리면 db에 무리가 많이 갑니다. 네트워크 비용도 만만치않고요. 그런데 반복문은 특성상 몇 번 반복될지 사용자의 입력에 따라 다릅니다. 해시태그가 백만 개면 쿼리를 백만 개 날리는 겁니다. 그런데 IN을 쓰면 한 방에 쿼리를 날릴 수 있습니다.
답변 1