본문 바로가기

분류 전체보기

(260)
DFS, BFS 참고: 더보기 https://developer-mac.tistory.com/64 https://better-tomorrow.tistory.com/entry/DFS-BFS-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0 DFS, BFS 시간복잡도 인접 리스트 : O(접점 + 간선) 인접 행렬 : O(접점^2) DFS (Depth First Search) : 깊이 우선 탐색 정의 노드들이 포함된 브랜치 하나를 완벽하게 탐색 후 다른 브랜치 탐색 과정 1. 탐색 시작 노드를 스택에 삽입, visited 처리 2. 스택의 top 노드에 인접 & visited 처리되지 않은 노드를 스택에 삽입, visited 처리 3. 모든 인접 노드가 visited 처리됐을 시 스택의 top 노드를 꺼냄 (2..
별개의 AWS 계정으로 서브도메인 설정하기 사이드 프로젝트에서 각각의 AWS 계정으로 프론트엔드, 백엔드 서버를 따로 구축했는데, 이때 Route53을 사용한 서브도메인 설정에서 큰 오류를 범했었다. 문제 상황 가비아와 AWS Route53을 통해 도메인을 등록, 연결한 후 서버가 불안정해 검색해보니 오류 원인은 DNS 설정 또는 프리티어 RAM 메모리 부족으로 좁혀졌다. EC2 서버 로그 확인 시 CPU 사용률에 문제가 없었지만 혹시 몰라 메모리 관련 설정도 했다. 하지만 서버 끊김은 해결되지 않았고 결국 DNS 설정을 다시 살펴보기로 했다. 오류 원인 파악 처음 서브도메인을 지정하는 방법을 찾아봤을 때, 하나의 AWS 계정으로 도메인, 서브도메인을 설정하는 블로그들을 참고한 것이 오류의 발단이 되었다. 해당 정보를 참고했던 초기에는 프론트, ..
DP(Dynamic Programming, 동적 계획법) DP 정의 크고 복잡한 문제를 여러 개의 부분 문제로 나누어 푸는 방법 => 부분 문제들 풀고 값 저장, 해당 문제 다시 만날 때 재연산하지 않고 저장해둔 값 불러옴 조건 1. 부분 반복 문제 부분 문제가 여러 번 재사용되는 경우 (=진행했던 연산이 반복되는 경우) 2. 최적 부분 구조 부분 문제에서 구한 최적의 값을 이용해(합산해) 큰 문제의 최적의 값을 구함 특징 메모이제이션(Memoization) : 메모리에 부분 문제 값 저장해나감 → 연산 반복될 시 저장해둔 값 사용 => 주로 배열 사용해 값 저장 구현 방법 (예시 - 피보나치 수열) 가장 작은 문제(base case) & 점화식 구한 후, Bottom-up 또는 Top-down 방식으로 구현하기 1. Bottom-up 방식 : 반복문을 통해 ..
[자료구조] 선형 구조 - 스택(Stack), 큐(Queue), 덱(Deque) 스택 입출력이 한 방향에서만 발생하는 구조 출력 시 가장 최근 입력값(top에 위치)을 꺼냄 (FILO, First-in-last-out) ex) 갑(곽) 휴지 시간복잡도(O) 삽입, 삭제(pop) 시 top 값만 추가, 삭제하면 됨 (추가 연산 없음) => O(1) 특정 값 삭제, 검색 시 위에서부터 순차적으로 탐색해야 함 => O(N) Stack 클래스 메소드 push() : top에 데이터 추가 pop() : top 데이터 삭제 peek() : top 데이터 조회 empty() : 스택 비어있을 때 true, 아니면 false 출력 search() : 데이터 위치 조회 (1부터 시작) 장단점 장점 : top을 통한 데이터 접근, 삽입, 삭제 용이 단점 : 크기 고정 후에야 사용 가능 (=> 배열 대..
NoSQL에 대한 대략적 정리 여태껏 국비 학원, 프로젝트를 통해 MySQL과 Oracle을 실습하며 관계형 데이터베이스(RDBMS)를 직접 경험했다. 프로젝트 중에는 Access Token 탈취에 대비해 Refresh Token을 발급하도록 했고, 이때 Refresh Token은 Redis에 저장하는 것이 용이하다는 자료들을 볼 수 있었다. 그리고 MongoDB, Redis 등 NoSQL 사용 경험을 필수 또는 우대사항에 넣은 채용 공고들도 확인하면서 NoSQL에 대해 알아본 후 정리해봐야겠다고 생각했다. + 프리티어 계정에서 t2.micro 노드로 AWS Elasticache 사용시 redis를 무료로 사용할 수 있다..! 여태껏 잘못 알고 있어 프로젝트에 적용하지 않았었는데 바로 시도해봐야겠다. 참고자료: 더보기 https://..
[백준/자바] 브루트포스 7568번 - 덩치 문제 우리는 사람의 덩치를 키와 몸무게, 이 두 개의 값으로 표현하여 그 등수를 매겨보려고 한다. 어떤 사람의 몸무게가 x kg이고 키가 y cm라면 이 사람의 덩치는 (x, y)로 표시된다. 두 사람 A 와 B의 덩치가 각각 (x, y), (p, q)라고 할 때 x > p 그리고 y > q 이라면 우리는 A의 덩치가 B의 덩치보다 "더 크다"고 말한다. 예를 들어 어떤 A, B 두 사람의 덩치가 각각 (56, 177), (45, 165) 라고 한다면 A의 덩치가 B보다 큰 셈이 된다. 그런데 서로 다른 덩치끼리 크기를 정할 수 없는 경우도 있다. 예를 들어 두 사람 C와 D의 덩치가 각각 (45, 181), (55, 173)이라면 몸무게는 D가 C보다 더 무겁고, 키는 C가 더 크므로, "덩치"로만 볼..
소프트웨어 아키텍처, 도메인 원티드 프리온보딩 백엔드 챌린지 참여 중, 소프트웨어 아키텍처와 도메인의 정의에 대해 생각해보고 이해하는 시간을 가질 수 있었다. 강의 내용을 요약하면서 떠오른 생각들도 정리해보고자 한다. 소프트웨어 아키텍처 의의 아키텍처 선택은 시스템의 골격 역할, 품질 속성에 영향을 미치며 시스템을 제안한다. -적정 소프트웨어 아키텍처 종류 모놀리식 아키텍처 : 단일 시스템 하에서 배포 ex) Layered / Clean / Hexagonal => 배포 용이 => 유지보수 어려움, 한정된 트래픽, 부분 수정/오류 발생 시 전체에 영향 분산형 아키텍처 : 도메인별로 서버 분리하여 배포 ex) Service-oriented / Event-based / Microservice => 높은 확장성, 부분 수정/오류 발생 시 ..
[백준/자바] 브루트포스 2798번 - 블랙잭 문제 카지노에서 제일 인기 있는 게임 블랙잭의 규칙은 상당히 쉽다. 카드의 합이 21을 넘지 않는 한도 내에서, 카드의 합을 최대한 크게 만드는 게임이다. 블랙잭은 카지노마다 다양한 규정이 있다. 한국 최고의 블랙잭 고수 김정인은 새로운 블랙잭 규칙을 만들어 상근, 창영이와 게임하려고 한다. 김정인 버전의 블랙잭에서 각 카드에는 양의 정수가 쓰여 있다. 그 다음, 딜러는 N장의 카드를 모두 숫자가 보이도록 바닥에 놓는다. 그런 후에 딜러는 숫자 M을 크게 외친다. 이제 플레이어는 제한된 시간 안에 N장의 카드 중에서 3장의 카드를 골라야 한다. 블랙잭 변형 게임이기 때문에, 플레이어가 고른 카드의 합은 M을 넘지 않으면서 M과 최대한 가깝게 만들어야 한다. N장의 카드에 써져 있는 숫자가 주어졌을 때, ..
[백준/자바] 재귀 24060번 - 병합정렬 문제 N개의 서로 다른 양의 정수가 저장된 배열 A가 있다. 병합 정렬로 배열 A를 오름차순 정렬할 경우 배열 A에 K 번째 저장되는 수를 구해서 우리 서준이를 도와주자. 크기가 N인 배열에 대한 병합 정렬 의사 코드는 다음과 같다. merge_sort(A[p..r]) { # A[p..r]을 오름차순 정렬한다. if (p < r) then { q
[김영한/HTTP 웹 기본 지식] HTTP 헤더 (캐시 & 조건부 요청) 캐시 기본 동작 캐시 없을 때 같은 데이터 요청해도 계속 네트워크를 통해 똑같은 데이터를 다운로드 받아야 함 인터넷 네트워크는 매우 느리고 비쌈 → 느린 브라우저 로딩 속도 (느린 사용자 경험) 캐시 적용 응답 헤더의 cache-control 필드에 유효시간 담음 → 해당 시간동안 요청한 데이터(다운로드한 데이터)가 브라우저 캐시에 저장됨 같은 요청 반복 시 캐시 저장소에서 꺼내오면 됨 = 캐시 가능 시간동안 네트워크를 사용하지 않아도 됨 네트워크 사용량 감소로 인한 비용 감축 & 브라우저 로딩 속도 증가 (빠른 사용자 경험) 캐시 유효시간 초과 시 => 서버 통해 데이터 재조회 & 캐시 갱신 (네트워크 다운로드 발생) 검증 헤더 & 조건부 요청 캐시 만료 후에도 서버 데이터 변경 없을 때 새로운 요청 ..