본문 바로가기

spring23

Spring - Kafka 연동하기 Spring에 Kafka연동 테스트를 하기 위해 두개의 서버, server-a와 server-b를 생성하겠다. Dependency build.gradle.kts implementation ("org.springframework.kafka:spring-kafka:2.8.0") application.yml server: servlet: context-path: /server-a port: 8080 spring: kafka: bootstrap-servers: ${KAFKA_BROKER:localhost}:${KAFKA_BROKER_PORT:9092} listener.ack-mode: MANUAL_IMMEDIATE producer: acks: 1 key-serializer: org.apache.kafka.com.. 2021. 12. 4.
Spring에서 Http Request 보내기 - Feign Feign Feign은 Netflix에서 만든 Http Client Binder이다. Feign을 사용하면 평소에 Http 통신을 위해 사용했던 길고 긴 소스코드를 Spring Data Jpa를 사용하듯이 간편하게 사용할 수 있다. 환경 설정 plugins { id 'org.springframework.boot' version '2.5.4' id 'io.spring.dependency-management' version '1.0.11.RELEASE' id 'java' } group = 'com.example' version = '0.0.1-SNAPSHOT' sourceCompatibility = '11' repositories { mavenCentral() } dependencies { ... imple.. 2021. 9. 19.
자바 ORM 표준 JPA 프로그래밍 - 16장 트랜잭션과 락, 2차 캐시 트랜잭션과 락 트랜잭션과 격리 수준 트랜잭션은 원자성, 일관성, 지속성을 보장한다. 문제는 격리성인데 트랜잭션간에 격리성을 완전히 보장하려면 트랜잭션을 거의 차례대로 실행해야 한다. 이렇게 하면 동시성 처리 성능이 매우 나빠진다. 이런 문제로 인해 ANSI 표준은 트랜잭션의 격리 수준을 4단계로 나누어 정의했다. READ UNCOMMITTED READ COMMITTED REPEATABLE READ SERIALIZABLE 순서대로 READ UNCOMMITED의 격리 수준이 가장 낮고 SERIALIZABLE의 격리 수준이 가장 높다. 격리 수준이 낮을수록 동시성은 증가하지만 격리 수준에 따른 다양한 문제가 발생한다. 격리 수준에 따른 문제점은 다음과 같다 DIRTY READ NON-REPEATABLE REA.. 2021. 9. 5.
자바 ORM 표준 JPA 프로그래밍 - 15장 고급 주제와 성능 최적화 예외 처리 JPA 표준 예외 처리 JPA 표준 예외들은 javax.persistence.PersistenceException의 자식 클래스다. 그리고 이예외 클래스는 RuntimeException의 자식이다. 따라서 JPA 예외는 모두 언체크 예외다. 트랜잭션 롤백을 표시하는 예외 : 트랜잭션 롤백을 표시하는 예외는 심각한 예외이므로 복구해선 안된다. 이 예외가 발생하면 트랜잭션을 강제로 커밋해도 트랜잭션이 커밋되지 않고 javax.persistence.RollbackException 예외가 발생한다. 트랜잭션 롤백을 표시하지 않는 예외 : 트랜잭션 롤백을 표시하지 않는 예외는 심각한 예외가 아니다. 따라서 개발자가 트랜잭션을 커밋할지 롤백할지 판단하면 된다. 트랜잭션 롤백 시 주의사항 트랜잭션을 롤백하.. 2021. 9. 4.
자바 ORM 표준 JPA 프로그래밍 - 14장 컬렉션과 부가 기능 컬렉션 JPA는 자바에서 기본으로 제공하는 Collection, List, Set, Map 컬렉션을 지원한다. @OneToMany, @ManyToMany를 사용해서 엔티티 관계를 매핑 @ElementCollection을 사용해서 값 타입을 하나 이상 보관 하이버네이트는 엔티티를 영속 상태로 만들 때 컬렉션 필드를 하이버네이트에서 준비한 컬렉션으로 감싸서 사용한다. @Test public void test01() { Team team = new Team(); System.out.println("before persist : " + team.getMembers().getClass()); em.persist(team); System.out.println("after persist : " + team.getMe.. 2021. 8. 28.
자바 ORM 표준 JPA 프로그래밍 - 13장 웹 애플리케이션과 영속성 관리 OSIV OSIV(Open Session In View)는 영속성 컨텍스트를 뷰까지 열어둔다는 뜻이다. 영속성 컨텍스트가 살아있으면 엔티티는 영속상태로 유지된다. 따라서 뷰에서도 지연 로딩을 사용할 수 있다. spring: jpa: open-in-view: true // 기본값 OSIV가 true이면 뷰에서도 다음과 같이 지연 로딩을 할 수 있다. @GetMapping public Member findById() { Member member = memberService.findById(); Team team = member.getTeam(); System.out.println(team); ... } 하지만 OSIV를 false로 주게되면 다음과 같이 에러가 발생한다. View까지 영속성 컨텍스트가 유지되.. 2021. 8. 21.