본문 바로가기

Study

[백엔드TIL] 쿠버네티스 환경에 대해 알아보기 요즘 IT 생태계에 관심이 많으신 분들이라면 쿠버네티스라는 단어를 들어 보셨을 텐데요. 쿠버네티스에 대해 개발자들의 관심이 높아지고 있고, 여러 대기업에서 새로운 시스템을 쿠버네티스를 기반으로 전환했다는 소식이 종종 들리고 있습니다. 그렇다면 쿠버네티스는 어떤 것이기에 이렇게 주목받고 있을까요? 쿠버네티스를 접해보지 않은 K는 쿠버네티스에 대해 궁금한 것이 많았습니다. 쿠버네티스를 시작하기 전부터 등장하는 여러 가지 용어와 자료가 이해되지 않아 저에게 도움을 요청했는데요, K의 질문을 재구성하여 쿠버네티스와 관련된 개념을 하나씩 알아보겠습니다! Q. 쿠버네티스는 컨테이너를 오케스트레이션 하는 도구라는 글을 많이 봤어요. 도커는 컨테이너를 다루는 도구라고 설명하던데, 그렇다면 쿠버네티스는 도커를 다루는 도.. 더보기
[백엔드TIL]Spring Webflux란 무엇인가? Spring WebFlux는 Spring 5에서 새롭게 추가된 모듈입니다. WebFlux는 클라이언트, 서버에서 reactive 스타일의 어플리케이션 개발을 도와주는 모듈이며, reactive-stack web framework이며 non-blocking에 reactive stream을 지원합니다. 장점 : 고성능, spring 과 완벽한 통합, netty 지원, 비동기 non-blocking 메세지 처리, Back Pressure netty : 프로토콜 서버 및 클라이언트와 같은 네트워크 응용 프로그램을 빠르고 쉽게 개발할 수있는 NIO(Non-Blocking Input Ouput) 클라이언트 서버 프레임 워크 Back Pressure : 스프링 배치에서 다루었던 개념으로 빠른 Publisher - 느.. 더보기
[백엔드TIL] MSA 아키텍처란? 모놀리식 아키텍처 (Monolithic Architecture) 모놀리식 아키텍처는 마이크로서비스(MSA) 아키텍처에 반대되는 개념으로, 애플리케이션의 모든 구성 요소가 한 프로젝트에 통합되어 있는 형태를 말한다. 장점 개발 초기에 단순한 아키텍처 구조로 인해 개발에 용이하다. 어떤 서비스든지 개발되어 있는 환경이 같아서 복잡하지 않다. 배포가 간단하다. 확장성이 쉽다. 로드밸런스를 이용하여 로드 부하를 나눠 가지는 방식으로 진행한다. 쉽게 고가용성 서버 환경을 만들 수 있다. End-to-End 테스트가 용이하다. 단점 프로젝트의 규모가 커짐에 따라 애플리케이션 구동 시간이 늘어나고 빌드 및 배포 시간이 길어진다. 조그마한 수정 사항이 있어도 전체를 다시 빌드하고 배포해야 한다. 많은 양의 코드가 몰려.. 더보기
[백엔드TIL] 정렬 알고리즘을 알아본다. 버블 정렬 (Bubble Sort) 인접한 두 원소를 비교하며 큰 값을 뒤로 이동시키는 방식으로 정렬합니다. 전체 데이터를 순회하며 가장 큰 값이 맨 뒤에 위치하게 됩니다. 시간 복잡도는 최악 및 평균 경우에 O(n^2)이며, 간단하지만 비효율적인 정렬 알고리즘입니다. 삽입 정렬 (Insertion Sort) 배열을 정렬된 부분과 정렬되지 않은 부분으로 나누고, 정렬되지 않은 원소를 정렬된 부분에 삽입합니다. 삽입 정렬은 거의 정렬된 배열에 대해서는 효율적이며, 최선의 경우 시간 복잡도는 O(n)입니다. 하지만 최악 및 평균 경우에는 O(n^2)입니다. 선택 정렬 (Selection Sort) 주어진 배열에서 가장 작은 값을 선택하여 배열의 처음부터 차례대로 위치시키는 방식으로 정렬합니다. 시간 복잡도는.. 더보기
[백엔드TIL] 도커와 도커 컴포즈 활용 만들어논 도커 이미지를 pull 하는 장면 도커 컴포즈 는 여러 개의 컨테이너의 옵션과 환경을 정의한 파일을 읽어 컨테이너를 순차적으로 생성하는 방식으로 동작합니다. 도커 컴포즈의 설정 파일은 도커 엔진의 run 명령어의 옵션을 그대로 사용할 수 있으며, 각 컨테이너의 의존성, 네트워크, 볼륨 등을 함께 정의할 수 있습니다. 더보기
[백엔드TIL] AWS 서비스의 활용경험(81일차) AWS S3, EC2를 사용하는 이유와 사용 경험에 대해서 답변해주세요. S3 확장성: AWS S3는 필요에 따라 데이터 저장 공간을 확장할 수 있는 무한한 스케일링을 제공합니다. 데이터 양이 증가하더라도 추가적인 서버 또는 인프라를 관리할 필요 없이 저장 용량을 증가시킬 수 있습니다. 내구성과 가용성: AWS S3는 데이터를 여러 가용 영역에 복제하여 데이터 손실을 방지하고 고가용성을 제공합니다. 데이터는 99.999999999%의 내구성을 보장합니다. 보안: AWS S3는 데이터를 암호화하고 접근 제어를 설정하는 기능을 제공하여 데이터 보안을 강화합니다. 비용 효율성: AWS S3는 사용한 만큼만 비용을 지불하므로 미리 예측 가능한 비용을 유지할 수 있습니다. EC2 가상 서버: AWS EC2는 가상.. 더보기
[백엔드TIL] Spring 스케쥴러 (80일차) batch도 있고 quartz도 있는데 왜 scheduler? 서버에서 일괄처리를 하기 위해서 spring에서 3가지 방법을 제공하는데 batch, queart, scheduler가 있다. 이들의 차이점은 1)batch : 여러 job을 순차적으로 처리 2)quartz scheduler : 특정 job을 특정 시간에 처리 하기 위해서 사용된다고 한다. 나는 특정 시간에 특정 job(API에서 데이터를 가져오는)만 처리하면 되기 때문에 batch는 해당사항이 없고, quartz랑 scheduler중에 뭘 사용할지 고민했다. 찾아보니 quartz는 scheduler보다 구현하기 복잡했고, 스케쥴링의 세밀한 제어가 필요하거나 클러스터링이 필요할때 사용하면 좋을거 같았다. 나는 단순한 scheduling이 필요.. 더보기
[백엔드TIL] Array, LinkedList에 대해 설명(79일차) Array (배열) 정의: 배열은 고정된 크기의 연속적인 메모리 공간에 원소들을 저장하는 자료구조입니다. 특징: 고정된 크기: 배열은 생성 시에 크기가 정해지며, 이후 크기를 동적으로 변경하기는 어렵습니다. 인덱싱: 배열의 원소에는 인덱스를 사용해 접근할 수 있으며, O(1) 시간에 해당 원소를 찾을 수 있습니다. 메모리 사용: 연속적인 메모리 공간을 사용하므로 메모리 관리에 용이합니다. 주요 작업의 시간 복잡도: 원소 조회 (인덱싱): O(1) 원소 추가/삭제 (끝에서): O(1) 원소 추가/삭제 (중간): O(n) LinkedList (연결 리스트) 정의: 연결 리스트는 노드(Node)들의 집합으로, 각 노드는 데이터와 다음 노드를 가리키는 포인터로 구성됩니다. 특징: 동적 크기: 연결 리스트는 동적.. 더보기
[백엔드TIL] Spring security 로그인 실패 시 예외처리 방식(78일차) 스프링 시큐리티로 로그인기능을 구현하다가 어떤 이유에서든지 로그인에 실패하면 로그에 아무것도 안뜨길래 뭔가 설정을 잘못한 줄 알았다. 분명 에러 로그가 떠야하는데 안뜬다. 로그 범위를 디버그로 하면 겨우 보이는데 다른로그들이 엄청나게 튀어나온다. 딱 한줄 보여준다... 세션에서 확인해봤다. 친절하게도 BadCredentialsException : 자격증명에 실패했다고 알려준다. 없는 아이디를 입력했으므로 UsernameNotFoundException을 기대했지만 BadCredentialsException이 떴다 로그를 찍어보면 분명 'org.springframework.security.core.userdetails.UsernameNotFoundException'이 발생했다. BadCredentialsEx.. 더보기
[백엔드WIL] DB캐싱 (16주차) Cache Cache는 데이터나 값을 저장하는 임시 저장소로, 데이터를 더 빠르고 효율적으로 액세스할 수 있게 해준다. 원본 데이터 접근보다 빠르다. 같은 데이터를 반복적으로 접근하는 상황에서 사용하기에 알맞다. 인증 세션 값과 같은 잘 변하지 않는 데이터일수록 더 효율적이다. CPU Cache 레이어별로 캐시를 보면 용량은 위로 갈수록 커지고 속도로 밑으로 내려갈수록 빨라진다. 보통 우리가 사용하는 Redis는 Memory층에 존재한다고 보면 된다. Disk가 제일 느리고 L3 < L2 < L1 순으로 속도가 빠르다. Disk 접근 속도가 SSD를 쓰고있지만 Memory와 비하면 속도가 굉장히 차이난다. 그렇기 때문에 Memory에 올려놓고 쓰는 게 Disk에서 읽어오는 것보다 훨씬 빠르다. 그 대신 .. 더보기