MySQL 검색 기능 개선하기 : Full-text search
·
🥞 Database
이 글은 당근마켓을 모티브로 한 프로젝트 Secondhand 구현시 이슈 사항을 정리한 글입니다. mysql 8.0 InnoDB 환경에서 테스트 되었습니다. 발단 : 왜 검색 기능 개선이 필요했나? Secondhand는 동네를 검색할 수 있는 기능이 있습니다. 예를 들어 이런거요. [이미지 출처 : https://kikimong.com/7179] 먼저 데이터는 이런식으로 들어가 있습니다. 법정동 코드를 pk 로 하였습니다. 행정동 코드보다 법정동 코드를 선택한 이유는 변동이 더 적기 때문입니다. [참고링크 : 법정동과 행정동의 차이는?] 그리고 검색을 용이하게 하기 위해 일부러 비정규화하였습니다. 그래서 지역 검색을 어떻게 구현하면 좋을까요? 전개 초기 구현 방법 Where ~ like 사실 이 프로젝트..
Spring Event를 사용하여 도메인간 의존성 낮추기
·
🌱 Spring
이 글은 당근마켓을 모티브로 한 프로젝트 Secondhand 구현시 이슈 사항을 정리한 글입니다. 상황 Secondhand에는 실시간 채팅 어플리케이션이 있습니다. 웹소켓 통신을 기반으로 하며 STOMP와 Redis pub/sub 으로 구현하였는데요. 이 채팅에 대한 요구사항 중에 다른 도메인의 서비스를 참조하는 경우가 많아져 Facade가 비대해지고 각 도메인의 서비스 로직이 복잡하게 구성이 되며 의존성이 높아지는 우려가 생겼습니다. @Component @RequiredArgsConstructor public class ChatroomFacade { private final ChatroomService chatRoomService; private final ItemService itemService; ..
MySQL 에서 외래키가 있으면 어떤 것들을 검증할까?
·
🥞 Database
외래키 제약 조건은 관련 데이터의 일관성을 유지하는 데 사용합니다. 💡 다른 종류의 제약 조건과 마찬가지로 데이터가 일치하지 않을 경우 데이터가 삽입되거나 업데이트되는 것을 방지할 수 있습니다. …… 또는 DML 작업이 수행될 때 제약 조건으로 인해 하위 행 의 데이터가 삭제되거나, 다른 값으로 변경되거나, 외래 키를 생성할 때 지정된 옵션 에 따라 null 로 설정될 수 있습니다. 참고링크 외래키 먼저 공식 문서를 읽어보면… 외래 키는 관련 정보의 빠른 조회를 가능하게 하는 것 외에도 데이터가 삽입, 업데이트 및 삭제될 때 이러한 포인터가 무효화되는 것을 방지하여 참조 무결성을 강화하는 데 도움이 됩니다. 이 강제 메커니즘은 제약 조건 의 한 유형입니다. 연결된 외래 키 값이 다른 테이블에 없으면 다른..
LeetCode : 211. Design Add and Search Words Data Structure
·
🧩 Algorithm
문제 링크 문제 먼저 읽기 새 단어를 추가하거나 추가한 단어와 일치하는 문자열을 찾을 수 있는 데이터 구조를 구현해봅시다. WordDictionary() 객체를 초기화합니다. void addWord(word) 데이터 구조에 단어를 추가하며, 나중에 일치시킬 수 있습니다. void search(word) 데이터 구조에 단어와 일치하는 문자열이 있으면 참을 반환하고 그렇지 않으면 거짓을 반환합니다. 단어는 점 '.'을 포함할 수 있으며, 여기서 점은 어떤 문자와도 일치할 수 있습니다. 어떻게 풀까? 생각 Trie 를 다시한번 구현해봅시다. 어제 풀었던 문제라 생각보다 바로 수도코드를 작성할 수 있었습니다. . 이 나오는 경우에는 모든 문자를 검색할 수 있도록 합니다. 수도코드 class WordDiction..
LeetCode : 208. Implement Trie (Prefix Tree)
·
🧩 Algorithm
문제 링크 문제 먼저 읽기 Trie 를 구현하세요 Trie() trie를 초기화합니다. void insert(String word) 를 insert 합니다. boolean search(String word) word가 있으면 true, 없으면 false를 반환합니다. boolean startsWith(String prefix) 이미 존재하는 단어중에 prefix로 시작하는 단어가 있으면 true, 아니면 false를 반환합니다. Input ["Trie", "insert", "search", "search", "startsWith", "insert", "search"] [[], ["apple"], ["apple"], ["app"], ["app"], ["app"], ["app"]] Output [null, ..
Spring data JPA: Hibernate가 Sequence를 못찾아요
·
🪲 bugs
문제상황 및 파악 처음으로 프로젝트에 Postgresql 을 사용해보고 있습니다. MySQL과 가장 체감되는 달라지는 점이 기본키 매핑 전략 중 Sequence 를 지원한다는 점입니다. 이번에 신나서 `Sequence` 전략을 사용해 봤는데, 왠걸 이렇게 에러가 납니다. 2023-09-11T14:39:29.956+09:00 ERROR 45454 --- [nio-8080-exec-1] o.h.engine.jdbc.spi.SqlExceptionHelper : ERROR: relation "member_seq" does not exist Position: 16 2023-09-11T14:39:29.967+09:00 ERROR 45454 --- [nio-8080-exec-1] p.l.b.g.e.GlobalExce..