본문 바로가기

분류 전체보기

(28)
Kafka + Docker + Docker-compose 예제 내가 최종적으로 구현하고 싶은 것은 웹스크랩핑을 통해 얻은 데이터를 카프카를 통해 분산처리 하여 디비에 저장하는 것이다그러기 위해선 우선 연습용으로 로컬에서 Docker로 Kafka를 설치하는 방법을 기록해보려고 한다(상용서버에서는 최소 3개의 Kafka 클러스터를 구성한다고 하는데 aws 프리티어 계정을 쓰고 있는 현재로써는 우선 한개만...ㅜ)  Docker, docker-compose 가 설치되어 있다는 전재하에 진행해보겠다 !  kafka-compose.yml파일 생성우선 Docker로 kafka를 설치하기 위한 kafka-compose.yml파일을 만들어주자kafka-compose.ymlversion: '3.8'services: zookeeper: image: wurstmeister/z..
AWS 프리티어 계정인데 과금된 이유 feat.퍼블릭 IPv4 최근에 aws 프리티어 계정으로 인스턴스를 생성해서 배포 작업을 진행했다그런데 갑자기 요금을 납부하라는 메일이 왔다..!난 분명 프리티어 계정으로 진행중이고 만든지 얼마 안된 프로젝트라 용량도 크지 않은데.. 우선 어디서 비용이 청구되었는지 알아보자 빨간박스를 보면 ec2가 아닌 또다른 퍼블릭 IP가 사용되고 있었고 이것에 대한 비용이 청구되고 있었다  어떤 것이 public IP를 사용하고 있는지 확인해보자 AWS 콘솔 > VPC IP Address Manager > 퍼블릭 IP 인사이트 > 퍼블릭 IP주소 섹션 확인  지금은 삭제되어서 안보이지만 위의 EC2 public IP제외하고 RDS관련 public IP가 또 존재하고 있었다 ㅜㅜ 이전에 rds만들 때 내 로컬 피시의 디비 툴에서도 rds를 접..
[Spring boot] Gmail SMTP ( Simple Mail Transfer Protocol) 이메일 전송하는 방법 JAVA에선 이미 메일을 보낼 수 있게 개발 해놓은 인터페이스가 존재하는데 바로 'JavaMailSender' 이다. 그 중 나는 Gmail SMTP 를 사용해서 이메일을 발송할 것이다. SMTP ( Simple Mail Transfer Protocol) : 메일 서버에서 인터넷을 통해 보내는 전자 메일에 사용하는 전자 메일 프로토콜 먼저 코드를 작성하기에 앞서 보안 선처리가 필요하다. 구글 로그인 후 계정 > 보안 에 들어간다 2단계 인증 로그인이 완료되었으면 검색에 '앱비밀번호' 를 검색해서 들어가준다 그리고 다음과 같이 앱 비밀번호를 하나 만들어준다 나는 앱 이름을 my_exchange로 설정하였고 설정을 완료하면 다음과 같이 앱 비밀번호를 생성해준다 생성된 비밀번호는 코드에서 사용할 것이므로 따..
[SPRING] Spring batch 오류 해결 Step already complete or not restartable, so no action to execute: StepExecution: 이전에 만들었던 spring batch 코드를 다시 실행시켜보니 다음과 같은 오류가 발생했다. Step already complete or not restartable, so no action to execute: StepExecution: 내 코드는 이전 포스팅에서 예제로 사용했던 miracleMorning() job이다. Spring boot batch 및 scheduler 예제 포스팅 👉 https://seo-0.tistory.com/28 왜그런지 한참 찾아보니 job builder를 선언해주는 부분에서 .end()로 flow를 종료하면서 Job의 BatchStatus와 ExitStatus가 COMPLETED으로 리턴된다. 이 때 Job의 재시작이 불가능하다!!! public Job miracle..
[SPRING] Spring batch 와 Spring Scheduler 예제 Spring Batch : 대용량 일괄처리의 편의를 위해 설계된 Spring Boot 배치 프레임워크로, 배치 프로그램의 기본적 구성 요소인 로깅, 병렬처리, 대용량 데이터 처리를 위한 작업들을 제공한다. Job & Step 스프링 배치의 가장 기본이 되는 구성요소로 Job 안에는 여러 Step이 존재하고, Step 안에 Tasklet 혹은 Reader & Processor & Writer 묶음이 존재하며 다음과 같은 예시를 들 수 있다. JOB(name = "miracleMorning") : 매일 아침 6시에 일어나면 커피를 마시고 운동을 간다 만약 그렇지 못하면 물을 마시고 운동을 간다 Step(name = "wakeUp") : 일어난다 Step(name = "drinkCoffee") : 커피를 마..
[SPRING] 싱글톤 패턴, 싱글톤 컨테이너와 Bean 싱글톤 패턴 Singleton pattern 여러 소프트웨어 디자인 패턴 중 하나로, 싱글톤 패턴을 따르는 클래스는 생성자가 여러 차례 호출되더라도 실제로 생성되는 객체는 하나이고 최초 생성 이후에 호출된 생성자는 최초의 생성자가 생성한 객체를 리턴하는 디자인 패턴이다. 사용이유 메모리 낭비를 줄이기 위해 순수 DI(Dependency Injection 의존성주입) 컨테이너 여기서 m1과 m2는 서로 다른 객체이다 void test(){ AppConfig appConfig = new AppConfig(); MemberService m1 = appConfig.memberService(); MemberService m2 = appConfig.memberService(); // m1 != m2 } 싱글톤 패턴..
[SPRING] 다중 Database 및 분산 Transaction 설정 예제 ChainedTransactionManager vs JtaTransactionManager Spring boot JPA 다중 database를 설정한 후 여러 datasource에 다중 transaction 설정을 하려고 한다 먼저 다중 database를 설정해주자 다중 Database 설정 yml 파일에 다음과 같이 2개의 디비를 선언해준다 첫번째 database : my_advanced_admin 두번째 database : my_advanced_member spring: datasource: admin: driver-class-name: com.mysql.cj.jdbc.Driver jdbc-url: "jdbc:mysql://127.0.0.1:3306/my_advanced_admin?serverTimezone=UTC&characterEncoding=UTF-8" username: "root" ..
[JPA] @CreatedDate @LastModifiedDate 오류 해결 문제 상황 : @CreatedDate @LastModifiedDate 어노테이션을 사용해서 Entity에 날짜 데이터를 담으려고 하는데 계속 null로만 데이터가 들어온다 해당 entity를 JPA save 메소드를 사용해서 디비에 insert 시켰지만 createdAt 컬럼과 updatedAt 컬럼의 값에 어노테이션 적용이 제대로 되고 있지 않는다 원인 : JPA Auditing 설정을 추가해주자 먼저 어노테이션을 적용하고자 하는 Entity에 @EntityListeners(AuditingEntityListenet.class) 를 붙여준다 그리고 JPA Auditing 어노테이션들을 모두 활성화 할 수 있도록 Application.class 파일에 활성화 어노테이션 @EnableJpaAuditing을 ..