til 97

2023.04.17 (99일차)

Day 99 - 실전 프로젝트 99일이 왔지만 아직 10일 정도가 남았다. 뭐했는지도 모르겠는데 99일이 지났다. 회고를 하고싶지만 아쉽게도 그럴 시간이 없다. 최종 프로젝트를 마무리해야하기 때문이다. 그래서 그 일은 추후에 기억나면 하는 것으로 하고 우선은 오늘부로 TIL을 그만쓸것이다. TIL의 취지는 좋지만 뭔가 나랑은 맞지 않는 느낌이다. 일 단위로 배운 내용을 글로 정리하는 것 보다는 주제 단위로 정리하는 것이 흐름을 이해하기도 쉽고 나중에 찾아보기도 좋다. 그래서 매일 배운 내용을 부분부분 글로 적기 보다는 하나의 글로 정리해서 업로드 하는 방식으로 공부한 내용을 기록할 생각이다. 물론 TIL도 쓰고 글도 따로 올리면 좋겠지만 그건 너무 투머치라는 생각이 들어서 하나만 하려고 한다. 그래도 공..

항해99/TIL | WIL 2023.04.17

2023.04.15 (97일)

Day 97 - 실전 프로젝트 오늘은 수많은 일들이 있었다. 하지만 다 적기에는 시간이 너무 늦었다. 일단 엘라스틱 서버와 관련된 이슈가 있었고 엘라스틱에 재고 업데이트 문제, 인덱스 안타는 문제, 서킷 브레이커 정리 등등이 있었다. 엘라스틱 서버 관련 이슈는 명백한 사유가 밝혀지지 않아 일단 로그를 받아들이는 conf 파일이 문제라고 생각해서 그 부분을 제거하고 내일 상황을 봐야할거같다. 그리고 재고 업데이트 문제와 인덱스는 해결했다. 정리는 내일 하겠다. 서킷 브레이커 부분은 정리를 했지만 아직 부족한 부분이 있어서 내일 조금 더 보완할 예정이다. 우선 정리한 링크를 첨부하고 마치겠다. Circuit Breaker 참고/ 망나니 개발자 서킷 브레이커란? 서킷 브레이커는 쉽게 말하면 집에있는 두꺼비집이..

항해99/TIL | WIL 2023.04.16

2023.04.14 (96일)

Day 96 - 실전 프로젝트 오늘의 주요 업무는 검색 쿼리 분리 및 정리, 성능 테스트 코드 작성하기, 주문 로깅 적용하기, 특수문자 검색 예외처리하기 이다. 검색 쿼리 분리는 크게 할 필요는 없었지만 아무래도 한쪽에 너무 몰리는 것보다는 분산시키는게 좋겠다 싶어서 분리하였다. 일반 검색은 카테고리와 검색어만 적용되는 쿼리로 구성하였고 서킷브레이커를 위해서 같은 기능을 하는 sql구문도 만들어서 등록해줬다. 엘라스틱을 적용하고 이전에 했던 것들과 성능 비교를 하려는데 이전 자료들이 조금 부족한게 있어서 동일한 조건으로 비교하기 위해서 테스트 코드를 작성해서 like문과 mysql의 fulltext 그리고 elasitc 총 세가지로 진행하였다. 여러 조건을 걸고 수행했는데 elastic은 1분내로 테스트..

항해99/TIL | WIL 2023.04.15

2023.04.13 (95일)

Day 95 - 실전 프로젝트 오늘의 주요 업무는 로그를 파싱해서 JSON으로 적재하기, 키바나로 시각화하기, 검색 자동완성 정도이다. 로그 파싱은 로그스태시에서 filter로 message를 파싱했다. 많은 filter 중 grok을 사용해서 정규식으로 원하는 형식으로 잘랐다. 정규식이 눈에 잘 안들와서 실수가 많았지만 이제는 필요한 정보를 로그에 남기면 잘라서 엘라스틱에 적재할 수 있다. 그리고 그 정보를 가지고 키바나 대시보드에서 시각화를 하려고 하는데 아직은 정보가 별로 없어서 이쁘지가 않았다. 다양한 정보를 위해서 내일은 가격 정보도 받아와서 총 가격 대시보드도 만들어봐야겠다. 자동완성은 입력이벤트가 있을 때마다 검색을 해서 키워드를 검색해오는 방식이였다. 생각해보면 모든 경우의 키워드를 프론트..

항해99/TIL | WIL 2023.04.13

2023.04.12 (94일)

Day 94 - 실전 프로젝트 오늘 아침에도 깃허브에서 답장이 안와서 결국 포크뜬 레포를 이용해서 organization을 하나 만들었다. 그리고 코드를 이어서 진행했는데 어제 테스트한 서킷 브레이커를 실제 프로젝트에 적용하고 main에 머지해서 배포환경에 적용하였다. 그리고 logback-spring.xml파일을 만들어서 로그 설정을 공부하였다. 각 구문의 역할을 파악하고 슬랙을 연동해서 배포된 서버의 로그를 실시간으로 볼 수 있도록 설정하였다. 원래는 에러가 발생하면 우분투 들어가서 에러로그 파일을 열어서 봐야했지만 슬랙으로 실시간으로 보여주니 빠르게 해결이 가능했다. 근데 로그레벨을 INFO로 설정하니 너무 많은 로그가 날라와서 다음 배포때는 레벨을 WARN으로 올려야겠다. 그 다음으로는 주문 성공..

항해99/TIL | WIL 2023.04.13

2023.04.11 (93일)

Day 93 - 실전 프로젝트 일단 오늘은 실수로 레포지토리를 날려먹었다. 다른 레포를 지워야 하는데 아무 생각없이 지우다가 프로젝트 레포를 지워버렸다.. 그래서 복구하려는데 포크 뜬 레포는 복구가 안된다길래 깃허브에 문의를 넣어놓은 상태이다. 지금 12시간이 지났는데 아무런 응답이 없는거보면 그냥 새로 만드는게 빠를거같다. 다행이게도 현재 내가 포크 뜬 레포에 최신 데이터가 저장되어 있어서 새로운 방을 하나파서 복사하면 될 듯하다. 내일 아침에도 응답이 없으면 새로 만들어야겠다. 상황이 이런지라 심란해서 코딩에 집중을 못했다. 오늘은 이번주의 주요 업무인 서킷 브레이커를 구현했다. 다행이게도 resilience4j라는 라이브러리를 이용하면 쉽게 서킷 브레이커를 적용할 수 있었는데, 어제 mysql과 엘..

항해99/TIL | WIL 2023.04.11

2023.04.10 (92일)

Day 92 - 실전 프로젝트 오늘의 도전 과제는 페이지네이션 개선과 서킷브레이커 구상이었다. 먼저 서킷브레이커를 구상하려고 했는데 감도 잘 안잡히고 검색이 완전하게 된 후에 하는게 좋을거같아서 페이지네이션 개선작업을 먼저 진행했다. 현재 페이지네이션의 로직은 다음과 같다. 검색을 하면 서버에서 다음 페이지를 위한 커서를 프론트로 전달한다. 프론트에서 다음 페이지 요청을 보낼 때 받은 커서정보를 localstorage에 배열로 저장한 후 요청을 보낸다. 프론트에서 이전 페이지 요청을 보낼 때 localstorage에 저장된 배열을 pop한 후 가장 뒤에있는 정보를 가지고 와서 요청을 보낸다. 이렇게 했을 때 가장 큰 문제점은 이전 페이지 버튼이 아닌 브라우저의 뒤로가기 버튼을 눌러서 이전 페이지에 가는 ..

항해99/TIL | WIL 2023.04.11

2023.04.08 (90일)

Day 90 - 실전 프로젝트 벌써 90일이다. 오늘은 엘라스틱 서치에 남은 데이터를 다 넣고 검색을 mysql에서 엘라스틱 서치로 넘겼다. 그 과정에서 mysql과 엘라스틱 서치의 호환을 위해서 페이징 방식을 약간 수정했다. 왜냐하면 엘라스틱이 장애가 발생할 경우 느리더라도 mysql로 서비스를 유지해야하기 때문에 검색 로직이 변경되어도 오류없이 결과를 반환하도록 수정하였다. 오늘 겪은 트러블 슈팅으로는 커서 페이징 할 때 원래는 id만 넘겨줬는데 정렬을 위해서 id랑 정렬에 필요한 데이터를 하나 더 받아 왔는데 그게 title인 경우에 400 에러가 발생하는 문제가 있었다. 항상 그런것은 아니였고 title에 특수문자가 포함되어있으면 발생했다. 원인을 파악해보니 URL에 들어가면 안되는 문자들이 그대..

항해99/TIL | WIL 2023.04.09

2023.04.07 (89일)

Day 89 - 실전 프로젝트 오늘 자고 일어나니까 엘라스틱에 150만개만 들어가고 서버가 죽어있었다. 그래서 1차 절망하고 다시 넣는데 또 죽어서 약간 멘탈이 나갔었다. 오늘 엘라스틱을 기반으로 코드를 작성해야 내일 시연을 할텐데 데이터가 안들어가서 뭘 할수가 없는 상황이였다. 일단 서버가 죽은 문제점은 속도라고 생각했다. 그래서 서버를 하나 더 만든 다음 그 서버에서 천천히 데이터를 넣기로 하고 터진 서버에는 200만개 정도 있어서 그 엘라스틱을 기준으로 코드를 작성했다. 근데 천천히 넣어도 계속 터지길래 백만건당 한 번씩 수동으로 종료해줘서 오늘 겨우 900만개를 채웠다. 내일 아침에 조금만 더 하면 멘토링전에 채울수 있을거같다. 데이터가 들어가는 동안 엘라스틱을 이용한 검색 쿼리를 작성했다. Qu..

항해99/TIL | WIL 2023.04.08