01. 영화 검색 기능 도전
fetch
와 async/await
를 어찌저찌 사용하여 영화 데이터를 불러오는데 성공했다! (이 내용은 추후에 다루도록 하겠다.) 그리고 호기롭게 도전한 다음 과제, 바로 영화 검색이었다. 미리 만들어둔 input
태그에 검색 키워드를 넣으면, input 값(제목 키워드)를 포함하는 영화 목록을 렌더링하는 로직을 세워보았다.
문제는 여기서 발생했다. '베놈 '을 검색 했더니 Popular 목록에만 있던 '베놈: 라스트 댄스 '만 렌더링이 되었다. 즉, 내가 불러온 Popular 영화 20개 내에서만 검색이 가능한 것... 검색하면 해당 영화들이 전부 렌더링 되도록 수정이 필요했다.
01. API 주소
답답한 마음에 검색 기능 구현을 완료한 동기를 찾아갔더니, 그 분이 검색용 API가 따로 있다는 사실을 알려주셨다! 그래서 검색 input이 들어오면 fetch
하는 url을 검색용 API url로 바꿔 끼워주는 로직을 세울 필요가 있었다.
02. 튜터님의 TIP
기존 로직을 수정하고 다시 시도해보았지만, 코드가 꼬여버렸고 search 로직 자체가 아예 먹통이 되어버려서 결국 튜터님께 도움을 요청했다. 아래에 튜터님께서 알려주신 기존 로직의 문제점들을 정리해보았다.
INIT
즉시실행함수 내에는 searchValue
가 있을 수 없기 때문에(페이지가 로딩되자마자 검색창에 값이 있을 수 없다 ), 해당 로직 내에 searchMovie()
로직은 불필요하다.if문
)은 searchMovie()
내부로 들어가야 한다.searchMovie()
내에 fetch
되는 데이터는 popularUrl
을 기반으로 설정되어 있으니 오류가 발생할 수 밖에 없다. (코드를 꼼꼼히 보아야한다!)if문
)을 searchMovie()
내에서 잘 넣어볼 것.01. url을 바꿔주는 if문
의 위치 변경
우선 튜터님의 조언대로 INIT
즉시실행함수에서 searchMovie()
와 관련 로직을 모두 덜어내었다.
그리고 searchValue
가 들어오면 해당 키워드로 검색용 API url이 바뀌고, 해당 값에 접근이 되도록 searchMovie()
를 수정했다. 다시 웹페이지로 돌아가보자!
01-1. searchInput
이 안잡히는 문제 발생
결과는 실패🥲
console에서 확인을 해보니 urlDetial
이 안잡힌다는 오류가 떴다. 아무래도 searchValue
의 여부를 판단하기 위해 작성한 if문
에 문제가 있는 것 같았다.
생각해보니 검색 키워드를 작성하고 실행될 함수라면 굳이 if
문으로 url을 바꿔 끼워줄 필요가 없다고 판단되었다. 그래서 과감히 삭제 후 다시 웹페이지에서 검색을 시도 해보았다.
앗! 분명 검색창에 input 값('베놈' )을 넣었는데, 왜 input 값이 없을 때의 alert
창이 뜨는가😨
console을 확인해보니 searchValue
자체가 안잡혔다. 'null'이나 'undefined'도 아닌 텅빈 console 값은 처음이라 결국 또 다시 튜터님께 도움을 요청할 수 밖에...
02. searchMovie
로직 대폭수정
로직 자체가 문제였다. 검색 로직은 검색 버튼을 클릭했을 때 실행이 되어야 하는데, 원래 로직은 함수가 실행되고 그 안에서 addEventListener()
가 들어가있었다. 결국 로직을 대폭 수정해야했다.
검색버튼 클릭 이벤트
와 검색키워드 데이터 fetch
로 나누었다. 그리고 아까 input 값에 문제가 생겼기 때문에, console.log
로 값이 제대로 입력되고 있는지 확인해보았다.
02-1. url 관련 console.error
다행히 input 값은 console에 제대로 찍히고 있다! 하지만 아직도 검색 로직이 제대로 작동하지 않아, error를 다시 확인해보았다. 뭔가 url에서 계속 문제가 생기는 것 같다.
03. 검색용 API url 재확인
그래서 TMDB 사이트에서 API를 다시 확인해보았다. 검색용 API는 Query Params로 query
, 즉 검색 키워드
를 필수적으로 입력해야한다. 한번 더 확인하기 위해 'test'를 넣어 본 뒤 url을 확인해보았다.
이 녀석이 문제였다. 내가 넣은 url에서 "query=" 이 빠져서 데이터 fetch에 계속 실패한 것이었다.
원인을 찾았다! 바로 수정 후 확인해보았다.
01. 해결!
드디어 된다! '베놈: 라스트 댄스 ' 뿐만 아니라 제목에 '베놈 '이 들어간 영화가 모두 렌더링 되었다.
내가 가장 사랑하는 영화인 '중경삼림 '으로 다시 검색해보았다. console창에 input 값이 잘 찍히고, 오류 없이 깔끔한 것을 보니 코드가 제대로 수정된 것 같다.
02. 최종 코드
INIT
즉시실행함수 로직