본문 바로가기

경험

(16)
[검색 API 명세 정의 꿀팁] 매개변수 And, Or 조건 사용하기 고급 검색 API를 구현하다 보면 조건이 복잡해질 때가 있다. 예를 들면 아래와 같다. 제목은 '하'로 시작하면서 / '호'도 들어가고 / 아니면 '휴'가 들어간다던가 / 저자는 'CB'인 콘텐츠를 검색해 줘 혹은 일단 제목에 '아이스크림'이 들어가는데, 제목이 '멋있는'이 들어가거나 저자가 '구상덕'씨인 콘텐츠 검색해 줘 첫 번째의 경우는 사실 제목에만 조건이 붙어 어찌저찌 구현했었지만, 두 번째의 경우는 같은 Column이 아닌 다른 Column 내에서 조건을 줘야 했기 때문에 혼란에 빠졌었다. 그래서 내가 생각한 방법은 그룹으로 묶어서 검색하자!이다. 일단, 파라미터를 하나로 줄였다. "keywords"로 표현식을 받을 것이다. 표현식의 최소 단위는 검색 기준 열(column)과 키워드(keywor..
<업무를 행복하게 ☺️> JPA 적용!! 유지보수를 맡고 있는 프로젝트를 리뉴얼? 리팩토링?하는 작업을 맡게 되었다. 해당 프로젝트는 간단한 CRUD 작업이 많다. 솔루션 형식으로 여러 곳에 설치하는 형식이다. 이때, 다른 데이터베이스를 사용해야 할 수도 있다. 리뉴얼 시 데이터베이스를 크게 변경해선 안된다. 위 특징을 갖고 있다. 세 가지 특징을 제목 삼아 JPA를 적용할 때의 장점 및 과정 후기를 남겨보겠다. 간단한 CRUD 작업이 많다. JPA를 사용해야 하는 1순위 이유였다. MyBatis를 사용한다면 쿼리 만들기 xml 만들기 VO, DTO 만들기 ... 등의 과정들을 수행해야 했겠지만, JPA를 사용한다면 엔티티 만들기 레파지토리 만들기 가 끝이다. 이렇게 보면 별로 차이나 보이지 않는데..? 실제로는 매우 큰 차이가 있는 걸 알아주..
<업무를 행복하게 ☺️> 회사 바꾸기 ON! 아, 하기 싫어~~ 어느 날, 갑자기 일이 재미없어짐을 느꼈다. 이직을 할 수도 있지만 하지 않겠다. 왜냐, 회사에 대한 애정이 있고 우리 회사는 성장 중인 회사이다. 그만큼 아직 안 고였기에, 내가 노력한다면 재미있게 만들 수 있기 때문이다. 내 입장에서? 더 좋은 방향으로 가는 와중에 참여할 수 있는 점이 즐겁기 때문이다. 무엇을 했는가? 지금까지 더 즐거운 업무를 위해 무엇을 했는가에 대해. 1. 모듈 만들기 우리 회사는 JS 백엔드 프로젝트는 express만 기반으로 하여 NestJs와 같은 프레임워크는 쓰지 않는다. 그 이유는 유연함 때문이다. 역시 DB 관련 로직도 벡엔드 프로젝트에 종속되어 있었다. 더욱 더 유연하고, 소스 관리를 원활하게 하기 위해 db 로직을 별도로 분리해서 모듈로 만들..
[JetBrains IntelliJ] 경고창 안 사라짐 Warnings in IntelliJ don't disappear 아니~~ 수정했는데 왜 경고창 안 사라지는데~~ (물론 사진 속 내용은 수정 안 한 것이 맞다. 하지만, 캡처한 것을 까먹어버렸다는 것..) 그 이유를 찾기 위해 IntelliJ의 idea.log를 찾아 들어가 본다. 자~ 아래 보면, grazie?가 문제로 보인다. 검색해 보니 플러그인이라고 한다. 설정에 들어가 해당 플러그인을 비활성화하니 "그 노란 줄"이 드디어 사라졌다~!~! 참고 https://youtrack.jetbrains.com/issue/IDEA-321326 Warnings in javascript don't disappear : IDEA-321326 What steps will reproduce the issue? 1. ..
[DB] Incorrect string value: '\xF0...' - 이모지 저장 시 에러 Too Busy;DR 😁🙏🥹❤️‍🔥 utf8에서 이모지를 저장하려 할 때 뱉는 오류이다. DB의 인코딩 방식을 utf8mb4로 지정해준다. + Connection에서도 utf8mb4로 지정해주는 것을 잊지 않는다. 환경 nodeJs / MySQL / promise-mysql(라이브러리) 요정도? 배경지식 1. UTF8은 1~4바이트의 가변 바이트를 가짐으로써 용량을 절약했다. 2. MySQL에서는 UTF8을 3바이트 가변 자료형으로 설계했다. (모든 언어가 21bit에 저장되기 때문) 3. 이모지는 4바이트를 갖는다. => mysql의 utf8 인코딩으로는 이모지를 저장할 수 없다..! 4. UTF8mb4는 UTF8과 비슷하지만 확장된 문자를 지원하기 위해서 4바이트까지 저장할 수 있는 Charset이다..
[React / Github Pages] BrowserRouter basename 오류 동기 Github Pages를 통해 React 프로젝트를 배포하려다가 아주 힘든 시련을 겪었기에, 이건 나만 겪지 않을 것이라는 예상 + 이건 나만 겪어도 되는 시련이라는 생각으로 해결책을 남긴다. 사실 특이한 케이스라서 한국어 포스팅은 물론이고, Stack of Flow에도 없어서 남겨본다. 상황 Github Pages React: 18.2.0 react-bootstrap: 2.5.0 (이 친구까지 왜 썼는지 싶을지도 모른다. 하하..) react-router-dom: 6.4.3 해결 방법 스토리 1. BrowserRouter에 basename 추가 ref. https://bloodstrawberry.tistory.com/1082 다들 아시다시피, BrowserRouter를 사용하는 와중에 최상위 경..
[JavaScript 정규식] 태그, 태그 안 내용까지 지우기 특정 태그를 지우는 정규식은 많이 포스팅되는데, 특정 태그 안의 내용까지 지우는 정규식은 보이지 않아 작업한 겸 포스팅해본다. (나의 경우에는 이미지 캡션의 내용을 지워야한다는 요구사항을 받아 작업하게 되었다. 여러분은 어떤 이유로 요기 들어오게 되었는지요..?) 정규식에 대해 이해가 부족하다면 ? 아주 잘 정리해놓으신 분이 있으니 참고하길..! 😁 https://inpa.tistory.com/entry/JS-%F0%9F%93%9A-%EC%A0%95%EA%B7%9C%EC%8B%9D-RegExp-%EB%88%84%EA%B5%AC%EB%82%98-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-%EC%89%BD%EA%B2%8C-%EC%A0%95%EB%A6%AC 📚 JavaScript 정규 ..
서버 이관 - 서버 이관 처음할 때 필요했던 것들 입사한 지 얼마 되지 않은 시절, 회사에는 Window Server 2008 / MsSQL / 파스칼로 이루어진 노후된 프로젝트가 있었다. 또한, 서버는 원격 접속이 되지 않고 직접 가서 배포 및 관리해야 했다. 또 또한, 회사에서 만든 프로젝트도 아니고 회사 내에서 파스칼을 할 수 있는 사람이 없었다(??? 이제 생각해 보니 어이가 없군..). 그런데 내가 그 프로젝트의 서버 이관을 맡게 되었다..! 갑자기 생각나기도 했고 또 언제 서버 이관을 할지도 모르니 아주 늦었지만, 기억을 더듬어보며 정리해놓으려고 한다. 용어 설명 migration : 이관을 뜻한다. AS-IS : 현재 환경 (이관 전 환경) TO-BE : 구현해야할 환경 (이관 후 환경) 1. AS-IS 파악 일단 이 프로젝트는 내가 개발 ..