HTTP 200 OK

Memento mori & Carpe diem

전체 글 65

API 헬스체크

헬스체크란?서비스의 고가용성(HA, High Availability), 고성능을 위한 부하 분산 등의 이유로 우리는 서버의 이중화(혹은 그 이상)를 하고, 앞에서 어떤 서버로 요청을 보낼지 라우팅 역할을 하는 로드 밸런서를 둔다.로드 밸런서는 부하를 적절히 분산하여 구축된 여러 서버중 한대에게 클라이언트의 요청을 보낸다.하지만 요청을 한 서버가 서비스 불가상태라거나 소스코드를 로딩하고 있을 경우에는 서버로 요청을 보내면 안된다. → (장애 유발과 더불어 부하를 더 증가시키기 때문이다)때문에 로드 밸런서에서는 각 서버의 헬스 체크 API를 호출해서 해당 서버가 현재 서비스 가능한 상태인지 아닌지 주기적으로 체크한다.즉 헬스 체크는 정상적으로 서비스가 가능한 서버에만 트래픽을 보내서 서비스의 고가용성을 확보..

CS 2023.08.17

Redis 정의 및 사용법 && Docker 배포시 이슈

Redis란?Key, Value 구조의 비정형 데이터를 저장하고 관리하기 위한 오픈 소스 기반의 비관계형 데이터 베이스 관리 시스템 (DBMS)입니다.데이터베이스, 캐시, 메세지 브로커로 사용되며 인메모리 데이터 구조를 가진 저장소입니다.db-engines.com 에서 key, value 저장소 중 가장 순위가 높습니다.Redis는 Memcached와 비슷한 캐시 시스템으로서 동일한 기능을 제공하면서 영속성, 다양한 데이터 구조와 같은 부가적인 기능을 지원합니다. Redis는 Inmemory DataBase(빠르다)로서 모든 데이터를 메모리에 저장하고 조회합니다.DBMS를 이용한다면 DB에 데이터를 저장하고 저장된 데이터를 정렬하여 다시 읽어오는 과정은 디스크에 직접 접근을 해야하기 때문에 시간이 더 걸..

Redis 2023.07.21

Run Catching

Run Catching란? runCatching 은 try-catch 를 대체할 수 있는 코틀린의 문법이다. try-catch 문은 실패시의 핸들링을 처리할 수 있었다면, runCatching 은 성공시, 실패시 둘 다 처리할 수 있다. 기본 문법 runCatching { } : 중괄호 안에 try 하고자 하는 구문을 작성 onSuccess { } : 위 runCatch 구문이 성공시 매핑할 구문을 작성. it 은 위 구문의 결과. onFailure { } : 위 runCatch 구문이 실패시 매핑할 구문을 작성. it 은 위 구문에서 던진 Throwable 객체. also { } : 기존 try-catch-finally 에서 finally 에서 작성하던 구문을 작성할 수 있음. 복잡한 상황 map { ..

Kotlin 2023.03.01

Redis를 k8s에 업로드할때 경험한 이슈들

개요repository를 사용하면 entity 그대로 사용할 수 있는 장점이 있지만 @Indexed로 속성을 만들면 만료키가 그대로 남아있는 상황이 발생@RedisHash : Hash Collection 명시 -> Jpa의 Entity에 해당하는 애노테이션이라value 값은 Key를 만들 때 사용하는 것으로 Hash의 Key는 value + @Id로 형성@Id : key를 식별할 떄 사용하는 고유한 값으로 @RedisHash와 결합해서 key를 생성해당 애노테이션이 붙은 변수명은 반드시 id여야 함@Indexed : CRUD Repository를 사용할 때 jpa의 findBy필드명 처럼 사용하기 위해서 필요1. Redis를 findByUserId와 같은 형식으로 검색을 하고 싶어 @Indexed 어노테..

Redis 2023.01.30

Connection pool

커넥션 풀(DBCP)란? 웹 컨테이너(WAS)가 실행되면서 DB와 미리 connection(연결)을 해놓은 객체들을 pool에 저장해두었다가, 클라이언트 요청이 오면 connection을 빌려주고, 처리가 끝나면 다시 connection을 반납받아 pool에 저장하는 방식 JDBC : Java Data Base Connectivity. 한글로 번역하면, 자바 데이터 베이스 연결, 정의는 DataBase와 연결하기 위한 Java Interface이다. DBCP : DataBase Connection Pool. 역시 간단하게 정리하면 DataBase와 Connection을 맺고 있는 객체를 관리하기 위한 Connection Pool DBCP 직접 사용 VS JNDI : https://itstein.tisto..

CS 2022.12.06

WebFlux

WebFlux란? WebFlux는 Spring 5에 새롭게 추가된 Reactive-stack의 웹 프레임워크이다. WebFlux는 클라이언트와 서버에서 리액티브 애플리케이션 개발을 위한 논블로킹 리액티브 스트림을 지원한다. WebFlux 논블로킹으로 동작하는 웹 스택의 필요성 때문에 등장하게 되었다. 블로킹 : 네트워크 통신에서 요청이 발생하고 완료될 때까지 모든 일을 중단한 상태로 대기 논블로킹 : 네트워크 통신이 완료될 때까지 기다리지 않고 다른 작업을 수행 WebFlux로의 전환 이유 SpringMVC로 개발하고 동작이 잘 되던 서버를 굳이 왜 WebFlux로 전환할까? 전환을 한다면 이에 대한 합리적인 이유가 필요하다. 기존의 springMVC는 하나의 요청에 하나의 스레드가 사용된다. 블로킹 콜..

CS 2022.11.06

pinPoint

pinpoint 란? 네이버에서 자체 제작하고 오픈소스화한 APM(Application Performance Management)이다. APM : 응용 소프트웨어의 성능과 서비스 이용성을 감시하고 관리하는 데 초점을 둔 시스템 관리 방법론을 의미합니다. 또한, 운영 중인 시스템의 성능을 모니터링하고 분석하여, 시스템의 가용성 및 안정적인 시스템 운영을 돕는 도구입니다. cms server 개발 초기에 아키텍처를 검증 방법 개발 초기에 성능에 영향이 큰 모듈부터 개발하고 APM을 통해 성능을 분석하여 아키텍처에 대한 성능을 검증 효과 아키텍처를 사전에 검증하여 프로젝트 후반에 아키텍처를 변경하는 불상사가 발생하지 않도록 예방 투입 인력 초과비용 발생과 납기일 미준수에 대한 리스크 감소 프로젝트 진행 시 지..

CS 2022.11.06

[Kotlin] 기초

코틀린 요약 코틀린은 타입 추론을 지원하는 정적 타입 지정 언어다. 따라서 소스코드의 정확성과 성능을 보장하면서도 소스코드를 간결하게 유지 할 수 있다. 안정성이 있다.(null체크 & 캐스트) Java 코드와 상호운용하기 쉽다. kotlin 기초 함수 fun main(args: Array) { printLn("Hello, world!") } 함수를 선언할 때 fun 키워드를 사용한다. 파라미터 이름 뒤에 그 파라미터의 타입을 쓴다. 변수를 선언할 때에도 마찬가지로 타입을 지정한다. 반환형 함수 fun max(a: Int, b: Int): Int { return if (a > b) a else b } max -> 함수이름 a: Int, b: Int -> 파라미터 목록 Int -> 반환타입 return {..

Kotlin 2022.08.01

Spring Security 주요 아키텍처 이해( Part 2)

인증 저장소 SecurityContextHolder, SecurityContext SecurityContext Authentication 객체가 저장되는 보관소로 필요 시 언제든지 Authentication 객체를 꺼내어 쓸 수 있도록 제공되는 클래스 ThreadLocal에 저장되어 아무 곳에서나 참조가 가능하도록 설계함 ThreadLocal : Thread마다 할당도니 고유 공간(공유X) 다른 Thread로부터 안전하다 get, set, remove api가 있다. set 한 이후 get할 대 장소의 제약이 없다 (ex : A메서드에서 set한 내용을 B메서드에서 get하는것이 가능하다) 인증이 완료되면 HttpSession에 저장되어 어플리케이션 전반에 걸쳐 전역적인 참조가 가능하다 HttpSessi..

Spring 2022.05.30

리액트 훅

리액트 훅 클래스 컴포넌트와 생명주기 메서드를 이용하여 작업을 하던 기존 방식에서 벗어나 함수형 컴포넌트에서도 더 직관적인 함수를 이용하여 작업한다. 기존 방식의 경우 상태 관련 로직이 한 곳에 묶이기 때문에 상태 로직의 재사용이 불가능하였지만 훅을 통해 계층의 변화 없이 상태 관련 로직을 재사용할 수 있게 되었다. 리액트 훅 사용 규칙 최상위 레벨에서만 호출 가능, 다시 말해 반복문, 조건문, 중첩된 함수 내부에서 호출하면 X 오직 리액트 함수 컴포넌트 내에서만 호출 가능 usestate() 상태를 설정할 때 사용하는 훅 API로 클래스 컴포넌트의 생명주기 메소드 constructor()에서 상태를 초기화하는 것과 비슷한 역할을 하는 API, 초기 상태와 현재 상태를 저장, 컴포넌트가 다시 렌더링 되어..

REACT 2022.05.30