본문 바로가기

전체 글

[SQL] select문 실행 시 뷰 컬럼 길이 관련 오류 1. 문제2026-08-19 15:50:20,237 ERROR [jdbc.audit] (default task-2496) 219. PreparedStatement.execute() SELECT distinct A.PROGRAM_CD , B.PROGRAM_NM FROM CRM_PR_QUSTNRINFO A , vw_gportal_TP_PROGRAM_M B WHERE A.PROGRAM_CD = B.PROGRAM_CD and A.PROGRAM_CD in (select PROGRAM_CD from CRM_PR_QUSTNRINFO where QUSTNR_BGNDE::date >= '20250201'::date AND QUSTNR_BGNDE::date -> 쿼리 실행 시 데이터 길이 .. 더보기
[javascript] 컨트롤러로 파라미터를 중복 요청하는 문제 1. 문제ERROR: operator does not exist: character varying = character varying[] Hint: No operator matches the given name and argument types. You might need to add explicit type casts. 에러 발생 -> PostgreSQL에서 문자열(varchar)과 문자열 배열(varchar[])을 =로 비교하려고 해서 발생 2. 원인 select 쿼리 로그를 보니A.LEC_TYPE = [Ljava.lang.String;@38349f14and A.LEC_CATEGORY = [Ljava.lang.String;@5a1c01db-> [Ljava.lang.String;@38349f14는 .. 더보기
[javascript] "오늘 하루 보지 않기" 쿠키가 24시간 유지되는 문제 이슈팝업의 "오늘 하루 보지 않기" 기능을 구현했는데, 쿠키가 오늘 자정까지 유지되는 것이 아니라 24시간 동안 유지되는 문제가 발생했다.원인다음과 같이 작성하면function fn_setCookie() { var expire = new Date(); expire.setDate(expire.getDate() + 1); document.cookie = "noticeModal=Y; path=/; expires=" + expire.toUTCString();}setDate(expire.getDate() + 1)은 현재 시간을 그대로 유지한 채 날짜만 하루 증가시킨다.예를 들어 현재 시간이2026-07-01 14:30이라면 만료 시간은2026-07-02 14:30이 된다.최종적으로 생.. 더보기
NoClassDefFoundError: ServiceImpl$1 발생 원인과 해결 이슈java.lang.NoClassDefFoundError: com.example.service.impl.MemberServiceImpl$1원인$1은 개발자가 직접 만든 클래스가 아니라 Java 컴파일러(javac)가 자동으로 생성하는 클래스입니다.대표적으로 익명 내부 클래스(Anonymous Inner Class) 를 사용할 때 생성됩니다.예를 들어 Gson의 TypeToken을 사용할 때 다음과 같이 작성하는 경우입니다.Type type = new TypeToken>() {}.getType();여기서 중요한 부분은new TypeToken>() {}입니다.뒤에 붙은 {} 때문에 익명 내부 클래스가 생성됩니다.컴파일이 완료되면 실제로는 다음과 같은 클래스 파일이 생성됩니다.MemberServiceImpl.. 더보기
SQL Injection 취약점 개선 📌 SQL Injection 취약점 개선 외 조치 정리 (보안 개선 사례)1. SQL Injection 취약점 개선🔴 문제MyBatis에서 ${} 사용으로 사용자 입력이 SQL에 직접 삽입됨AND B.MBER_NM LIKE '%${searchKeyword}%'AND B.HNF_NO_TMP IN (${hnfNoTmp}) 🟢 개선#{} 바인딩으로 PreparedStatement 적용IN 절은 로 안전하게 처리AND B.MBER_NM LIKE CONCAT('%', #{searchKeyword}, '%')AND B.HNF_NO_TMP IN #{item} 💡 핵심 포인트${} → 문자열 치환 (취약)#{} → 바인드 변수 (안전)2. LIKE / REGEXP 검색 시 보안 처리🔴 문제와일드카드 및 정규식.. 더보기
JSP + JavaScript 환경에서 XSS 방어 실패 원인과 해결 📌 JSP + JavaScript 환경에서 XSS 방어 실패 원인과 해결1. 문제 상황JSP에서 ${ajaxId} 값을 JavaScript 및 HTML에 전달 및 hidden input 사용했음에도 XSS 방어 실패예:ajaxId: '' 2. 원인 분석🔥 (1) 컨텍스트 불일치 (핵심 원인)은 HTML escape만 수행하지만 아래는 JavaScript 문자열 컨텍스트'${ajaxId}' 👉 HTML escape ≠ JavaScript escape→ XSS 방어 실패🔥 (2) EL 직접 출력 (${ajaxId}) EL은 escape 없음악성 값 삽입 시 그대로 DOM에 반영🔥 (3) 서버 측 검증 부재ajaxId에 대한 제한 없음예:"> 👉 escape 이전에 입력 자체를 신뢰하면 안 됨3... 더보기
모달 팝업 내 동적 테이블 UI 정렬 문제 해결 📌 모달 팝업 내 동적 테이블 UI 정렬 문제 해결1. 문제 상황 (Problem)모달 팝업 내부에서 div 기반 테이블 UI 구현.div_th (헤더 영역) 높이가 서로 달라 UI가 깨짐.div_td 내용 길이에 따라 줄바꿈이 비정상적으로 동작 이름 종류 2. 원인 분석 (Root Cause)🔹 1) 높이 불일치각 .div_th는 콘텐츠 길이에 따라 height가 자동 결정됨동일 row 내에서도 높이가 다르게 렌더링됨🔹 2) 높이 측정 실패 (0 문제)팝업이 display: none 상태에서 실행offsetHeight = 0 발생🔹 3) 줄바꿈 문제긴 텍스트 또는 공백 없는 문자열 → overflow 발생기본 CSS로는 강제 줄바꿈이 .. 더보기
엑셀 다운로드 버튼 클릭 후 다른 버튼 동작 이상 문제 해결 📌 엑셀 다운로드 버튼 클릭 후 다른 버튼 동작 이상 문제 해결🧩 문제 상황동일한 을 사용하는 화면에서키워드 검색지역 조회엑셀 다운로드총 3개의 버튼 존재엑셀 다운로드 버튼 클릭 이후→ 다른 조회 버튼 클릭 시에도 엑셀 다운로드가 실행되는 문제 발생🔍 원인 분석엑셀 다운로드 시 아래 코드로 form.action을 변경form.action = "/welfare/listWelExcavateExcel.do";form.submit();문제는:한 번 변경된 form.action이 유지됨이후 다른 버튼 클릭 시에도 동일한 action으로 submit됨👉 즉, form 상태 오염(side effect) 발생💡 해결 전략❌ 기존 방식 (문제 발생 구조)하나의 form을 모든 버튼이 공유특정 버튼에서 form .. 더보기