* 이 글은 카프카 핵심 가이드 - 대규모 실시간 데이터와 스트림 처리 [ 개정증보판 ]를 읽고 스터디 후 작성한 글입니다. 3장. 카프카 프로듀서 : 카프카에 메시지 쓰기 카프카 사용 예시 큐, 메시지 버스, 데이터 저장 플랫폼 등으로 활용 프로듀서(데이터를 씀)나 컨슈머(데이터를 읽어 올 때 사용) 혹은 두 가지 기능을 모두 수행하는 애플리케이션 생성해야 함. 즉, 아파치 카프카는 개발자들이 카프카와 상호작용 하는 애플리케이션을 개발할 때 사용 할 수 있는 ‘클라이언트 API’와 함께 배포됨 프로듀서를 사용하는 방법에 대해 배움 프로듀서의 디자인 프로듀서 주요 요소의 전체적인 모습 KafkaProducer와 ProducerRecord객체 생성법 카프카에 레코드 전송하는 법 카프카가 리턴할 수 있는 에..
* 이 글은 카프카 핵심 가이드 - 대규모 실시간 데이터와 스트림 처리 [ 개정증보판 ] 를 읽고 작성한 글 입니다. 1.1 발행/구독 메시지 전달 1.2 카프카 입문 카프카에 저장된 데이터는 순서를 유지한 채로 지속성 있게 보관, 결정적(deterministic)으로 읽을 수 있음. 확장 시 성능을 향상하고 실패가 발생하더라도 데이터 사용에는 문제가 없도록 시스템 안에서 데이터를 분산시켜 저장할 수 있음. “분산 커밋 로그” “분산 스트리밍 플랫폼” 아파치 카프카 주요 기능 : 일정 기간 동안 메시지를 지속성 있게 보관하는 보존 기능 특정 기간, 특정 사이즈에 도당 할 때 까지 보존하도록 설정 가능(만료 시 삭제) 1.2.1 메시지와 배치 메시지 : 데이터의 기본 단위(단순히 바이트의 배열→ 특정한 형..
1. CollectionFramework란? 자바에서 컬렉션 프레임워크(collection framework)란 다수의 데이터를 쉽고 효과적으로 처리할 수 있는 표준화된 방법을 제공하는 클래스의 집합을 의미함. 즉, 데이터를 저장하는 자료 구조와 데이터를 처리하는 알고리즘을 구조화하여 클래스로 구현해 놓은 것. 자바의 인터페이스(interface)를 사용하여 구현됨. 2. Collection Framework 주요 인터페이스 List 인터페이스 Set 인터페이스 Map 인터페이스 List와 Set 인터페이스는 모두 Collection 인터페이스를 상속받지만, Map 인터페이스는 구조상의 차이로 인해 별도로 정의됨. 즉, List 인터페이스와 Set 인터페이스의 공통된 부분을 Collection 인터페이스..
AWS 비용 줄이기 프로젝트 2일 차, EC2 인스턴스 하나에 프로젝트들을 전부 올리기 위해 방법을 구상하던 중, 요새 그렇게도 많이 들려오는 Docker라는 놈이 궁금해졌고 하나의 인스턴스에 여러 개의 프로젝트를 단순히 띄우는 것이 아닌 도커 컨테이너를 통해 띄우는 방향으로 잡고 진행해보고자 했다. 대략적으로 건너건너 들은 바로는 Docker를 통해 여러 개의 컨테이너를 동시에 띄울 때에는 Docker Compose를 사용하는 것 같은데, 우선 가장 기본적인 Docker를 통해 Ec2 인스턴스에 간편하게 프로젝트를 띄우는 것을 먼저 시도해보고자 한다. 1. Docker 그게 뭔데? Docker란 컨테이너 기반의 가상화 기술이지만, 기본의 Virtual machine과는 다르게 Host의 OS를 공용함으..
1. 안녕하세요? AWS에 벽돌 12,000장쯤 사준 YanaKo94입니다. RDB 인스턴스를 줄여야할 필요성의 대두..(feat 비용절감... 어디부터 해볼까..!) 그렇다, 프로젝트를 AWS RDS와 EC2를 통해 배포한 지 어언 1년가량이 흘렀고... 나의 AWS 관련 비용 지출은 이제는 조금 자신 있게 "아마존에 벽돌 낭낭히 사줬습니다"라고 할 수 있을 정도가 되어버렸다. 프로젝트를 내리고 싶지 않았기에 결국 비용 절감을 위해 기존 배포방식을 변동하기로 결심했고, EC2의 경우 인스턴스를 합치기 전에 CD를 구축하면서 업로드받는 resorce를 인스턴스 내부에 저장하는 방식에서 S3 storage로 변경하는 것이 필요하다고 판단해 우선 RDB부터 정리를 시작했다. 2. mysqldump, 뭐하는 ..
💡 JPA Lazy Loding관련 오류인줄 알았으나, Dto 적용시 Response에 @Getter를 생성해주지 않아 발생한 문제였다. 에러코드 "Internal error - Type definition error: [simple type, class wanted.preonboarding.backend.post.dto.PostResponse] \n cause : com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class wanted.preonboarding.backend.post.dto.PostResponse and no properties discovered to create BeanSeria..
1. @Embedded , @Embeddable : JPA_ Entity의 가독성 높이기 1.1 Member Entity의 기존 구성요소 public class Member extends Auditable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(nullable = false, unique = true) private String email; @Column(length = 20) private String nickname; private String password; private String realName; @Column(nullable = false, unique = true) private ..
프로젝트를 진행하며 Member에 대한 CRUD를 구현하던 중, 가장 고민이 됐던 부분은 Update라고 말할 수 있다. 1. Setter방식, 과연 이대로 괜찮은가? 처음에는 아래와 같이 Member Entity의 @Setter를 열어둔 뒤, update시에 Dto를 통해 받아온 값들을 Entity에 각각 SetXXX해주는 방식을 사용했었다. @Transactional public Member updateMember(Member member) { Member existingMember = getMemberByEmail(member.getEmail()); existingMember.setEmail(member.getEmail()); existingMember.setPassword(member.getPas..
백엔드 개발자로 취업을 준비하며, 국비교육 이후 몇 개의 프로젝트들을 진행해 왔지만 "매력 있는 신입 개발자"가 되기에는 모자람을 느꼈다. 이에 백엔드 개발자 커뮤니티와 각종 커피챗에 참여해 현직 미들, 시니어급 개발자분과 이야기를 나눈 후 Spring Framework의 Security와 Oauth2, JPA, Batch 등 실무에서 기본적으로 다룰 기능들이 포함되며 Testcode와 api 명세 자동화에 대한 나만의 고민이 담긴 프로젝트를 취업 준비와 병행하기로 결정해서 진행 중이다. 이미 시작한 지는 조금 되었지만 기존 프로젝트들과 다르게 하나하나 많은 고민들이 담긴 프로젝트이기에 작은 고민까지 하나하나 기록에 남기고 싶어 블로그 연재를 시작한다. 우선, 아키텍처는 멀티모듈 아키텍처를 선정해서 진행..
재귀함수란? 📌 자기 자신을 호출하는 함수 재귀함수를 많이 호출하면 Call stack max 에러 발생 반복문이란? 📌 특정 구문을 특정 수만큼 반복하는 함수 재귀함수와 반복문 비교 실행 속도 : 반복문이 재귀함수보다 더 빠름 재귀함수 : 매개변수, 리턴값, 리턴시 돌아가야 하는 위치 등의 정보가 스택에 저장됨 반복문 : 필요 없음(오버헤드 없음) 가족성 : 재귀함수가 가독성이 더 좋음 변수 사용 : 재귀함수 사용 시 변수 사용을 줄일 수 있음 꼬리 재귀함수란? 📌 재귀함수의 오버헤드를 줄이기 위한 방법 일반 재귀 function factorial (number) { if(number === 1) return 1; return n * factorial(n - 1); } 꼬리 재귀 : 재귀함수를 호출한 ..
Validation이란? 📌 [사전] 유효성 검증, 주로 사용자 또는 서버의 요청 내용에서 잘못된 내용이 있는지 확인하는 단계 Validation의 종류 데이터 검증 필수 데이터의 존재 유무 문자열 길이나 숫자형 데이터의 경우 값의 범위 email, 신용카드 번호 등 특정 형식에 맞춘 데이터 비즈니스 검증 서지스의 정책에 따라 데이터를 확인하여 검증 배달앱의 경우 배달 요청 시, 해당 주문 건이 결제 완료 상태인지 확인 등 경우에 따라 외부 API를 호출하거나 DB의 데이터까지 조회하여 검증하는 경우도 존재함 Speing core Tech - Validation란? 📌 Spring 에서는 WEB layer에 종속적이지 않은 Vaildation을 하고자 노력 Spring의 Vaildation( 둘 다 데이..
GC(Garbage collector)란? 📌 자바의 메모리 관리 방법 중 하나로 JVM의 Heap 영역에서 불필요한 메모리를 주기적으로 삭제하는, 즉 Garbage collection을 해주는 프로세스를 말함. Mark and sweep과 Stop The World를 통함. JAVA에서 객체들은 실질적으로 Heap영역에 생성되고 Method Area나 Stack Area, Root Area에서는 Heap에 생성된 객체의 주소만 참조하는 형식 GC의 대상 Heap 영역에 있는 객체들 중 어디서든 참조하고 있지 않는 (Unreachable한) 객체 GC의 대상 개발자가 메모리 관리, 메모리 누수(Memory Leak)에 대해서 완벽하게 관리하지 않아도 되며, 개발과 비즈니스 로직에만 더 집중할 수 있음 J..