CRUD 분석과 테이블 영향도 - Bottom-Up 분석의 힘
·
토스 러너스하이 2기/기술
"이 테이블 스키마 바꾸면 어떤 API가 영향받아?"실무에서 이런 질문을 받았다. 기존 Top-Down 분석(URL→SQL)으로는 답할 수 없었다. 테이블에서 코드를 역추적하는 Bottom-Up 분석을 구현한 이야기.3줄 요약Top-Down(URL→SQL)과 Bottom-Up(테이블→코드)은 상호보완적이다역방향 인덱싱(Map>)으로 O(1) 조회 가능하게 구현했다GUI에서 드릴다운 UX는 CardLayout + 브레드크럼 패턴으로 해결한다1. 들어가며기술 1편부터 지금까지 Top-Down 분석을 구현했다:Top-Down 분석:URL → Controller → Service → DAO → SQL"이 API는 어떤 테이블을 조회하나?"라는 질문에 완벽하게 답할 수 있었다.그런데 실무에서 반대 방향 질문을 받..
Gson으로 세션 영속성 구현하기 - 앱을 닫아도 분석 결과가 살아있다
·
토스 러너스하이 2기/기술
"분석 완료! 결과 확인! ...앱 종료. 다시 실행하면? 처음부터 다시?"그게 싫었다. 분석 결과를 저장해서 다시 열어도 그대로 보고 싶었다. Gson으로 세션 영속성을 구현하면서 배운 것들.3줄 요약Gson은 한 줄로 Java 객체를 JSON으로 변환하는 가벼운 라이브러리다LocalDateTime 같은 Java 8+ 타입은 TypeAdapter를 직접 구현해야 한다저장 방식을 통합하지 않으면 이중 저장이라는 기술 부채가 생긴다1. 들어가며이전 글에서 Swing GUI를 완성했다. 폴더 선택, 분석 실행, 결과 확인까지 깔끔하게 동작했다.그런데 하나 빠진 게 있었다.사용 시나리오:1. 앱 실행2. 프로젝트 폴더 선택3. 분석 실행 (30초 소요)4. 결과 확인5. 앱 종료6. 다음 날, 앱 다시 실행7..
jpackage로 배포하기 - 폐쇄망에서 Java 없이 실행하기
·
토스 러너스하이 2기/기술
"폐쇄망에서 이거 쓰려면 JDK 따로 구해서 환경변수 설정하고..."그 과정이 싫었다. 사용자들은 그냥 exe 하나로 끝내게 하고 싶었다. jpackage로 JRE를 통째로 번들링하면서 겪은 삽질들.3줄 요약jpackage는 JDK 14+에 내장된 배포 도구로, JRE 포함 설치파일을 만들 수 있다Windows exe 생성에는 WiX Toolset이 필요한데, JDK 21은 WiX 3.x만 지원한다인코딩 지옥을 피하려면 description은 영문으로, exe 실행 문제는 --arguments로 해결한다1. 들어가며이전 글에서 Swing GUI를 완성했다.FlatLaf로 다크 테마를 입히고, SwingWorker로 분석을 백그라운드에서 돌리고, 설정도 저장되게 만들었다.이제 남은 건 배포다.문제: 폐쇄망..
Swing으로 모던한 GUI 만들기 - CLI를 넘어서
·
토스 러너스하이 2기/기술
"명령어로 해야하는건 접근성이 좀 떨어지는데.. 비개발자도 쓸 수 있어야 하지 않을까?"Swing으로 GUI를 만들면서 FlatLaf, SwingWorker, JEditorPane을 처음 써봤다. 그 과정에서 배운 것들.3줄 요약FlatLaf 한 줄로 다크 테마: FlatDarculaLaf.setup() 한 줄로 IntelliJ 스타일 모던 UISwingWorker로 UI 블로킹 방지: 분석 작업을 백그라운드에서 실행하여 반응성 유지JEditorPane + HTML로 유연한 표현: 색상, 텍스트 선택, 복사 기능을 동시에 지원들어가며이전 글에서 분석 결과를 Excel로 정리하는 방법을 다뤘다.CLI와 Excel, 두 가지 출력 방식이 완성됐는데... 한 가지 고민이 생겼다. "명령어로 해야하는건 접근성이..
분석 결과를 Excel로 정리하기 - Apache POI 활용기
·
토스 러너스하이 2기/기술
분석은 됐는데, 산출물은 어떻게 만들지?산출물 작성할 때 참고할 수 있는 레퍼런스가 필요했다. Apache POI로 Excel을 생성하면서 배운 것들.3줄 요약Excel 출력은 "산출물 작성 시 복사/붙여넣기, 필터링으로 참고할 레퍼런스"다계층 구조(트리)는 Excel 필터링에 불편하다 → 평면 테이블로 변환파라미터는 Controller + SQL 합집합으로 표시하는 게 실용적이다1. 들어가며이전 글에서 CLI 출력을 구현했다. 터미널에서 분석 결과를 바로 확인할 수 있게 됐다.CLI만으로는 부족하다[GET] /api/user/list├── [Controller] UserController.getList()│ └── [Service] UserService.findAll()│ └── [DAO..
분석 결과를 어떻게 보여줄까? - CLI 출력 구현기
·
토스 러너스하이 2기/기술
분석은 됐는데, 결과를 어떻게 보여주지?GUI보다 CLI를 먼저 만든 이유, 그리고 박스 문자, ANSI 색상, Windows 인코딩과의 전쟁을 정리한다.3줄 요약콘솔 출력은 "터미널용 신택스 하이라이팅"이다. 트리 문자로 구조를, ANSI 색상으로 레이어를 구분한다Picocli로 CLI 옵션을 어노테이션 하나로 처리할 수 있다Windows 콘솔 인코딩 문제는 UTF-8 PrintStream + 배치 래퍼로 해결했다1. 들어가며이전 글에서 정적 분석의 한계를 다뤘다. 분석은 완성됐는데, 결과를 어떻게 보여줄까?분석은 됐는데, 결과를 어떻게 보여주지?지금까지 만든 것:JavaParser로 Java 코드 파싱재귀 탐색으로 호출 흐름 추적iBatis/MyBatis XML에서 SQL 추출분석 로직은 완성됐다. ..