목차

    불편함을 코드로 지웁니다.

    개발 공부 노트, 개발 도구와 문제를 해결한 과정, AI 프롬프트와 Obsidian 활용법을 정리합니다.

      ⏳ Time Log/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): 인증된 사용자에게 특정 리소스에 대한 권한을 부여하는 과정
      • 인증 관리 체계: AuthenticationManager와 AuthenticationProvider를 통한 체계적인 인증 처리 프로세스 수행

      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>