import Top from './layout/top'
import Tab from './inc/tab'
import Main from './layout/main'
import Map from './layout/map'
import Bottom from './layout/bottom'
return (
<div className="container">
<Top/>
<Tab/>
<Main/>
<Map/>
<Bottom tempVal="KOOREMO"/>
</div>
);
App.js 는 상단 import 부분과 return 영역의 내용만 작성 했습니다.
최초 생성시 index.html 내용에 보면 <body> 태그 하위에 <div id="root"></div> 영역이 있는데 이 부분을
<body id="root">
</body>
body 기준으로 변경 해줍니다. <div> 하나를 허용하는 경우 출력되는 화면이 의도와 다르게 출력 될 수 있어 삭제
처리 해줬습니다.
(class container 아래에 구성요소를 위치 하는게 화면 구성을 잡기 좋아서 그렇게 했는데 필요 없는경우 그냥 기본 index.html로 작업 진행 하셔도 됩니다.)
위의 내용 들중 설명이 필요한 부분은 class->className으로 처리 해야 하는 부분과, Bottom을 호출할때 tempVal이라는 key에 KOOREMO라는 값을 담아 보내 줬고 해당 값을 bottom.js에서 props로 전달 받아 사용 했다는 겁니다.
react는 부모가 자식 구성요소에 데이터 및 함수를 전달 할 수 있는데 이 때 props를 사용 하게 됩니다.
또한 데이터는 state에 담아 변경 사항을 관리 합니다. state부분은 다음 데이터를 불러오는 부분에서 설명 하겠습니다.
@Autowired 시 @Qualifier("apiCallComp") 를 명시한 이유는 동일한 인터페이스를 구현한 구현체가 여럿 있을경우 생기는 충돌을 미리 예방하기 위해 습관적으로 코딩 하는 부분 이여서 @Autowired만 사용하여도 무방 합니다.
파리미터를 전달 받을때 @PathVariable 을 포함한 모든 정보를 SearchParamVO에 정의 했기 때문에 @ModelAttribute SearchParamVO 으로 받았지만 restfull url방식에는 맞지 않을거 같아 연습시 참고 하지 않는게 좋을거 같습니다.
SearchParamVO의 내용은 아래와 같습니다.
@Getter
@Setter
@ToString
public class SearchParamVO {
private String searchColumn;
private String searchWord;
private String searchYear="2017";//2017년 이후 데이터는 공공데이터포털에 거의 없어서 2017년으로 기본설정
private String searchSiDo="11680";//서울시
private String searchGuGun="11680";//강남구
private String searchPageNo="1";//1페이지
}
사용하는 api에 존재하는 데이터가 있는 검색 조건을 미리 설정 해서 무조건 데이터가 검색 되게 진행 했습니다.
이 부분 validation 어노테이션 이용해서 검증을 추가 해주셔야 합니다.
front-end부분에도 관련 영역만 만들고 작업은 진행 하지 않았습니다.
back-end는 위의 내용까지 간단하게 정리가 되었습니다. 다음에는 react front-end 작업 내용을 정리 하겠습니다.
사용자 화면에서 호출할 backend 작업 부터 진행을 합니다. 작업할 내용이 많지 않기 때문에 gradle 구성을 간단하게 (data-jdbc, data-jpa, web, web-service, lombok, h2database, querydsl-jpa) 기준으로 작성 해줍니다.
패키지 구성은 아래의 이미지와 같습니다. 패키지 구성은 큰 의미가 있는건 아니고 제가 개인적으로 작업 시에 많이 사용하는 구성 입니다.
(패키지 구성, 함수명, 클래스명 변수명 언제나 고민이 많으실텐데 상황에 맞게 구성하는게 좋다고 생각 합니다. 가장 중요한건 룰을 만들 없으면 그 룰을 지키는 거라고 생각 합니다. 제가 만든것도 잘 안지키니...)
DB에 저장된 내용은 법정동 코드를 조회하기 위한 테이블 하나 이기 때문에 그에 상응 하는 domain이 하나만(아... 오타 있네...) 존재 하고 역시 관련 repository도 하나만 존재 합니다. custom, impl 패키지가 비어 있는데 이건 queryDsl을
사용하는 경우 채워지는 영역이라 현재는 비어 있습니다.(앞으로도 비어 있을거라 삭제 하게 될거 같습니다.)
answer패키지 하위로 실제 작업을 진행할 controller, service, dto 관련 패키지를 생성 했습니다.
resources 하위에는 application.properties이외에 h2 database초기화에 사용할 schema.sql과 data.sql이 자리 잡고 있습니다.
개인 프로젝트로 진행하는 CMS가 너무 규모가 크고 진행이 더뎌... 손에 잡히지 않아 몇달째 1~2주 단위로 진행 하는 토이 프로젝트를 계속 하고 있습니다. 지금 진행하는 내용 전국어린이사고다발지역 조회 현재 위치 기준으로 혹은 검색지 기준으로 어린이 사고 다발지역을 검색하고 인지 해서 우리 아이의 안전을 미리 미리 준비하는 그런 사이트 인데... 공공데이터 포털의 데이터가 충실하지 못해... 써먹을 만한 무언가가 되질 못했습니다. (데이터 구성을 안하는건지 아니면 조건에 부합하는 데이터가 그게 다인건지 정말 검색 데이터가 조촐 합니다.)
우선 참고한 api는 https://www.data.go.kr/tcs/dss/selectApiDataDetailView.do?publicDataPk=15058925 페이지 입니다.
서비스 구성은 아래와 같습니다. aws(apache)<->gcp(docker) react<->spring-boot jar h2 memory db
화면은 bootstrap으로 간단하게 구성 했습니다. 현재까지 진행 상태는 react<->spring-boot 데이터 연동 및 노출 까지이고 앞으로 docker에 jar이미지 포팅 및 react 네이버 지도 연동이 남았습니다.