⏳ Time Log/1. One Day (Daily · TIL)

Day 47 (12/23) - 개발 일지: Spring Security 보안 설정 및 SQL 심화

this.Serena 2026. 2. 23. 02:42

📅 2025-12-23 개발 일지: Spring Security 보안 설정 및 SQL 심화

핵심 요약: 스프링 시큐리티를 활용한 인증·인가 체계 구축 및 SQL 서브쿼리와 상관 서브쿼리를 활용한 데이터 추출 로직 정교화

 


🔐 Spring Security: 보안 프레임워크 구축 및 설정

1. 보안의 핵심 개념

  • 인증 (Authentication): 사용자가 누구인지 스스로 증명하는 과정 (로그인)
  • 인가 (Authorization): 인증된 사용자에게 특정 리소스에 대한 권한을 부여하는 과정
  • 인증 관리 체계: AuthenticationManagerAuthenticationProvider를 통한 체계적인 인증 처리 프로세스 수행

2. 환경 설정 및 주요 구성 요소

  • 의존성 추가 (pom.xml): Security Taglibs, Config, Web 라이브러리 연동
  • 필터 설정 (web.xml): 보안 필터 및 필터 매핑을 통한 요청 제어
  • SecurityConfig 설정:
    • @EnableWebSecurity 적용을 통한 보안 기능 활성화
    • BCryptPasswordEncoder: 비밀번호 암호화를 위한 단방향 해시 알고리즘 적용
    • formLogin(): 기본적인 폼 기반 로그인 인터페이스 활성화
  • CustomUserDetailsService: UserDetailsService 인터페이스 구현을 통해 사용자 정보를 빌드하고 인증 처리 로직 커스터마이징

3. 보안 정책 및 트러블슈팅

  • CSRF (Cross-Site Request Forgery): 사이트 간 요청 위조 방지 설정
  • POST 요청 제한: CSRF 설정 시 GET 방식은 문제없으나, POST 방식의 데이터 전송 시 토큰 검증 필요

🐬 SQL 실무: 조인(Join) 및 서브쿼리 심화

1. SQL 기본 구조 및 실행 순서

  • 조인(Join) 기본형: INNER JOIN 및 LEFT JOIN을 활용한 테이블 간 공통 컬럼 연결
  • 정렬(Order By): ASC(오름차순) 및 DESC(내림차순) 활용
  • DML 작업: INSERT, UPDATE, DELETE를 활용한 데이터 조작

2. 데이터 집계 및 조합 로직

  • COUNT + GROUP BY: 특정 그룹별 데이터 개수 산출
  • JOIN + GROUP BY: 테이블 조인 후 그룹화하여 통계 데이터 추출
    • 예: SELECT t1.ID, COUNT(*) FROM t1 LEFT JOIN t2 ON t1.ID = t2.ID GROUP BY t1.ID

3. 서브쿼리 활용 및 조건 필터링

  • IN / NOT IN: 특정 목록 포함 여부 확인
  • ANY / ALL: 서브쿼리 결과값의 최소값보다 큰지(ANY) 또는 최대값보다 큰지(ALL) 비교
  • EXISTS / NOT EXISTS: 서브쿼리 결과의 존재 여부에 따라 참/거짓 판별 (상관 서브쿼리 활용)
    • 특징: 한 줄이라도 결과가 있으면 TRUE를 반환하며, 성능 최적화에 유리

🗂️ 개발 메모 및 향후 로드맵

1. 인프라 및 빌드 환경

  • 빌드의 본질: 정확한 자원 참조를 위한 경로 지정 최적화 과정
  • 리눅스 및 도커: 우분투(Ubuntu) 환경 구축 및 컨테이너 기반 개발 환경 실습 예정
  • 클라우드: AWS 명령어 학습을 통한 클라우드 배포 역량 강화

2. 프레임워크 종료 및 전환

  • AOP (Aspect Oriented Programming): 관점 지향 프로그래밍 학습 후 스프링 프레임워크 과정 마무리 예정
  • 협업 도구: 깃(Git) 배포 시 발생하는 정적 자원 경로 문제 해결 및 형상 관리 고도화



🛡️ JSTL Core 태그 3대장: 보안과 편의의 핵심 도구

핵심 요약: 해킹 방지(보안), 경로 자동 완성(편의), 데이터 배달(정확)을 담당하는 JSP 전용 기능 모음


1. <c:out> : 철통 보안 가드

  • 개념: 데이터를 화면에 출력할 때 XSS(스크립트 해킹) 공격을 자동 차단하는 안전 출력 장치
  • 특징:
    • 이스케이프 처리: < 나 > 같은 기호를 문자로 변환하여 악성 스크립트 실행 방지
    • 기본값 설정: 출력할 데이터가 없을 경우 default 속성으로 대체 문구 표시 가능
  • 사용 예시:
<c:out value="${userInput}" default="내용 없음" />

2. <c:url> : 스마트 경로 내비게이션

  • 개념: 웹 애플리케이션의 **컨텍스트 패스(프로젝트 경로)**를 포함한 완성형 주소 생성기
  • 특징:
    • 유지보수 용이: 서버 경로가 바뀌어도 소스 코드 수정 없이 유연한 대응 가능
    • 자동 인코딩: URL 내 한글이나 특수문자가 깨지지 않도록 인코딩 처리 수행
  • 사용 예시:
<c:url value="/main.do" var="mainPath" />
<a href="${mainPath}">홈으로 이동</a>

3. <c:param> : 데이터 배달 파트너

  • 개념: URL 뒤에 붙는 쿼리 스트링(?id=123) 데이터를 안전하게 추가하는 보조 도구
  • 특징:
    • 종속적 사용: 단독 사용이 불가하며 반드시 <c:url>이나 <c:import> 태그 내부에 위치
    • 가독성 향상: 복잡한 기호(&, ?) 없이 깔끔한 코드로 파라미터 전달 가능
  • 사용 예시:
<c:url value="/list.jsp">
  <c:param name="id" value="admin" />
  <c:param name="page" value="1" />
</c:url>

🗂️ JSTL 태그 비교 및 핵심 요약

태그명 역할 핵심 가치

<c:out> 보안 출력 사용자 입력값 안전 노출
<c:url> 경로 생성 서버 환경 변화에 강한 유연성
<c:param> 변수 전달 URL 파라미터 자동 인코딩 및 전달

💡 실전 조합 예시

  • 시나리오: 특정 키워드로 검색된 결과 페이지 링크 생성
  • 구조: <c:url> 내부에 <c:param>을 넣어 완성된 주소를 만들고, 검색어 자체는 <c:out>으로 안전하게 표시
<a href="<c:url value='/search.jsp'><c:param name='q' value='${keyword}'/></c:url>">
  <c:out value="${keyword}" /> 결과 확인
</a>