본문 바로가기

Project16

[이슈 #6] 주소 데이터의 빠른 조회를 위해 인덱스 설정하기 얼마 전 주소데이터를 DB에서 관리하도록 변경하였는데, 데이터가 100,000,00건정도 되어서 검색이 정말 느렸습니다. 인덱스를 걸지 않은 상태로 조회를 하면 검색에만 10초가 넘게 걸리는 무시무시한 상황이었습니다. 다행히도 주소 DB는 DML문이 거의 진행되지 않습니다. 가끔 공공데이터에서 업데이트 정보가 올라온다면 그 부분만 수정해주면 되는 것이죠. 조회는 많고 수정 삽입 삭제가 거의 없는 테이블이니 인덱스를 잡기에 부담은 없을 것 같습니다. 우선 해당 주소 DB를 구축하는 과정은 이전 포스팅에 적혀있습니다. 필요하시다면 참고해주세요. https://deveric.tistory.com/66?category=350852 [이슈 #4] 주소를 외래키로 관리하도록 변경(공공데이터 사용) 기존 방식의 문제.. 2019. 11. 1.
[이슈 #5] 반복되는 로그인 체크 로직을 AOP로 리팩토링하기 로그인 체크가 필요한 상황 회원의 정보가 필요하거나, 해당 회원의 접근권한을 확인해야 할 때가 있습니다. 마이페이지, 내 정보 수정 등이 대표적인 예 입니다. DelFood 화면 프로토타입의 마이페이지는 다음과 같습니다. 해당 화면을 출력하려면 일단 회원 로그인이 먼저 진행되어야 합니다. 비회원의 경우에는 내 정보를 볼 수 없겠죠. 변경 전 프로젝트 코드 AOP를 적용하지 않은 상태에서는 다음과 같이 코드를 작성하여 권한을 확인하였습니다. 1. HttpSession에서 Member id 정보를 가져온다. 2. 가져온 id 정보가 null이면 401 status를 반환한다. 3. id가 null이 아니면 핵심 로직을 수행한 후 반환한다. Session 체크용 공통 모듈 SessionUtil Code pub.. 2019. 11. 1.
[이슈 #4] 주소를 외래키로 관리하도록 변경(공공데이터 사용) 기존 방식의 문제점 기존에 주소를 입력하는 방식은 '주소', '상세주소' 컬럼을 사용하여 사용자의 주소를 직접 입력받는 식이였습니다. 당연히 이 주소들은 공통적인 포맷으로 관리하기도 어렵고, 주소 체계를 변경한다면 모든 테이블의 주소 체계를 전부 변경해야 했습니다. 간단하게, 변경 전 회원 테이블은 다음과 같이 생겼습니다. MEMBER Table Schema 위 방식과 같이 주소를 직접 입력하도록 한다면, 주소를 이용한 좌표 검색, 입력한 주소 별 정렬 등 주소 관리가 어려울 것이라 생각됩니다. 또한 도로명주소와 지번 주소의 관리도 어렵게 되어 테이블의 변경이 필요하다고 판단하였습니다. 1. 주소 정보를 공공데이터에서 가져오기 '공공데이터포털'에서는 도로명주소, 지번주소, 좌표 등의 데이터를 가지고 있는.. 2019. 10. 27.
[이슈 #3] 아이디 중복 체크시 Http Status값을 어떻게 설정해야 할까? 아이디 중복 체크를 했을 때 HttpStatus값을 어떻게 설정해서 넘겨줘야 할지 고민입니다. HttpStatus Enum을 하나하나 읽어보며 어떤 것을 적용할 지 고민해보았습니다. ID 중복체크 소스코드 /** * 회원가입 시 아이디의 중복체크를 진행한다. * 아이디 중복체크는 회원가입 아이디 입력 후, 회원가입 요청시 두번 진행한다. * 아이디 중복체크를 한 후 회원가입 버튼을 누를 때 까지 동일한 아이디로 누군가 가입한다면 PK Error가 발생되고 * 실제로 회원가입이 진행되지 않을 수 있기 때문에 회원가입을 눌렀을 때 한번 더 실행하는 것이 좋다. * @param id * @return */ @GetMapping("idCheck/{id}") public ResponseEntity idCheck(.. 2019. 10. 6.
[이슈 #2] 고객의 주문 내역을 조회할 때 테이블 다수 조인 이슈 - 2 https://deveric.tistory.com/59 [이슈 #1] 고객의 주문 내역을 조회할 때 테이블 다수 조인 이슈 위 프로젝트에 대한 소개는 다음 URL에서 확인할 수 있습니다. ERD와 Github 등의 URL이 포함되어있습니다. https://deveric.tistory.com/58 [DelFood] 프로젝트 소개 Spring-boot를 이용한 프로젝트를 구상하게.. deveric.tistory.com 위 글에서 이어지는 내용입니다. 조인하는 테이블을 하나 줄였지만 여전히 7개의 테이블을 주인하여야 고객의 주문 내역을 조회할 수 있습니다. 주문시 조인하는 테이블 주문 - 주문 메뉴 - 주문메뉴 옵션 - 메뉴 옵션 - 메뉴옵션 카테고리 - 메뉴 - 고객 이번에는 여기서 '메뉴옵션 카테고리'테이.. 2019. 9. 23.
[이슈 #1] 고객의 주문 내역을 조회할 때 테이블 다수 조인 이슈 위 프로젝트에 대한 소개는 다음 URL에서 확인할 수 있습니다. ERD와 Github 등의 URL이 포함되어있습니다. https://deveric.tistory.com/58 [DelFood] 프로젝트 소개 Spring-boot를 이용한 프로젝트를 구상하게 되었습니다! 서버만 구현할 예정이며, 사용한 플랫폼과 기술은 아래와 같습니다. [배달의 민족] 이라는 어플리케이션을 모티브로 만든 웹 서버 어플리케이션입니다. 고.. deveric.tistory.com 데이터 베이스 설계 도중 고객이 주문한 주문 내역을 조회하려면 테이블이 다수 조인되는 것을 확인하였습니다. 주문내역 조회시 조인되는 테이블은 다음과 같습니다. 주문 - 주문 메뉴 - 주문메뉴 옵션 - 메뉴 옵션 - 메뉴옵션 카테고리 - 메뉴 - 고객 - .. 2019. 9. 23.
[DelFood] 프로젝트 소개 Spring-boot를 이용한 프로젝트를 구상하게 되었습니다! 서버만 구현할 예정이며, 사용한 플랫폼과 기술은 아래와 같습니다. 사용 기술 및 환경 : Spring-boot, MyBatis, Redis, MariaDB, Docker, Jenkins 프로젝트 개요 ‘배달의 민족’을 모티브로 만든 배달 O2O Rest API입니다. 위치 기반 배달 서비스를 제공하며 실시간 라이더 매칭을 제공합니다. 대한민국 도로명 주소 DB를 활용하여 라이더에게 배달하는 건물 좌표와 출입구 위치를 제공합니다. 프로젝트 진행 과정 프론트 개발에 들어가는 시간을 아껴 서버 공부에 투자하기 위하여 kakao oven을 이용해 프로토타입을 제작하고 기능 요구 사항을 추출하여 설계를 진행하였습니다. 프로젝트는 2인 팀 프로젝트로 진.. 2019. 9. 23.