스프링의 BeanDefinition
2022. 1. 14. 08:28
Spring
BeanDefinition이란? 단어 그대로 스프링 빈의 설정 메타 정보이다. 각 @Bean, 당 각 하나씩 메타 정보가 생성된다. 스프링 컨테이너는 이 메타 정보를 기반으로 스프링 빈을 생성한다. 어떻게 다양한 설정 방식을 지원 할까? 해당 글에서 빈 설정 방식을 자바 코드, xml 등 방식을 지원하는데 이게 가능한 이유가 BeanDefinition이라는 추상화가 있기 때문이다. BeanDefinition은 역할(interface)가 되는 것이고, AppConfig.class, appConfig.xml, appConfig.xxx 등과 같은 것들이 구현이 되는 것이다. 결국 스프링 컨테이너는 BeanDefinition만 바라 보기 때문에 가능한 것이다. 구조를 그림으로 보면 아래와 같다. 그림 출처 김영..
스프링의 자바 코드와 XML 설정 방식
2022. 1. 14. 08:25
Spring
해당 글을 보면 AppConfig라는 자바 코드로 빈 등록을 해서 사용을 했다. 하지만 스프링은 자바 코드 뿐 아니라 xml 방식을 지원하고 있고, 커스텀 방식도 지원하고 있다. 간단하게 알아 보자. 아래 그림은 ApplicationContext의 구현체들이다. AnnotationConfigApplicationContext는 AppConfig라는 자바 코드에서 애노테이션 기반으로 빈을 등록할 때 사용 했던 구현체이다. 이번에 알아볼 내용은 xml방식으로 빈을 등록하는 방법이다. 그림 출처 김영한의 스프링 핵심 원리 - 기본편 xml 방식으로 빈 등록하기 기존 자바 코드 설정 방식 살펴 보기 아래와 같이 자바 코드로 빈을 등록한 코드이다. AnnotationConfigApplicationContext(Ap..
스프링의 자바 코드와 XML 설정 방식
2022. 1. 10. 22:03
Spring
해당 글을 보면 AppConfig라는 자바 코드로 빈 등록을 해서 사용을 했다. 하지만 스프링은 자바 코드 뿐 아니라 xml 방식을 지원하고 있고, 커스텀 방식도 지원하고 있다. 간단하게 알아 보자. 아래 그림은 ApplicationContext의 구현체들이다. AnnotationConfigApplicationContext는 AppConfig라는 자바 코드에서 애노테이션 기반으로 빈을 등록할 때 사용 했던 구현체이다. 이번에 알아볼 내용은 xml방식으로 빈을 등록하는 방법이다. 그림 출처 김영한의 스프링 핵심 원리 - 기본편 xml 방식으로 빈 등록하기 기존 자바 코드 설정 방식 살펴 보기 아래와 같이 자바 코드로 빈을 등록한 코드이다. AnnotationConfigApplicationContext(Ap..
스프링의 BeanFactory와 ApplicationContext의 차이
2022. 1. 10. 21:59
Spring
해당 글에서 ApplicationContext는 DI 컨테이너라고 했다. 그렇다면 BeanFactory는 무엇을까? 스프링의 컨테이너의 최상위 인터페이스 보통은 ApplicationContext에서 빈을 조회하는 코드를 작성할 것이다. 그게 가능한 이유는 BeanFactory를 상속 받았기 때문이다. 즉, getBean()과 같은 것은 BeanFactory가 제공해주는 기능인 것이다. 결과 적으로 빈을 조회하고 관리하는 역할이 BeanFactory인 것이다. 그럼 ApplicationContext는 왜 사용하지? 그렇다. 그냥 BeanFactory를 사용하면 되지 왜 ApplicationContext를 사용할까? 복잡하게.. 이유는 부가 기능이 필요하기 때문이다. ApplicationContext의 구조..
스프링의 ApplicationConetxt란??
2022. 1. 10. 21:56
Spring
ApplicationContext란 서론 스프링은 객체지향의 장점을 살리기 위해 EJB시절 로드 존슨이 취미로 만들기 시작하나 3만 줄의 예제 코드부터 시작 되었다. 객체 지향의 장점이란 변화에 대응하기 쉬운 코드를 말한다. 하지만 EJB는 객체지향과는 거리가 멀고 너무 변경에 어려웠다고 하며, 이때 나온 말이 POJO라고 한다. 순수 자바로 돌아가서 객체지향적 개발을 하자는 취지의 용어이다. 본론 ApplicationContext는 스프링의 DI 컨테이너이다. 변경에 용이하기 위해 DI 컨테이너에서 의존 객체를 주입 해주기 위해 여러 객체들을 관리하는 상자라고 생각하면 된다. 인터페이스이다. 순수 자바로 DI 컨테이너와 스프링의 DI 컨테이너 아래는 순수 자바로 DI 컨테이너를 만든 코드이다. 간단한 ..
org.springframework.dao.InvalidDataAccessApiUsageException: No enum constant
2021. 10. 3. 14:46
Spring
org.springframework.dao.InvalidDataAccessApiUsageException: No enum constant 이번에 devlogmoa를 운영 중 위와 같은 에러가 발생 했습니다. 왜 발생 했을까? 메시지에 No enum constant에 나와 있듯 enum 상수가 없다는 의미입니다. 그런데 저는 분명 있었습니다. 코드는 위와 같습니다. 분명히 enum이 존재 했습니다. 하지만 저는 리팩토링을 하면서, enum의 Y -> USE, N -> UNSED로 변경 했습니다. 그래서 DB에 Member의 해당 컬럼이 Y, N으로 되어 있어서 위와 같은 에러가 발생했던 것입니다. 이 부분은 완전 처음 겪어보는 상황이었습니다. 휴~ 해결 방법 DB update!!!
Spring Data Jpa로 DB에 생성일, 수정일 자동화 하기
2021. 10. 2. 14:51
Spring
✔️ DB에 생성일, 수정일을 매번 넣는 행위는 어떤가? 실무에서 이를 경험해보신 분은 굉장히 불편하고, 은근 빼먹는 경우가 많다는 것을 아실텐데요. 저도 처음에는 별 생각없이 당연하게 수동으로 매번 작성을 했습니다. 근데 점점 와.. 이건 무슨 update, insert 할 때 마다 매번 똑같이 작성해야 하네? 라는 생각이 들었습니다. 솔직히 개인 공부용이라면 전혀 불편함을 못느끼실거에요. 저도 그랬으니까요. 하지만 생각보다 빼먹는 일도 많고 잘못된 값을 넣는 경우도 있습니다. 특히, 완전 신입 분들의 경우 이에 대한 중요성을 모르시기 때문에 처음에 개발할 때 많이 빼먹는 경우도 있구요. 그러던 와중 이동욱님의 스프링 부트와 AWS로 혼자 구현하는 웹서비스 라는 책을 공부하다가 Spring Data J..
스프링부트 캐시 정책 적용하기
2021. 9. 30. 21:24
Spring
현재 제가 운영하는 devlogmoa 서비스는 캐시처리가 필요할만큼 많은 파일이 존재하지는 않습니다. 하지만 okky에서 피드백을 받게되어 이참에 한 번도 해보지 못했던 캐싱 처리를 해보려고 합니다. (캐시란??) ✔️ 무엇을 캐싱할까? 아주 간단하지만 사진과 같이 bootstrap.css와 bootstrap.js를 캐시 정책을 적용하려고 합니다. 이런 정적파일은 자주 변화가 일어나지 않는 것이기 때문에 굳이 매번 서버에서 가져올 필요 없습니다. 지금은 파일이 몇개 없어 성능에 영향이 없겠지만, 네이버 같이 방대한 양의 정적파일이 존재한다면, 성능에 영향을 끼치게 됩니다. 일단 캐시 사용 전의 상태를 보겠습니다. 보시는 바와 같이 재접속을 계속해도 Cache-Control이 no-store로 되어있습니다..