전체 글

네, 저 밑바닥에서 왔습니다
"아파치 카프카 애플리케이션 프로그래밍 with 자바"교재의 학습 내용을 정리하였습니다    우선 토픽이란?  토픽은 카프카에서 데이터를 구분하기 위해 사용하는 단위임! => 토픽은 1개 이상의 파티션을 소유하고 있음 (파티션에는 프로듀서가 보낸 데이터들이 들어가 저장되는데 이 데이터를 '레코드' 라고 부름) 레코드에 대해 자세히 알아보고 가자 레코드는 타임스탬프, 메시지 키,  메시지 값, 오프셋, 헤더로 구성되어 있음 프로듀서가 생성한 레코드가 브로커로 전송되면 오프셋과 타임스탬프가 지정되어 저장됨 => 브로커에 한번 적재된 레코드는 수정할 수 없고 로그 리텐션 기간 또는 용량에 따라서만 삭제됨 로그 리텐션이란 카프카 브로커에 저장된 메시지(레코드)를 얼마나 오래 보관할지를 결정하는 정책임=> 카프카..
·Algorithm
국민대학교에서 "쉽게 배우는 알고리즘" 교재를 이용한 박하명 교수님의 강의 교안을 이용하여 수업 내용을 정리하였습니다 Algorithm Analysis 알고리즘 : 어떤 문제(Problem)를 해결하기 위한 절차나 방법을 공식화한 형태로 표현한 것 => 여기서 문제란 입력(Input)과 출력(Output)의 관계 정렬 문제를 예시로 봤을 때Input : 정렬되지 않은 숫자들의 목록Output : 오름차순으로 정렬된 숫자들의 목록 한 문제는 다양한 알고리즘으로 해결할 수 있음  Problem : n을 n번 더한 값은?   누가봐도 3번을 채택할텐데 가장 효율적이고 쓰기 좋은 알고리즘을 선택해야하고 이것은 곧 효율성과 용이성이 좋다는 의미 (알고리즘에서는 효율성을 주로 신경씀) 그럼 알고리즘의 효율성은 어떻..
"아파치 카프카 애플리케이션 프로그래밍 with 자바" 교재의 학습 내용을 정리하였습니다  우선 시작하기에 앞서 카프카란? 카프카는 파이프라인, 스트리밍 분석, 데이터 통합 및 미션 크리티컬 애플리케이션을 위해 설계된 고성능 분산 이벤트 스트리밍 플랫폼임 => Pub-Sub 모델의 메시지 큐 형태로 동작하며 분산환경에 특화되어 있음 카프카 브로커 · 클러스터 · 주키퍼 카프카 브로커는 카프카 클라이언트와 데이터를 주고받기 위해 사용하는 주체이자, 데이터를 분산 저장하여 장애가 발생하더라도 안전하게 사용할 수 있도록 도와주는 애플리케이션이다! => 하나의 서버에는 한 개의 카프카 브로커 프로세스가 실행됨 (카프카 브로커 서버 1대로도 기본 기능이 실행되지만 데이터를 안전하게 보관하고 처리하기 위해 3대 이..
·Infra/AWS
프로젝트를 배포하던 중 AWS EC2에서 메모리 부족 현상으로 ssh 접속이 안되는 상황이 발생했다...(프리티어 사용중)  프리티어로 사용하게 되는 t2.micro 인스턴스 유형은 램이 1GB이기 때문에 메모리 부족현상이 일어날 수 있다! => swap file을 이용하여 swap memory 할당을 해보자!(현재 생성한 EC2는 ubuntu 환경임)  EC2 램이 가득 찼기 때문에 실제 디스크의 용량을 이용하여 부족한 메모리를 대체할 공간을 swap memory 라고 함! => 보통 swap memory는 할당된 메모리의 2배를 추천하고 있다고 함! 스왑 메모리는 RAM을 대신하는 것이 아니라, RAM이 부족할 때 임시로 사용하는 비상 메커니즘으로 생각하는게 좋음=> 디스크에 저장된 스왑 메모리는 R..
·Infra/AWS
EC2에 mysql을 docker를 이용해서 올려보자  https://hanjungyo.tistory.com/74 [Spring Boot] Docker를 이용해 EC2에 배포해보기EC2 인스턴스 생성 방법은 이전 포스팅을 참고해주세요!로컬에서 Docker 설정 Jar 파일 빌드하기 보통 빌드를 할 때 ./graldew clean build 를 많이 봤을텐데  이번에는 ./gradlew clean bootJar를 통해 Spring Bhanjungyo.tistory.com EC2에 docker가 설치되어있지 않다면 위 링크의 docker 설치하기 부분을 참고  EC2에 ssh로 접속을 하고 MySQL Docker Image 다운로드 sudo docker pull mysql // 제일 최신 버전 다운로드// ..
·Backend/Spring
EC2 인스턴스 생성 방법은 이전 포스팅을 참고해주세요!로컬에서 Docker 설정 Jar 파일 빌드하기 보통 빌드를 할 때 ./graldew clean build 를 많이 봤을텐데  이번에는 ./gradlew clean bootJar를 통해 Spring Boot 애플리케이션을 위한 실행 가능한 JAR파일만 생성했음  ./gradlew build는 bootJar를 포함하여 내부 동작이 더 길다반면, bootJar의 경우 단순히 프로젝트의 jar파일을 만드는 목적으로 빌드 속도가 빠르다(clean 작업은 build/ 와 같은 빌드 산출물 디렉토리를 삭제하여 이전 빌드 결과물을 모두 제거함) Dockerfile 생성하기# Dockerfile# jdk17 Image StartFROM openjdk:17# jar..
·Backend/Spring
알아보기 좋은 예외 처리를 위해 Spring Boot에서 Custom Exception을 설정해보자!! ErrorCode enum 생성 및 설정 springboot 에서 에러를 발생시켰을 때, 전달할 에러 코드를 관리하는 enum을 생성해준다! enum(열거형)은 서로 연관된 상수들의 집합을 정의할 때 사용하는 특별한 자료형임!=> 주로 몇 가지 값 중 하나만 선택해야 하는 경우에 사용됨(계절, 요일, 상태 등)  package berich.backend.exception;import lombok.RequiredArgsConstructor;import org.springframework.http.HttpStatus;@Getter@RequiredArgsConstructorpublic enum ErrorCo..
·Infra/Docker
Docker를 알아보기 위해서는 컨테이너와 가상화에 대해 먼저 이야기를 해야한다! 컨테이너 그럼 컨테이너란 무엇일까? 소프트웨어와 SW를 실행하기 위해 필요한 모든 구성 파일을 포함한 소프트웨어 패키지라고 생각하면 됨! 컨테이너가 왜 필요할까? 만약 FastAPI 와 Flask를 이용해 각각 서버를 구축하기 위해 로컬에 직접 python 라이브러리들을 설치했다고 생각해보자 프로젝트 간 라이브러리 의존성 충돌 문제, python 버전 충돌 문제 등등 여러 문제들이 발생할 수 있다 => 이를 위해 프로젝트(서비스)마다 컨테이너를 만들어서 환경을 격리하는게 좋음!   Dockerfile은 만들고자 하는 컨테이너의 세부사항을 적어놓은 파일이고Requirements.txt는 컨테이너 내부에 설치할 파이썬 라이브러..
💡대규모 분산 처리의 프레임워크💡 ✔️구조화 데이터와 비구조화 데이터 SQL로 데이터를 집계하는 경우, 먼저 테이블의 칼럼 명과 데이터형, 테이블 간의 관계 등을 스키마로 정함 => 스키마가 명확하게 정의된 데이터를 구조화된 데이터라고 한다! (기존의 데이터 웨어하우스에서는 항상 구조화된 데이터로 축적하는 것이 일반적이었음)  스키마가 없는 데이터를 비구조화 데이터라고 함! (자연 언어로 작성된 텍스트 데이터와 이미지, 동영상 등의 미디어 데이터가 포함됨) => 이 상태로는 SQL로 제대로 집계 X 비구조화 데이터를 분산 스토리지 등에 저장하고 그것을 분산 시스템에서 처리하는 것이 데이터 레이크의 개념임=> 데이터를 가공하는 과정에서 스키마를 정의하고, 구조화된 데이터로 변환함으로써 다른 데이터와 마..
💡크로스 집계의 기본💡 ✔️ 트랜잭션 테이블, 크로스 테이블, 피벗 테이블  행과 열이 교차하는 부분에 숫자 데이터가 들어가기 때문에 이를 크로스 테이블이라고 부름 => 사람이 보기에는 편한 보고서이지만, 데이터베이스에서는 다루기 어려운 데이터 형식임(DB에서 행을 추가하는 것은 간단하지만, 열을 늘리는 것은 간단하지 X)   따라서, 보고서의 바탕이 되는 데이터는 행 방향으로만 증가하게 하는게 좋은데 이것을 트랜잭션 테이블이라고 함 트랜잭션 테이블에서 크로스 테이블로 변환하는 과정을 크로스 집계라고 함소량의 데이터를 크로스 집계하는데 편리한 것이 스프레드시트의 피벗 테이블 기능임  피벗 테이블에서는 행과 열이 교차하는 부분의 값은 자동으로 집계됨 결과를 크로스 테이블에 정리할 뿐만 아니라 그래프로 ..
💡빅데이터의 정착💡 ✔️분산 시스템에 의한 데이터 처리의 고속화  클라우드 서비스의 보급으로 기술적인 제약이 적어져 누구라도 마음만 먹으면 데이터를 분석할 수 있는 시대가 되었다 => 이제 대량의 데이터를 활용하여 새로운 가치를 창출하거나 의사 결정을 위해 이용하는 일이 보편화됨 "빅데이터"라는 단어를 자주 접하게 된 것은 2011~2012 기업들이 데이터 처리에 분산 시스템을 도입했을 무렵=> 빅데이터라는 단어가 여기저기서 사용되어 데이터를 비즈니스에 활용하자는 움직임이 활발해짐  빅데이터의 취급이 어려운 이유는 크게 2가지이다! 1. 데이터의 분석 방법을 모른다는 점=> 데이터가 있어도 그 가치를 창조하지 못한다면 의미 X 2. 데이터 처리에 수고와 시간이 걸린다는 점 => 지식이 있어도 시간을 ..
·Backend/Spring
spring boot를 이용하여 프로젝트를 하게 되었는데MySQL을 처음 연동해보면서 기록을 남겨보겠습니다...   implementation 'org.springframework.boot:spring-boot-starter-data-jpa'runtimeOnly 'com.mysql:mysql-connector-j' 우선 build.gradle에 위 2개의 의존성을 추가해준다 📌implementation 과 runtimeOnly 의 차이는 뭘까 궁금증이 들었다!=> runtimeOnly는 컴파일 시점에는 필요없지만 실행 시점에는 꼭 필요한 라이브러리의 의존성을 추가할 때 사용한다고 한다   DB 연동을 위해서는 resources 디렉토리 안에 있는 application.properties를 설정해줘야 하..
JJunGyo
개발 바닥