새로운 내용을 공부할 때
새로운 내용의 공부를 시작할 때 용어의 정의를 이해하지 못하거나 정확하게 알지 못한다면 그 용어가 포함된 문장을 이해하지 못합니다.
작은 단어 하나가 내용을 이해하지 못하게 하기 때문에 용어를 정확하게 이해하는 것이 중요합니다.
해시 충돌 학습과 회원가입 로직 4초 감소
주제
- 해쉬 충돌
- 회원 등록 요청 4초에서 0.1s초로 시간 단축
내용
어제 머리 속으로 생각했던 비동기 방식을 실제 업무에 적용했습니다.
프로그램을 반대로 뒤집어서 외부 API가 성공했다는 전제로 데이터를 저장합니다.
그리고 비동기로 외부 API를 3번 전송합니다. 외부 API에서 검증으로 뱉어내는 경우
쓰레드를 종료하고 데이터베이스에 실패라고 기록합니다.
이런 방식으로 프로그램 방식을 변경하니 기존에는 외부 API 3번을 모두 기다리느라 4초~5초가 걸렸던 회원 등록 과정이
이제는 0.1~0.2초 사이로 변경되었습니다.
쓰레드를 동작시킬때 익명 클래스와 람다중 어느 방식으로 구현할까 고민을 하다가 람다 방식이 코드가 깔끔해서 적용하려고 했습니다.
중간에 API결과가 실패가 될 경우 작업을 마무리하기 위해 return
을 사용하려고 했지만 적용할 수 없었습니다.
람다 표현식 내에서 return
을 사용하면 람다를 감싸고 있는 가장 가까운 명시적 함수로 반환을 시도하기 때문에 컴파일 오류가 발생했습니다. 그래서 익명 클래스로 구현을 하고 추후에 리팩토링을 하기로 했습니다.
해시충돌
해시 충동은 데이터를 저장할때 그 객체의 해시 함수 결과가 동일하여 같은 버킷에 담기게 되는 것을 말합니다.
해시를 사용하는 이유는 리스트 계열은 검색시 시간복잡도가 O(n)으로 처음부터 끝까지 순회를 하게 됩니다.
빠른 검색을 위한 자료구조로 객체의 값을 해시 인덱스로 사용하여 바로 조회할 수 있는 장점이 있습니다.
코드로 직접 간단하게 구현을 해보니 버킷이라는 개념과 해시 충돌이 발생한 이유도 알게 되었습니다.
댓글남기기