카프카(Apache Kafka)란?Apache Kafka는 고성능 데이터 파이프라인, 스트리밍 분석, 데이터 통합, 미션 크리티컬 애플리케이션을 지원하는 강력한 도구로써, 오픈 소스 분산 이벤트 스트리밍 플랫폼(distributed event streaming platform)이다. * 스트리밍 분석(Streaming Analytics): 스트리밍 분석은 실시간으로 데이터 스트림을 분석하는 과정이다. 데이터 스트림은 연속적으로 생산되는 데이터로, 예를 들어 소셜 미디어 피드, 온라인 거래, 센서 데이터 등이 있다. 스트리밍 분석으로 기업이나 조직은 실시간으로 정보를 얻고, 즉각적인 의사결정을 내릴 수 있으며, 이상 징후를 감지하거나 기회를 식별할 수 있다. * 미션 크리티컬 애플리케이션 (Mission..
오토 스케일링(Auto Scaling)을 사용하는 이유 오토 스케일링을 설명하기에 앞서, 오토 스케일링을 사용하는 이유에 대해 작성해 보겠다. 주된 이유는 자동화된 리소스 관리를 통해 클라우드 환경의 효율성과 비용 효과성을 극대화하기 위함이다. 예를 들어, 사용자 트래픽이 증가하거나 감소할 때 자동으로 컴퓨팅 리소스를 조정한다. 이를 통해 높은 트래픽 시 서버 과부하를 방지하고, 낮은 트래픽 시 불필요한 리소스 사용을 줄인다. 간단히 말해서, 오토 스케일링은 클라우드 리소스를 효과적으로 관리하여 비용을 절감하고, 서비스의 안정성과 성능을 보장하는 동시에 운영상의 부담을 줄여주는 핵심 기능이다. 클라우드 서버 클라우드 서버란 클라우드 컴퓨팅 환경에서 제공되는 가상화된 서버를 의미한다. 이 서버들은 인터넷을..
HTTPS 사용 계기프로젝트에 구글 로그인 기능을 도입하기로 결정했으나, 배포 환경에서 구글 로그인을 시도하던 중 '400 오류: redirect_uri_mismatch' 가 발생했다. 문제의 원인은 구글 OAuth 2.0 정책을 준수하지 않았기 때문이었는데, 구글 정책에 따르면 OAuth 2.0 엔드포인트인 https://accounts.google.com/o/oauth2/v2/auth 에는HTTPS 프로토콜을 통해서만 접근할 수 있다. 사용자 데이터 보호와 안전한 인증을 위해 구글이 HTTP 연결을 허용하지 않았기 때문이다. 그러나 우리 프로젝트는 구글 로그인 창을 배포된 창에 띄우고 싶었고 따라서 HTTPS를 프로젝트에 적용하기로 결정했다.(결과적으론 성공하지 못해 다른 방법을 사용해 구글 로그인을..
기존 배포방식의 문제점AWS의 EC2 인스턴스를 사용하여 서비스를 배포하고 관리하는 과정에서, FileZilla를 통해 빌드 파일을 직접 인스턴스에 복사한 후, Putty로 SSH를 이용하여 인스턴스에 접속, 실행하는 방식을 사용해 왔다. 이러한 수동 배포 방식을 사용한 결과 다음과 같은 문제점들을 발견하게 되었다.1. 배포 과정의 번거로움: 매번 파일을 전송하고, 서버에 접속하여 실행하는 과정은 시간이 많이 소요되며 번거롭다.2. 실수의 가능성: 수동으로 진행되는 모든 과정은 실수를 발생시킬 가능성이 높다. 파일을 잘못 전송하거나, 실행 명령어를 잘못 입력하는 등의 실수가 서비스 중단으로 이어지기도 했다. 이러한 문제점들은 불필요한 추가 작업을 요구했고, 따라서 자동화 배포의 필요성을 느끼게 되었다. ..
스트림(Stream) -스트림(Stream)은 자바 8에서 소개된 기능으로, 컬렉션, 배열 등의 데이터 소스를 추상화하여 다양한 데이터 처리 작업을 쉽고 간결하게 할 수 있도록 도와준다. 스트림은 데이터 소스에서 데이터를 읽어 처리하는 파이프라인을 구성하며, 주로 람다 표현식과 함께 사용된다. - 3가지로 구성 1. 스트림 생성 (Stream Creation): 데이터 소스로부터 스트림을 생성한다. 데이터 소스는 배열, 컬렉션, I/O 채널 등이 될 수 있다. 2. 중개 연산 (Intermediate Operations): 스트림을 변환하는 연산으로, 하나 이상의 중개 연산이 체이닝될 수 있다. 중요한 점은 중개 연산이 느리게 실행(lazy execution)된다는 것으로, 최종 연산이 호출될 때까지 실..
람다 표현식 - 람다 표현식은 자바 8에서 도입된 기능으로, 메서드를 하나의 식(expression)으로 간결하게 표현하는 방법이다. 이는 "익명 함수(anonymous function)"라고도 불리며, 주로 함수형 인터페이스(functional interface)에 사용된다. 람다 표현식 장/단점 장점 - 간결성: 람다 표현식을 사용하면 복잡한 익명 클래스를 짧고 명료한 형태로 표현할 수 있다. - 가독성 향상: 람다 표현식은 코드의 양을 줄이고, 의도를 명확하게 전달하여 코드의 가독성을 높인다. - 생산성 향상: 간결한 코드는 작성과 유지보수에 드는 시간을 줄여주어 생산성을 높일 수 있다. 단점 - 재사용성 부족: 람다는 익명이므로 재사용하기 어렵다. - 디버깅 어려움: 람다 표현식의 디버깅은 일반 ..
컬렉션 프레임워크 - 자바에서 다양한 데이터 집합을 효율적으로 관리하기 위해 제공하는 일련의 클래스와 인터페이스의 모음이다. 이 프레임워크는 데이터를 저장, 검색, 정렬, 조작하는데 필요한 다양한 자료구조와 알고리즘을 제공합니다. - 대표 인터페이스: List, Set, Map 인터페이스 List 인터페이스 - 순서가 있는 데이터의 집합 - 데이터 중복 허용 - 데이터를 저장, 검색, 정렬, 조작하는데 필요한 다양한 자료구조와 알고리즘을 제공 - 대표 구현 클래스: ArrayList, LinkedList, Vector ArrayList: 배열 기반의 리스트로, 인덱스를 통한 빠른 요소 접근이 가능하다. 하지만 크기 조정이 필요할 때 비용이 많이 든다. LinkedList: 연결 리스트 기반의 리스트로, ..
예외(Exception) - 정상적이지 않은 case 예외 처리(Exception handling) - 정상적이지 않은 case에 대한 적절한 처리 방법 - try-catch: 예외가 발생할 수 있는 코드를 try 블록 안에 넣고, 예외가 발생했을 때 실행할 코드를 catch 블록에 작성한다. finally - 예외 발생 여부와 관계없이 항상 실행되는 코드 블록이다. 주로 리소스를 해제하거나 정리하는 데 사용된다. throw, throws - throw: 예외를 발생시킴 - throws: 메서드 선언부에 사용되며, 해당 메서드 내에서 처리되지 않고 호출한 곳으로 예외를 전가시킨다. import java.io.BufferedReader; import java.io.FileReader; import java..
콘솔 입력 - 입출력 방식 중 콘솔 입력 방법 - 자바에서 콘솔 입력은 주로 Scanner 클래스를 사용하여 처리한다. Scanner 클래스는 java.util 패키지에 있으며, 다양한 종류의 입력(문자열, 정수, 실수 등)을 처리할 수 있다. import java.util.Scanner; public class ConsoleInputExample { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("Enter your name: "); String name = scanner.nextLine(); // 문자열 입력 System.out.print("Enter your age: ..
내부 클래스(Inner Class) - 내부 클래스(Inner Class)는 클래스 내부에 선언된 클래스로, 다양한 형태와 용도로 사용된다. - 내부 클래스는 주로 외부 클래스의 멤버에 대한 접근을 용이하게 하고, 코드의 논리적 그룹화를 도와 코드를 더 읽기 쉽고 관리하기 쉽게 만든다. 내부 클래스 특징 - 내부 클래스에서 외부 클래스 멤버에 접근 가능 - 외부에서는 내부 클래스에 접근 불가 내부 클래스 종류 - 인스턴스 클래스(instance class) 외부 클래스의 인스턴스와 연결된 클래스 외부 클래스의 인스턴스 메서드와 멤버 변수에 접근할 수 있다. class Outer { private String outerField = "Outer field"; class Inner { void display..