분류 전체보기 52

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

24.08.03 TIL - Effective Java Item 55

옵셔녈 반환은 신중히 하라 자바 8 이전 값 반환할 수 없을 때자바 8 전에는 메서드가 특정 조건에서 값을 반환할 수 없을 때 취할 수 있는 선택지가 2가지 있었다.예외를 던진다.null을 반환한다.두 방법 모두 허점이 있다. 예외 던지는 경우 허점예외는 진짜 예외적인 상황에서만 사용해야 한다.예외를 생성할 때 stack trace 전체를 캡처해 비용 크다. null 반환하는 경우 허점별도의 null 처리 코드 추가해야 한다.null 처리 무시하고 반환하면 NullPointException 발생할 수 있다. (null을 반환하게 한 실제 근본적인 원인과 전혀 상관 없는 코드에서 발생 가능) 다른 선택지자바 8로 가면서 메서드가 특정 조건에서 값을 반환할 수 없을 때 취할 수 있는 선택지가 하나 더 생겼다..

TIL 2024.08.04

24.08.02 TIL - application.properties 분리

오늘 배운 것application.properties 분리 appcliation.properties란?Spring Framework 프로젝트에서 사용되는 설정 파일이다.  이 파일을 통해 애플리케이션의 다양한 설정을 정의할 수 있다. 데이터베이스 연결 정보, 서버 포트, 로깅 설정 등 다양한 환경 설정을 application.properties 파일에서 관리한다.  파일의 내용은 일반적으로 키-값 쌍으로 이루어져 있다.   src/main/resources 디렉토리에 위치한 아래와 같은 파일이 application.properties이다.  # 서버 포트 설정server.port=8080# 데이터베이스 URL 설정spring.datasource.url=jdbc:mysql://localhost:3306/m..

TIL 2024.08.03