전체 글

전체 글

    아파치 카프카란 무엇일까?

    아파치 카프카란 무엇일까?

    백엔드 아키텍처에서 자주 보였던 플랫폼인 아파치 카프카가 무엇인지 궁금했다. 포춘 100대 기업에서 80개 기업 이상이 도입할 정도이고, 국내 서비스 기업들도 많이 사용하고 있다. 카프카가 나오기 전, 링크드인 개발자들이 대용량·대규모 데이터를 처리하기 위해 여러 플랫폼을 조합해서 사용했지만 실패하였다. 그 후 최초로 배치성 데이터와 실시간 이벤트 스트리밍 데이터를 혼합하여 처리하는 독특한 로직의 플랫폼을 만들어 냈는데, 이것이 "아파치 카프카"의 탄생이다. 아파치 카프카는 이벤트 스트리밍뿐만 아니라, 빅데이터 아키텍처에 있어서 중요한 역할을 하는 만큼 대용량·대규모 데이터 처리에 이를 대체할 플랫폼이 없을 정도이다. 아파치 카프카는 실시간 스트리밍 데이터 처리를 하는 데에 있어 가장 주목받는 프레임워크..

    @Transactional은 조회만 할 때 있어야할까?

    @Transactional은 조회만 할 때 있어야할까?

    스프링 부트 프로젝트를 진행하면서 트랜잭션 어노테이션을 적지 않은곳에서 조회가 잘되고 있었다. 하지만 어느 곳에서는 읽기 전용 트랜잭션인 `@Transactional(readOnly = true)`를 적어 성능 최적화를 하고 있었다. 여기서 든 의문이 트랜잭션이 애초에 없었으면 읽기 전용으로 안만들어도 되는 것이 아닌가? 였다. 📚 그렇다면 한번 살펴보자 SpringBoot JPA를 사용하고 있고, 단순 조회하는 서비스(Service) 계층이 있다고 가정한다. 스프링 컨테이너는 트랜잭션 범위의 영속성 컨텍스트 전략을 기본으로 사용하고 있다. 이것은 말 그대로 트랜잭션의 범위와 영속성 컨텍스트의 생존 범위가 같다는 의미이다. 트랜잭션 시작 → 영속성 컨텍스트 생성 트랜잭션 끝 → 영속성 컨텍스트 종료 이런..

    deleteAll() vs deleteAllInBatch()

    deleteAll() vs deleteAllInBatch()

    기본기를 다지는 혼자만의 프로젝트에서 잘 쓰이지않는 Spring Data Jpa의 deleteAll() 메서드를 사용하게 되었다. DB에서 데이터의 삭제는 매우 중요한 부분으로 실무에서는 잘 쓰이지 않는다고 하였다. (개인정보는 없애고 나머지 부분은 남긴다던지, 복구라든지 데이터가 필요한 부분이 있기 때문에) 자 그럼 나의 상황을 먼저 간략하게 설명하고 deleteAll()와 deleteAllInBatch()를 비교하면서 동작원리도 파헤쳐보자. 엔티티 구조 Comment 엔티티 (댓글) 댓글과 대댓글은 셀프조인 되어있는 구조 Post 엔티티 (게시글) 현재 상황 본인이 등록한 게시글을 DB에서 삭제하려는 행동을 하려고 한다. 이 때 게시글과 연관되어 있는 댓글을 먼저 삭제하여야 게시글을 삭제할 수 있다...

    그리디 알고리즘(Greedy Algorithm)이란?

    개념 그리디 알고리즘은 "탐욕 알고리즘" 또는 "욕심쟁이 알고리즘" 이라고도 불린다. 말 그래도 탐욕스러운 욕심쟁이이기 때문에 선택의 순간마다 최적의 선택을 하여 전체적으로도 최적이길 바라는 방법이다. 선택의 순간마다 최적의 선택을 하여 해답을 만들었다고 해서 그것이 최적의 해답이라는 보장은 없다. 하지만 탐욕 알고리즘을 적용하는 문제들은 지역적으로 최적이면서 전역적으로 최적인 문제들이다. 탐욕 알고리즘을 적용하기 위한 2가지 조건 1. 탐욕스러운 선택 조건 (Greedy Choice Property) => 앞의 선택이 이후의 선택에 영향을 주지 않는 것 2. 최적 부분 구조 조건 (Optimal Substructure) => 문제에 대한 최적해가 부분 문제에 대해서도 최적해라는 것 위 조건이 성립하지 ..

    [CSS] 구글에서 제공하는 폰트 사용하기

    [CSS] 구글에서 제공하는 폰트 사용하기

    https://fonts.google.com/?preview.text_type=custom Google Fonts Making the web more beautiful, fast, and open through great typography fonts.google.com 구글에서 제공하는 폰트 사이트를 들어가면 아래와 같은 화면이 나온다. 저 중에서 원하는 것을 검색하거나 클릭하면 아래 사이트로 상세히 들어온다. 이제 이 폰트를 원한다면 1번을 클릭한다. 그 후 오른쪽 메뉴바가 안나타난다면 2번을 클릭하여 펼친다. 그럼 내가 1번을 클릭하여 추가했던 폰트들이 나온다. 3번에 그 폰트들을 import 하여 사용할 수 있게 나와있는데 html에 적용할 것이라면 저대로 복사하면 되고, 나는 css파일에 넣을것..

    삽입 정렬(Insertion Sort)이란?

    삽입 정렬(Insertion Sort)이란?

    개념 삽입 정렬은 자료 배열의 모든 요소를 앞에서부터 차례대로 이미 정렬된 배열 부분과 비교하여 자신의 위치를 찾아 삽입함으로써 정렬을 완성하는 알고리즘이다. 즉, 삽입 정렬은 2번째 요소부터 시작하여 앞 쪽과 비교하여 위치를 지정한다. 삽입 정렬에서는 정렬할 자료가 2개의 부분집합인 S(Sorted)와 U(Unsorted)로 나뉘어져 있다. 정렬된 앞부분의 요소들은 부분집합 S이고, 정렬되지 않은 나머지 요소들은 부분집합 U이다. 부분집합 U에서 요소를 하나씩 꺼내서 이미 정렬된 부분집합 S의 마지막 원소부터 비교하면서 위치를 찾아 삽입한다. 따라서 S의 요소는 1개씩 늘리고, U의 요소는 1개씩 줄인다. 이렇게 U의 요소를 모두 S에 삽입하여 공집합이 되면 삽입 정렬이 끝난다. 과정 시작 지점이 있으..

    버블정렬(Bubble Sort)이란?

    버블정렬(Bubble Sort)이란?

    개념 버블 정렬은 인접한 두 개의 원소를 비교하여 자리를 교환하는 방식이다. 과정 (굵은 글자는 인접한 두 개의 비교를 뜻하고, 빨간색은 자리 교환이 이루어진 것) {16, 2, 31, 14, 5} 리스트가 있을 때 버블 정렬을 시작하면 1회전 {2, 16, 31, 14, 5} ⇒ (16, 2) 비교하여 16이 더 크므로 자리 교환 {2, 16, 31, 14, 5} ⇒ (16, 31) 비교하여 31이 더 크므로 자리 교환 안함 {2, 16, 14, 31, 5} ⇒ (31, 14) 비교하여 31이 더 크므로 자리 교환 {2, 16, 14, 5, 31} ⇒ (31, 5) 비교하여 31이 더 크므로 자리 교환 1회전을 끝내면 가장 큰 자료인 31이 맨 뒤로 이동하게 된다. 2회전 1회전 때 나온 맨 뒷자리를 ..

    선택정렬(Selection Sort)이란?

    선택정렬(Selection Sort)이란?

    개념 선택 정렬은 정렬되지 않은 데이터들에 대해 가장 작은 데이터를 찾아 가장 앞의 데이터와 교환해나가는 방식이다. 과정 주어진 리스트 중 최소값을 찾는다. 그 값을 맨 앞에 위치한 값과 교체한다. (패스(pass)) 맨 처음 위치를 뺀 나머지 리스트를 같은 방법으로 교체한다. 과정 - 그림설명 1단계 : 첫 번째 자리를 기준 위치로 정하고, 전체 원소 중 가장 작은 원소인 2를 선택하여 자리를 교환한다. 2단계 : 두 번째 자리를 기준 위치로 정하고, 1번 위치를 제외한 나머지 원소 중 가장 작은 원소인 10과 교환한다. 3단계 : 세 번째 자리를 기준 위치로 정하고, 1번과 2번 위치를 제외한 나머지 원소 중 가장 작은 16과 교환한다. 4단계 : 네 번째 자리를 기준 위치로 정하고, 1번과 2번과 ..