일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Spring Batch
- persistance context
- 논문리뷰
- 운영체제
- DeepLearning
- cartograhper
- 자바
- 자바ORM표준JPA프로그래밍
- Java
- 네트워크
- Python
- 디자인패턴
- 프로그래머스
- 포인트클라우드
- Database
- 알고리즘
- JPA
- 배달로봇
- 이펙티브자바
- Hibernate
- 영속성컨텍스트
- 자료구조
- 자율주행
- 논문
- 딥러닝
- 장애물인식
- 파이썬
- Jetson
- MySQL
- 아두이노
- Today
- Total
목록분류 전체보기 (56)
제리 devlog
프록시는 접근 제어, 값 변형을 사용하는데 유용한 패턴이다. 하지만, 특정 클래스마다 프록시 클래스를 만들어 작업하기에는 너무 고되다. 자바에서 기본적으로 제공하는 프록시 생성 오픈 소스를 사용하면 동적으로 프록시를 생성할 수 있다. JDK Dynamic proxy는 인터페이스를 기반으로, CGLIB는 상속을 기반으로 프록시를 생성한다. 이 두가지 방식은 모두 스프링에서 프록시를 만드는데 사용하는 기술이다. 우선, 프록시가 인터페이스, 상속 기반으로 어떻게 만들어지는지 잘 모른다면 아래 게시글을 먼저 참고하자! https://jgrammer.tistory.com/entry/%ED%94%84%EB%A1%9D%EC%8B%9C%EB%A5%BC-%EB%A7%8C%EB%93%9C%EB%8A%94-%EB%B0%A9..
spring boot에서 동적으로 프록시를 만드는데 사용되는 jdk 동적 프록시, cglib방식을 정리하기 전 프록시를 만들 수 있는 방법에 대해서 알아보자. 프록시를 만드는 방식은 인터페이스 기반 방식과 클래스 상속 기반 방식이 있다. 인터페이스 기반 프록시 생성 인터페이스 기반 프록시 생성은 실제 클래스와 프록시 클래스가 동일한 인터페이스를 구현한다. interface Subject { fun operation(): String } 실제 클래스와 프록시 클래스는 각각 이 인터페이스를 구현해야 한다. class ReadSubject : Subject { private val logger = LoggerFactory.getLogger(this::class.simpleName) override fun op..
프록시 패턴, 데코레이터 패턴이란? 두 가지 패턴 모두 프록시를 사용한다. 프록시는 실제를 대신해서 처리해주는 대리자 역할을 한다. 실제 객체와 프록시 객체는 동일한 인터페이스를 가져 클라이언트의 입장에서는 코드 변경 없이 동작할 수 있어야 한다. 대리자 역할을 수행하면서 얻는 이점은 다음과 같다. 접근 제어 권한에 따른 접근을 차단한다. 캐싱 로직을 적용한다. 지연 로딩이 가능하게 한다. 부가 기능 추가 원래 서버가 제공하는 기능을 더해서 부가 기능을 수행한다. ex) 값을 변경해서 전달, 실행 시간을 측정해서 로그를 남김 프록시 패턴과 데코레이터 패턴의 차이는 어떤 기능이 목적인지에 따라 정해진다. 프록시 패턴과 접근 제어의 목적, 데코레이터 패턴은 부가 기능 추가의 목적이 있다. 먼저, 실제 객체를..
콜백이란? 프로그래밍에서 콜백(callback) 또는 콜 애프터 함수(call-after function)는 다른 코드의 인수로서 넘겨주는 실행 가능한 코드를 말한다. 콜백을 넘겨받는 코드는 이 콜백을 필요에 따라 즉시 실행할 수도 있고, 아니면 나중에 실행할 수도 있다. (위키백과 참고) callback은 코드가 호출은 되는데 코드를 넘겨준 곳의 뒤에서 실행된다는 의미이다. 템플릿 콜백 패턴이란? GOF의 디자인 패턴은 아니다. 전략 패턴에 특정 방식을 사용하는데 스프링 내부에서 이런 방식이 자주 사용되기 때문에, 스프링에서는 이렇게 부른다. 스프링에서는 JdbcTemplate, RestTemplate , TransactionTemplate , RedisTemplate 처럼 다양한 템플릿 콜백 패턴이 ..
전략 패턴 이란? 알고리즘 제품군을 정의하고 각각을 캡슐화하여 상호 교환 가능하게 만들자. 전략을 사용하면 알고리즘을 사용하는 클라이언트와 독립적으로 알고리즘을 변경할 수 있다. [GOF] 전략 패턴은 이전에 포스팅한 템플릿 메서드 패턴과 유사하다. 변하지 않는 부분과 변하는 부분이 분리되고 인터페이스를 통해 구현된다. 비즈니스 로직의 실행 시간을 측정하는 예시이다. 여기서 변하는 부분은 비즈니스 로직, 변하지 않는 부분은 실행 시간을 측정하는 부분이다. strategy는 변하는 알고리즘을 담당한다. fun interface Strategy { fun call() } context는 변하지 않는 부분을 의미한다. class Context(private val strategy: Strategy) { pri..
템플릿 메서드 패턴이란? 템플릿 메서드 디자인 패턴의 목적은 다음과 같습니다. > "작업에서 알고리즘의 골격을 정의하고 일부 단계를 하위 클래스로 연기합니다. 템플릿 메서드를 사용하면 하위 클래스가 알고리즘의 구조를 변경하지 않고도 알고리즘의 특정 단계를 재정의할 수 있습니다." [GOF] 좋은 설계는 변하는 것과 변하지 않는 것을 분리하는 것이다. 템플릿 메서드 패턴은 알고리즘의 골격인 템플릿을 제공하고 하위 클래스에서는 알고리즘의 특정 단계를 정의한다. 알고리즘의 특정 단계를 하위 클래스에서 정의하면 알고리즘의 구조를 변경하지 않고 특정 단계를 재 정의할 수 있다. 템플릿 메서드 패턴은 상속을 활용하여 변하는 부분과 변하지 않는 부분을 분리해준다. 비즈니스 로직의 실행 시간을 측정하는 예시이다. 여기..
서버를 운영하다 보면 hikari connection과 관련된 에러를 겪게 된다. 은근히 놓치기 쉽고 빈번하게 발생 가능한 부분이라 정리를 해보려고 한다. connection 관련 문제는 보통 아래의 에러 메시지와 함께 문제가 발생한다. - org.springframework.transaction.CannotCreateTransactionException: Could not open JPA EntityManager for transaction - Unable to acquire JDBC Connection - HikariPool-1 - Connection is not available, request timed out after 3005ms. - o.h.engine.jdbc.spi.SqlException..
Spring 프레임 워크에서 제공하는 캐시는 추상화가 잘되어있고 여러 어노테이션(@Cacheable, @CacheEvict..)을 사용해서 간단히 사용하기 편하다. 다만, 내가 redis를 구현체로 사용하면서 느꼈던 불편함은 캐시의 만료시간을 설정하기 까다롭다는 점이다. 우선, spring에서 제공하는 @Cacheable, @CachePut 등의 어노테이션으로는 만료시간을 설정하는 옵션이 없다. 기본적으로는 만료 시간이 없게 캐시가 저장되기때문에 필요하다면 캐시를 명시적으로 제거해주거나 업데이트해줘야 한다. 만료 시간만 설정되면 되는데 캐시를 컨트롤해줘야 하는 로직이 불필요하게 코드 안에 섞이는 건 부담스러웠다. 그렇다고 만료기간을 설정할 방법이 없는 건 아니다. 첫 번째 방법으로, cachemanger..