배경 : 현재 운영중인 앱은 gradle 멀티 모듈로 구성되어 있다. 금번 신규 계열사 포팅에는 배치 전용 서버가 없어서, 어드민 서버에 배치 기능을 포함하여 진행해야 하는 이슈가 생겼다. 과거 다른 계열사, 내가 운영중인 시스템에 적용되어 있지만, 상세하게 어떻게 했는지는 제대로 안알아보았다. 금번에 합치는 것에 대한 이력을 남기고 추후 진행시 참고해서 해보자.
내용 :
1. 초기셋팅
- batch 모듈에만 사용하는 특정 설정 값을 admin 모듈에 셋팅한다
대상파일 : ..../resource/mybatis/mybatis-config.xml
적용 : <setting name="defaultExecutorType" value="BATCH"> 추가
2. Admin 모듈에는 Batch 를 구분해주기 위해, Controller, Service, Dao 를 batch 폴더 하위에 복사하여 넣는다
(기존 Admin 과 겹치는 부분 발생시 이후 단계에서 확인 후 제거 하는 프로세스로 진행)
3. mybatis xml 파일의 경우는 폴더 구분을 하지 않고 있어서, admin 프로젝트와 겹치지 않는 것은 우선 넣고, 겹치는 파일은 분리해서 저장해 두자
- xml 파일명
~ 안겹치는 파일명 리스트 (우선 복사)
batchMapper.xml
emailSendMapper.xml
kpiMapper.xml
sktInfoMapper.xml
techMapper.xml
~ 겹치는 파일명 리스트
codeMapper.xml --> 이건 2개정도 추가함
cspHistoryMapper.xml --> 이건 완전 동일함
=> 위 파일 2가지에 대해서 admin 쪽 데이터와 겹치는지 체크 겹치는거는 그대로 두고, 안겹치는것은
맨 하단부터 추가 복사할 것 .
(소스를 2개를 같이 띄워서 id 명으로 검색해서 없으면 admin에 복사, 있으면 확인후 쿼리 동일하면 그대로 두기)
4. Controller 수정
1) batch 프로젝트에서 복사한 Controller 소스를 살펴보자. 복사시 batch 폴더 하위에 데이터를 넣어놓았으므로 import 하는 폴더 경로를 수정하여 잘 import 할 수 있도록 수정하자
2) 하단 service 들이 * 로 추가하였는데, 파일을 복사하다보니, 이전 경로를 바라보고 있다보니, autowired가 꼬여서 빨간메세지가 뜨는게 아닌가 싶다. 마우스 1회 클릭시 현재 경로 파일에 대한 service가 맞냐고? 메세지가 뜨고, 맞으면 alt+enter 누르라는 메세지가 떳다.. 그래서 메세지를 눌러보자. (오토와이어링을 할 수 없다, 해당 bean 오토와이어링 갱신작업을 한다 라고 해보면 되겟다.)
3) 위 2번까지하면 BatchController 파일만 조치가 된것이다. HealthCheckController 랑 ScheduleingController 도 위처럼 동일하게 수정해주자.
5. Service 수정
1) 위 Controller와 동일하게 파일 경로 때문에 빨간 alert 난 것처럼 동일하게 경로랑 autowired 경로 다시 잡아주자.
... 잘 흘러가고있는데
2) ***InfoService.java 파일 내 RestClient elsRestClient 라고 elasticsearch 연동 관련 붙어있는게 있었다.
... 우선 미사용하겠지만, 주석처리를 하더라도 우선 연관되어있는 부분을 넘기자.
해당 class 를 가져오려면 bean 형태로 autowired 해야하는데 그곳을 수정해야하는 곳이 WebMvcConfig.java 내 추가된 소스가 있다. 일단 이부분 안쓰더라도 복사는 해두자.
3) batch 모듈에 있는 WebMvcConfig.java 파일에 있는 위 스샷 부분을 admin 모듈에 옮긴다. 위 설정한 환경변수 값들도 같이 우선 복사하자.
위 변수를 사용하려면 batch 내 application.properties 내 값들이???? 없네? 뭐지;;
4) 미사용하겠지만....jks 폴더 파일도 우선 저장하자.
-되네.... DAO로 넘어가자
6. Dao 수정
batch 폴더의 Dao 와 기존에 admin에서 쓰고 있는 dao가 있다.. 남겨두는것은 나중을 위해 놓을 것 같긴한데, 동일한 명을 사용해서, 애매했다. 그래서 내가 운영중인것을 보니 배치폴더에서 겹치는 기존 dao와 동일명 파일이 있으면 batch에 있는 것을 admin dao로 옮겨주는 작업을 하자.
병합대상
- CodeDao.java , CspHistoryDao.java
7. ***InfoService , ***InfoDao 명칭 변경 : 인텔리제이 리팩토링 활용
8. 실행해보니 오류난것 확인
1) HealthCheckController 겹친다고 오류 뜸. batch 폴더 하위 컨트롤러 파일 삭제하자.
2) CspService 겹친다고 오류 뜸.
- 메일 발송 로직이 Admin 과 batch가 약간 다름
if else 문 내 조건에 배치쪽 로직을 admin 쪽으로 포함하여 적용.
- 그 후 batch 폴더 내 CspService 삭제 .. 삭제하고 돌렸는데 계속 batch 파일 읽어서, 인텔리제이 종료하고 재실행 했음 (캐시무효화도 1번 돌림 --> 아 캐시무효화 이거 4개다 선택하니까.. gradle 까지 모두 다 다시받네 음 ..ㅠㅠ 다음에 할때는 맨위에꺼 1개만 체크하고 해보자. 하 잘 안돌아가서. gradle 갱신도 한번 해줌. 프로젝트 빌드도 해줌 ㅠㅠ)
Annotation-specified bean name 'cspService' for bean class [cohttp://m.fnu.evaluation.service.csp.CspService] conflicts with existing, non-compatible bean definition of same name and class [cohttp://m.fnu.evaluation.service.batch.CspService]
하 위오류 떠서 짱나네
ㅠㅠ
-
'개발 > 02.Spring' 카테고리의 다른 글
[Spring] 이메일 발송로직 개발시 JavaMailSender 사용하려면 (1) | 2024.06.12 |
---|---|
[SpringBoot, 퍼옴] SpringBoot, AWS RDS(MySQL) 연동 (0) | 2024.04.12 |
[Springboot] No converter found for return value of type 오류 (0) | 2023.10.19 |