[운영체제] 교착상태 (DeadLock)
·
운영체제
교착상태(DeadLock)란?운영체제에서 교착상태라 함은 쉽게 정의한다면 시스템 자원에 대한 요구가 뒤엉킨 상태라고 할 수 있다. 즉, 둘 이상의 프로세스가 다른 프로세스가 점유하고 있는 자원을 서로 기다릴 때 무한 대기에 빠지는 상황을 말한다. 식사하는 철학자 문제이 문제로 교착상태를 설명할 수 있다.모든 철학자가 동시에 포크를 집어 식사를 하면 어떤 철학자도 식사를 할 수 없는 상황이 발생한다.모든 철학자가 왼쪽 포크를 집어 들면 모두가 오른쪽 포크를 집어 들 수 없기 때문이다. 다시 말해 모든 철학자는 다른 철학자가 포크를 내려놓을 때까지 기다리게 된다. 철학자는 프로세스나 스레드로, 자원은 포크로 빗대어 표현할 수 있다. 생각하는 행위 자체는 기다리는 것에 비유할 수 있다. 발생조건1. 상호 배제..
Spotify API를 이용해 엔터프라이즈 기술 스택 학습하기 [#2] - Spotify API 사용을 위한 토큰을 관리해보자
·
BackEnd
2025.04.04 - [BackEnd] - Spotify API를 이용해 엔터프라이즈 기술 스택 학습하기 [#1] - 프로젝트 시작하기 Spotify API를 이용해 엔터프라이즈 기술 스택 학습하기 [#1] - 프로젝트 시작하기프로젝트를 시작하게 된 동기와 목표백엔드 개발을 하며 기본적인 CRUD를 어느 정도 이해할 수 있는 수준까지 성장했습니다.많은 서비스 기업들은 대규모 트래픽을 처리하기 위해 다양한 기술들ejk5148.tistory.com   스포티파이 API를 사용하기 위해선 스포티파이의 인증토큰을 관리해야 한다. 음악 추천이나 검색, 아티스트 정보 조회 등 어떤 기능을 사용하든 유효한 액세스 토큰이 필요하다. API요청을 할 때마다 인증 헤더에 포함되어야 한다. 1. 초기 설정하기 (Spoti..
Spotify API를 이용해 엔터프라이즈 기술 스택 학습하기 [#1] - 프로젝트 시작하기
·
BackEnd
프로젝트를 시작하게 된 동기와 목표백엔드 개발을 하며 기본적인 CRUD를 어느 정도 이해할 수 있는 수준까지 성장했습니다.많은 서비스 기업들은 대규모 트래픽을 처리하기 위해 다양한 기술들을 사용하고 있습니다.그런 기술들을 경험해보고 싶어 이 토이프로젝트를 기획했습니다. 다시 돌아와 기본적인 CRUD도 깊게 파야지  궁극적인 목표?이벤트 기반 아키텍처 이해하기.분산 시스템의 모니터링 및 로깅 기법 학습하기.현업에서 많이 사용되는 최신 기술 스택 경험해 보기.대규모 데이터 처리 기술 찍어 먹어보기. 가장 얻어가고 싶은 것은 각 기술의 장단점, 활용 사례, 통합 방법, 실제 문제 해결 과정을 배워보고 싶습니다. WITH 클로드 3.7 Sonet 똑똑한 친구가 많이 도와줄 거예요 학습해 볼 기술 스택1. Spr..
[자료구조] 배열 Array
·
자료구조
배열이란?같은 타입의 데이터 요소들을 연속된 메모리 공간에 저장하는 자료구조이다.각 요소들은 index를 통해 접근할 수 있다. 배열의 주요 특징배열의 각 요소는 0부터 시작하는 인덱스 번호를 갖는다. -> 첫 번째 원소가 저장된 위치에서 X번째 떨어진 원소에 접근하겠다는 의미와 같다. offset 개념으로 사용된다. 배열의 요소들은 메모리 상에서 연속적으로 할당된다. -> 인덱스를 통한 빠른 접근이 가능한 이유! 배열 선언 시, 기본적으로 크기는 고정된다. 하나의 배열은 일반적으로 같은 데이터 타입의 요소만 저장할 수 있다.  배열의 주요 연산에 대한 시간복잡도는 다음과 같다.1. 접근: O(1), 인덱스를 통한 직접 접근2. 검색: O(n), 정렬되지 않은 배열에서의 선형 탐색3. 삽입: O(n), ..
[자료구조] 연결리스트
·
자료구조
연결리스트를 알아보기 전에 먼저 [자료구조 Array]의 시간복잡도를 간단히 알아보자. 1. 접근찾고자 하는 값이 몇 번째 인덱스인지 알고 있다면 O(1)의 속도로 찾을 수 있다.2. 검색인덱스를 알지 못할 때 원하는 값을 찾기 위해서는 배열을 모두 탐색해야 한다. 따라서 시간복잡도는 O(n)이 된다.3. 추가데이터들이 순차적으로 저장되어 있기 때문에 맨 처음이나 그 이후 데이터가 추가될 경우 데이터들을 전부 한 칸씩 뒤로 미뤄야 한다.  이때 시간복잡도는 O(n)이 되고, 만약 배열에 공간이 남아있을 때 데이터를 맨 뒤에 추가한다면 이 때는 O(1)이 된다.4. 삭제데이터 추가와 경우가 같다. 삭제하려는 데이터의 위치가 맨 뒤가 아니라면 O(n)의 시간복잡도를 갖는다.삭제하려는 데이터의 위치가 만약 맨..
[Docker] AWS EC2 Ubuntu에 Docker 설치하기
·
DevOps
1. 패키지를 최신화시켜준다.sudo apt-get updatesudo apt-get upgrade2. 도커 설치에 필요한 패키지를 설치한다.apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-commonapt-transprot-https: Https를 통해 패키지를 다운로드할 수 있게 해주는 패키지이다. Docker를 다운로드하기 위해선 Https를 사용해야 하기 때문!ca-certificates: SSL 인증서 관련 패키지로 보안 연결을 위한 CA 인증서를 제공한다.curl: cli에서 데이터를 전송하고 다운로드하는 도구이다. Docker GPG 키를 다운로드하는 데 사용한다.gnupg-agen..
[JAVA] 자바의 default method
·
JAVA
default method란인터페이스는 기능에 대한 선언만 할 수 있기 때문에 메서드의 구현부가 있을 수 없다. 하지만!default method는 자바 8부터 도입된 인터페이스의 기능으로 인터페이스 내에서 구현체를 제공하는 메서드이다. 인터페이스에 새로운 기능을 추가하면서도 하위 호환성을 유지할 수 있다 → 기존 인터페이스에 메서드를 추가해도 구현 클래스들이 해당 메서드를 구현할 필요가 없음.default 키워드를 사용하여 선언하며 메서드 구현부를 가진다.구현 클래스는 default method를 그대로 사용하거나 오버라이드하여 재정의 할 수 있다.interface Vehicle { void accelerate(); // default method default void honk..
Spring Security + jwt + redis 로그인 흐름
·
BackEnd
동작과정 먼저 jwt와 redis를 이용한 로그인 프로세스가 어떻게 되는지 알아보자.1. 클라이언트는 서버에게 로그인 요청을 보낸다.2. 서버는 ID/PW를 검증 후 Access Token + Refresh Token을 발급하고 Redis에 Refresh Token을 저장한다.3. 클라이언트는 API요청을 할 때 Access Token을 헤더에 담아서 요청하게 된다.4. 서버는 API응답 또는 Access Token 만료 응답을 내려준다.5. 클라이언트는 재발급 요청을 한다. (Request Body에 Access Token과 Refresh Token을 담아 보낸다.)6. 서버는 토큰 검증 후 새로운 Access Token과 Refresh Token을 발급한다. 왜 레디스인지?레디스는 메모리 기반 (No..
[백준] 18428 감시 피하기 - JAVA
·
Algorithm
백준 18428 감시 피하기 Gold V - JAVA 📌https://www.acmicpc.net/problem/18428문제 설명문제 풀이접근 💡2차원 배열에서 주어지는 정보는 선생님의 위치와 학생의 위치이다. 장애물을 빈 칸에 세 개를 놓았을 때 감시를 피할 수 있는 경우를 찾아야 한다. 장애물을 3개 놓는 경우는 조합으로 생각하면 된다. 빈칸의 좌표를 리스트로 받아서 그 리스트 안에서 조합을 뽑아 모든 경우의 수를 탐색할 수 있다.이 때 빈칸의 최소 갯수는 3개이고 최대 갯수는 선생님의 최소 수는 1, 학생의 최소 수는 1 이다. N의 최댓값이 6이므로 6 * 6 = 36, 36 - 2 = 34,  34C3의 경우의 수가 생긴다. 이는 5,984의 경우의 수가 생기며 이는 완전탐색 하기에 충분한..
[백준] 3980 선발 명단 - JAVA
·
Algorithm
백준 3980 선발 명단 Gold V - JAVA 📌https://www.acmicpc.net/problem/3980문제 설명문제 풀이접근 💡요새 최적화에 관심이 많아져서 완전탐색을 떠올리지 않고 문제에 접근했던 것 같다.. 반성하고 자숙하자.. 모든 알고리즘의 시초는 완전탐색이다!!! 본론으로 들어가서 현재 선택하고 있는 포지션을다음 선수는 선택할 수 없을 때 포지션 점수의 최댓값을 구하는 문제이다.모든 포지션을 선택했을 때 최댓값을 갱신해주면 되는 간단한 문제였다. 한 행(선수)의 포지션을 선택했을 때, 다음 행(선수)로 넘어가서 겹치지 않는 포지션을 선택하는 모~~~~~~~든 경우의 수를 구해 최댓값을 구하면 된다. 코드로 알아보자  코드 💡import java.io.BufferedReader..