본문 바로가기

전체 글

(470)
[Spring Boot] 영속성 컨텍스트(Persistence Context) 영속성 컨텍스트란?JPA 에서 엔티티(Entity)를 저장하고 관리하는 메모리 상의 저장소이며일반적으로 EntityManager가 생성될 때 함께 생성되고 EntityManager가 종료되면 함께 사라집니다. EntityManager란?JPA의 핵심 객체로 DB와의 모든 상호작용을 담당하는 객체로써 영속성 컨텍스트도 EntityManager 내부에 존재하며 CRUD 등의 작업은 모두 EntityManager를 통해 이루어집니다. 영속성 컨텍스트 상태에 따른 엔티티 생명 주기비영속성(Transient) : 아직 영속성 컨텍스트에 저장되지 않은 상태(new로 만든 객체 등)영속(Persistent) : 영속성 컨텍스트에 저장된 상태(em.persist() 호출 등)준영속(Detached) : 영속성 컨텍스..
[트러블 슈팅] SSE(Server-Send-Events) 문제 현상프론트엔드에서 SSE(Server-Sent Events) 연결을 시도하면 연결은 성공하지만, 즉시 연결이 끊어지는 현상이 발생 원인 분석SSE는 HTTP의 Transfer-Encoding: chunked 방식을 사용해 지속적인 연결을 유지하는 것이 핵심그러나 서버 로그 필터에서 사용하는 ContentCachingResponseWrapper가 copyBodyToResponse() 호출 시 자동으로 Content-Length 헤더를 추가이로 인해 Transfer-Encoding과 Content-Length가 동시에 존재하게 되어 브라우저는 응답이 끝났다고 판단하고 연결을 끊음 ※ 알아야 할 개념 : HTTP 응답의 데이터 전송 방식서버가 클라이언트에게 응답을 줄 때 2가지 방식 중 하나를 선택 1..
[Spring Boot] QR Code 발급하기 QR 코드 특징어떤 방향으로 스캔을 하여도 인식이 가능합니다최대 숫자 7089자, 문자 4296자에 해당하는 정보 저장이 가능합니다암호화, 위변조 방지 등 보안 기능이 존재합니다수정, 삭제가 불가능합니다. 바코드와 QR Code 차이점 바코드QR 코드정보 저장최대 20자최대 숫자 7089, 문자 4296스캔수평 방향으로 인식어떤 방향으로 스캔해도 인식 가능단점정보 저장량, 인식률수정, 삭제 불가능 의존성implementation group: 'com.google.zxing', name: 'javase', version: '3.5.0'implementation group: 'com.google.zxing', name: 'core', version: '3.5.0' 간단한 예제application.prope..
[Java] LocalDateTime 정리 LocalDateTime이란?자바에서 날짜와 시간을 함께 표현하기 위해 사용하는 클래스입니다. LocalDateTime 특징날짜(년, 월, 일), 시간(시, 분, 초, 나노초)을 포함하지만 시간대(TimeZone)을 포함하지 않습니다.즉 정리하자면 LocalDateTime은 시간대를 포함하지 않기 때문에, 현재 실행 중인 시스템의 로컬 시간 기준으로 동작합니다.※ 만약 시간대를 한국이 아닌 다른 시간대로 하고 싶다면 LocalDateTime.now(ZoneId.of("Asia/Seoul")); 으로 작성하시면 됩니다. 출력 형태2025-05-09T14:30:00 주요 메서드 및 사용법// 현재 날짜와 시간LocalDateTime now = LocalDateTime.now();// 특정 날짜와 시간 지..
[Spring Boot] Scheduler 간단한 설명스프링 프레임워크에서 제공하는 작업 스케줄링 기능으로 특정 작업을 일정 주기마다 자동으로 실행하도록 설정할 수 있습니다.주로 배치 작업, 알림, 정기적인 데이터 처리 등에 사용됩니다.저는 지금 캡스톤 프로젝트에서 계정 삭제일로부터 1달이 지난 계정을 삭제할 로직, 통계 데이터, 유저 예약 알림 등을 사용하기 위해 정리했습니다. 주요 어노테이션@EnableScheduling스케줄링 기능을 활성화 할 때 사용됩니다(주로 설정 클래스에서 사용) @Scheduled메서드에 적용하며 스케줄을 설정합니다. 사용 예제스케줄러 설정하기@Configuration@EnableSchedulingpublic class SchedulerConfig { @Bean public TaskScheduler ta..
[웹 보안] 세션 하이잭킹 세션 하이잭킹이란?일반적으로 서버는 로그인을 성공한 유저에게 세션id 혹은 토큰을 발급하게 되며 쿠키에 저장을 합니다.공격자가 인증을 마친 사용자의 세션 ID를 탈취하면 서버는 공격자를 정당한 사용자라고 인식하게 됩니다. 대표적인 공격 방법1. 네트워크 스니핑공격자가 공공 wifi와 같은 안전하지 않은 네트워크에서 패킷을 캡쳐하여 세션 ID를 추출할 수 있습니다. 2. XSS 공격사용자의 브라우저에서 세션 쿠키를 탈취하는 것입니다.자세한 내용은 여기를 클릭해주세요. 3. 세션 고정 공격사용자가 로그인하기 전 공격자가 미리 설정한 세션 ID를 사용하게 만들고 사용자가 로그인을 한 후에도 그 세션이 유지되도록 세션을 탈취하는 방법입니다. 예방 방법1. HTTPS 사용모든 통신을 암호화하여 공공 WIFI와 ..
[웹 보안] 파일 업로드 취약점 파일 업로드 취약점웹 사이트에 파일을 업로드를 할 때 서버에서는 적절한 보안조치를 하지 않으면 매우 위험한 취약점 중 하나인 파일 업로드 취약점 입니다. 공격자가 파일 업로드 시스템을 통해 서버에 직접적인 접근 권한을 제공할 수 있습니다. 대표적인 공격 방법1. 웹쉘 업로드웹쉘은 서버 측 스크립트 언어(PHP, JSP 등)로 작성된 악성 스크립트로 공격자가 원격에서 서버를 제어할 수 있습니다.예시는 생략했지만, 웹쉘 코드는 온라인에서 쉽게 찾을 수 있습니다.웹쉘을 업로드하고 해당 악성 스크립트가 실행될 수 있다면 공격자는 URL 파라미터를 통해 서버에서 임의의 명령을 실행할 수 있습니다. 2. DoS 공격대용량의 파일을 대량으로 서버에 업로드를 하면 서버의 디스크 공간을 고갈시키는 서비스 거부(DoS) ..
[웹 보안] CSRF CSRF(Cross-Site-Request-Forgery)란?크로스 사이트 요청 위조는 인증된 사용자의 권한으로 해당 사용자와 무관한 작업을 수행하는 것을 말합니다.일반적인 사이트는 로그인을 성공했을 시 토큰, 세션 등을 통해 사용자를 식별합니다.쿠키에 해당 값이 저장되었을 때, 브라우저는 요청을 보낼 때 자동으로 쿠키를 함께 전송합니다.문제는, 사용자가 A 사이트(예: 은행 사이트)에 로그인한 상태에서 악성 B 사이트를 방문했을 때,B 사이트에 의해 A 사이트로 요청이 자동 전송될 수 있다는 점입니다.이때 쿠키에 저장된 토큰이나 세션도 함께 전송되기 때문에, 사용자는 모르게 A 사이트에서 악의적인 요청이 실행될 수 있습니다. CSRF 예시사용자가 A 은행에 로그인한 상태에서 악성 사이트(B 사이트)를 ..