Skip to content

fix(sample): 등록 폼 maxlength 가 SAMPLE 테이블 컬럼폭을 넘는 문제 수정 - #52

Merged
jei007 merged 1 commit into
eGovFramework:mainfrom
wantaekchoi:fix/register-maxlength-exceeds-column-width
Sep 9, 2026
Merged

jei007 merged 1 commit into
eGovFramework:mainfrom
wantaekchoi:fix/register-maxlength-exceeds-column-width

Conversation

@wantaekchoi

Copy link
Copy Markdown
Contributor

수정 사유 Reason for modification

소스를 수정한 사유가 무엇인지 체크해 주세요. Please check the reason you modified the source. ([X] X는 대문자여야 합니다.)

  • 버그수정 Bug fixes
  • 기능개선 Enhancements
  • 기능추가 Adding features
  • 기타 Others

수정된 소스 내용 Modified source

검토자를 위해 수정된 소스 내용을 설명해 주세요. Please describe the modified source for reviewers.

문제

egovSampleRegister.jsp 의 name 과 regUser 가 SAMPLE 테이블 컬럼폭보다 큰 maxlength 를 내보냅니다.

CREATE MEMORY TABLE SAMPLE(ID VARCHAR(16) NOT NULL PRIMARY KEY,NAME VARCHAR(50),DESCRIPTION VARCHAR(200),USE_YN CHAR(1),REG_USER VARCHAR(10))
<form:input path="name" maxlength="60" cssClass="krds-input" placeholder="${placeholderName}" />
<form:input path="regUser" maxLength="60" cssClass="krds-input" placeholder="${placeholderUser}"/>

등록자에 11자를 넣으면 브라우저는 통과시키고 INSERT 에서 죽습니다.

### Cause: java.sql.SQLDataException: data exception: string data, right truncation ; size limit: 10 table: SAMPLE column: REG_USER

dispatcher-servlet.xml 이 DataAccessException 을 cmmn/dataAccessFailure 로 보내 화면은 Error Ocurred! 만 남고 입력이 사라집니다.

같은 폼의 형제 필드는 컬럼폭 안에 있습니다. description 은 maxlength="200" 으로 DESCRIPTION VARCHAR(200) 과 같고 id 는 maxlength="10" 으로 ID VARCHAR(16) 안에 듭니다.

fc0f784 이전에는 같은 폼이 name 을 maxlength="30", regUser 를 maxlength="10" 으로 두어 둘 다 컬럼폭 안이었습니다. 그 커밋이 DDL 은 그대로 둔 채 폼만 60 으로 올렸습니다.

SampleVO 에는 @EgovNullCheck 만 있어 서버가 길이를 보지 않고, 화면 검증 validateSampleVO 도 required 만 봅니다.

수정

두 필드의 maxlength 를 컬럼폭에 맞춥니다. regUser 는 등록과 수정 두 분기에 있어 세 줄입니다.

-<form:input path="name" maxlength="60" cssClass="krds-input" placeholder="${placeholderName}" />
+<form:input path="name" maxlength="50" cssClass="krds-input" placeholder="${placeholderName}" />
-<form:input path="regUser" maxLength="60" readonly="true" cssClass="krds-input" placeholder="${confirm.required.user}"/>
+<form:input path="regUser" maxLength="10" readonly="true" cssClass="krds-input" placeholder="${confirm.required.user}"/>
-<form:input path="regUser" maxLength="60" cssClass="krds-input" placeholder="${placeholderUser}"/>
+<form:input path="regUser" maxLength="10" cssClass="krds-input" placeholder="${placeholderUser}"/>

반대로 REG_USER 를 넓히는 선택도 있습니다. 7ba8fc9 가 DESCRIPTION 을 100 에서 200 으로 넓혀 폼과 맞춘 전례가 있습니다. 이번에는 폼이 뒤늦게 벌어진 쪽이라 폼을 되돌렸고, DDL 을 넓히는 편이 낫다고 보시면 바꾸겠습니다.

maxlength 는 브라우저에서만 막으므로 API 를 직접 호출하면 여전히 같은 예외가 납니다. 서버에서도 막으려면 SampleVO 에 @Size 를 더하는 방법이 있고, 화면 쪽은 EgovValidation.js 가 이미 갖고 있는 maxlength 규칙을 validateSampleVO 에 걸면 됩니다. 폼과 DDL 을 맞추는 것과는 별개 결정이라 이번에는 넣지 않았고, 함께 넣는 편이 낫다고 보시면 추가하겠습니다.

EgovSampleRegisterJspMaxLengthTest 를 함께 넣었습니다. sampledb.sql 에서 컬럼폭을 읽고 JSP 에서 maxlength 를 읽어 대조하는 테스트입니다. JSP 세 줄만 남기는 편을 선호하시면 빼겠습니다.

JUnit 테스트 JUnit tests

테스트를 완료하셨으면 다음 항목에 [대문자X]로 표시해 주세요. When you're done testing, check the following items.

  • JUnit 테스트 JUnit tests
  • 수동 테스트 Manual testing

pom.xml 의 surefire 설정이 <skipTests>true</skipTests> 이고 CI(.github/workflows/maven.yml)도 -Dmaven.test.skip=true 라 PR 체크에는 테스트가 나오지 않습니다. 아래는 skipTests 를 false 로 두고 mvn -Ptest test 로 돌린 결과입니다. EL 구현체 expressly 가 test 프로필에만 선언돼 있어 이 저장소의 컨텍스트 테스트가 그 프로필을 요구합니다.

수정 전

[ERROR]   EgovSampleRegisterJspMaxLengthTest.test:77 등록 폼의 maxlength 는 컬럼폭을 넘지 않아야 한다. [name maxlength=60 > NAME VARCHAR(50), regUser maxlength=60 > REG_USER VARCHAR(10), regUser maxlength=60 > REG_USER VARCHAR(10)] ==> expected: <true> but was: <false>

수정 후

[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.033 s -- in egovframework.example.sample.web.EgovSampleRegisterJspMaxLengthTest

전체 스위트는 같은 워크트리에서 이 수정만 토글해 대조했습니다. 수정 있음 Tests run: 10, Failures: 0, 수정 없음 Tests run: 10, Failures: 1 이고 그 1건이 위 테스트입니다.

테스트 브라우저 Test Browser

테스트를 진행한 브라우저를 선택해 주세요. Please select the browser(s) you ran the test on. (다중 선택 가능 you can select multiple) [X] X는 대문자여야 합니다.

  • Chrome
  • Firefox
  • Edge
  • Safari
  • Opera
  • Internet Explorer
  • 기타 Others

mvn package 로 만든 WAR 를 tomcat:10.1-jdk17-temurin 에 올리고 명령행 HTTP 클라이언트로 확인했습니다.

테스트 스크린샷 또는 캡처 영상 Test screenshots or captured video

테스트 전과 후의 스크린샷 또는 캡처 영상을 이곳에 첨부해 주세요. Please attach screenshots or video captures of your before and after tests here.

스크린샷 대신 POST /addSampleView.do 응답에서 뽑은 속성값을 옮깁니다.

                수정 전    수정 후
name            60         50
description     200        200
regUser         60         10

수정 전 상태에서 등록자에 11자를 넣고 POST /addSample.do 하면 위 예외와 함께 Error 화면이 나오고, 8자는 302 로 정상 등록됩니다.

SAMPLE 테이블은 NAME 을 VARCHAR(50), REG_USER 를 VARCHAR(10) 으로 두는데
등록 폼은 두 필드에 maxlength 60 을 내보낸다. 브라우저가 통과시킨 입력이
INSERT 에서 data exception: string data, right truncation 으로 죽고
화면은 오류 페이지가 되어 입력이 사라진다.

같은 폼의 description 은 maxlength 200 으로 DESCRIPTION VARCHAR(200) 과 맞고
id 는 maxlength 10 으로 ID VARCHAR(16) 안에 든다.

폼 maxlength 와 DDL 컬럼폭을 대조하는 테스트를 함께 넣는다.

@jei007 jei007 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

표준프레임워크에 대한 지속적인 참여에
대단히 감사드립니다.

@jei007
jei007 merged commit 2844398 into eGovFramework:main Sep 9, 2026
1 check passed
@wantaekchoi
wantaekchoi deleted the fix/register-maxlength-exceeds-column-width branch September 9, 2026 08:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants