들어가며 - 이번 주는 집중을 했던 한주 ## 개발 ### Dame24 - 지난주 생성했던 것을 1차 매듭을 지어보았다. 서비스 요구사항은 스터디 계획을 만들때 자동으로 책의 목차와 쪽수를 가져와서 나눠줘야하는데 내부 테스트용 웹 클라이언트를 하나 만들어보기로 했다. - 지금 공개되어있는 Open API 중 유일하게 쓸만한게 Naver 책 검색 API라서 지난 주에 Go 서버를 간단히 만진 것과 1차 프로토타입을 만들어보았다. - 사용한 것 - Back - Golang - Go 코딩은 즐겁다. - 사실 이번에 작업할때는 문자열 처리 함수를 좀 활용한 것 말고는 Go 자체 코딩은 별로 없다. - 대부분 서버며 라우팅이며 스크래핑이며 라이브러리가 해준다. - Echo - 나는 처음부터 Echo 를 사용했는데, 최근에 예제를 보면서 net/http, gorilla/mux 로 하나하나 붙여가며 작업해본 적이 있어 Echo가 참 좋다. - 다만, 공식 가이드 문서가 조금 마음에 안든다. ```go func postContents(c echo.Context) (err error) { b := new(model.Book) if err = c.Bind(b); err != nil { return } //... 생략 ``` - 재밌는 건 위 handler 코드인데 post로 전송한 Body를 struct 만 잘 정의해주면 c.Bind(b) 에서 바로 매핑을 시켜준다. - 물론, 파싱해온 결과를 리턴할때는 아래와 같이 디코딩해주었다. ```go //... json.NewDecoder(res.Body).Decode(&sr) //... ``` - gocolly (goquery 포함) - 이 전에도 말했듯 단순 스크래핑에 쓰기엔 좀 과하다고 볼 수도 있다. 다만, 크롤러도 만들어야하기에 사용에 익숙해지면 좋을듯하다. - Async(true) 옵션 하나 만으로 병렬처리가 가능한 마법을 느낄 수 있다. - Front - create-react-app + Typescript - 기본. 뭐 말이 필요한가.. - App.tsx 에 다 때려박고 api나 interface 정도만 분리하고 BookCard 컴포넌트가 길어서 분리했다. - react-query - 이번에 삽질한 의외의 복병… - apollo 를 워낙 잘 쓰고 있어서 api end point 가 두개밖에 안되는데 그냥 써보고 싶어서 적용해보았다. - typescript 쓰면서 항상 Type 할당이나 반환값에 대해 이해를 잘못해서 해메는 경우가 많았다. 특히 react-query 는 대부분 useQuery 에 대한 기초 예제는 많은데 필요할때 요청하는 useMutation에 대한 예제가 많이 안보였다. 물론 공식문서보고 해결했으나 Typescript는 하면서 조금 삽질을 한 것 같다. - 간단히 적자면, axios instance 함수 리턴 data에 타입을 정의해주고 useMutation으로 해당 instance 리턴 함수를 실행하는 커스텀 훅을 만들어주었다. 메인에서 정의하면, mutate() 함수로 요청을 보낼 수 있고 해당 객체의 data에 저장이 되는 형태이다. ```typescript // 커스텀 훅. 첫번째 인자는 키값이고 react-query 캐싱을 이용할때 쓰는 것 같다. export function useSearchBook() { return useMutation("searchBook", async (title: string) => { return searchBookByName(title); }); } // App.tsx //.. const searchMutation = useSearchBook(); //.. const onSubmit = async ({ title }: FormData) => { searchInputRef.current?.focus(); await searchMutation.mutate(title); }; //.. searchMutation.isLoading // 로딩 상태 true/false //.. searchMutation.data // ``` - SWR 에 비해 코드를 잘 못찾겠더라. - tailwindcss + tailwindui - 나의 CSS에 평안을 찾아준 갓윈드css.. UI 라이브러리도 올해 초에 얼리로 구매해놓고 잘 갖다 쓴다. - 이번에 v2.0 이 나왔는데 조금 바뀐게 있어서 스타일링에 삽질을 조금했다. - Deploy - 내부 테스트용이다 보니 제일 빠르게 할 수 있는 방법으로 배포를 했다. - go 서버는 간만에 Heroku 를 사용해보았고 react는 언제나 그랬듯이 netlify - asset 문제인지 초기 로딩이 좀 늦다. 뭐 어차피 프로덕션용은 아니니. - 결과물 <br /> ![](https://i.imgur.com/v4LpTAR.png) <br /> ![](https://i.imgur.com/MBy2mh9.png) ## 프로젝트 - 스택 - Go + Echo + gqlgen - React + Typescript + apollo - 주중/주말 내내 매달렸는데 그래도 그럴듯한 아웃풋이 나왔다. - 관련 스택에 대해서는 천천히 후기를 써볼까 한다. 일단 프로덕션 릴리즈부터.. ## 회고 - 좋았던 점 - 한 주를 일에 온전히 집중할 수 있었다. - 아쉬운 점 - 코로나가 심해짐에 따라 운동도 못하고 업무 때문에 독서나 다른 걸 챙기지 못하고 있다. - 원래 달리기를 하려고 했는데 러닝 시작한 이틀째 되는날 무릎통증이 심해서 보니 거위발건염이라는 것이 나에게 왔더라. 달리지 못해 아쉽다. - 개선할 점 - 루틴을 다시 짜보고 급하지 않지만 꾸준히 해야할 일들을 챙기자. ## 여담 - 사실 되게 많은 Input 그리고 그에 따른 Output 도 있었는데 시간이 좀 지났고 아웃풋에 급하다보니 좀 제대로 정리를 못했다. 꾸준히 쓰려면 평소에 작성을 하고 좀 포맷을 정해야겠다.