시스템 담당자로 웹 로그 확인중에 에러가 발생한걸 확인했다
java.sql.SQLException: Error: excuteQueryForObject returned too many results.
쿼리 결과를 하나만 기대했는데 여러행이 나와서 터진 에러였고
원인은 필수 파라미터 누락이였다.
시스템 범용적으로 적용할 수 있는 방법으로
@RequiredParam 커스텀 어노테이션 및 HandlerInterceptor를 활용하여 요청이 오면 필수파라미터 여부를 검증할 수 있도록 설계했다.
public class RequiredParamInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response,
Object handler) throws Exception {
// Spring Legacy는 handler가 컨트롤러 인스턴스로 넘어옴
// URL로 실제 메서드를 찾아서 어노테이션 확인
String requestURI = request.getRequestURI();
Method[] methods = handler.getClass().getMethods();
for (Method method : methods) {
RequestMapping requestMapping = method.getAnnotation(RequestMapping.class);
if (requestMapping != null) {
for (String value : requestMapping.value()) {
if (requestURI.contains(value)) {
RequiredParams annotation = method.getAnnotation(RequiredParams.class);
if (annotation == null) return true;
for (String param : annotation.value()) {
String paramValue = request.getParameter(param);
if (paramValue == null || paramValue.trim().isEmpty()) {
response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
response.setContentType("application/json;charset=UTF-8");
response.getWriter().write(
"{\"result\":\"FAIL\", \"message\":\"필수 파라미터 누락: " + param + "\"}"
);
return false;
}
}
return true;
}
}
}
}
return true;
}
}
@Target(ElmentType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @Interface RequiredParams {
String[] value();
}
@RequiredParams({"ntt_id"})
@RequestMapping("/view.do")
public String view( @ModelAttribute("searchVO") BoardVO boardVO,
ModelMap model) throws Exception {
}
이렇게 적용하고, 필수파라미터 없이 해당 컨트롤러 요청시
Exception 에러가 아닌 URL과 필수파라미터 정보를 로그로 확인할 수 있다.
( 이미 알겠지만 해당 인터셉터를 로그 설정 파일에서 설정해야한다)
2026/04/28 13:11:43,342 [INFO] [com.cmm.interceptor.RequiredParamInterceptor] [http-nio-8080-exec-7] -
필수 파라미터 누락 URL : url 정보, 파라미터 : ntt_id
일단 포스팅 알맹이는 이렇다. 정보공유 및 기록의 목적도 있지만 한풀이 목적도 있다.
PM님께서 시스템 범용적으로 필수파라미터 누락 대응을 위한 방법을 찾아보라하셨고, 위의 내용을 PPT로 작성해서 보고드렸는데 아무런 피드백이 없으셨다. 그리고 좀 뒤에 동료와 나를 부른 후 스프링벨리데이션을 활용해서 필수파라미터 누락에 대응하는 방법을 찾아서 보고하라하셨다.
보고드린 방식에는 일언반구도 없으시고 이 방법은 해당하지 않는지 궁금해서 보고드린 방식은 해당이 안되는지 여쭤보았는데, ppt 열어보시더니 '이렇게 해도 상관은 없죠, oo주임(나)은 다른 방법 필요없으신 것 같은데 그럼 알아보지 마세요' 이런식으로 피드백이 돌아왔다.
그리고 같이 부른 동료에게 'oo씨만 스프링벨리데이션으로 적용하는 방법 찾아서 보고하세요' 이러길래 ???? 물음표만 띄우고 기분만 상한채 자리로 돌아왔다.

그냥 여기에서라도 알아달라고 포스팅을 해본다...
이런식의 억울하고 속상한 일이 한두번이 아니였지만
이 사건 이후로 열심히 잘하고 싶은 생각도 안들고, 상기할 수록
나만 힘든걸 알지만 며칠 내도록 속상해서 일상이 힘든 요즘이다.

직급도 낮고 부하직원이지만 나도 직장동료인데,
본인의 권위와 말이 가장 중요한 사람 밑에서 그냥 밟히는 것 같다.
존중해서 그랬다면서 먼저 잘못했다고 말하는 것부터 문제가 있는데요?
돌려말하는 것도 그렇고 PM 분이 사람을 대하는 말투 태도가 분명 잘못되신 듯..