https://datalab.visitkorea.or.kr/datalab/portal/main/getMainForm.do
한국관광공사 데이터랩 들어가기
회원가입 하기

지역별 분석 탭 -> 지역별 관광 현황 클릭

원하는 지역 선택 후 인기관광지 클릭 그리고 아래로 내려가기

인기 관광지 부분에서 ... 클릭 데이터 다운로드 .csv 파일 하기

자신의 상황에 맞게 기술 후 다운로드
csv 파일 열어서 확인해보기
(기본적으로 외지인이 방문한 순위 , 현지인이 방문한 순위, 통합 순위로 정해서 제공)


파일 확인
순위 , 관광지명 , 주소 , 분류 , 방문횟수로 추정되는 값
다운받은 csv 파일 위치 조정



생성된 CSV 폴더에 우클릭 -> properties 폴더 바로가기 누르기

그 폴더 위치까지 자동으로 이동
폴더 들어가서 이 폴더 안에 csv 파일들 넣기
(파일 이름은 본인이 원하는데로 사용가능 본인의 편의성에 맞춰서)
csv vo 만들기

DB table 만들기

java 외부 라이브러리에 있는 openCSV 라는 라이브러리를 사용해서 csv파일을 읽을 예정
<!-- openCSV -->
<dependency>
<groupId>com.opencsv</groupId>
<artifactId>opencsv</artifactId>
<version>5.5</version>
</dependency>
pom.xml 에 의존성 추가하기
(maven 을 사용해서 추가)
csv controller 만들기
package com.example.demo.controller;
import com.example.demo.service.CSVService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class CSVController {
@Autowired
private CSVService csvService;
@GetMapping("/readAndSaveToDB")
@ResponseBody
public String readAndSaveToDB() {
return csvService.readAndSaveToDB();
}
}
localhost:8081/readAndSaveToDB 를 들어가게 되면 자동으로 db에 넣어주게끔 만들기
csv Service
package com.example.demo.service;
import com.example.demo.repository.CSVRepository;
import com.example.demo.vo.CSV;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import com.opencsv.CSVReader;
@Service
public class CSVService {
@Autowired
private CSVRepository csvRepository;
public String readAndSaveToDB() {
try {
List<CSV> csvList = new ArrayList<>();
// 예시 파일들을 배열에 추가
String[] fileNames = {"test1.csv", "test2.csv","test3.csv"};
for (String fileName : fileNames) {
InputStreamReader is = new InputStreamReader(getClass().getClassLoader().getResourceAsStream("CSV/" + fileName), "EUC-KR");
CSVReader reader = new CSVReader(is);
// 첫 번째 줄(헤더) 건너뛰기
reader.skip(1);
List<String[]> list = reader.readAll();
for (String[] csvRow : list) {
CSV csv = new CSV();
// 엔터티의 필드에 CSV 데이터를 할당
csv.setRanking(Integer.parseInt(csvRow[0])); // 정수형으로 변환
csv.setTitle(csvRow[1]);
csv.setAddress(csvRow[2]);
csv.setType(csvRow[3]);
csv.setCount(Integer.parseInt(csvRow[4]));
csvList.add(csv);
}
}
// CSV 데이터를 데이터베이스에 저장
csvRepository.insertCSVList(csvList);
return "CSV 데이터가 성공적으로 데이터베이스에 저장되었습니다.";
} catch (Exception e) {
e.printStackTrace();
return "CSV 데이터를 데이터베이스에 저장하는 중 오류가 발생했습니다.";
}
}
}
CSV 타입의 List 생성
문자열 배열의 fileNames 생성 (이 안에는 csv파일 이름이 들어간다 문자열로)
문자열 배열의 fileNames를 순회하며 데이터 가져오기
getResourceAsStream 을 보면 "CSV/" + fileName"
이라고 되어 있는데 이게 우리 csv폴더에 파일네임으로 일치하는것을
가져오는 것
reader.skip(1); 하는 이유는 CSV 폴더를 열어보면 첫번쨰 row는
순위 관광지명 주소 분류 이렇게 적혀있게 된다
이정보는 필요가 없으므로 skip으로 데이터를 가져오지 않는다
1row를 제외한 모든것을 가져와서 list에 저장
그후 반복문을 통해서 csv객체 생성 올바른 값 저장해주기
그후 완성된 csv 객체를 최초에 만들어놓은 csvList에저장
csv리포지터리에 이 리스트를 전달해서 저장하도록 만들기

mybatis 문법으로 반복문을 사용하여 csv객체에 담긴 정보를 실제로 db에 저장

url 접속 결과

DB select 결과
데이터가 올바르게 들어오게된다
이 기술을 사용하게 된 이유
여행지 추천 사이트를 만드는데 있어 좋은 재료가 될것이라고 생각했다
1파일당 100개의 행이 있고 이거를 mySql에서 손수 넣어주는 방법을 알지 못했다

이런 방식으로 데이터를 집어넣는 방법을 이 작업을 모두 끝낸 후에야 알게되었다
유료 인 경우도 있고
그래서 인터넷에 csv파일 자바에서 저장하는 방법을 검색해서 openCSV라는 라이브러리를 활용하는
방법이 있다는것을 알게 되었다
그래도 대용량의 데이터를 쉽게 다룰수 있게 되었다
그리고 25000개의 row를 집어넣어야 하는데 이는 sql 용량제한 때문에 불가능하게 되었다
그래서 testcase 정도로만 남기게 되었다
실제 이자료를 프로젝트에 적용시키진 못했다