본문 바로가기

Study/개발일지

[백엔드TIL] 버블정렬과 삽입정렬 Bubble Sort [거품 정렬] 거품 정렬은 아마 정렬 방식 중 가장 쉽게 생각할 수 있는 알고리즘 중 하나일 것이다. 두 개의 인접한 원소를 비교하여 정렬하는 방식이다. 왜 Bubble 이라는 이름이 붙었는지 찾아보니 정렬 과정에서 원소의 이동이 마치 거품이 수면위로 올라오는 것 같다고 해서 거품(Bubble) 이라는 이름이 붙었다고 한다... 정렬 방식 중 가장 쉬우니 일단 거품 정렬에 대한 특징만 짚고 넘어가보자. 거품 정렬은 데이터를 '비교'하면서 찾기 때문에 '비교 정렬'이며 정렬의 대상이 되는 데이터 외에 추가적인 공간을 필요로 하지 않기 때문에 '제자리 정렬(in-place sort)'이기도 하다. 정확히는 데이터를 서로 교환하는 과정(swap)에서 임시 변수를 필요로 하나, 이는 충분히.. 더보기
[백엔드TIL] 후위식 연산 후위식 연산 👻 문제 🐱‍🐉 후위 표기법이란? 11+, 22+ , 33+ 중위 표기식과는 다르게 후위 표기식은 연산자가 뒤에 위치한다. 이렇게 표기하는 방법을 후위 표기법이라고 한다. 연산자가 '뒤(후)'에 위치 하기 때문에 후위 표기법이라고 한다. 이러한 연산은 컴퓨터가 연산을 하기 쉽게 표현하는 방법이다. 🐱‍🐉 후위 표기법의 예시 4 7 * = 28 4 7 2 + * = 4 * (7+ 2) = 36 4 7 * 20 - = (4* 7) - 20 = 8 3 4 7 * 2 / + = 3 + ((4 * 7 ) / 2 ) = 17 👻 풀이 🐱‍🐉 후위 표기법의 과정(Stack) 입력값을 읽어들인 후, 숫자가 나오면 stack에 push한다. 연산자가 나올 경우, 연산자 앞의 2개의 숫자를 계산한다. 계산한 .. 더보기
[백엔드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)들의 집합으로, 각 노드는 데이터와 다음 노드를 가리키는 포인터로 구성됩니다. 특징: 동적 크기: 연결 리스트는 동적.. 더보기