공공부하자개발 · 영어 학습 노트
자바
실무 확장Excel · 파일 업로드 · DB 연동0/22 완료
  • 01Excel(XLSX) 구조와 순수 JDK로 읽기/쓰기
  • 02Apache POI로 Excel 업로드/다운로드
  • 03파일 업로드/다운로드 서버 (HttpServer)
  • 04JDBC 기초와 트랜잭션 (H2)
  • 05MyBatis 어노테이션 매퍼로 쿼리 연동
  • 06MyBatis XML 매퍼 · Oracle 방언 · PageHelper · Spring Boot
  • 07REST API 서버와 JSON
  • 08Vue 3 SPA 와 Java 서버 연동
  • 09@Scheduled 운영
  • 10로깅 실무: 레벨·계층, MDC 추적, 예외·성능, 마스킹, 롤링, JSON 로그
  • 11외부 API 연동
  • 12테스트 실무
  • 13암호화·개인정보 보호
  • 14인코딩·한글 실무
  • 15@Transactional 심화
  • 16긴 작업 비동기 처리와 진행률
  • 17SFTP·FTP 파일 연계
  • 18로컬 캐시와 @Cacheable
  • 19메일·알림 발송
  • 20웹 보안 체크리스트
  • 21빌드 도구와 폐쇄망 의존성 반입
  • 22성능 측정: p50·p95·p99, 측정 계층, JFR, JMH 함정, 자체 부하 테스트, 병목 순위
사이트 소개개인정보처리방침연락처
© 2026 공부하자
홈 › 실무 확장 › 20 / 22

웹 보안 체크리스트

XSS·CSRF·SQL 인젝션·경로 탐색·업로드·IDOR·보안 헤더·의존성 취약점
섹션 7진행 0 / 22
1왜 배우는가2핵심 원리3코드 예제4응용 변형 예제5자주 하는 실수 (Tip)6연습 문제7정리‹ 이전다음 ›

4. 응용 변형 예제

4.1 MyBatis #{} 와 ${} 차이

값은 바인드 파라미터, 정렬 컬럼만 화이트리스트를 거쳐 문자열 치환합니다.

xml
<select id="findOrders" resultType="Order">
  SELECT * FROM orders
  WHERE owner_id = #{loginId}
  ORDER BY ${sortColumn}
</select>
java
// 매퍼 호출 전 컨트롤러·서비스에서 반드시 검증
if (!Guard.isAllowedSort(sortColumn)) {
    throw new IllegalArgumentException("허용되지 않은 정렬 컬럼");
}

4.2 @RestControllerAdvice 로 에러 노출 차단

예외 원문은 로그에만, 응답에는 코드와 메시지만 내려줍니다.

java
@RestControllerAdvice
class ApiExceptionHandler {
    @ExceptionHandler(Exception.class)
    ResponseEntity<ApiError> handle(Exception e) {
        log.error("처리 실패", e); // 스택트레이스는 로그에만
        return ResponseEntity.status(500)
                .body(new ApiError("INTERNAL_ERROR", "처리 중 오류가 발생했습니다"));
    }
}

4.3 로그인 실패 카운트로 레이트 리밋 흉내

18 레슨 Cache 를 재사용해 계정별 실패 횟수를 셉니다.

java
Cache<String, Integer> failCount = new Cache<>(Duration.ofMinutes(10), 10_000);

int count = failCount.get(loginId).orElse(0);
if (count >= 5) {
    throw new LockedException("잠시 후 다시 시도하세요");
}
failCount.put(loginId, count + 1, Duration.ofMinutes(10));
응용 변형 예제
  • 4.1 MyBatis #{} 와 ${} 차이
  • 4.2 @RestControllerAdvice 로 에러 노출 차단
  • 4.3 로그인 실패 카운트로 레이트 리밋 흉내
이전 섹션3 코드 예제4 / 7다음 섹션5 자주 하는 실수 (Tip)