오래된 어르신 시스템을 구조개선 준비 중이다. 예전에는 비즈니스 로직 대부분을 PL/SQL로 했는지, 자바단에는 비즈니스 로직이 거의 없는 상황이다. PL/SQL을 Java로 자동 변환을 해주는 Converting Tool이 있지 않을까? 하는 마음에 찾아서 테스트를 해보았다. (사람은 게으르다.)
솔루션 벤더사의 트릭에 속은 느낌이다. 대부분 업체들은 “PL/SQL Convert to Java” 문장으로 마케팅을 하고 있었다. 하지만, 지금 시점에 일반 Java만 사용하는 곳이 없기 때문에 일반 Java로 마이그레이션을 할 필요가 없는 것이었다. ORM으로의 마이그레이션 필요한 것이었다.
왜 PL/SQL을 마이그레이션 하려고 하는지 다시 한번 생각해봤다.
- 비즈니스 로직이 복잡하기에 PL/SQL로는 유지 관리가 어렵다.
- 시스템이 취약해진다. 한 곳에서 변경하면 다른 곳에 영향을 줄 수 있다.
- 새로 투입된 개발자가 제 몫을 하려면 많은 시간이 필요하다. (지금 시장에서 PL/SQL 개발자가 많을까?)
- 새로운 기능 개발 및 제공이 느릴 수 있다.
- 확장에 자유롭지 못하다.
- DB는 매우 비싼 리소스이다.
PL/SQL을 Java로 자동 변환을 해준다는 솔루션에는 아래의 진실이 숨겨져 있다.
- Java Syntax를 따르지만 Framework를 사용하지 않는다.
- Java는 객체 지향 언어인 반면에 PL/SQL은 절차적 언어이다. 변환 도구는 도메인을 효과적으로 유추하고 해당 비즈니스 논리 코드를 도메인 엔티티에 연결할 수 없다.
- 생성된 코드는 아키텍처 패턴을 따르지 않는다.
- 생성된 코드는 PL/SQL보다 100~1000배는 느리게 작동한다. PL/SQL은 DBMS 내부에서 동작을 했지만 Java 코드는 애플리케이션에서 실행되고 SQL 요청을 통해 DBMS와 통신을 하는 구조다. 루프일 경우에 성능차이가 많이 발생하기에 DB 스키마 리팩토링이 필요할 수 있다.
사람이 직접 마이그레이션을 해야 위의 문제가 해결될 것 같다. 일반 Java로 변환된 코드가 사람이 작업하기에 도움이 될 것이라 생각했지만, 매우 낮은 품질의 코드가 생성되기에 현실은 더 높은 비용을 수반할 것으로 판단된다.
결국, 사람이다!