전체 글 299

JavaScript에서 minify(압축) 작업이 유독 자주 이루어지는 이유

JavaScript에서 minify(압축) 작업이 유독 자주 이루어지는 이유는 다음과 같다:1. 성능 최적화 (Performance Optimization)JavaScript 코드는 보통 **클라이언트(브라우저)**에서 실행됩니다.JavaScript 파일이 클라이언트에 다운로드되기 때문에 파일 크기가 작을수록 로딩 속도가 빨라집니다.파일 크기가 작아지면 다음과 같은 성능 이점이 있습니다:다운로드 속도 개선 → 클라이언트가 파일을 더 빠르게 로드파싱 및 실행 속도 개선 → 브라우저에서 코드 파싱 속도가 빨라짐네트워크 대역폭 절약 → 모바일 환경에서 특히 유용예:100KB → 30KB로 줄이면 모바일 네트워크에서 로딩 속도가 훨씬 빨라짐2. HTTP 요청 개수 및 크기 줄이기HTTP 요청은 대개 파일 크기에..

Basic 2025.03.11

JSP 레거시 프로젝트에 JSTL 적용하기 (완벽 가이드)

JSP 레거시 프로젝트에 JSTL 적용하기 (완벽 가이드)JSP + JSTL: 레거시 프로젝트 개선 전략기존에 JSP(JavaServer Pages)로 작성된 레거시 프로젝트가 있다면, JSTL(JavaServer Pages Standard Tag Library)을 도입하면 다음과 같은 장점이 있습니다:JSP 코드 간소화 → HTML에 가까운 코드 작성 가능Java 로직 분리 → MVC 패턴에 부합가독성 및 유지보수성 강화반복문, 조건문 등을 태그 기반으로 처리 → 코드 직관성 향상JSP + JSTL 개요JSP(JavaServer Pages)란?Java EE(Enterprise Edition) 기반의 서버 사이드 렌더링 기술HTML에 Java 코드를 삽입 가능서블릿(Servlet)으로 변환 후 실행JST..

Basic 2025.03.11

2025년 2월 21일 기준 Cannot resolve method 'parseClaimsJws' in 'JwtParserBuilder' 해결방법 Jwts.parserBuilder()

JJWT 0.12.0부터는 Jwts.parserBuilder() 대신 Jwts.parser().build()를 사용해야 한다. 이전 버전(0.11.x)까지는 Jwts.parserBuilder()가 정상적으로 동작했지만, 0.12.x부터는 해당 메서드가 사라지면서 NoSuchMethodError 또는 Method not found 같은 오류가 발생한다.   최신 버전 기준 사용하는 코드 Claims claims = Jwts.parser() .verifyWith(secretKey) .build() .parseClaimsJws(token) .getBody();    잘못된 옛날 코드의 예시Jwts.parser().setSigningKey(secretKey) .p..

Spring 2025.02.21

250220 TIL Auth 구성 & 단위 테스트 하면서 자주 나오는 issue

Auth  JWT 구성 시 1️⃣ Jwts.parserBuilder() 사용 오류 해결 → Jwts.parser().verifyWith(secretKey).build() 적용2️⃣ JWT 검증 시 parseSignedClaims() 사용 (parseClaimsJws() 대신)3️⃣ Clock Skew 설정 추가하여 만료된 토큰 판별 오류 방지 단위테스트 시 나오는 이슈 1️⃣ Spring Security 충돌 방지 (@WithMockUser, @Import(SecurityConfig.class)) 2️⃣ Mocking 충돌 해결 → @MockBean 문제 방지 및 직접 API 호출 방식으로 변경 3️⃣ 테스트 실행 순서 독립성 유지 (@BeforeEach에서 사용자 미리 등록) 4️⃣  데이터 충돌 방지..

TIL 2025.02.20

20250220 TIL JWT 기반 인증 기능 및 단위 테스트 구현

✅ JWT 기반 인증 기능 및 단위 테스트 정리🔹 구현된 주요 기능1️⃣ 사용자 인증 & JWT 발급AuthControllerPOST /auth/login→ 로그인 요청 시, 유효한 사용자면 JWT 토큰 발급POST /auth/register→ 신규 사용자 회원가입2️⃣ JWT 토큰 생성 & 검증JwtUtilgenerateToken(username)→ HMAC SHA 키 기반 JWT 토큰 생성extractUsername(token)→ 토큰에서 사용자 정보(Username) 추출isTokenExpired(token)→ 토큰 만료 여부 확인 (예외 발생 방지)validateToken(token, username)→ 토큰 유효성 검증 (사용자명 일치 여부 포함)3️⃣ Spring Security & JWT ..

Could not autowire. No beans of 'PasswordEncoder' type found. BCryptPasswordEncoder 빈 주입 오류 간단하게 해결하기

@Service@RequiredArgsConstructor@Transactionalpublic class UserService { private final UserRepository userRepository; private final BCryptPasswordEncoder passwordEncoder; public UserResponse registerUser(UserRequest userRequest) { if (userRepository.findByUsername(userRequest.getUsername()).isPresent()) { throw new IllegalArgumentException("이미 사용 중인 아이디입니다."); }..

Spring 2025.02.19

로깅설정 DEBUG -> INFO 가 필요한 이유

로깅 설정을 DEBUG → INFO로 변경해야 하는 이유는 다음과 같음.1. 운영 환경에서 과도한 로그 방지DEBUG 레벨은 개발 및 디버깅을 위한 상세 로그를 남김.운영 환경에서 너무 많은 로그가 쌓이면 성능 저하 및 디스크 사용량 증가 문제가 발생할 수 있음.INFO 레벨로 설정하면 필요한 정보만 로깅하여 불필요한 성능 부담을 줄일 수 있음.2. 로그 가독성 향상DEBUG 로그는 너무 많은 세부 정보를 포함하여 중요한 로그가 묻힐 가능성이 있음.INFO 수준으로 설정하면 **중요한 애플리케이션 흐름(예: 서비스 시작, 주요 작업 완료 등)**만 기록되므로 가독성이 향상됨.3. 보안 및 개인정보 보호DEBUG 로그에는 내부 시스템 동작, SQL 쿼리, API 요청 데이터 등이 포함될 수 있음.운영 환경..

Spring 2025.02.12