대용량 데이터 처리 프로젝트
결과
대용량 데이터 처리 프로젝트를 진행하며.
파일 읽기와 파일 쓰기를 해보았고, 파일 읽기 중 문자열 연산 String str = “”; str += br.readLine()을 하면 모든 String리터럴이 메모리에 저장돼 시간이 매우 오래 걸리는 것을 직접 경험해 볼 수 있었음.
따라서, 많은 문자열 연산이 필요할때는 List<String> 또는 StringBuilder를 활용할 것.
객체 지향적인 프로그래밍을 해보려고 시도함.
Parser인터페이스를 작성하여 추후 다른 데이터의 파서를 구현할 때 본 코드 수정 없이 실행할 수 있도록 노력함.
파일 읽기, 파서, 도메인 객체, 분석으로 역할별로 클래스를 분리해 봄.
하지만, 클래스를 나누고 주입해 나가면서 Parser인터페이스를 구현하고 ReadLineContext에 제네릭를 사용하여 확장성을 고려한 부분의 의미가 사라져 버린 것 같음.
얼마나, 어떻게, 어떤 기준으로 클래스를 나누면 좋을지, 그리고 그 클래스들 사이를 어떻게 연결하는 것이 바람직할지 좀 더 공부가 필요함.
파일
Categories, Data, HeatmapChart
Heatmap차트 작성을 위한 데이터 가공.
{
"xAxis": {
"categories": ["서울특별시","부산광역시","대구광역시","인천광역시","광주광역시","대전광역시","울산광역시","세종특별자치시","경기도","강원도","충청북도","충청남도","전라북도","전라남도","경상북도","경상남도","제주특별자치도"]
},
"yAxis": {
"categories": ["서울특별시","부산광역시","대구광역시","인천광역시","광주광역시","대전광역시","울산광역시","세종특별자치시","경기도","강원도","충청북도","충청남도","전라북도","전라남도","경상북도","경상남도","제주특별자치도"]
},
"data": [...]
}
JSON
복사
City
도시 코드와 인덱스 값을 포함하여 미리 정의해둔 Enum클래스.
City.SEOUL과 같이 값을 가져올 수 있음.
TransferHistory
전출 도시와 전입 도시를 담는 객체, 도메인
Parser
각종 Parser구현을 위한 인터페이스
TransferHistoryParser
인구 이동 내역 파싱을 위한 Parser인터페이스의 구현체
ReadLineContext
파일을 읽어와 파싱하는 객체
TransferHistoryCounter
인구 이동 내역 리스트를 카운트하기 위한 객체
TransferHistoryAnalyzer
인구 이동 내역을 분석하는 객체
•
getListByFromAndTo(City fromCity, City toCity) : 전출 도시와 전입 도시로 내역 조회
•
getTransferHistories() : 전체 리스트 조회
•
count(List list) : 인자의 데이터 카운트 2차 배열 형태로 반환.
•
saveHeatmapJson(String filename) : 전체 리스트 Heatmap 생성을 위한 json파일로 저장.