Backend

ArrayList, LinkedList
ArrayList ArrayList는 배열을 이용한 리스트이다. 따라서 배열의 특징과 비슷하다. 인덱스를 가지고 데이터를 접근한다. 인덱스를 통한 Random Access가 가능하므로 특정 데이터를 검색하는데 LinkedList보다 속도가 빠르다. 데이터의 삽입 혹은 삭제 시 인덱스의 위치를 맞춰줘야 하므로 LinkedList에 비해 속도가 느리다. 배열은 사이즈를 고정적으로 할당하지만, ArrayList는 값을 동적으로 삽입하는 것이 가능하다. LinkedList LinkedList는 각 노드별 앞의 노드와 뒤의 노드를 참조하는 참조값을 가지고 있다. 각 노드별 앞, 뒤 노드를 참조하고 있기 때문에 새로운 노드를 삽입하거나 노드를 삭제하는 경우 위치에 관계없이 ArrayList보다 빠른 연산이 가능하다..

Spring Cloud Config의 설정 파일 비대칭키로 암/복호화
이전에 필요한 환경변수 파일들을 Github에 Config Repository를 하나 생성해 관리했다. Spring Cloud Config Server는 실행 시 이 환경 설정파일들을 애플리케이션이 실행될 때 전파해주었다. 이런 환경설정 파일들을 Public Repository에서 관리하거나 Private Repository에서 관리하더라도 암/복호화를 통해 안전하게 관리해야한다. 일반적으로 암/복호화하는 방식은 크게 대칭키방식과 비대칭키 방식이 있다. 대칭키(Symmetric) : 암/복호화하는 키가 동일한 경우를 의미한다. 대표적으로 AES, SEED, ARIA와 같은 알고리즘이 있다. 비대칭키(Asymmetric) : 암/복호화 하는 키가 다른 경우를 의미한다. 모든 사람이 사용할 수 있는 공개키와..
![[백기선님과 함께하는 Live-Study] 10주차) 멀티쓰레드 프로그래밍](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FC8H2H%2FbtrDkoicmbG%2FcIJlP26sOFiryqv8FNtzJ0%2Fimg.png)
[백기선님과 함께하는 Live-Study] 10주차) 멀티쓰레드 프로그래밍
✔️ 목표 자바의 멀티쓰레드 프로그래밍에 대해 학습하세요. ✔️ 학습할 것 (필수) Thread 클래스와 Runnable 인터페이스 쓰레드의 상태 쓰레드의 우선순위 Main 쓰레드 동기화 데드락 💡 Thread 클래스와 Runnable 인터페이스 Thread 란? 메모리를 할당받아 프로그램(프로세스)을 실행하는 단위로서 하나의 프로세스에 여러개의 쓰레드로 구성될 수 있다. 하나의 프로세스를 구성하는 여러 쓰레드는 스택 영역을 제외한 메모리 영역을 서로 공유한다. 스택 메모리는 메소드 호출 시 전달되는 매개변수, 되돌아갈 주소값 및 메소드 내에서 선언하는 변수 등을 저장하기 위해 사용되는 메모리 공간이기 때문에 쓰레드가 스택 메모리 영역을 독립적으로 가진다는 것은 독립적으로 메소드 호출이 가능하고 독립적인..

RestControllerAdvice, ExceptionHandler를 이용한 전역 예외 처리
이전 포스팅에서 프로젝트 애플리케이션이 동작 시 발생하는 다양한 상황에 대해서 메세지를 클라이언트로 전달해주기 위해 Custom Exception을 이용한 사용자 예외 처리를 다뤘다. 이렇게 Custom Exception을 사용하다보니 Web Layer (Controller)에서 로직을 처리해 줄 때 발생하는 예외를 try-catch로 매 로직마다 처리해주어야 했다. try-catch문에 들어가는 로직은 status, message를 담아 보내주는 공통적인 로직인데 이를 한 군데서 전역 처리할 수 없을까? @RestControllerAdvice, @ControllerAdvice ControllerAdvice, RestControllerAdvice는 모든 Controller에서 발생한 예외를 한 곳에저 전..

Spring Cloud Gateway를 이용한 서비스 라우팅 및 JWT 토큰 검증
현재 진행 중인 프로젝트가 MSA 기반의 프로젝트이기 때문에 API Gateway가 필요했다. 클라이언트로부터 들어오는 요청을 라우팅 해주고 특히 사용 중인 마이크로 서비스에서 JWT 토큰을 검증 후 토큰을 파싱해서 사용하는데 동일 로직이 모든 서비스에 들어가는 경우가 생겼다. API Gateway를 서비스 앞 단에서 구축함으로써 필터를 통한 JWT 토큰의 검증 로직을 공통적으로 추출할 수 있고, 마이크로 서비스 간 RestTemplate이나 Feign Client를 이용한 REST API 호출이 필요할 텐데 이 때 Eureka Server와 API Gateway를 사용한다면 보다 효율적일 것이라고 생각했다. Spring Cloud Netflix Zuul, Spring Cloud Gateway 등 API..