Backend

·Backend/Spring
스프링 구조 어플리케이션은 기본적으로 Components 간의 상호작용으로 동작하는데 Component 또는 Bean 형태로 스프링 컨테이너인 ApplicationContext 라는 DI 컨테이너에 올려두고 관리 되는 구조. ApplicationContext 와 Bean 등록 빈을 등록하는 방법은 위와 같이 annotation 기반으로 등록하거나 xml 파일로 등록할 수 있다. 위와 같이 스프링 컨테이너에 빈을 등록하면 실제 어플리케이션이 동작할 때 의존성 주입 (DI) 을 기반으로 해서 스프링이 관리하는 빈으로 변경되어 수행된다. @Configuration // Coonfiguration 또한 Component 이다. public class AppConfig { @Bean public UserServi..
·Backend/JPA
JPA로 작성되었던 기존 CustomRepository Interface를 상속받은 RepositoryImpl을 QueryDsl 로 복잡한 쿼리를 해결하고 V2로 넘어가는 과정에서 문제가 발생하였다. 기존 OrderRepositoryImpl를 남기고 싶어서 v1,v2 따로 나누기위해 Class 이름 뒤에 v1을 남기고 QueryDsl로 작성한 Repository의 뒤에 v2로 작성하여 돌렸더니 .. 두 시간 삽질을 했다 .. 쿼리가 잘 못 됬는지 확인해보고, 애노테이션도 확인해보고 삽질이란 삽질은 다 했다가 Repository 자체가 문제란걸 깨닫고 CustomRepository 규칙을 다시 보았다. 기본 Impl으로 설정되어있는 접미사가 있어야 있어야 Bean을 만드는 규칙이 있었다. 그리고 리플렉션 ..
·Backend/JPA
엔티티에 대해 ​변경추적 이력을 넣고싶어서 JPA의 Auditing기능을 쓰는 과정에 이상한 점을 찾았다.​ ​@LastModifiedDate만 동작을 안함.. 이게 뭐지..? 하다가 엔티티 하나만 수정해보니 동작은 하는데 문제는 Item들이 전체 세일을 할때 동작을 안함 .. (2~12는 전체할인 기능동작 , 13는 하나만 수정) 아마 전체 할인 기능을 사용할 때 벌크성 쿼리를 날리는 과정에 DB에 바로 때려박아서 변경감지를 못하기 때문에 그런게 아닐까 싶다. 찾아보니 맞는거 같다.. 어쩔수 없이 TimeEntity에 별도의 로직을 추가 한 뒤에 벌크쿼리를 날리기전에 전체 업데이트 한번 한 뒤에 실행하니 수정날짜 바꾸기 동작함 결론 : 벌크성 쿼리는 추적할 생각하지말거나 직접 넣어주는 로직을 짜야함
·Backend/JPA
혼자 스프링 토이프로젝트를 만들면서 JPA를 사용하던도중 엔티티간의 동일성에 대해 궁금증이 생겼다. 우선 , Member 엔티티를 하나 생성을 해서 저장 한 다음 그 ID값으로 find를 실행했을때 출력되는 값은 같음을 확인하였다. 하지만 만약 영속성 컨텍스트를 벗어난다면 ( entityManager를 flush,clear를 시킴 ) 같은 ID같으로 조회해서 가져온 엔티티는 보다시피 불 일치가 나온다. 같은 객체가 아니라는것. 이는 , 같은 엔티티라는 보장을 해 줄때 수정관련 작업에서 변경감지를 쿼리가 나가기전에 1차캐시에서 비교를 먼저 해 주고 만약 변경된 값이 있다면 데이터를 변경시키고 쿼리가 나가지만 영속성을 보장받지 못하면 다른 엔티티이기 때문에 변경감지가 동작하지 않는다. => 같은 ID값으로 ..
·Backend/Spring
Spring 으로 토이프로젝트를 만들던 도중 예전에 해논 코드의 css가 그대로 가져왔더니 적용이 안되는 현상이 일어났다 .. 결론 : integrity 의 값이 현재 사용중인 부트스트랩 버젼과 일치 하지 않으면 Block 시켜버림. https://getbootstrap.com/docs/4.4/getting-started/introduction/ Introduction Get started with Bootstrap, the world’s most popular framework for building responsive, mobile-first sites, with jsDelivr and a template starter page. getbootstrap.com 여기 들어가서 link 태그 부분을 통째..
·Backend/Spring
스프링 AOP에 대해 정리를 해보고자 한다. 1. AOP 개념? AOP란 Apsects Oriented Programming 으로, 관점 지향 프로그래밍의 약자이다. 어플리케이션은 로직은 크게 핵심기능과 부가 기능으로 나눌 수 있다. 실제 요청을 받아 들이고 처리하는 로직을 핵심기능이라고 하고 핵심 기능을 보조하여 가령 로그를 남겨주는 로직을 부가 기능이라고 한다. 가령 , 주문에 대한 로직이 있다고 가정하자. 그리고 각 컴포넌트에서 로그를 남겨주는 코드를 적용해야한다면 다음과 같이 각 컴포넌트에 로그를 일일이 남겨주는 로직을 핵심기능안에 넣어야 한다. 그런데 로그찍는 방법이 달라졌는데 컴포넌트가 100개가 넘는다면 ..? => 100개가 넘는 로직를 뜯어고쳐야한다. 로그추적과 같은 공통관심사를 핵심기능..
김까따
'Backend' 카테고리의 글 목록 (3 Page)