8.1 KiB
Round 1
- 시간: 2026. 3. 27. 오후 10:27:38
backend (성공)
에이전트 응답
두 파일을 생성했습니다.
**생성된 파일:**
1. **`config/MyBatisConfig.java`** — `SqlSessionFactory`를 받아 `SqlSessionTemplate` 빈 등록
2. **`common/BaseService.java`** — `@Autowired`로 `SqlSessionTemplate` 주입, `abstract class`로 상속 전용
**사용 방법:**
```java
// Service에서 BaseService를 상속하면 sqlSession 사용 가능
public class AdminService extends BaseService {
public List<Map<String, Object>> getMenuList(Map<String, Object> params) {
return sqlSession.selectList("admin.getMenuList", params);
}
}
mybatis-spring-boot-starter가 이미 build.gradle에 포함되어 있어 추가 의존성은 불필요합니다.
## backend (성공)
### 에이전트 응답
완료했습니다.
변경 내용:
-
application.yml—spring.jackson섹션 추가:generator.write-numbers-as-strings: true— 모든 숫자를 JSON 문자열로 직렬화default-property-inclusion: always— null 값도 키 포함
-
JacksonConfig.java신규 생성 —Map<String, Object>에application.yml설정이 적용 안 될 경우를 대비해ObjectMapperBean을 직접 등록:JsonInclude.Include.ALWAYS: null 포함WRITE_NUMBERS_AS_STRINGS: 숫자 → 문자열 직렬화
## backend (성공)
### 에이전트 응답
검증 완료입니다.
결과 요약:
| 항목 | 결과 |
|---|---|
| OLD 패턴 남은 개수 | 0 (없음) |
| NEW 패턴 변환 완료 | 73건 / 16개 파일 |
| 완료 기준 | 충족 |
모든 Mapper XML의 test="" 속성 내 작은따옴표 문자열 비교가 이미 큰따옴표로 변환되어 있습니다.
변환 패턴:
- 변경 전:
<if test="companyCode != null and companyCode != '*'"> - 변경 후:
<if test='companyCode != null and companyCode != "*"'>
SQL 본문의 != '*' (OGNL이 아닌 SQL 조건)은 올바르게 유지되었습니다.
## frontend (성공)
### 에이전트 응답
완료했습니다. 변경 내용 요약:
MenuContext.tsx (convertMenuData 함수):
item.OBJID || item.objid→item.OBJID ?? item.objiditem.PARENT_OBJ_ID || item.parent_obj_id→item.PARENT_OBJ_ID ?? item.parent_obj_iditem.SEQ || item.seq→item.SEQ ?? item.seqitem.LEV || item.lev→item.LEV ?? item.lev
AppLayout.tsx (convertMenuToUI, convertSingleMenu 함수):
menu.parent_obj_id || menu.PARENT_OBJ_ID→menu.parent_obj_id ?? menu.PARENT_OBJ_IDmenu.status || menu.STATUS→menu.status ?? menu.STATUSa.seq || a.SEQ || 0→a.seq ?? a.SEQ ?? 0(정렬 로직)menu.objid || menu.OBJID(2곳) →menu.objid ?? menu.OBJID
숫자 필드(objid, seq, lev, parent_obj_id)에만 ?? 적용, 문자열 필드(menu_name_kor, menu_url 등)는 || 유지했습니다.
## backend (성공)
### 에이전트 응답
완료했습니다.
변경 내용 요약:
JwtTokenProvider.java
generateToken(Map<String, Object> personBean)— Node.js와 동일한 페이로드 구조userId,userName,deptName,companyCode,companyName,userType,userTypeName클레임audience("PMS-Users"),issuer("PMS-System")추가sub클레임 제거 (Node는 subject 미사용)
getUserId()→userId클레임에서 추출getRole()제거 →getUserType()으로 대체 (userType클레임 추출)
JwtAuthenticationFilter.java
claims.getSubject()→claims.get("userId", ...)claims.get("role", ...)→claims.get("userType", ...)request.setAttribute("role", userType)유지 (기존 컨트롤러@RequestAttribute("role")호환)request.setAttribute("userType", userType)추가
AuthService.java
- 로그인:
generateToken(userId, companyCode, userType)→generateToken(personBean Map)(7개 필드 포함) refreshToken: 기존 클레임 전체를 Map으로 복사 후 재발급switchCompany: 기존 클레임 보존 + companyCode만 교체getUserInfo,checkAuthStatus:claims.getSubject()→claims.get("userId", ...),claims.get("role", ...)→claims.get("userType", ...)
## frontend (성공)
### 에이전트 응답
모두 주석(//)으로 된 줄만 남아 있습니다. 완료 기준이 충족되었습니다.
변경 요약:
| 파일 | 변경된 위치 |
|---|---|
MenuTable.tsx |
objid, lev, seq, menu_type, parent_obj_id 참조 9곳 |
MenuFormModal.tsx |
menu_type, objid, parent_obj_id, seq 4곳 |
ScreenAssignmentTab.tsx |
objid (3곳), lev 1곳 — menuObjid, lev 포함 |
MenuAssignmentModal.tsx |
objid, parent_obj_id 3곳 |
DashboardSaveModal.tsx |
objid, lev 2곳 |
?? (nullish coalescing)으로 변경하여 0이나 빈 문자열 같은 falsy 값이 잘못 무시되는 버그를 방지했습니다.
## frontend (성공)
### 에이전트 응답
완료됐습니다. 변경 내역 요약:
변경 완료:
| 파일 | 변경 내용 |
|---|---|
components/screen/MenuAssignmentModal.tsx |
normalizeMenu 내 11개 필드 || → ?? |
components/report/designer/MenuSelectModal.tsx |
menuTree useMemo + fetchMenus 내 7개 || → ?? |
components/v2/config-panels/V2InputConfigPanel.tsx |
inputType, menuType/level, menu_name_kor 체인, componentType 체인, tblName/label, selectedTableName, selectedMenuObjid 등 || → ?? |
app/(main)/admin/screenMng/dashboardList/[id]/page.tsx |
dataSources 코얼레싱 + 메뉴 updateData 8개 필드 || → ?? |
app/(main)/admin/menu/page.tsx |
convertMenuData 15개 필드, handleEditMenu 2개, handleSelectAllMenus, getCurrentMenus 검색/필터, loadCompanies, find() 조건 등 || → ?? |
## 코드 변경 (git diff)
git diff 캡처 실패: spawnSync /bin/sh ENOBUFS
## 검증 결과
### L1 [PASS]: L1 통과: cd backend-spring && ./gradlew compileJava 2>&1 | tail -20
L1 통과: cd backend-spring && ./gradlew compileJava 2>&1 | tail -20
### L2 [PASS]: L2 통과: cd /Users/gbpark/TEST-VEX/backend-spring && ./gradlew bootJa
L2 통과: cd /Users/gbpark/TEST-VEX/backend-spring && ./gradlew bootJa
### L1 [PASS]: L1 통과: cd backend-spring && ./gradlew compileJava 2>&1 | tail -20
L1 통과: cd backend-spring && ./gradlew compileJava 2>&1 | tail -20
### L2 [PASS]: L2 통과: cd /Users/gbpark/TEST-VEX/backend-spring && ./gradlew bootJa
L2 통과: cd /Users/gbpark/TEST-VEX/backend-spring && ./gradlew bootJa
### L1 [PASS]: L1 통과: cd backend-spring && grep -r "test=\"[^\"]*!= '[^'][^\"]*\""
L1 통과: cd backend-spring && grep -r "test="[^"]!= '[^'][^"]""
### L2 [PASS]: L2 통과: cd /Users/gbpark/TEST-VEX/backend-spring && ./gradlew bootJa
L2 통과: cd /Users/gbpark/TEST-VEX/backend-spring && ./gradlew bootJa
### L1 [PASS]: L1 통과: cd backend-spring && ./gradlew compileJava 2>&1 | tail -20
L1 통과: cd backend-spring && ./gradlew compileJava 2>&1 | tail -20
### L2 [PASS]: L2 통과: cd /Users/gbpark/TEST-VEX/backend-spring && ./gradlew bootJa
L2 통과: cd /Users/gbpark/TEST-VEX/backend-spring && ./gradlew bootJa
### L1 [PASS]: L1 통과: cd frontend && npx tsc --noEmit 2>&1 | tail -20
L1 통과: cd frontend && npx tsc --noEmit 2>&1 | tail -20
### L2 [PASS]: L2 통과: cd /Users/gbpark/TEST-VEX/frontend && npx next build 2>&1 |
L2 통과: cd /Users/gbpark/TEST-VEX/frontend && npx next build 2>&1 |
### L1 [PASS]: L1 통과: cd frontend && npx tsc --noEmit 2>&1 | tail -20
L1 통과: cd frontend && npx tsc --noEmit 2>&1 | tail -20
### L2 [PASS]: L2 통과: cd /Users/gbpark/TEST-VEX/frontend && npx next build 2>&1 |
L2 통과: cd /Users/gbpark/TEST-VEX/frontend && npx next build 2>&1 |
### L1 [PASS]: L1 통과: cd frontend && npx tsc --noEmit 2>&1 | tail -20
L1 통과: cd frontend && npx tsc --noEmit 2>&1 | tail -20
### L2 [PASS]: L2 통과: cd /Users/gbpark/TEST-VEX/frontend && npx next build 2>&1 |
L2 통과: cd /Users/gbpark/TEST-VEX/frontend && npx next build 2>&1 |