초기 프론트 화면에서 정적인 정보를 제공하는 경우, 해당 정보를 프론트엔드에 직접 포함시키는 것이 효율적넷플릭스처럼 사용자 맞춤 정보를 제공해야 하는 경우, DB에서 데이터를 가져와야 하므로 상대적으로 성능이 저하될 수 있음메모리 캐싱을 활용한 불필요한 DB 조회 방지기존 방식새로고침 시마다 DB에서 데이터를 조회package com.shop.cafe.controller;import java.util.List;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation...
[LG 유플러스] 유레카/Today I Learned
Spring Boot CORS 설정 방법컨트롤러에서 @CrossOrigin 사용전역 설정에서 WebMvcConfigurer 사용 (MyConfig 클래스)둘 다 CORS를 설정하지만, 적용 범위와 기능이 다름컨트롤러에서 @CrossOrigin을 사용한 경우@CrossOrigin은 해당 컨트롤러 또는 특정 엔드포인트에서만 CORS 허용전역 적용이 안 됨 → 다른 컨트롤러에서는 CORS 설정이 적용되지 않음세션/쿠키 인증을 위해서 allowCredentials=true도 각각 적용해야 함메서드마다 일일이 @CrossOrigin을 추가해야 함전역 CORS 설정 (WebMvcConfigurer)을 사용한 경우모든 컨트롤러 & 모든 엔드포인트에 CORS 적용 → 전역 설정allowCredentials(true) ..
secu.propertiesDB URL, 사용자명, 비밀번호 등을 secu.properties에 저장하여 코드에서 직접 노출되지 않도록 함GitHub 업로드 시 보호: .gitignore 파일을 활용하여 secu.properties가 업로드되지 않도록 설정Spring 코드 작성 흐름 (MVC 패턴)1. Controller클라이언트 요청을 처리하고 응답 반환@RequestMapping, @PostMapping, @GetMapping 등으로 요청을 매핑@Autowired를 사용하여 Service 주입package com.shop.cafe.controller;import java.util.HashMap;import java.util.Map;import org.springframework.beans.factor..
SQL 심화DISTINCT을 사용한 중복 제거SELECT DISTINCT Country FROM Customers;Country 컬럼에서 중복을 제거하고 고유한 값들만 반환COUNT(DISTINCT column)을 사용한 중복 개수 반환SELECT COUNT(DISTINCT Country) FROM Customers;Country 컬럼에서 중복을 제거한 개수를 반환서브쿼리를 사용한 중복 개수 반환SELECT Count(*) AS DistinctCountriesFROM (SELECT DISTINCT Country FROM Customers); 서브쿼리를 사용해 Country의 고유한 값만 추출한 후, 이를 COUNT(*)로 세어 개수를 반환위의 COUNT(DISTINCT Country)와 동일한 결과를 출..
DBMS클라이언트의 저장공간 문제웹을 실행하면 저장공간이 메모리를 사용하게 되어 용량이 제한적임.가비지 콜렉터가 메모리를 관리하지만, 지속적인 데이터 저장을 위해선 다른 저장공간 필요.해결책: 데이터를 다른 머신(DBMS)으로 전가하여 저장.리소스 관리 및 표준화데이터를 저장하는 대표적인 리소스: 파일 시스템, DBMS각 DBMS(Oracle, MySQL 등)마다 데이터 저장 방식이 다름.개발자 편의성을 위해 ANSI SQL이라는 공통된 표준이 도입됨.클라이언트는 표준 SQL로 요청을 보내고, DBMS는 이를 해석하여 데이터 처리.DBMS도 데이터를 메모리에 저장하므로, 전원이 꺼지면 데이터가 날아갈 수 있음.이를 방지하기 위해 영구적인 파일 시스템을 사용.파일 I/O 코드와 DBMS 성능직접 파일 I/..
Git 충돌 발생 및 해결 과정2번 사용자가 branch/common 브랜치에서 common 파일을 Push1번 사용자가 branch/common 브랜치에서 같은 파일을 Push하려고 함 (충돌 발생)2번 사용자가 Pull Request(PR) 생성GitHub/GitLab에서 PR을 생성하여 1번 사용자에게 요청.1번 사용자가 PR을 Confirm(Merge)GitHub에서 branch/common의 PR을 main 브랜치로 Merge.1번 사용자가 최신 변경 사항을 Pull1번 사용자가 다시 common 파일을 수정 후 Push (충돌 발생)충돌 해결 및 Push해결 완료Git 개념 정리git taggit tag v1.0.0git push origin v1.0.0특정 커밋을 버전(태그)으로 저장.For..
버전 관리파일을 공유하고 동기화하기 위해 사용하는 시스템.Git분산 버전 관리 시스템.GitHubGit을 위한 원격 저장소.Git 기본 명령어1. 저장소 초기화git init → 로컬 저장소(.git) 생성2. 파일 상태 확인git status → 현재 파일의 상태 확인3. 파일 추가 및 커밋git add [파일명] → 무대(Stage)에 올리기. 사진 찍기위해 무대로 올림.git commit -m "메시지" → 변경사항을 저장. 사진 찍음4. 커밋 확인git log → 커밋 목록 확인5. 버전 이동git checkout [커밋ID] → 특정 커밋으로 이동git switch와 git restore 명령어로 기능이 분리됨브랜치와 병합1. 브랜치 개념main → 기본(주된) 저장소branches → 독립적인..
백트래킹해를 찾기 위해서 후보군을 나열하고, 만약 조건에 맞지 않다면 후보군에서 제외하고 돌아와 다음 후보군을 찾는 방식백트래킹은 트리 구조를 기반으로 DFS 방식을 진행하면서 각 루트에 대해 조건에 부합했는지 체크(Promising). 만약 해당 트리에서 조건에 맞지 않는 노드를 발견한다면, 더 이상 탐색을 멈추고, 다른 노드로 가기 위해 현재 가지를 버림(Pruning). 백트래킹에서 검색할 후보들을 상태 공간 트리(State Space Tree)로 표현.N-Queens문제N × N 체스판에 N개의 퀸을 서로 공격하지 못하도록 배치하는 문제8-Queens라면 8^8=16,000,000이 넘는 경우의 수를 확인해야 하는데 Pruning을 하면 약 4000~5000정도만 탐색하여 92개의 해를 얻게 됨...
MSTMinimum Spanning Tree (최소 신장 트리)최단 경로는 특정 두 노드 간의 거리를 최소화하는 것MST는 모든 노드를 연결하면서 총 가중치를 최소화하는 것예시:-도로 건설 도시들을 모두 연결하면서 도로의 길이가 최소가 되도록 하는 문제-전기 회로 단자들을 모두 연결하면서 전선의 길이가 가장 최소가 되도록 하는 문제-통신 전화선의 길이가 최소가 되도록 전화 케이블 망을 구성하는 문제-배관 파이프를 모두 연결하면서 파이프의 총 길이가 최소가 되도록 연결하는 문제 Kruskal대표적인 그리디 알고리즘1. 간선 정렬2. 사이클이 없는 간선 선택Parent배열에 각 정점에 자기 자신이 저장되어 있으면 현재 서로소라는 뜻(간선을 선택하지 않음)간선 선택 시 Parent 배열 업데이트간선이 많으면 ..
복습binary tree : 각 노드가 최대 2개의 자식노드를 가질 수 있는 트리ternary tree : 각 노드가 최대 3개의 자식노드를 가질 수 있는 트리skewed binary tree : 모든 노드가 한쪽 방향으로만 연결된 트리binary search tree : 왼쪽 자식은 부모보다 작은 값, 오른쪽 자식은 부모보다 큰 값을 가짐complete binary tree : 왼쪽부터 차례대로 노드가 채워진 트리full binary tree : 모든 노드가 0개 또는 2개의 자식을 가짐perfect binary tree : 모든 리프 노드가 같은 높이, 모든 내부 노드가 2개의 자식을 가짐. 꽉 찬 모양 그래프 : 정점과 간선으로 이루어진 자료구조트리 : 사이클이 없는 그래프 (그래프의 부분 집합)그..