이번주 봄싹 스터디에서는 검색 기능을 구현해 가려고 합니다. 원랜 페이징까지 구현해 가려고 했는데 요즘 번역이 좀 밀려서 번역에 에너지를 쏟았더니 눈이 아파서 코딩을 못하겠네요.

어쩃든, 검색 기능을 어떻게 구현할지 생각해 봤습니다. 제가 주로 이용하던 검색은 구글이나 네이버 같이 어떤 글을 검색할 땐 키워드 하나면 충분합니다. 그 키워드가 어떤 글의 내용이 될 수도 있고 작성자나 글 제목이 될 수도 있겠죠. 그래서 좀 더 세분화 하기 위해서 어떤 필드(제목, 내용, 글쓴이)를 검색할 키워드로 사용할 것인지를 선택할 수 있도록 기능을 제공해야겠다는 생각이 들었습니다.

다음은 글을 쓴 날짜가 관건인데 이 부분은 고민이 좀 됐습니다. 날짜를 두 개씩 받아서 Between으로 검색을 하자니 매번 날짜 입력하기도 참 불편하고 그렇다고 날짜가 없으면 가져오는 데이터가 너무 많고 그래서 샤워하다가 생각난 것이 은행 사이트의 거래 내역 조회입니다. 은행 사이트에서 거래 내역 조회할 때 보통 기본값으로 1주일이나 한 달치가 검색이 되고 어떤 사이트는 최대 Between을 세 달로 제한해서 검색 대상이 되는 데이터의 범위를 줄여놨습니다. 이걸 게시판에 응용해볼 생각입니다.

검색 조건 파라미터를 나타내는 클래스의 필드는 총 다섯개 입니다.

String keyword
Stringp[] filedNames
Date baseDate
DateSearchingTerm dateSearchingTerm
DateSearchingType dateSearchingType

필드 이름은 String 타입의 속성 이름 배열이 되고 그 중에서 keyword를 가진 녀석들을 검색할 겁니다. 그리고 날짜는 baseDate를 기준으로 type에 따라 하향(from), 상향(to), 중심(around)으로 term 만큼 검색을 할 겁니다. UI 기술이 좀 받쳐주면 아주 잼난 UI를 만들 수 있겠는데 일단은 단순 입력으로 가야겠죠. 전 UI에 약합니다. ㅠ.ㅠ

여기서 재밌는게 DateSearchingTerm 이랑 DateSearchingType 인데, 이 녀석들은 enum으로 만들 겁니다. enum으로 선택지를 만들어 두고 enum이 제공하는 name()과 values() 메소드를 이용해서 화면에 뿌릴 이름을 toString()을 재정의 해서 보여줄 것이고 선택지 컬렉션을 화면에 전달할 겁니다. 이 녀석들은 기본 타입이 아니라 스프링이 어떻게 바인딩 해야 하는지 당연히 모르겠죠. Date도 마찬가지 입니다. 그래서 커스텀 에디터를 만들어서 등록해주고, 차후에는 Date 검색 부분만 따로 분리해서 다른 도메인의 검색 파라미터에서도 재사용하기 쉽도록 해야겠습니다.

오늘은 맥주를 마셨으니 코딩은 내일로 미루고 오늘은 피아노나 조금 치다가 자야겠습니다. Good Night~