본문 바로가기

Study

[백엔드TIL] Java Comparable과 Comparator의 차이 아마 한 번쯤 써 본 분들이라면 알겠지만, Comparable과 Comparator는 모두 인터페이스(interface)라는 것이다. 즉, Comparable 혹은 Comparator을 사용하고자 한다면 인터페이스 내에 선언된 메소드를 '반드시 구현'해야한다는 것이다. 그럼 각각의 인터페이스에는 어떤 메소드가 선언되어있을까? 한 번 공식 API문서를 뒤져보자. [Comparable] docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html#method.summary Comparable (Java Platform SE 8 ) This interface imposes a total ordering on the objects of each class that .. 더보기
[백엔드TIL] 자바와 코틀린의 차이 기존에 java로 구현했던 spring 프로젝트를 kotlin으로 전환했다. 코틀린을 도입하기로 결정한 이유는 다음과 같았다. 왜 kotlin인가? 간결성, 생산성 코틀린은 자바보다 더 간결하고 직관적이라, 쓰고 읽는 데 시간이 덜 걸린다. 자바에 존재하는 여러 가지 번로운 준비 코드(생성자, 게터, 세터 등)들을 코틀린은 묵시적으로 제공하기 때문에 그런 준비코드 없이 더 깔끔하다. 기능이 다양한 표준 라이브러리를 제공하기 때문에 반복되는 코드를 줄일 수 있다. 안정성 실행 시점에 오류를 발생시키는 대신 컴파일 시점 검사를 통해 오류를 더 많이 방지해준다. 코틀린은 null이 될 수 없는 값을 추적하며, 실행 시점에 NullPointException이 발생할 수 있는 연산을 사용하는 코드를 금지한다. 자.. 더보기
[백엔드TIL] Spring Batch에 대한 이해 Spring Batch Batch Application 종종 어플리케이션에서 필수적인 작업으로 배치 프로세싱이 요구됩니다. 여기서 배치의 의미를 한 번 짚고 가겠습니다. Batch : 집단, 무리, 함께 묶다. Batch는 한 무리를 의미하며, 대부분 그 규모가 큰 것들을 말합니다. 그래서 배치 애플리케이션이라고 하면 개발자가 정의한 작업을 한번에 일괄 처리하는 애플리케이션이라고 정의할 수 있습니다. 그럼 어떨 때 이 배치 애플리케이션이 필요할까요? 예를 들어, 한 기업에서 사전 예약 이벤트를 진행했는데 신청한 유저의 데이터 수는 100만 건이라고 해볼게요. 사전 예약 이벤트를 접수한 모든 유저에게 메일을 보내야합니다. 100만 건의 메일을 어떻게 보내야 할까요? 이 작업은 기존의 웹 애플리케이션을 제작.. 더보기
[백엔드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 명령어의 옵션을 그대로 사용할 수 있으며, 각 컨테이너의 의존성, 네트워크, 볼륨 등을 함께 정의할 수 있습니다. 더보기