본문 바로가기
반응형

전체 글1072

Entity 에서 date관련 annotation 스프링에서 제공하는 어노테이션 중에 아래와 같은 어노테이션이 있다. import org.springframework.data.annotation.CreatedDate; import org.springframework.data.annotation.LastModifiedDate; import org.springframework.data.jpa.domain.support.AuditingEntityListener; 만약 entity 에서 새로운 데이터를 생성할때 createdDate 와 LastModifyDate라는 컬럼이 있다고 가정해 본다면 결국 LocalDate.now() 라는 값으로 set을 해주며 builder를 하고 다양한 방법으로 modify 할때 LastModifyDate 컬럼을 현재 시간으로 s.. 2022. 12. 11.
Test에서 Stub이란? 사전적인 의미는 토막, 꽁초, 남은 부분 등의 의미를 가지고 있는 이 stub이라는 단어는 it에서 개발 테스트 할때는 어떤 의미를 지니고 있는지 확인해보려고 한다. 위키에서의 사전적 의미는 다음과 같다. 고급 다형성 컴퓨터 과학에서 테스트 스텁 은 테스트 중인 모듈이 의존하는 소프트웨어 구성 요소(또는 모듈)의 동작을 시뮬레이션하는 프로그램입니다. 테스트 스텁은 테스트 중에 이루어진 호출에 대한 미리 준비된 답변 을 제공하며 일반적으로 테스트를 위해 프로그래밍된 것 이외의 항목에는 전혀 응답하지 않습니다. [1] 증분 테스트의 하향식 접근 방식 에 주로 사용됩니다 . 스텁은 소위 유역 모듈을 임시로 대체하고 실제 제품이나 소프트웨어와 동일한 출력을 제공하는 컴퓨터 프로그램입니다. https://en.w.. 2022. 12. 10.
LinkedHashMap 이전에 포스팅에서 map과 set, list를 다룬적이 있는데 최근 linkedHashMap을 다루다가 해당 주제로 포스팅을 써본다. HashMap 은 hashcode 를 사용하기 때문에 순서가 일정하지 않다. LinkedHashMap 은 내부를 Double-Linked List 로 구성하여 HashMap 의 순서를 유지한다. HashMap 에서 상속받기 때문에 HashMap 의 모든 메소드를 사용할 수 있다. 순서 유지 데이터는 먼저 들어간 데이터가 무조건 앞에 위치하게 된다. forEach 문에서도 동일하다. Map map = new LinkedHashMap(); map.put("animal", "cat"); map.put("fruit", "apple"); System.out.println(map);.. 2022. 12. 9.
Flush에 대해 EntityManager를 사용해 작업을 수행해도 commit을 하기 전까지는 작업의 결과들이 DB에 반영되지 않는다. 정확히는 "Flush가 호출되기 전에는 DB에 반영되지 않는다"가 맞다. Flush가 호출되면 영속성 컨텍스트 안에 보관되고있던 이전 작업들에 대한 결과가 실제 DB에 반영이 된다. (영속성 컨텍스트를 비우는 것이 아니라 영속성 컨텍스트의 변경내용을 DB에 적용시켜 주는 것이다) 영속성 컨텍스트를 Flush하는 방법 em.flush() > 직접 호출하는 것이다. transaction.commit() > 트랜잭션 커밋을 수행하면 플러시가 자동으로 호출된다. JPQL > JPQL 쿼리를 실행하면 플러시가 자동으로 호출된다. JPQL은 SQL로 번역되어 DB에 바로 접근하게 된다. 이 경우에.. 2022. 12. 8.
kubernetes. Skaffold Skaffold란? 코드 수정 → 쿠버네티스 클러스터까지 적용을 단순화해준 프레임워크 Code change Docker container build Kubernetes resources deploy Debugging on k8s cluster 공식 문서 https://skaffold.dev/docs/ Skaffold 2.0 Documentation Easy and Repeatable Container & Kubernetes Development skaffold.dev 설치 방법은 다음과 같다.(mac brew 기준) $ brew install skaffold $ skaffold version 다음 프로젝트에서 skaffold 파일을 생성한다. Run / Debug Configuration skaffold.. 2022. 12. 7.
JPA query Keyword (repository) 이전 포스팅에서 jpa 메서드 들을 간단하게 정리한 포스팅이 있다. 자세한 사항은 아래 참고 포스팅을 참고 바란다. jpa 메서드에 대해서 좀더 다뤄보려고 한다. 자료 출처는spring 공식 홈페이지 에서 docs에서 가져왔다. https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repository-query-keywords Spring Data JPA - Reference Documentation Example 119. Using @Transactional at query methods @Transactional(readOnly = true) interface UserRepository extends JpaRepository { Li.. 2022. 12. 6.
JPA메서드 save 와 saveAndFlush 비교 이전 포스팅에서 jpa 에 대해서도 다뤄봤고 영속 방법중 하나인 더티체킹에 대해서도 다뤘다. 아래 참고 포스팅을 확인 바람. 이번 포스팅에서는 더티체킹이 아닌 merger 방법으로 데이터를 영속하는 메서드인 save메서드에 대해서 다뤄볼 것이다. 일단 @Transactional 어노테이션을 붙이지 않을 경우는 새로운 Entity를 만들고 save/saveAndFlush 로 저장을 한다음 set으로 entity 의 값을 변경해주고 db에서 값을 확인해보면 save를 쓰는 경우나나 saveAndFlush를 쓰는 경우나 둘다 set을 할 경우 update 가 되지 않는다. @Transactional 어노테이션을 붙이는 경우에 save와 saveAndFlush를 비교를 하면 똑같이 메서드 종료 후 update가.. 2022. 12. 5.
spring annotation-driven 시 bean name 중복(충돌,conflicts) 해결 spring은 annotation-driven component scan 시 기본적으로 Bean 이름으로 id를 결정한다.(annotation으로 설정) 예를 들어 클래스명이 TestController 라면 id는 “testController” 로 결정된다. 이때 다른 패키지에서 동일한 이름을 가진 클래스(컴포넌트)가 중복으로 존재한다면 동일한 id 를 가지게 되며 아래와 같은 에러 메시지를 볼 수 있다. org.springframework.beans.factory.BeanDefinitionStoreException: Unexpected exception parsing XML document from file [.....\servlet-context.xml]; nested exception is org... 2022. 12. 4.
JPA 더티체킹(Dirty Checking) 이란? JPA에 대해서는 아래 참고 포스팅을 참고하면 확인해 볼 수 있다. 이번 포스팅에서 다뤄볼 내용은 더티체킹이라는 개념이며 직역으로는 변경상태 감지라고 느낄 수 있다. JPA에서는 값을 데이터베이스와 영속시키기 위한 몇가지 방법이 있는데 지금까지 다뤄왔던 방법은 merge 방법이다. findbyid 로 값을 가져온 뒤 영속을 시켜둔 상태에서 필요시마다 save 메서드를 날리면서 id 값 기준으로 동일한 값이 있는지 체킹하고 있다면 update 없다면 insert를 날려주는 방식이다. 하지만 그렇게 되면 매번 쿼리를 날릴때마다 select insert / select update를 날리게 된다. 불필요한 데이터베이스 체킹이 한번씩 더 날아간다. 이럴 경우를 방지하려면 더티체킹이 돼야 한다. 간단하게 말하면 .. 2022. 12. 3.
반응형