Current status : search type을 따로 지정하지 않고 필요한 검색어들만 입력 또는 선택 후 검색
problem 1. 검색 항목이 많은데 쿼리스트링을 어떻게 구성할 것인지??
[solving]
get방식으로 보내면 글자수 제한이 있고 uri가 너무 길어지는 게 아닐까하는 생각이 들어서 post로 보내볼까 했는데 잘못된 생각이었다. 글자수 256자 제한은 사실이 아니었다. 크롬만 해도 "Chrome limits URLs to a maximum length of 2MB for practical reasons and..."라고 하는데 한글이라고 해도 1백만인데..? 이건 굳이 크게 고민할 내용이 아니었던 것 같다. param model을 하나 만들어 놓고 form태그에서 get방식으로 보내고 @ModelAttribute로 그대로 받아서 검색어가 입력되지 않은 파라미터들을 체크하고 쿼리스트링을 재구성했다. 그리고 db select 이 끝나면서 쿼리스트링도 object로 담아서 view로 보냈다. 재구성된 쿼리스트링은 페이징에서 필요해서 사용했다.
problem 2. 검색한 내용을 유지하고 페이징 처리는 어떻게 할 것인지??
[solving]
검색한 파라미터만 담긴 쿼리스트링을 받아와서 페이지에 경로를 만들었다. 페이징 넘버는 view model을 따로 두어 계산하고 응답으로 넘겨주었다. 전체 아이템 개수, 페이지당 아이템 수, 한 페이지에 보여줄 페이지 개수, 시작 숫자와 끝나는 숫자. service단에서 계산하고 item 리스트와 같이 리턴할 수 있도록 했다. 무엇보다 arrow 만드는게 헷갈렸다. 현재 페이지 기준으로 arrow가 생성되므로 조건을 많이 달아주었다.
problem 3. Operand should contain 1 column(s)
[solving]
sql mapper에서 어이없는 실수들을 많이 하게되는 것 같다. 서브쿼리 사용시 자주 나타나는 에러라는데 서브쿼리를 사용하지 않았는데도 생기는 에러.. 문제는 count에서 생겼다. 결국 ( ) 의 위치, 잘못된 주석 사용 등의 문법 오류였다. mapper 쿼리 작성할 때는 좀더 캄다운하고 코딩해야한다..... 안 그럼 또 몇시간이 날아가버리고 말 것이야...
[잘못된 주석 사용]
/*주석*/ -> (X)
/* 주석 */ -> (O) : *과 내용 사이에 공백이 필요하다.
problem 4. CASE minAge WHEN ' ' THEN '20' ELSE minAge END
select-option 으로 최소나이와 최대나이를 정하고 default일 경우 최소나이 20, 최대나이 70으로 설정해야했다. 공백이면 자꾸 0으로 값을 받아와서 나이 범위가 0세~0세로 조회되어서 제대로된 결과를 얻을 수 없었다. 그래서 sql 에서 사용할 수 있는 조건문을 사용했다. 오라클, mssql 등도 같은 조건문을 제공하기 때문에 유용하게 사용할 수 있을 것 같다.
댓글