분류 전체보기
-
DB INDEXCS/DB 2025. 5. 19. 13:52
목차1. 인덱스란?2. 인덱스의 자료구조 - B+ Tree3. 클러스터형 인덱스와 보조 인덱스4. 인덱스와 카디널리티(CARDINALITY)5. 커버링 인덱스6. EXPLAIN 분석인덱스란?테이블의 데이터를 빠르게 찾기 위해 추가로 만들어진 자료 구조인덱스는 책의 목차처럼 원하는 데이터를 빠르게 찾도록 도와주며, 없으면 Full Table Scan을 수행하게 되어 성능이 저하된다.인덱스를 만들면 조회 속도는 빨라지고 삽입, 수정, 삭제 속도는 약간 느려질 수 있다.인덱스의 자료구조 - B+ TreeB-Tree를 기반으로 한 최적화 구조로, “리프 노드에만 데이터”가 있고, 리프 노드끼리는 좌우로 연결되어 있는 트리내부 노드에는 키만 여러개 가지고있고, 탐색을 위한 기준 역할을 한다.ex. 내부 노드가 다..
-
JPA 초기화 전략개발로그/오늘뭐먹지 프로젝트 2023. 1. 5. 18:23
DB 초기화의 필요성을 느낀건 Review 기능을 개발하던 도중 테스트를 진행할 때였다. 다른게 아니라 Review 테이블의 PRIMARY KEY인 id 필드가 AUTO_INCREMENT로 설정되어있었는데, my_sql의 AUTO_INCREMENT의 설정은 만약 데이터를 삭제하더라도 무조건 다음 아이디를 뱉어내도록 설정되어 있었기에 findById 기능을 수행하던 도중 계속해서 문제가 터졌다. 이를 테스트 DB에 있는 Review 테이블을 아예 삭제했다가 다시 생성하면 정상적으로 동작하지 않을까 싶어서 구글링을 진행했고, 긴가민가 했던 내용도 많았기에 후에 까먹지 않기 위해 기록해두기로 결정했다. Hibernate 전략 application.yml의 설정을 변경해서 수정할 수 있다. spring.jpa...
-
Selenium을 이용한 크롤링개발로그/오늘뭐먹지 프로젝트 2022. 12. 23. 18:53
0. 크롤링 이유 현재 만들고 있는 앱에 현재 위치와 DB를 기반으로 식사를 추천해주고, 추천된 데이터를 HTML로 뿌려주는 항목이 있었다. 뿌려주기를 원하는 데이터는 식당의 이름, 위치, 메뉴, 리뷰, 이미지 등이 있었는데 문제가 하나 있었다. https://www.data.go.kr/ 공공데이터 포털 국가에서 보유하고 있는 다양한 데이터를『공공데이터의 제공 및 이용 활성화에 관한 법률(제11956호)』에 따라 개방하여 국민들이 보다 쉽고 용이하게 공유•활용할 수 있도록 공공데이터(Datase www.data.go.kr DB를 채워넣을때 위의 공공 데이터 포털을 이용해 데이터를 채워넣었는데 해당 사이트가 제공하는 데이터에는 식당의 메뉴, 리뷰, 이미지등이 포함되어있지 않다는 문제가 있었다. 이를 해결하..
-
구조 리팩토링 - 테스트 DB 분리, 메시지 분리개발로그/오늘뭐먹지 프로젝트 2022. 10. 19. 01:27
1. 테스트 DB 분리 2. 메시지 분리 테스트 DB 분리 테스트에는 중요한 원칙이 두가지가 있다. 1. 테스트는 다른 테스트와 격리해야 한다. 2. 테스트는 반복해서 실행 할 수 있어야 한다. 이 중에서 첫 번째 조건은 잘 지키고 있었지만 두 번째 조건인 반복 실행에서 문제가 있었다. 메인 데이터 베이스를 하나만 사용하기에 기존 데이터 베이스에 있는 데이터들이 테스트에 방해가 되고 있었다. 즉 테스트가 원래 코드와 완전히 분리가 되지 않은 상황이라 어찌 해결할지 고민했었다. 해결책을 몇 가지 알아봤었는데 Test DB를 아예 분리하여 사용하는 방법이 마음에 들었고, 이 방법을 알아봤다. 몇 가지의 방법이 있었는데, 첫 번째로는 그냥 말 그대로 지금 사용하는 mariaDB에 새로운 데이터 베이스를 사용하..
-
CI/CD개발로그/오늘뭐먹지 프로젝트 2022. 4. 6. 19:56
이제까지 개발을 할 때 로컬 환경에서 개발 -> 깃허브에 푸쉬 -> EC2에서 빌드하는 방식으로 진행되었다. 그런데 이 과정에서 문제가 있었다. 로컬 환경은 HTTP 환경으로 돌아가고 있었고 EC2에서는 HTTPS에서 돌아가고 있어서 로컬 환경에서 개발한 파일이 EC2에서 맞지 않는 경우가 다반사였다. 이에 따라 수많은 버그가 발생되었고, 이를 근본적으로 해결해야겠다는 생각이 들었다. 우선 해야 할 일들을 생각해봤다. 첫 번째로, 로컬 환경을 HTTPS 개발 환경으로 바꾸어 EC2에서의 배포 환경과 일치시켜야 할 필요성을 느꼈다. 두 번째로, 깃허브에 푸쉬를 하면 자동으로 개정된 내용에 맞게 배포가 되었으면 좋겠다는 생각이 들었다. 그래서 각각을 작업했고, 오늘에 와서야 해당 작업들이 마무리 되었다. 로..
-
AWS 배포개발로그/오늘뭐먹지 프로젝트 2022. 3. 31. 14:34
드디어 AWS 배포를 마무리했다. 빨리 끝날줄 알았는데 정말 많은 버그들을 겪다보니 생각보다 훨씬 오래 걸렸다. HTTP 환경에서 HTTPS 환경으로 넘어가는데 처음 경험해보는 환경이다보니 많은 시행착오와 삽질이 있었지만 그래도 결국에는 구현해냈다! 버그를 잡아내 정상적으로 구동됐을때 얼마나 기뻤는지 모른다. 이 마음이 식기전에 만든것들을 한번 정리해보려고 한다. 서버 구성 프론트쪽의 구성도다. HTTPS를 활용하기 위해서 도메인을 구매했고, 이 도메인에 ACM을 활용해 인증서를 발급받아 HTTPS로 구성했다. 로드밸런서를 통해 80포트로 들어온 요청은 443포트쪽으로 리다이렉트 시켜 HTTPS를 사용하도록 했고, 기존 리액트는 NGINX에 올려 요청을 처리하도록 했다. 백앤드의 구성도다. 프론트쪽에서 ..
-
메인 기능 구현 완료개발로그/오늘뭐먹지 프로젝트 2022. 3. 10. 18:41
바뀐 부분 사실 메인 기능 자체는 작년에 전부 구현했었는데 포스팅을 올리지 않다가 이왕 시작한 로그니 끝까지 써보자 해서 늦게나마 올리게 되었다. 바뀐 부분이 몇몇 있다. 첫 번째로는 식당들을 크롤링하여 사용할 것이라는 당초의 계획과는 달리, 카카오에서 제공해주는 API의 기능들을 사용하기로 했다. https://developers.kakao.com/docs/latest/ko/local/dev-guide#search-by-keyword Kakao Developers 카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다. developers.kakao.com HTTP를 통해 근처 위도의 식당을 몇개 가져오고, 그 뒤에 랜..
-
Template Method Pattern디자인 패턴 2022. 2. 26. 18:24
해당 책을 통해 공부한 내용을 정리하고 있습니다. 정의 템플릿 메소드 패턴에서는 말 그대로 ‘템플릿’을 제공하는 패턴이다. 예를 들어, 발표를 할 때 약간씩 내용을 수정하면 되는 파워포인트 템플릿등이 있는데 템플릿 메소드 패턴은 이것과 정확히 같은 동작을 한다. 정해져 있는 양식이 있고, 디테일은 서브클래스에서 템플릿 메소드를 구현해 사용하는 방식이다. 책에서 소개하는 템플릿 메소드 패턴의 정의는 다음과 같다. 어떤 작업 알고리즘의 골격을 정의합니다. 일부 단계는 서브 클래스에서 구현하도록 할 수 있습니다. 템플릿 메소드를 이용하면 알고리즘의 구조는 그대로 유지하면서 특정 단계만 서브클래스에서 새로 정의하도록 할 수 있습니다. UML과 구현 한번 UML을 보자. templateMethod는 말 그대로 순..