본문 바로가기

공부/TIL

24.01.08

네이버 이메일로 회원가입 기능을 만들 때 참고해야될 것: 네이버 계정이 2단계 인증을 사용한다면 mail을 보낼 때 비밀번호를 따로 생성해서 주어야 함. 

스포티파이 open API를 사용하는건 조금 어려움이 있었음. Access token을 발급하는 과정에서 Invalidated Client가 발생해서 이유를 못찾았음.

resteTemplate을 사용하는데 문제는 없어 보임. maniaDB를 이용해서 경남님과 나는 원하는 data를 가져오고, 그중 원하는 정보만 필터링 해서 쓰는 것을 확인함.하지만 maniaDB는 속도가 진짜 개느림. -> 우선 maniaDB로 기술을 완성 시키고 시간이 남으면 Spotify로 API를 변경하도록.

 

오늘의 삽질 결과물!

그래도 원하는 결과를 얻어서 다행이다.

 

 

우선 내가 만든 로직은 다음과 같다.

아 우선 maniaDB는 JSON형식이 아닌, XML형태로 응답이 온다. 이를 JSON으로 파싱해서 사용했다. 이부분은 우리 갓경남님이 해결해 주셨다.

maniaDB에 가수를 키워드로 검색 api를 날림!

maniaDB에 가수를 키워드로 검색 api를 날리면 이런 아주 지저분한 데이터가 온다. 여기서 내가 원하는 데이터를 뽑아서 가져와야 한다. 그런데 첫번째로 문제점이 있다. 우선 kanye같이 유명한 가수는 그 자체로 앨범의 제목이 된다...

이를 가수 검색시 나오는 앨범 리스트에 포함이 되면 안된다! 따라서 첫번째로는 이것을 필터링을 해주자.

// 아직 테스트 중이라 kanye를 넎어줬는데 이를 요청시 query를 날릴 가수로 바꿔주자!
itemObj.getString("maniadb:albumartists").contains("Kanye")

저기 지저분한 데이터 중에

maniadb:albumartists이 부분이 바로 이 앨범의 가수! 가수 중에 검색 요청했떤 가수가 포함되는 것들만 뽑아온다.
 

두번째로 우리가 가져가야할 데이터는 1. 앨범 제목 2. 가수 3. 발매일 4. 앨범 이미지 5. 앨범의 수록곡이다.

이 데이터들을 뽑아오자. 이때 또 아주 큰 오류가 있다. 바로 앨범의 수록곡이 null인 경우가 있다... 

                if(itemObj.getJSONObject("maniadb:albumtrack")
                        .getJSONObject("major_tracks").getJSONArray("song") != null) {

이때 이렇게 null처리를 해줬는데도 로직이 제대로 먹질 않았다.

이게 환장할 노릇인게 잘 작동하다가 song array가 not found 떠버리면 그대로 오류가 뜨고 프로그램이 죽어버린다.

song array가 존재할 때는 잘 작동하다가 not found가 뜨면 죽는데 이걸 null로 처리하면 제대로 동작을 안해버린다.

 

그러다 튜터님께 질문을 했고 바로 해결해주셨다. 

                if(itemObj.getJSONObject("maniadb:albumtrack")
                        .getJSONObject("major_tracks").has("song"))

JSONObject의 널체크는 has 메소드가 있을 것이라고 하셨고, 바로 잘 작동했다. 또해주셨던 말이 보통 이렇게 값을 가져올 때 null이 포함될 수 있는 로직은 has 또는 null을 체크할수 있는 메소드가 있다고 하셨다. 우리가 자주쓰는 자료구조인 hasMap은 이럴 때 그냥 null을 넘겨준다고 한다. 따라서 만약 hasMap같은 경우엔 위의 null체크 로직이 잘 작동했겠지? 근데 JSONObject는 has메소드를 이용해서 null체크를 한다. 

앞으로는 이런 메소드가 무엇일지 찾아보면 좋을 것 같다. 키워드를 알면 이제 응용은 쉬워지니까! 이래서 시간을 박는만큼 머리속에 깊이 남는다.

 

비상. 앨범에 곡이 하나만 있을 때는 array가 아닌 object인가 보다. 이것도 처리를 해줘야겠다!

 

이로서 maniaDB로 가수를 검색하면 해당 가수가 발매한 앨범들 리스트를 가져올 수 있고. 그 앨범의 디테일들을 가져올 수 있게 됐다. 우선 우리 프로젝트의 핵심적인 로직이 완성 됐으니 이제 확장하고, 보완하면 된다!

 

참고 블로그 :

https://yju7257.tistory.com/21

'공부 > TIL' 카테고리의 다른 글

24.01.10  (0) 2024.01.10
24.01.09  (0) 2024.01.09
24.01.06  (0) 2024.01.06
24.01.05  (0) 2024.01.05
24.01.04  (1) 2024.01.04