분류 전체보기251 [빅데이터 저장 및 분석을 위한 NoSQL & Redis] Chapter 3 - 트랜잭션 제어 & 사용자 관리 3.1 Isolation & Lock 모든 NoSQL 제품이 트랜잭션을 제어하지는 않지만, Redis는 트랜잭션 제어 가능. Redis는 Read Commited 타입의 트랜잭션 제어도 가능함. Redis 4.0 버전에서 Data Sets 락 매커니즘 제공. 3.2 CAS (Check and Set) CAS는 데이터 일관성 공유를 위한 기술로 동시 처리 시 충돌을 피함. Watch 명령어를 사용하여 충돌 감지 가능. 3.3 commit & rollback EXEC: 변경한 데이터 최종 저장에 사용. DISCARD: 변경한 데이터 최종 저장하지 않고 취소. 3.4 Index 유형 및 생성 Redis는 Primary Key Index와 Secondary Key Index를 제공. Exact Match와 Ra.. 2023. 8. 20. [빅데이터 저장 및 분석을 위한 NoSQL & Redis] Chapter 2 - Redis 설치 및 데이터 처리 Redis의 주요 특징 Redis는 NoSQL 데이터베이스로 분류되며 Key-Value 형태로 데이터를 관리합니다. Key-Value DB인 동시에 In-Memory 데이터 처리와 저장 기술을 제공하므로 빠른 Read/Write 성능을 가지고 있습니다. 다양한 데이터 유형을 지원하며 String, Set, Sorted Set, Hash, List, HyperLogLogs 등을 저장할 수 있습니다. 메모리 상의 데이터를 Dump 파일과 AOF(Append Of File) 방식으로 디스크에 저장할 수 있습니다. Master/Slave Replication을 통해 데이터의 분산 복제를 지원하며 Query Off Loading을 통해 Master는 Read/Write 작업, Slave는 Read 작업을 수행할 .. 2023. 8. 20. JPA 집계함수 sum 은 long 을 반환한다. 최근 대량의 데이터들을 집계하여 조회하는 API 프로젝트를 진행 중에, Spring Data JPA 와 Querydsl 을 이용하여 쿼리를 작성하고 있었다. 오늘, sum 집계 함수 때문에, java object 로 매핑이 안되는 문제가 있었는데, 그 이유와 해결과정을 설명해보겠다. 기존 쿼리 @Query( """ select new service.dto.PaymentTotalSumDTO( sum(sub.totalAmount) as totalAmount, sum(sub.discount) as discount, sum(sub.usedPoint) as usedPoint ) from (select tpd.totalAmount as totalAmount, tpd.discount as discount, tpd.u.. 2023. 7. 26. [빅데이터 저장 및 분석을 위한 NoSQL & Redis] Chapter 1 - NOSQL 개념 Chapter1 - NOSQL 개념 NOSQL Not Only SQL 기존 SQL 뿐만 아니라, SQL 이 할 수 없는 영역의 기술도 제공하는 대체, 보완 기술 장점 클라우드 컴퓨팅 환경에 적합하다. RDBMS 에 비해 비용 및 성능 지연 문제에 적합 구축 단계에 비용 발생이 덜하다. 유연한 데이터 모델 RDBMS 는 데이터 베이스를 설계하기 위해 필요한 선수 개념들이 많다. 비정형 구조인 컬렉션, 테이블, 노드는 구체적이고 까다롭지 않기 때문에, 설계하기 쉽다. 빅데이터 처리에 효과적 RDBMS 보다 빅데이터 처리에 효과적이다. 빅데이터 처리에 대응하기 위해 나온 데이터베이스이기 때문. NOSQL 종류와 선정 기준 순차적으로 조건을 만족하며 선정 기준을 세분화한다. 1. 초당 5만건 이상의 데이터가 발.. 2023. 7. 23. 여유를 가진다는 것 여유를 가진다는 것. 그건 참 배부른 고민이라 생각했다. 스스로 정한 목표를 이루기 전 준비와, 이루는 중에 누리는 여유는 감히 누리지 못할 사치라 생각했었기 때문이다. 난 여유롭지 않은 사람이다. 해야만 하는 일을 명확히 깨달은 날 이후로, 몇 분, 몇 초 하나하나 쪼개며 아낄 수 있을 시간을 최대한 아꼈다. (얼마나 급하면 걸음 속도가 빠른 것에 대해 핀잔을 많이 받았다..ㅋㅋㅋㅋ) 사회생활을 시작하며, 여유로운 분들을 많이 보아왔다. 대게 나이가 30대 이상인 분들이 대다수인데. 분명 나는 말과 행동이 느린 사람들을 답답하다 생각했는데, 한 차원 더 높이 올라와 보니, 반대였다. 충분히 생각하고, 행동하는 사람들은 무게감이 있다. 심리적인 요인인건가? 그러한 분들을 대할 때, 나 또한 템포를 맞추게.. 2023. 7. 22. 세상에 무엇을 줄 수 있을까? 너에게 무엇을 줄 수 있을까? 사회생활을 하면서 give 행위에 대한 생각이 많이 들었다. 난 정이 많아, 사람에게 한 없이 관대하게 대한다. 내가 손해를 보더라도 무엇이든 주고 싶다. 주변 사람에게 이로움을 가져다 주는 내 '공유' 라는 가치관은, 그 것을 그 사람이 필요로 하는 상황에서 그 가치가 발현되는 것만 같다. 하지만, 그 발현 정도가 내 이상과 현실에서 차이가 크다. 이미 알고 있겠구나, 이미 이런 것 까지 생각을 마쳤겠거니 하고. 단순하게 생각할 필요가 있다 내 머릿 속에 피어나는 수 많은 예측과 생각보다 대다수의 사람들과 세상은 마치 로봇처럼, input output 에만 치중한 행위를 하는 것만 같다. 그렇기에, 나의 머리에서 번뜩이던 생각, 혹은 내가 알게 된 지식 및 경험 충분히 공.. 2023. 7. 12. 새로운 곳에서, 한 달의 회고와 그 동안 묶인 이런저런 생각들 새로운 팀에 합류한지 벌써 1달이 지났다. 시간 참 빨리 지난다. 아직 20대 중반 밖에 안되었는데, 진심 너무 빨리 간다.. 개발을 공부하며 관심있던 도메인인 인증과, 결제 중 결제 도메인으로 백엔드 개발 커리어를 이어가게 되었다. 혼자 공부하며 적용했던 결제와는 다르게, 실제 이루어지는 결제는 체계적인 프로세스를 통해 이루어진다는 사실을 실감하는 중이다. 온라인, 오프라인 결제든, VAN 사를 꼭 거쳐야 하는데, 이 작업을 처음으로 코딩해봤다. 구현하는 과정은 정말 고난의 연속이었다. 핵심적으로 공부했던 부분은 HTTP 통신을 통해 JSON 을 내려주는 API 개발에 대한 과정을 심도 있게 공부했는데, 네트워크 4계층인 TCP/IP 통신을 통해 구현하는 것이 낯설기도 했고, object 단위보다 lo.. 2023. 7. 7. [TCP Socket 통신] Okio 라이브러리를 이용한 kotlin socket 통신 io stream 과 socket 을 이용한 tcp 통신은 java 를 처음 공부할 때, 간단하게 멀티 스레드 채팅 정도의 예제로 이해하며 넘어갔다.. 웬만한 클라이언트 - 서버 간의 통신은 http 로 이루어지므로 이를 더 깊게 파며 공부했었다. 이번에 이직한 회사에서 본격적으로 맡게 된 첫 과제는 TCP 전문 통신을 구축하는 것이다. 소켓 통신을 구현하는데, java socket api 를 이용하여 순수 구현할 수 있지만, kotlin 에서는 okio 라는 통신 전용 라이브러리가 있다고 해서 이를 한번 사용해서 전문 통신을 위한 소켓 클라이언트 초석을 구현해봤다. 잘 해보지 않은 socket 통신을 이해하고 구현하며 이틀간 많이 고통 받았고, 그 과정에서 좀 더 편리한 kotlin okio 라이브러리.. 2023. 6. 24. [CI-CD 구축] AWS EC2, Docker 를 이용한 Spring Boot 자동 배포 인프라 구축은 참 쉽지 않다. 인프라 공부는 더더욱 어려운 것 같다. 무엇보다 실습을 하려면 비용이 참 많이 든다. 하지만, 원활한 개발을 위해서는 자동 배포를 구축해야지만, 서비스 개발에만 집중할 수 있다. 그래서 백엔드 개발자는 서버 개발 능력 이외에, 어느 정도 인프라 구축 및 환경에 대한 개념을 기본적으로 탑재해야 된다고 생각한다. 이번에 사이드 프로젝트 기획 및 인프라 구축을 해야될 일이 생겼다. 어떻게 최대한 쉽고 빠르게 구축할지 고민을 해뵜다. 이 전에는 jar 파일을 그대로 실행하기 위해 AWS EC2 인스턴스에 고대로 로컬과 비슷한 환경을 구성해 놓고, yaml 도 그대로 넣어놓고, 무중단 배포를 시도했다. Ubuntu 서버에서 할게 참 많았다. 도커를 공부하고, 사용해보면서 EC2 에 .. 2023. 6. 18. 첫 이직 최근, 이직을 했다. 결제 카드 단말기, 포스 등 클라우드 포스 아이템으로 B2B 사업을 하는 스타트업이다. 꽤 짧은 기간 안에 이직을 하게 되었다. 이전 회사에서 5개월 만의 이직을 하는 것이니 말이다. (사실 상 경력이 아닌 신입 포지션이라 봐도 무방하다..ㅎㅎ) 한번 하고자 하는 일은 끝을 보자는 성격이기에, 백엔드 개발자가 되기로 마음 먹고 공부를 하며, 언젠가 끝까지 올라가보자 하는 욕구가 생겼다. 매일 그에 부합하는 환경과 상황을 찾아간다고 생각을 한다. 새롭게 합류하게 된 이 곳은, 꿈 꾸던 백엔드 개발 환경에 근접하다. PR merge 를 위한 충분한 승인 조건, 코드 리뷰, 사용하는 언어의 철학에 맞는 충분한 고민과 그를 녹여낸 결과물, 확장성 있는 아키텍처를 구축하기 위한 고민의 흔적들.. 2023. 6. 12. [아파치 카프카 애플리케이션 프로그래밍 with 자바] 4-4장 스프링 카프카 스프링 카프카 스프링 프레임워크에서 카프카를 추상화하여 효과적으로 사용할 수 있게 만든 라이브러리 카프카 클라이언트에서 활용하는 여러 가지 패턴을 미리 제공함. 스프링 카프카 프로듀서 스프링 카프카 프로듀서는 카프카 템플릿 (Kafka Template) 이라는 클래스를 사용 카프카 템플릿은 프로듀서 팩토리 (Producer Factory) 클래스를 통해 생성 방법 스프링 카프카의 기본 제공 템플릿 application.yml 파일에 옵션을 지정하고 사용 사용자가 직접 카프카 템플릿을 프로듀서 팩토리로 생성 프로듀서 팩토리를 통해 만든 카프카 템플릿을 스프링 빈으로 등록 후 사용 프로듀서에 필요한 각종 옵션을 선언 후 사용 가능 스프링 카프카 애플리케이션 내부에 다양한 프로듀서 인스턴스를 생성하고 싶다면 .. 2023. 6. 6. [아파치 카프카 애플리케이션 프로그래밍 with 자바] 4-3장 카프카 컨슈머 카프카 컨슈머 멀티 스레드 컨슈머 파티션을 여러 개 운영하는 경우, 데이터를 병렬 처리하기 위해서는 파티션, 컨슈머 개수를 동일하게 맞춰야 한다. 토픽의 파티션은 1개 이상으로 이루어짐 1개의 파티션은 1개 컨슈머가 할당되어 데이터 처리 파티션 개수가 n개라면, 동일 컨슈머 그룹으로 묶인 컨슈머 스레드를 최대 n개 운영 가능 n개의 스레드를 가진 1개의 프로세스를 운영 1개의 스레드를 가진 프로세스를 n개 운영 어떤 방식으로 운영할지는 개발자의 선택 공식적으로 지원하는 라이브러리인 자바는 멀티 스레드를 지원하므로, 자바 애플리케이션을 개발한다면, 멀티 스레드로 동작하는 멀티 스레드를 개발하고 적용하면 좋다. 멀티 스레드 컨슈머 운영 중 고려 사항 하나의 컨슈머 스레드에서 예외 상황 (OOM 등등) 이 터.. 2023. 5. 18. [아파치 카프카 애플리케이션 프로그래밍 with 자바] 4-2장 카프카 프로듀서 카프카 프로듀서 카프카 프로듀서는 토픽에 데이터를 저장하는 첫 단계! acks 옵션 프로듀서의 옵션으로 acks 옵션 프로듀서가 전송한 데이터를 클러스터에 얼마나 신뢰성 있게 저장할 지 지정 가능 옵션에 따라 성능이 달라질 수 있다. acks = 0 프로듀서가 리더 파티션으로 데이터를 전송했을 때 리더 파티션으로 데이터가 저장되었는지 확인 하지 않는다 리더 파티션은 데이터가 저장된 이후, 몇 번째 오프셋에 저장되었는지 return 이 경우에는 데이터가 저장된 여부에 따른 응답을 받지 않음. 프로듀서는 데이터 전송 실패시, 재시도할 수 있게, retries 옵션 설정 가능 하지만 acks = 0 일 경우, 데이터 전송을 무조건 성공으로 간주, 해당 옵션은 무의미하다. 프로듀서와 브로커 사이의 네트워크 오류.. 2023. 5. 7. [아파치 카프카 애플리케이션 프로그래밍 with 자바] 4-1장 토픽과 파티션 토픽과 파티션 토픽이 사라지면 카프카 파이프 라인은 동작하지 않음. 적정 파티션 개수 토픽의 파티션의 개수는 카프카 성능과 밀접한 관계가 있다. 파티션의 개수를 적절하게 설정하고 운영하자. 파티션 개수를 정할 때 고려할 점 데이터 처리량 메시지 키 사용 여부 브로커와 컨슈머의 영향도 파일 시스템을 사용하는 카프카는, 파티션의 수 만큼 파일에 접근한다. 운영체제 특성 상 프로세스 당 접근 가능한 파일 개수가 정해져 있다. 브로커가 접근하는 파일 개수를 안정적으로 유지하고 싶을 경우는, 카프카 브로커의 수를 늘리면 된다. 데이터 처리 속도를 올리자 컨슈머의 처리량 늘리기 컨슈머가 실행되는 서버를 스케일업 GC 튜닝 컨슈머는 (S3, 하둡, 오라클 등등) 의 시스템과 연동되므로, 일정 수준 처리량을 높이는데,.. 2023. 5. 5. 하고 싶은 것만 하며 살 순 없다 현대의 사람들이 단적으로 추구하는 "행복". 근데 그게 뭔데? 참으로 추상적이지 않을 수 없다. 전에도 생각을 마쳤다시피 행복은 추상적인 것이다. 결국, 남들과 비교하며 느끼잖아.. 실체가 없다. 근데 왜 추상적인 "감정" 이란 것에 목을 맬까? 생각해 봤다. 의미 부여를 하지 않으면 미치는 게 인간이다. 자신이 하고자 하는 일에 투자하는 시간, 감정 등이 결국 한정된 자원이기 때문이다. 의미 부여를 함으로써 인간은 비로소 자기 자신이 하는 일에 대한 정당성을 부여받는다. 왜 정당성을 부여받아야 하는가? 그래야, 인정을 받기 때문이다. 왜 인정을 받아야 하는가? 그것이 곧, 자신의 가치를 증명하는 수단이기 때문이다. 적어도 남성은 자기 자신의 가치를 일생 동안 증명해야 하는 존재다. 그렇기 때문에, 남성.. 2023. 4. 23. 이전 1 2 3 4 5 6 ··· 17 다음 반응형