전체 글
-
Spring aop Proxy카테고리 없음 2023. 4. 22. 14:39
오늘 알아볼 내용은 Spring 에서 사용하는 aop 프록시 원리에 대해서 살펴보도록 하자. 기본적으로 Spring에서 aop의 프록시 매커니즘은 두가지를 이용한다. 하나는 JDK 동적 프록시와 다른 하나는 Cglib 프록시를 사용하고 있다. JDK 동적 프록시 경우에는 java의 리플렉션을 이용해서 객체를 만드는데 Cglib 경우에는 바이트코드를 조작해 프록시 객체를 만든다. 스프링으로 개발하다보면 인터페이스 한개당 구현체도 한개의 경우가 많이 있다. 예전에는 인터페이스를 구현하지 않으면 aop가 동작하지 않는다고하여(물론 이 이유만은 아니다.) 인터페이스 한개 당 구현체도 한개 존재하는 경우가 많았다. 하지만 요즘에는 필자의 경우에도 인터페이스를 잘 작성하지 않는다. 구현체가 여러개가 될 경우를 제외..
-
ApplicationContext와 BeanFactory카테고리 없음 2023. 4. 22. 14:39
오늘은 월요일이니 간단히. 필자의 지인 중 N사에 면접에 나온 질문 중 하나다. 나도 솔직히 가물가물해서 다시 알아보기로 했다. 예전에 살짝 글로만 읽어서 그런지 까먹어서 다시 글로 남긴다. ApplicationContext 인터페이스는 Spring을 사용한다면 누구나 잘 알려져 있는 그런 인터페이스이다. Spring에서도 아주 핵심적인 인터페이스라고도 불릴 수 있다.(필자생각) ApplicationContext 를 역할을 간단히 설명하자면 오브젝트 생성, 관계설정, 만들어지는 방식, 자동생성, 후처리등 여러가지 일들을 한다. 아주 많은 일을 하니 이것은 따로 살펴보도록하자. 또 한 BeanFactory를 상속받고 있다. 그럼 ApplicationContext와 BeanFactory 차이점은 뭘까? 실제..
-
hibernate OneToOne lazy 구현하기카테고리 없음 2023. 4. 22. 14:39
오늘이 시간에는 JPA OneToOne 관계에서 lazy 로딩 구현을 해보자. 일반적으로 JPA에서 OneToOne 관계는 Lazy로딩이 잘 동작하지 않는다. 물론 동작하게 만들 수는 있다. 여러 조건을 만족해야 하며 테이블 구조도 조금 달라 질 수 있다. 또한 OneToOne을 OneToMany로 바꾸어서 사용하는 방법도 존재한다. 위와 같이 여러 방법이 있겠지만 오늘 우리는 하이버네이트의 API를 이용해 OneToOne관계를 Lazy로딩이 가능하게 하도록 해보자. JPA의 구현체 중 하이버네이트는 OneToOne 관계에서도 Lazy로딩을 할 수 있다. 다른 여러 구현체들은 잘 쓰지 않아 모르기에 생략하도록 하자. 일단 아래와 같은 엔티티가 있다고 가정하자. @Entity public class Con..
-
spring boot AutoConfigure test카테고리 없음 2023. 4. 22. 14:39
Spring boot를 만지다 보면 재밌는게 많이 등장한다. 참 잘 만든거 같다. 소스를 보다보면 Phillip Webb 이 양반과 Stephane Nicoll 이 양반 소스가 대 부분 이다. 소스를 보면 뭔 소린지는 몰라도 내 기준으로 볼 때는 아주 잘 만들어 보인다. 처음에 Stephane Nicoll 이 양반이 github에 자주 등장하고 이슈도 많이 처리 하길래 저 양반이 팀 리더인줄 알았는데 아니였다. Phillip Webb 이양반이 Spring boot 리더 중 한명이였다. 흠 그건 그렇고.. 오늘 잠깐 살펴볼 내용은 spring boot test의 자동설정이다. 뭐 대단한것은 아니고 물론 만든사람은 고생했겠지만 쓰는 사람은 편하게.. 1.4 버전부터 Test 코드를 만드는게 간편하고 다양해 ..
-
Spring boot Cache카테고리 없음 2023. 4. 22. 14:39
오늘 알아 볼 내용은 Spring Boot의 Cache를 알아보자. 자주 읽기가 일어나는 곳에는 cache를 사용하는 것은 좋은 방법이라고 생각한다. 데이터베이스도 읽기 작업이 대부분이니 잘 사용하면 좋을 듯하다. 물론 아무대나 사용하지 말고 적당한 곳을 잘 고민해서 사용해야 될 것이다. Spring Boot에서는 기본적으로 여러 서드파트 cache 라이브러리들을 지원한다. 꽤나 많은 캐시들을 지원하니 자신에게 맞는 캐시을 골라서 사용하면 된다. 기본적으로 지원할 뿐이지 만약 아래에 자신이 맞는 캐시가 없다면 따로 설정해주면 될 것같다. 일단 JSR-107(JCache) 구현체들은 모두 지원한다. 스펙에 맞게 잘 구현되었다면 모두 지원하나 스펙에 맞지 않으면 장담하지 못할 듯하다. cache로 유명한 E..
-
Spring 선언적 트랜잭션과 checked exception카테고리 없음 2023. 4. 22. 14:39
오늘은 선언적 트랜잭션과 체크예외에 대한 이야기를 아주 간략히 해보겠다. 결론부터 말하자면 선언적 트랜잭션을 사용할 때 체크드 예외가 발생하면 롤백을 하지 않는다. 솔직하게 별생각 없이 썼다. 그래서 더 안타깝다.. 아직 갈길이 멀다. 조금만 더 관심있게 봤으면 알았을 텐데 말이다. 그런데 왜 굳이 Spring에서는 체크예외 일때 롤백을 하지 않을까? 그 이유는 뭐 간단하게 생각할 수도 있다. Spring의 예외전략은 언체크드 예외이다. 기본 java에서는 데이터베이스에 쿼리를 날리거나 연결을 할 때 에러가 발생하면 체크드 예외를 던진다. 보통 일반적으로 SqlException을 던지고 이 예외는 체크드 예외이다. 하지만 Spring에서 체크드 예외를 언체크드 예외로 포장해서 우리에게 던져준다. 그 이유..
-
생활속 재미있는(?) 수학이야기카테고리 없음 2023. 4. 22. 14:39
오늘은 재미삼아 생활 속의 수학이야기를 해보려고 한다. 재미있을지는 잘 모르겠으나 어쩄든.. 우리가 사는 일상생활속에는 수학과 관련된 것 들이 아주 많이 존재 한다. 그 중에서 숫자와 관련된 이야기를 해보려고 한다. 주민등록번호, 군번, 휴대폰번호, 신용카드번호 등 모두 다양한 숫자로 이루워져 있다. 그냥 보기에는 아무 번호나 막 갖다 붙인 듯(?) 보이지만 실제로는 규칙이 정해져 있다. 주민번호는 뭐 다들 아시다시피 성별, 행정구역 (뒷자리)등으로 숫자가 부여받게 되는 것은 누구나 잘 아는 규칙일 듯 싶다. 그 중에서 오늘 살펴볼 숫자는 신용(체크) 카드 번호의 비밀을 알아보고자 한다. 카드 앞쪽에는 16개의 숫자로 이루워져 있다. 딱 보기에는 별 의미 없어 보일 수도 있지만 여기에도 규칙이 숨어있다...
-
JPA OneToOne?카테고리 없음 2023. 4. 22. 14:39
JPA를 다루다보면 까다로운게 한두군데가 아닌거 같다. 아직 JPA를 손쉽게 다루지 못해서 그러지만.. 하면 할 수록 어렵단 말이야.. 그 중에서 오늘은 JPA에서 OneToOne 관계에 대해서 알아보려한다. JPA의 OneToOne 관계는 정말 까다롭다. OneToOne 관계로 설계할 때는 심히 많은 고민을 해보길 바란다. 정말로 OneToOne 관계를 해야 되나...말이다. 첫 번째 방법 아래의 코드는 OneToOne(양방향)의 첫 번째 방법이다. @Entity public class Content { @Id @GeneratedValue private Long id; private String title; @OneToOne(cascade = CascadeType.ALL, fetch = FetchTyp..