TIL 34

24.08.19 TIL - Redis

오늘 배운 것Redis Redis란Redis는 REmote DIctionary Server의 줄인말Java의 Map과 같은 방식으로 데이터를 저장하는 DBRedis는 가장 대중적인 인메모리 DBRedis는 대표적인 NoSQL DB 인메모리 DB = 데이터를 디스크(하드 드라이브나 SSD)가 아닌 시스템의 주 메모리(RAM)에 저장하는 데이터 저장소 NoSQL DB = "Not Only SQL"의 약자로, 관계형 데이터베이스(SQL)와는 다른 방식으로 데이터를 저장하고 관리하는 DB  인메모리 저장소 vs 디스크 기반 저장소  인메모리 저장소디스크 기반 저장소 데이터 접근 속도RAM에 저장해 빠름디스크에 저장해 느림데이터 영속성휘발성 메모리 (RAM)에 저장해 영속성 유지 X디스크에 저장해 영속성 유지 O..

TIL 2024.08.20

24.08.14 TIL - GitHub Actions

오늘 배운 것GitHub Actions CI / CD란CI= continuous integration = 코드의 지속적 통합이라는 의미개발자가 변경한 코드를 자주 통합하고 통합한 코드가 문제가 없는지 자동으로 테스트하는 프로세스 코드 변경 발생할 때마다 빌드 및 테스트를 수행코드 품질 유지하고 문제 조기에 발견 가능  CD= continuous Delivery = 지속적 전달이라는 의미CI의 결과물을 사용자에게 자동으로 배포하는 프로세스CI 성공하면 (코드 변경이 통합되고 테스트 통과되면) 자동으로 스테이징 or 프로덕션 환경 (= 테스트용 운영 서버, 실제 운영 서버)에 배포하는 것 CI / CD 장점빠른 피드백 : 코드 변경 후 즉각적인 빌드 및 테스트 결과 확인 가능해 문제 빠르게 인지 및 수정 가..

TIL 2024.08.16

24.08.13 TIL - Docker

오늘 배운 것dockerdocker-compose Docker란?애플리케이션 쉽게 만들고, 테스트하고, 배포할 수 있게 도와주는 소프트웨어 플랫폼격리된 환경인 컨테이너 기반 가상화 플랫폼애플리케이션을 컨테이너라는 가볍고 이식성 있는 패키지로 실행 가능애플리케이션을 격리된 환경인 컨테이너로 패키징해 실행하는 기술Docker 이미지는 애플리케이션을 실행하는 데 필요한 모든 것을 포함 용어Docker 이미지애플리케이션과 그 실행에 필요한 모든 것을 포함하는 것Docker 컨테이너 생성하기 위한 설계도 역할 Docker 컨테이너Docker 이미지를 실행한 상태Docker 이미지를 가지고 Docker 컨테이너 생성격리된 공간에서 애플리케이션을 실행하나의 시스템에서 여러 개의 컨테이너 독립적으로 실행 가능 Dock..

TIL 2024.08.16

24.08.12 TIL - MSA 구성 요소들

오늘 배운 것MSA 구성 요소들서비스 디스커버리 = Eureka Server, ClientHTTP 클라이언트 및 로드밸런서 = FeignClient & Ribbon서킷 브레이커 = Resilience4jAPI gateway = Spring Cloud GatewayConfig Server = Spring Cloud Config분산 추적 및 로깅 = Zipkin 개요MSA를 학습하며 많은 것들을 배웠다.  그중 정리해 볼 만한 것들을 가져와 봤다.  간단하고 큰 그림을 그릴 수 있도록 작성할 예정이다.  서비스 디스커버리 (Eureka Server, Client)서비스 디스커버리는 MSA에서 각 서비스의 위치를 동적으로 관리하고 찾아주는 기능이다. 이 중 Eureka라는 것이 있고 이것을 사용해봤다.   M..

TIL 2024.08.13

24.08.09 TIL - 서킷 브레이커 & Resilience4j

오늘 배운 것서킷 브레이커Resilience4j 서킷 브레이커란마이크로서비스 간의 호출 실패를 감지하고 시스템의 전체적인 안정성을 유지하는 패턴이다. 외부 서비스 호출 실패 시 빠른 실패를 통해 장애를 격리한다.장애를 격리해 시스템의 다른 부분에 영향을 주지 않도록 하는 것이다. 상태라는 것이 존재한다 (CLOSED, OPEN, HALF_OPEN)   Resilience4j란Resilience4j는 서킷 브레이커 라이브러리다.다양한 서킷 브레이커 기능을 제공한다. 서킷 브레이커 상태를 통해 호출 실패를 관리한다. Fallback이라는 호출 실패 시 대체 로직 제공해 시스템 안전성 확보모니터링 및 관리 가능한 도구 제공 Fallback이란Fallback 메서드는 정상 동작 메서드가 실패했을 때 대체 로직을..

TIL 2024.08.10

24.08.08 TIL - 스프링 소셜 로그인 코드 리팩토링

개요프로젝트에 카카오, 구글 소셜 로그인을 적용하려고 했다.  우선 카카오 로그인을 적용해 두었다.  Controller, Service의 코드는 아래와 같다.  OAuthController...@Controller@Slf4j@RequiredArgsConstructorpublic class OAuthController { private final KakaoUtil kakaoUtil; // 카카오 로그인에 필요한 메서드 모아 놓은 클래스 private final OAuthService oauthService; private final RegisterService registerService; @GetMapping("/login/kakao") public String moveToK..

TIL 2024.08.09

24.08.07 TIL - C++ 코딩 테스트 유용한 함수들

C++ 코딩 테스트 유용한 함수들C++로 코딩 테스트를 진행하는데 유용한 함수들을 정리해 봤다.  이 함수들을 모르면 직접 구현해야 해서 굉장히 코드 많이 작성해야 한다.  이 함수들만 기억하고 있어도 간단한 문제들은 금방 풀 수 있을 것이다.  container 관련 함수 아래 메서드들은 algorithm 헤더에 정의되어 있다. iterator를 지원하는 모든 컨테이너에서 사용 가능하다. array, vector, deque, list, string 등... 아래 함수에 있는 vec은 컨테이너의 변수명이다.  container의 최소, 최대 값 구하기최소 값 포인터 구하기: min_element(vec.begin(),vec.end()); 최소 값 구하기: *min_element(vec.begin(),v..

TIL 2024.08.08

24.08.06 TIL - MSA

오늘 배운 것MSA MSA란?MSA = MicroServices Architecture하나의 애플리케이션을 여러 개의 독립적인 서비스로 분리하는 것이다. 분리해서 개발, 배포, 유지보수를 용이하게 하는 소프트웨어 아키텍처 스타일이다.  특징독립적인 서비스는 특정 비즈니스 기능을 수행한다. 독립적인 서비스 간의 통신은 HTTP/HTTPS, 메시지 큐 등을 통해 이루어진다.서비스가 독립되어 있어 각각 배포 가능하다. 서비스가 독립되어 있어 다른 서비스에 영향 없이 업데이트, 확장 가능하다. 서비스가 독립되어 있어 기술 스택 자유롭게 선택할 수 있다. (한 서비스는 Spring로 개발, 한 서비스는 Django로 개발) MicroServices Architecture VS Monolithic Architect..

TIL 2024.08.06

24.08.05 TIL - Java 람다 기초

오늘 배운 것 람다 기초 람다식자바에는 2번의 큰 변화 있었다.generics의 등장람다식의 등장 람다식의 도입으로 인해 자바는 객체지향 언어인 동시에 함수형 언어가 되었다. 람다식 덕분에 함수형 언어의 장점들도 자바에서 누릴 수 있게 되었다. 람다식 → 자바 = 객체지향 언어 + 함수형 언어 람다식이란?람다식 = 메서드를 하나의 식으로 표현한 것 메서드를 람다식으로 표현 → 메서드의 이름, 반환 값 없어짐 → 람다식 = 익명 함수 아래 코드에서 arr 뒤의 코드가 람다식int[] arr = new int[5];Arrays.setAll(arr, (i) -> (int) (Math.random()*5)+1); 람다식을 메서드로 표현하면 다음과 같다.(i) -> (int) (Math.random()*5)+1i..

TIL 2024.08.06

24.08.04 TIL - 윈도우 스프링 프로젝트 AWS 초 간단 배포

오늘 배운 것윈도우에서 스프링 프로젝트 AWS에 배포하는 방법 개요늘 웹 프로젝트를 진행하다 보면 배포에 대해서 안 들어볼 수가 없다.  이전에는 배포에 대한 막연한 두려움이 있었던 것 같다.  AWS에 대한 강의도 많고 배포에 대한 자료도 많아서 강의 듣고 공부하고 진행해야만 할 것 같았다.  그래서 늘 프로젝트를 진행하고 '배포 해야 하는데 공부하고 진행해야지' 하면서 배포를 못했다.  하지만 알고보니 아주 간단하게 배포할 수 있었다.  이 글을 보고 배포에 대한 두려움을 덜어내도 좋을 것 같다.  글을 작성하다 보니 주절주절 길게 작성한 것 같다.바쁘신 분들은 빨간 글씨와 명령어만 빠르게 읽어도 될 것 같다. 배포의 경험을 한 글에 담으려고 하다 보니 매우 길어진 것 같다....  배포 방법AWS에..

TIL 2024.08.05