전체 글

동기와 비동기, 블로킹과 논블로킹
동기와 비동기, 블로킹과 논블로킹을 처음 접할 때는 서로가 비슷하다고 생각한다. 결론부터 말하면 동기와 비동기, 블로킹과 논블로킹은 바라보는 관점 자체가 다르다. 동기와 비동기가 바라보는 관점은 결과값을 기다리는 지 여부이다. 결과값의 기다림 : 함수 호출자와 피호출자가 있을 때 함수 호출자가 피호출자가 주는 결과를 전달 받기 전까지 기다리는 것을 의미한다. 블로킹과 논블로킹의 관점은 제어권의 여부이다. 제어권 : 코드를 실행하는 권리와 비슷하다. 제어권을 가진 함수는 자신의 코드를 실행할 수 있다. 동기 (Synchronous) 동기의 키포인트는 결과값을 기다린다는 것이다. 따라서, 호출자는 피호출자가 로직을 처리하고 결과값을 전달해줄 때 까지 기다린다. 비동기 (Asynchronous) 비동기의 키포..

인덱스(Index)
인덱스(Index)의 사전적 의미는 “색인, 책 속에 다루어진 중요한 단어나 용어를 독자가 쉽게 찾을 수 있도록 페이지를 밝혀 벌여 놓은 것.” 이란 뜻이다. 데이터베이스에서도 Index의 의미는 동일하게 이용된다. 대용량 데이터베이스 내에서 우리가 원하는 데이터를 빠르게 조회하기 위해 사용하는 것이 인덱스이다. 이는 Select 쿼리의 성능 향상이 인덱스의 목적이라고 할 수 있다. 인덱스는 데이터베이스의 테이블 내의 객체가 아닌 데이터베이스의 또다른 객체이다. 이는 인덱스를 사용하는 경우 테이블외에 추가적인 공간이 필요하다는 의미이다. 따라서, 인덱스는 조회 쿼리의 성능 향상을 가져오지만, 인덱스 정보에 관한 연산이 추가적으로 이뤄줘야 하기 때문에 DML(Insert, Update, Delete)에 있..
![[백준, Java] 1414번 : 불우이웃돕기](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlEo7D%2FbtrEeWSnFJp%2FfWfTlKdN7ECOdluj1wftN1%2Fimg.gif)
[백준, Java] 1414번 : 불우이웃돕기
🔗 문제 링크 https://www.acmicpc.net/problem/1414 😮 문제 해결 방법 문제의 입력이 인접행렬 방식으로 들어오고, 알파벳과 0으로 들어온다. 따라서, 입력이 이어진 랜선의 길이이기 때문에 숫자로 변환하고 그래프를 만들어준다. 모든 컴퓨터에 대해 랜선 그래프를 만들어 줬으므로 모든 컴퓨터가 이어질 수 있게 가장 짧은 랜선을 구하면 된다. 따라서, 최소신장트리를 구하는 프림 혹은 크루스칼 알고리즘을 이용해 구현하면 문제를 해결할 수 있다. 알파벳을 숫자로 변환환다. 컴퓨터에 대해 랜선 정보를 연결한다(정점과 간선을 이용해 그래프 생성) 프림 알고리즘을 수행한다. 어떤 컴퓨터에서 시작하더라도 모두 이어져야하므로 상관이 없다. 최소 길이 랜선을 구하고 전체 랜선 길이에서 빼준다. 🚩..

프로세스, 스레드
프로세스 (Process) 프로그램은 실행중이지 않은 정적인 상태의 코드 파일이다. 운영체제는 프로그램을 실행 시키고 메모리에 올리는데 이를 프로세스라고 한다. 즉, 프로세스는 메모리에서 실행중인 프로그램의 작업이다. 프로세스는 프로그램이 메모리에 올라갈 때 독립된 메모리 영역을 할당(Code, Data, Heap, Stack) 받고 PCB라는 프로세스를 정보를 담는 블록을 받는다. 메모리 Code : 프로그램의 명령을 구성하는 코드 자체 메모리 영역 Data : static과 같은 정적 변수, 전역 변수, 배열 등을 갖는 영역 Heap : new 키워드 같은 동적으로 할당 되는 메모리 영역 Stack : 지역 변수, 파라미터, 리턴 값을 관리하는 메모리 영역 스레드 (Thread) 스레드는 프로세스의 ..

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에서 발생한 예외를 한 곳에저 전..