본문 바로가기
공부 일지/개인 공부 기록용

프로젝트 역이요 - 리팩토링 1일차

by Joshbla 2023. 5. 11.

기존의 역이요에서 사용했던 위치정보 저장방식은 각 게시글에 위도와 경도를 직접 저장하는 방식이었다.

그런데 최근에 인터넷 자료를 검색하던 중 mysql 자체에서 위치정보를 지원하는 기능이 있다는 것을 알게되었고

리팩토링을 진행해보기로 했다.

 

우선 mysql에서 지원하는 Point 자료형으로 위치정보를 저장할 수 있다.

이 Point 자료형을 Spring에서 사용하려면 build.gradle에 의존성을 추가해줘야하는데

의존성 추가 전에 hibernate 버전을 알아야한다.

// hibernate 버전 확인
System.out.println(org.hibernate.Version.getVersionString());

위의 명령어로 버전을 알아낸 후 의존성을 추가해준다.

implementation group: 'org.hibernate', name: 'hibernate-spatial', version: '{버전 입력}'
//implementation group: 'org.hibernate', name: 'hibernate-spatial', version: '5.6.12.Final'

다음으로 application파일을 수정해야한다.

spring:
 jpa:
  database-platform: org.hibernate.spatial.dialect.mysql.MySQL56InnoDBSpatialDialect

이제 엔티티를 수정할 차례이다.

엔티티에서 새로운 컬럼을 만들어줬다. 

// import org.locationtech.jts.geom.Point 사용
@Column
private Point geopraphy;

모든 게시글을 순회하며 point값을 설정해주는 메서드를 작성했다.

    public void changePoint() throws ParseException {
        List<Board> list = boardRepository.findAll();
        for (Board board : list) {
            String pointWKT = String.format("POINT(%s %s)", board.getLongitude(), board.getLatitude());
            Point point = (Point) new WKTReader().read(pointWKT);
            board.setPoint(point);
            save(board);
        }
    }

 

 

이 메서드를 실행하면 

위와 같이 위도 경도가 따로 column으로 저장되어있다가

이처럼 POINT형으로 저장된다.

 

다음으로 해야할 내용은 

1. 게시글등록시 Point형으로 바로 등록되도록 전환

2. 각종 위도,경도 사용 메서드 Point사용하도록 전환

3. 근처 맛집 추천해주는 알고리즘 전면수정

 

'공부 일지 > 개인 공부 기록용' 카테고리의 다른 글

프로젝트 역이요 - 리팩토링 3일차  (1) 2023.05.15
프로젝트 역이요 - 리팩토링 2일차  (0) 2023.05.13
23/05/08  (0) 2023.05.09
[클라우드 컴퓨팅] CLOUDTYPE  (0) 2023.05.05
23/04/18 에러로그  (0) 2023.04.18