본문 바로가기

spring25

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.
Github Action을 이용한 CI/CD 그동안 CI/CD구현을 위해 젠킨스를 사용했었는데 이번 프로젝트에서 EC2를 프리티어로 사용해서 젠킨스를 돌릴수가 없어서 Github Action을 사용해 보았다. 사용방법은 젠킨스에 비하면 훨씬 간단했다. GitHub Action 시작 먼저 Git 레포지토리의 Actions 탭에 들어가서 새로운 workflow를 만들어준다. 탭을 누르면 위와 같이 기본적으로 제공하는 여러 workflow가 있는데 나는 Java with Gradle을 선택하겠다. Set up this workflow 버튼을 클릭하면 yml 파일을 작성할 수 있는 화면으로 이동한다. 이처럼 workflow별로 기본적인 세팅은 모두 제공한다. 여기서 몇가지를 수정하여 Docker로 배포할 수 있는 환경세팅을 해줘야 한다. name: Jav.. 2021. 9. 14.
Docker를 이용한 Spring 프로젝트 배포 일반적으로 프로젝트를 실행할 대 jar파일로 실행하거나 ide가 재공하는 기능을 사용한다. 클라우드 환경에 배포를 할 경우 jar파일로 배포를 보통 해왔는데 이번에는 Dockerfile을 이용해서 배포를 해보았다. 예제는 개인 window 컴퓨터에서 진행했으며 클라우드(Linux) 환경에 배포할 때도 GUI에서 CLI환경으로 바뀌는 것 외에는 차이가 없으니 그냥 진행하겠다. Build 먼저 만들어진 프로젝트를 빌드를 해야한다. ./gradlew build build를 하게 되면 프로젝트의 build 폴더에 jar파일이 생성된다. Dockerfile 빌드가 완료됬으면 Dockerfile을 만들어줘야한다. 생성한 프로젝트의 Dockerfile을 생성해주자. 파일 이름은 정확히 Dockerfile 이여야 한다.. 2021. 9. 13.
자바 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.