전체 글 302

Static Facade + Instance Implementation 패턴 // 퍼사드(Facade) 디자인 패턴

주요 구성 요소 및 특징1. Static Facade (정적 퍼사드)역할: 클라이언트가 하위 시스템의 기능에 접근하는 단일, 단순한 진입점을 제공합니다.구현: 모든 메소드가 static으로 선언된 클래스입니다. 클라이언트는 이 클래스의 인스턴스를 생성할 필요 없이 Facade.method()와 같이 직접 접근할 수 있습니다.장점: 코드가 간결하고, 필요한 서비스를 전역적으로 쉽게 접근할 수 있습니다.단점: 일반적인 정적 메소드처럼, 내부적으로 상태를 가지거나 구체적인 구현에 강하게 결합될 경우 테스트가 어려워질 수 있습니다.2. Instance Implementation (인스턴스 구현)역할: 실제 비즈니스 로직을 담고 있는 클래스(또는 클래스들)입니다.구현: 인터페이스를 구현하거나 일반 클래스로 작성되..

Spring 2025.11.07

쿠폰 수집가 문제 (Coupon Collector Problem)

Photo by Janis Fasel on Unsplash 포켓몬 빵을 기억하시나요? 지금도 파는지는 잘 모르겠습니다만, 제가 어릴 적만 하더라도 큰 인기가 있던 빵이었습니다. 특히 그 빵이 인기가 있던 이유는 빵을 사면 그 안에 동봉되어 있던 포켓몬 "띠부띠부 씰" 때문이었다고 생각합니다. 대개는 플라스틱 책받침에 씰을 모았고, 개중에서 모으는 데 진심인 친구들은 클리어 파일에다가 씰을 붙여서 모았죠. 저도 책받침에다가 몇 개 모았던 기억이 있습니다. 씰을 모으던 아이들의 목표는 당연히 모든 씰을 모으는 것이었을 겁니다. 당시 포켓몬은 255마리였던 것으로 기억합니다. 여기서 한 가지 의문점이 생기죠. 과연 아이들은 몇 개의 빵을 사 먹어야 모든 포켓몬 씰을 모을 수 있었을까요? 정말로 운이 좋은 경우..

JMX(Java Management Extensions)란?

오라클자바커뮤니티 유튜브 발췌출처 : https://www.youtube.com/watch?v=6kjGpSU_aJE 1) Java mBean(Managed Bean)이란? JDK 1.5 이상부터 기본적으로 탑재된 기능 자바 어플리케이션의 모니터링과 관리 기능을 제공한다. Non-Java Resource와 하드웨어에 대해 wrapping한 인터페이스를 제공하며, API를 외부로 노출해 application 설정 및 통계데이터를 수집할 수 있는 기능을 제공한다. mBean으로 알려진 하나 이상의 사용자 JavaBean 오브젝트를 통해(혹은 리소스를 호출하는) 애플리케이션, 디바이스, 서비스를 원격으로 제어할 수 있다. mBean들은 mBean 서버에 등록되며..

Spring 2025.09.18

Java Garbage Collection(GC)란 무엇이고 동작방식과 G1GC에 대해

C와 같은 프로그래밍 언어에서 메모리 할당 및 할당 해제는 수동 프로세스입니다.반면에, Java에서 메모리 할당 해제 프로세스는 Garbage Collection에 의해 자동으로 처리가 됩니다.[기본 프로세스]Step1 : MarkingGarbage Collector가 사용중인 메모리 조각과 사용하지 않는 메모리 조각을 식별합니다.마킹 단계에서 모든 개체들을 스캔하다보니 많은 시간이 소요될 수 있습니다. Step2 : Normal Deletion 참조되지 않은 개체를 제거하여 참조된 개체와 포인터를 여유 공간으로 남깁니다.메모리 할당자는 새 개체를 할당할 수 있는 여유 공간 블록에 대한 참조를 보유합니다. Step2a : Deletion with Compacting성능 향상을 위해 참조된 나머지 개체들을..

Spring 2025.07.22

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