어드민에서 발견한 부동소수점 문제하잇 앱을 어드민에서 유저관리를 하던 도중,어떤유저의 Kcal값이 -8.881784197001252E-16 로 나타나는것을 확인하였다.바로 부동 소수점 문제. 앱을 만들다가 이런 문제를 깜빡하고 배포를 한 나 자신이 너무 한심했다. 원인 분석1. 유저가 식단으로 섭취한 음식을 등록 -> 105.6Kcal 가 DB에 저장2. 유저가 등록했던 음식을 삭제 -> 105.6Kcal 가 DB에 삭제즉 105.6 - 105.6 뺄쎔이 일어나고, 여기서 0.0000000000004 정도의 오차가 발생해,-8.881784197001252E-16 같은 문제가 발생한것이다. 부동소수점부동소수점 오차(Floating Point Precision Error) 란,컴퓨터는 10진수를 ..
오늘까지만은 없다
PROJECT
오늘만, 오늘까지만은 없다
엘라스틱서치 Out Of Memory 문제 해결 과정앱을 만들다 보면 검색은 필수적인 기능이다.특히 내가 개발한 하잇(HowToEat) 같은 서비스는 음식 데이터가 15만 개가 넘는다 보니, 검색 안정성은 정말 중요하다. 문제 상황어느 날 앱에서 "김밥"을 검색했는데… 검색 결과가 아무것도 나오지 않는 문제가 발생했다. 원인을 확인해보니, 엘라스틱 서치를 docker로 띄운 EC2 인스턴스가 Out Of Memory(OOM) 로 종료된 상태였다.말 그대로 서버가 메모리를 다 써버리고 꺼져버린 것.현재 엘라스틱 서치는 t3.small (메모리 2GB) EC2 위에 올려져 있었는데,AWS 콘솔에 접속해서 free -h 명령어로 확인해보니 available 메모리가 고작 165Mi 밖에 남아있지 않았다...
왜 도입했는가?앱을 만들다 보면 이미지는 필수적인 기능이다.특히 내가 개발한 하잇(HowToEat) 같은 서비스는 - 유저 프로필 사진을 저장해야 하고, - 음식 사진을 업로드해서 기록해야 하고, - 검색 결과나 식단 기록 화면에서 보여줄 썸네일 까지 필요하다.처음에는 그냥 서버에 이미지를 저장하려고 했지만근데 이 단순해 보이는 걸 서버 로컬만으로 해결하려고 했을 때, 여러 문제가 생겼다. 1. 발생한 문제 및 발생될 문제(1) 용량 한계서버 디스크는 한정적이라 테스트로 몇개만 올려도.. 금방 꽉 차버렸다.특히 음식 사진은 용량이 크고, 유저가 늘어날수록 더 빠르게 차오를 수 있다.결국 서버만으로는 감당이 불가능했다.(2) 비용 문제이미지 저장 때문에 서버를 계속 늘리는 건 비효율적이었다.서버는 CP..
왜 도입했는가?앱을 만들다 보면 검색은 필수적인 기능이다.특히 내가 개발한 하잇(HowToEat) 같은 서비스는 음식 데이터가 15만 개가 넘는다. 유저 입장에서는 검색창에 “김밥”을 치면 김밥, 참치김밥, 김치김밥 같은 기본 음식들이 먼저 보여야 하고, 그 뒤에 “김여사 참치김밥” 같은 브랜드 음식이 따라오는 게 자연스럽다. 또 “마르게”라고만 입력해도 “마르게리타 피자”가 나오는 게 당연하다.하지만 이 단순해 보이는 걸 RDB만으로 해결하려고 했을 때 벽을 크게 만났다. 1. RDB로 검색했을 때의 문제RDB에서 보통 문자열 검색은 LIKE를 쓴다. 예를 들어:SELECT * FROM foods WHERE food_name LIKE '%김밥%';이렇게 하면 “김밥”이 들어간 음식들을 가져오긴 ..
2024년 08월 05일 1차 발표 이후IC TICKET 프로젝트의 1차 발표를 모두 마쳤다.애자일 방식으로 프로젝트를 진행하고 매일 팀원들과 스프린트를 진행하여 기간내에 목표로 두었던 기능들을 모두 구현하는데 성공하였다.발표는 생각보다 괜찮았었고, 발표가 끝나고 드디어 튜터님의 질문 리스트를 받게 되었다.이 질문에 우리팀은 다같이 모여 또 한번 깊게 고민해 보는 시간을 가졌고, 아래가 질문에 대한 답변을 정리해 두었다. 튜터님 질문 - SA 공통질문Q1. ERD 기준에서 가격 컬럼이 int 형식입니다. float, decimal 등이 아니라 int로 선택한 이유가 무엇일까요?A1. 먼저 가격 컬럼을 int로 표기한 이유는 정밀도와 성능, 그리고 비즈니스 기획때문 입니다. 정밀도 : float과..