일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- 멀티 쓰레드
- 스레드
- container
- 스레드 제어와 생명 주기
- 쓰레드
- 자바 입출력 스트림
- 도커
- 김영한
- Collection
- 알고리즘
- 자바
- Java IO
- Docker
- LIST
- 도커 엔진
- 자료구조
- 자바 io 보조스트림
- 인프런
- Thread
- java network
- Kubernetes
- 컨테이너
- 실전 자바 고급 1편
- 리스트
- java socket
- 쿠버네티스
- 시작하세요 도커 & 쿠버네티스
- 동시성
- filewriter filereader
- java
- Today
- Total
쌩로그
소스코드에서 데이터 마이그레이션 대상 테이블 빨리 파악하기 본문
목차
- 포스팅 개요
- 본론
2-1. 프로젝트 배경
2-2. 나의 착각
2-3. 소스코드를 보지 않아도 되지만 본다는 것
2-4. 결론
2-5. 내가 했던 실수
2-6. MyBatis가 아닌 JPA라면 - 이번 일에 대한 생각
- 요약
1. 포스팅 개요
나는 현재 SI 회사에 몸담그고 있고, 한국의 모 대기업의 외주를 받아서 프로젝트를 진행하(고있)는데 주로 하는 일은 데이터 마이그레이션이다.
데이터 마이그레이션을 해야하는데, 어떤 테이블을 마이그레이션 해야하는지 파악하는 것은 순전히 우리 팀 몫이었다.
지금 한창 마이그레이션에 많은 시간과 일을 할애 중인데, 다음엔 어떻게 더 빨리 파악할 수 있을까 생각한 것을 정리하고자 해당 포스팅을 작성한다.
2. 본론
2-1. 프로젝트 배경
일단은 현재 프로젝트는 MSA 구조다.
서버가 각 역할에 맞게 나눠져있다는 것이며, 서버마다 각 도메인 역할에 맞는 DB를 사용한다는 것이다.
2-2. 나의 착각
데이터 마이그레이션 대상 테이블을 파악하기위해선 굳이 소스코드를 보지 않아도 된다.
일단은 서버마다 DB를 호출하고, 나는 소스코드에 더욱 친숙하기때문에, 굳이 그럴 필요가 없었음에도 불구하고 굳이 소스코드를 들여다보았다.
뭔가 학습하는 느낌으로 봤던 거 같은데, 일과 학습은 다르다.
일은 일이고, 학습은 학습인데, 미처 그걸 깨닫지 못 했던 시기였던 것 같다.
(혹은 지금도 깨달아가는 과정일 수도 있다.)
근데 만약 처음부터 어떤 테이블을 마이그레이션하는지 파악해라고 한다면 나는 과감하게 소스코드를 보지 않을 것이다.
근데 보긴해야한다.
보지 않겠다면서 보는 것은 무슨 의미인지 아래에서 설명한다.
2-3. 소스코드를 보지 않아도 되지만 본다는 것
각 마이크로 서버는 데이터 접근시 myBatis를 사용한다.
각 서버는 스프링과 자바에 레이어드 아키턱쳐로 구성되었다.
레이어드 아키텍처가 거기서 거기(순전히 내 생각)이듯이
컨트롤러 - 서비스 - 매퍼 - 다오(크레이지 아케이드 다오말고 DAO, 데이터 엑세스 오가.. 오브젝트였지 아마도 어차피 매핑되서 들어오니께) 구조다.
여하튼 서비스 코드에서 매퍼를 호출하는 곳을 보고,
그 매퍼에서 어떤 SQL 을 실행하는지 보면서 FROM 절만 잘 확인하면 된다.
그래서 소스코드를 보지 않아도 되지만 봐야한다고 했던 것이다.
2-4. 결론
서비스 코드에서 매퍼를 호출하면서 어떤 SQL을 사용하는지 확인하고. 해당 SQL의 FROM절에 테이블을 보면 된다는 것이다.
(아마 특정 스키마가 나눠져있다면 스키마도 파악할 수 있을 것이다)
2-5. 내가 했던 실수
1.위에 말한 것처럼 소스코드를 굳이 들여다본 것도 있었고,
2.어떤 테이블들에서 데이터를 가져오는지 보라고 했을 때 SQL문을 일일이 다 읽으면서 WHERE 절 조건까지 바보같이 다 보고 있었다..
ㅋㅋㅋㅋㅋㅋㅋ
물론 첫 실무 프젝이기도 했고, 시간이 많다면 다 들여다보는 것도 좋았겠지만 SQL 100줄이 넘는게 한 두개도 아니고, 500줄짜리 몇 백개를 다 파악하라면... SQL 로직을 정리해도 정리한 거 찾는 것도 비용이다...
여하튼 결론은 FROM 절만 보면 된다.
그럼 시간을 훨씬 줄일 수 있다.
데이터를 걸러내는 건 추후 일이고, 마이그레이션은 되도록 데이터를 보존하면서 진행하기 때문에 거르는 경우가 거의 없다고 들었다.
2-6. MyBatis가 아닌 JPA라면?
만약 JPA에 인텔리제이를 사용한다면
컨트롤 쉬프트 F 를 누르고, 먼저는 @Table을 없다? @Entity 를 검색해서 찾을 것이다.
QueryDSL이라면?
역시 컨트롤 쉬프트 F 를 누르고 'from('으로 찾을 것이다.
3. 이번 일에 대한 생각
이번 일을 하면서 그래도 일에 대한 태도, 일에 대한 효율을 찾아가는 과정을 습득하긴 한 것 같다.
근데 그럼에도 불구하고 난 코딩하고 싶다..(기승전 코딩하고 싶다)
왜냐하면 태도, 일에 대한 효율을 찾아가는 과정은 코딩하면서도 충분히 얻을 수 있는 것들이라고 생각하기 때문이다.
그러나 적당하게 배운 것도 있고, 일에 대한 태도, 책임감, 조금 더 챙겨보고 확인하는 꼼꼼함 등 분명히 성장한 것은 있다...
첨에 n명으로 시작했다가 혼자 남게된 프로젝트..
3개월 한다고 했다가 1년이 넘은 프로젝트...
후딱 털고 싶다...
나는 취업한지 이제 1년 6개월이 되었다.
이 프로젝트 시작할 때 막 OJT를 끝낸 신입이었는데,
신입인데 프로젝트에 어쩌다 나를 혼자 남기게 된 것도 내부적으로 이유가 있긴하지만, 내가 생각한 것보다 회사가 나를 높이 평가하고 있기 때문에라고 생각한다.
이렇게 생각하면 감사하긴하다..
여튼 얼른 잘 마무리하고 싶다..
4. 요약
- 일은 일이다. 학습이 아니다.
- 최대한 빠르게, 효율적으로 해야한다.
- 데이터 마이그레이션 대상을 찾으려면 FROM 절만 찾고 보면 된다.
P.S
10일간 쉬지도 못해서 뭔가 쓰고 싶어서 끄적여봤뜨아.
'생각 정리' 카테고리의 다른 글
레거시 코드를 마주하면서 든 생각 (1) | 2025.06.30 |
---|---|
말이 (2) | 2025.06.20 |
의도치 않게 (1) | 2025.06.02 |
나도 효율을 찾는 사람입니다. (3) | 2025.03.24 |
코딩에 대한 나의 원칙 세우기 : crud 메서드 naming (0) | 2025.03.13 |