개요 제가 운영중인 서비스에서는 아임포트를 결제 모듈로 사용하고 있습니다. 현재 홈페이지 내부에서 결제할 수 있는 페이지는 1개가 아닙니다. 따라서 각각의 컨테이너 혹은 컴포넌트에서 그때그때 아임포트 모듈을 호출해야 합니다. 아임포트를 쉽게 컨트롤하고 코드 재사용성을 향상시키기 위해 recoil을 이용하여 컴포넌트를 만들었습니다. recoil 현재...
Java 17
Java 17 2021년 9월 14일 Java LTS 인 JDK 17 GA가 릴리즈 되었습니다. JDK 17은 최대 2029년 9월까지 업데이트가 제공될 예정인데요, 2018년 9월에 JDK 11이 릴리즈된 이후 3년만에 출시된 LTS 버전의 JDK 입니다. 코드의 변화뿐만 아니라 LTS 출시 주기가 3년에서 2년으로 변경되는 등 많은 변화가 있었는...
OSIV(Open-Session-In-View)
OSIV OSIV(Open-Session-In-View)는 영속성 컨텍스트를 뷰 영역까지 열어두는 기능입니다. 여기서 뷰 영역은 Controller 혹은 템플릿 렌더링 영역까지를 의미합니다. 뷰 영역까지 영속성 컨텍스트가 살아있다면 뷰 영역에서도 지연 로딩 (Lazy Loading) 을 사용할 수 있습니다. 별다른 설정 없이도 지금까지 뷰 영역에서 ...
JPA 캐시
JPA 캐시 데이터베이스에 접근하는 비용은 매우 비쌉니다. 실제 운영하는 서비스라면 DB가 같은 시스템 안에 존재하는 일이 없기 때문에 네트워크 비용까지 발생합니다. 결과값을 뻔히 알 수 있는 쿼리에 대해 이런 값비싼 작업을 수행한다면 어플리케이션의 성능은 낮아질 것입니다. 하이버네이트를 포함한 JPA 구현체들은 캐시를 지원합니다. 하이버네이트의 캐...
AWS ALB에 람다 없이 고정 IP로 접근하기
ALB에 고정 IP로 접근하기 AWS ALB(Application Load Balancer)는 NLB(Network Load Balancer)에 비해 가지는 이점들이 있습니다. 예를 들어 ALB는 서브도메인이나 path ‘/app/**’ 같은 경로로 타겟 그룹에 요청을 전달할 수 있습니다. 하지만 단점 하나가 있는데요, 바로 고정 IP를 부여하지 못...
팩토리 메소드 패턴 (Factory Method Pattern)
팩토리 메소드 패턴 팩토리 메소드 패턴은 부모 클래스에 알려지지 않은 구체 클래스를 생성하는 패턴이며, 자식 클래스가 어떤 객체를 생성할지 결정하도록 하는 생성패턴 입니다. 간단히 요약하자면 부모 클래스 대신 자식 클래스에서 객체를 생성하는 패턴이라고 생각하시면 됩니다. 구조 생성자와 그 하위클래스 객체를 생성하는데 공통적으로 사용될수 있는...
전략 패턴 (Strategy Pattern)
전략 패턴 전략 패턴은 실행 중에 알고리즘을 선택할 수 있게 하는 행위 디자인 패턴 입니다. 즉, 각각의 객체들이 할 수 있는 동작들일 미리 전략으로 만들어 놓고 동작을 동적으로 변경해야 한다면 해당 전략만 변경하여 객체의 동작이 바뀌도록 하는 패턴입니다. 구조 컨텍스트는 전략 구현체중 하나와 참조를 유지하고 전략 인터페이스를 통해서만 객체...
빌더 패턴 (Builder Pattern)
빌더 패턴 빌더 패턴은 복합 객체의 생성 과정과 표현 방법을 분리하여 동일한 생성 절차에서 서로 다른 표현 결과를 만들수 있게 하는 패턴입니다. 객체를 생성할때 흔하게 사용됩니다. 구조 빌더 인터페이스는 모든 유형의 빌더에 사용되는 공통적인 단계를 선언합니다. 빌더 구현체는 생성 단계에서 서로 다른 구현체를 제공합니다. 이 구현체는 공통...
리액트에서 폴더 구조대로 라우팅하기 (feat. Vite)
Next js 처럼 라우팅하기 Next js는 리액트에서 SSR을 쉽게 구현할수 있게 도와주는 라이브러리 입니다. Next의 파일 시스템을 기반으로한 라우팅 을 기본으로 하고 있습니다. (참조) 오늘은 Next 없이 Next와 같은 라우팅을 구현해보고자 합니다. CSR로 구현하기? 리액트는 lazy 와 Suspense API로 동적 로딩을 지원하고 ...
어댑터 패턴 (Adapter Pattern)
어댑터 패턴 어댑터 패턴은 클래스의 인터페이스를 사용자가 기대하는 다른 인터페이스로 변환하는 패턴으로, 호환성이 없는 인터페이스 때문에 함께 동작할 수 없는 클래스들이 함께 동작하도록 해주는 패턴입니다. 구조 객체 어댑터 클라이언트는 비즈니스 로직을 포함하고 있는 클래스입니다. 클라이언트 인터페이스는 다른 클래스가 클라이언트 코드와 협력...