반응형

Java 24

Spring Security JWT 토큰 인증 구현 시 보안 고려사항

최근 프로젝트에서 Spring Security와 JWT를 활용한 인증 시스템을 구현하면서 여러 보안 이슈들을 마주하게 되었습니다.단순히 JWT를 발급하고 검증하는 것을 넘어서, 실제 운영 환경에서 고려해야 할 보안 요소들이 생각보다 많았습니다.오늘은 제가 직접 경험하고 학습한 Spring Security JWT 구현 시 반드시 고려해야 할 보안 사항들을 정리해보겠습니다.1. JWT 서명 알고리즘 선택과 키 관리안전한 서명 알고리즘 사용처음 JWT를 구현할 때 HS256 알고리즘을 사용했는데, 이후 RS256으로 변경하게 되었습니다.그 이유는 다음과 같습니다:// 권장하지 않는 방식 (HS256)@Componentpublic class JwtTokenProvider { private final Str..

Java 2025.06.26

Spring Boot @Component, @Service, @Repository 차이점 정리

기능적으로는 동일함 - 모두 스프링 컨테이너에 Bean 등록의미적 차이가 핵심 - 코드 가독성과 유지보수성예외 처리에서 차이 - @Repository만 특별한 기능 있음[어노테이션별 특징]@Component가장 기본적인 어노테이션범용적으로 사용다른 세 개 어노테이션의 부모격@Componentpublic class UtilComponent { // 유틸리티성 클래스}@Service비즈니스 로직 처리Service 계층에서 사용@Component를 상속받음@Servicepublic class UserService { // 비즈니스 로직}@Repository데이터 접근 계층DAO 클래스에 사용예외 변환 기능 추가 (중요!)@Repositorypublic class UserRepository { ..

Java 2025.06.17

Java Exception 처리 전략과 커스텀 예외 설계

1. Exception 처리 기본 전략Checked vs Unchecked Exception 선택 기준Checked Exception: 복구 가능한 예외 (파일 없음, 네트워크 연결 실패)Unchecked Exception: 프로그래밍 오류 (NPE, IllegalArgument)실무 권장: 대부분 RuntimeException 상속 사용Exception 처리 레벨 구분// Controller 레벨: HTTP 상태코드 변환// Service 레벨: 비즈니스 로직 예외 처리// Repository 레벨: 데이터 접근 예외 변환2. 커스텀 예외 설계 원칙예외 계층 구조 설계// 최상위 비즈니스 예외public abstract class BusinessException extends RuntimeExcepti..

Java 2025.06.08

Java 코드 성능/메모리 사용량 최적화

■ 코드 성능 최적화 해보기 1. 프로파일링을 통한 병목 지점 파악시간 측정 코드long startTime = System.nanoTime();myMethod();long endTime = System.nanoTime();System.out.println("실행 시간: " + (endTime - startTime) / 1000000 + "ms");전문 프로파일링 도구: VisualVM, JProfiler, YourKit 활용핵심: 전체 코드의 10%가 90%의 성능 문제를 일으키는 경우가 많음2. 반복문 최적화// 최적화 전for (int i = 0; i 3. 계산 결과 캐싱public class CachedCalculator { private Map cache = new HashMap(); ..

Java 2025.05.07

boolean이랑 Boolean 뭐가 다를까? — Swagger 쓰다가 궁금해서 정리함

Swagger DTO 만들다가 boolean이랑 Boolean 차이 때문에 해맨적이 있다. 당연히 비슷한 줄 알았는데, 막상 써보니까 엄청 달랐다.null 포함 여부가 엄청 중요함!✅ booleanprimitive 타입.무조건 true / false.null 불가.Swagger에서 nullable=false로 뜸.값 안 주면 false가 기본값.단순한 상태 표현할 땐 이걸로 충분함.✅ BooleanWrapper 타입.true / false / null 가능.Swagger에서 nullable=true 설정됨.값이 있을 수도 없을 수도 있을 때 유용함.null 체크 안 하면 NPE 터짐.그래서 Boolean.TRUE.equals(값) 이런 식으로 체크하는 게 안전.실제 사용 예public class User..

Java 2025.04.21
728x90
반응형