개발 나누고 더하기
-
Set에 대하여 1 : 구조와 주요 메서드개발 나누고 더하기/자바, 스프링 2023. 6. 23. 23:39
Set은 내가 좋아하는 자료구조이다. 중복없이 원소들을 담아놓은 집합체이고, 용도도 중복 검사로 주로 쓰이는 아주 군더더기 없는 구성이라 뭔가 깔끔하다. 그런데 이번에 Set을 org.springframework.cache.annotation.Cacheable에 사용하다 버그를 만들어냈다. 왜 그렇게 생각했는지 모르겠는데 레디스가 Set을 지원하니 key에 사용되는 타입도 Set을 지원할 줄 알았다. 하지만 Key는 정직하게 스트링 값으로만 비교를 했고, 의도치 않게 여러가지 버전의 캐시를 만들어 내고 말았다. 대략 아래 코드와 같았다. List로 할까 고민했었는데, 좀 안일했었다. 로컬과 개발(인스턴스 2대) 환경에서 테스트해도 문제가 없었지만 운영환경에서 몇십대(정확한 대수는 공개하기 민감하므로^^)..
-
leetcode easy - Two Sum개발 나누고 더하기/코딩 테스트 2023. 6. 14. 22:33
문제 Given an array of integers nums and an integer target, return indices of the two numbers such that they add up to target. You may assume that each input would have exactly one solution, and you may not use the same element twice. You can return the answer in any order. Integer 타입의 배열이 있고, 이중 2개를 뽑아 더해서 target과 같은 값이 나오는 인덱스를 반환해야 한다. 예제 1 Input: nums = [2,7,11,15], target = 9 Output: [0,1] Ex..
-
이모지와 유니코드 그리고 자바개발 나누고 더하기/자바, 스프링 2023. 4. 22. 00:09
발단 2021년 어느날 회사 서비스의 DB 컬레이션을 utf8mb4로 수정하였다. 회사 내 다른 서비스와 상품 연동을 하는데, 이 채널로부터 4bytes 이모지가 포함된 상품 데이터를 받아 해당 상품 페이지의 이모지가 다 깨져 나왔기 때문이다. 우리는 DB 컬레이션만 수정하면 되는데 문제는 우리와 상품 연동을 하는 또 제 3의 서비스에서 이모지 허용이 안되는 것이 문제였다. 이모지를 걸러서 전송해야 하는데 2가지 방향으로 문제를 풀 수 있다. 화이트 리스트를 만들어 이 안에 포함된 문자만 허용하거나 블랙 리스트를 만들어 그 안에 든 문자들을 제거하는 것이다. 그 당시 이 문제를 담당했던 개발자는 전자를 택하여 아래와 같은 코드가 나왔다. public class EmojiUtil { private stat..
-
호텔 상세 페이지 성능 개선 경험 : DB 데이터 패치 크기를 줄이자개발 나누고 더하기/DB 2023. 3. 3. 23:05
1년 전 간단한 쿼리 수정으로 호텔 상세 정보 조회 API 응답속도를 15% 가량 개선한 적이 있다. APM으로 핀포인트를 쓰는데 아래와 같이 API에서의 메서드별 처리시간이 나온다. 어디서 시간이 오래 걸리는지 병목지점을 찾기 위해 봤는데, 아래와 같이 단순한 쿼리가 전체 응답시간의 60%정도를 차지하고 있었다. SELECT ha.hotel_id, a.name, ha.is_using FROM hotel_amenity ha JOIN amenity a ON ha.amenity_id = a.id WHERE hotel_id = 77; 아주 단순한 쿼리이고, 해당 쿼리를 가져와 실행계획을 보면 인덱스도 잘 타는 것을 확인할 수 있다. 일단 여기까지 중간 정리하면, 호텔에는 아기 침대, 피트니스, 사우나 등 해당..