반응형

전체 글 80

[SourceTree]소스트리 조직(organization) 저장소 403 오류 발생 해결

소스트리(Sourcetree)를 설치 후 깃허브(Github)의 저장소들을 클론(clone)할 때 문제가 발생하였습니다. 유효한 소스 경로 URL이 아닙니다.1. 문제발생소스트리(Sourcetree)를 설치 후 깃허브(Github)의 저장소들을 클론(clone)할 때 문제가 발생하였습니다. 유효한 소스 경로 URL이 아닙니다. 1. 문제발생분명히 존재하는 저장소인데 해당 URL을 찾지 못하는 것이 이상했습니다. 개인(private) 저장소들은 정상적으로 탐색되었기 때문에 조직(organization) 저장소라는 점이 수상했습니다. 문제 원인은 소스트리 어플리케이션이 조직에 대한 접근 승인이 되지 않았던 것이었습니다.2. 해결방법다음과 같은 과정을 통해 문제를 해결할 수 있습니다.Settings > ..

형상관리 2025.05.12

[Spring Security] 해시란? Salt란? BCrypt이해하기

안녕하세요, 이번 글에서는 실무에서도 많이 사용하는 BCrypt 해시 알고리즘에 대해 정리해보려고 합니다.단순히 라이브러리만 사용하는 것을 넘어서, 왜 써야 하는지, 어떻게 동작하는지 까지 이해하는 것이 목표입니다.비밀번호 저장은 "암호화"가 아니라 "해시"로많은 분들이 비밀번호를 암호화해서 저장한다고 말하지만, 정확히는 "해시(Hash)" 해야 합니다.구분해시 (Hash)암호화 (Encryption)방향성단방향 (복호화 불가)양방향 (복호화 가능)사용 목적비교용, 위조 방지데이터 보호비밀번호 저장에 적합?✅ 예❌ 아니오 암호화는 키가 유출되면 누구나 복호화할 수 있기 때문에 비밀번호 저장용으로는 부적절합니다.따라서 우리는 복호화가 불가능한 단방향 해시 함수를 사용해야 합니다.해시(Hash)란?입력값(비..

보안 2025.05.12

Spring Security 기반 CSRF 공격 실습 및 방어 방법 정리

유튜브 영상도 촬영하였습니다. 아래 영상을 참고하면서 블로그글을 참고해주세요. CSRF (Cross-Site Request Forgery)란? CSRF (Cross-Site Request Forgery) 사이트 간 요청 위조는 웹 애플리케이션의 취약점을 악용하는 공격 방식 중 하나로, 사용자가 의도하지 않은 요청을 수행하게 만드는 공격입니다. CSRF 공격의 목적은 사용자가 웹 애플리케이션에서 인증된 세션을 가지고 있는 상태에서, 공격자가 의도한 행동을 사용자로 하여금 실행하게 하는 것입니다. 이는 사용자가 현재 로그인한 세션을 이용하여 악의적인 요청이 서버에 전달되도록 하여, 사용자의 의도와 무관하게 데이터 변경, 거래 발생 등의 작업이 수행되게 만듭니다. CSRF(Cross-Site Requ..

Spring 2025.05.04

MySQL 8.0 'Access denied' 오류 해결법 — 인증 방식 변경 [우분투,mySQL8.0]

MySQL 8.0 'Access denied' 오류 해결법 — 인증 방식 변경(auth_socket → mysql_native_password)Spring Boot, MyBatis, DBeaver, 또는 JDBC로 MySQL 8.0에 연결하려고 할 때 다음과 같은 오류를 본 적 있나요?java.sql.SQLException: Access denied for user 'root'@'localhost'처음에는 비밀번호가 틀렸다고 생각할 수 있지만, MySQL 8.0부터 기본 인증 방식이 바뀌었기 때문에 발생하는 문제입니다. 문제 상황MySQL 8.0 이상 버전에서는 기본 사용자 인증 방식이 바뀌었습니다. 특히 우분투에서 apt로 설치하면, root 계정은 기본적으로 auth_socket 방식이 됩니다.이 방..

DB 2025.04.02

[MySQL] EXPLAIN 실행 계획 항목 정리

EXPLAIN 실행 계획 항목 정리표항목의미주요 값설명id실행 단계숫자 (1, 2, 3...)JOIN이 포함된 쿼리에서 실행 순서를 나타냄. 작은 숫자가 먼저 실행됨.select_type쿼리 유형SIMPLE, PRIMARY, SUBQUERY, DERIVED, UNION 등쿼리의 구조(기본, 서브쿼리, 유니온 등)를 나타냄.table참조하는 테이블테이블명현재 실행 계획에서 사용되는 테이블 이름을 나타냄.partitions사용된 파티션파티션명 또는 NULL테이블이 파티셔닝되어 있을 경우, 사용된 파티션을 표시함.type조회 방식 (성능 중요!)ALL, index, range, ref, eq_ref, const, system 등테이블을 검색하는 방식. ALL은 풀 테이블 스캔(느림), const는 즉시 검색(..

DB 2025.03.21

[DB MySQL] 옵티마이저(Optimizer)란? INDEX EXPLAIN 실행

옵티마이저(Optimizer)는 SQL 쿼리를 실행할 때 가장 효율적인 실행 계획을 선택하는 MySQL의 내부 엔진입니다.즉, MySQL이 쿼리를 실행할 때 "어떤 인덱스를 사용할지", "어떤 방식으로 데이터를 검색할지" 등을 결정하는 역할을 합니다.쉽게 말해, 옵티마이저는 쿼리 성능을 최적화해주는 엔진입니다.EXPLAIN 실행 시 type이 ALL로 나오는 경우EXPLAIN SELECT * FROM users WHERE age > 30;   - type = ALL이란?"풀 테이블 스캔(Full Table Scan)"이 발생한 상태입니다.즉, MySQL이 테이블의 모든 행을 검사하면서 age > 30 조건을 만족하는 데이터를 찾고 있습니다.인덱스를 사용하지 않기 때문에 성능이 매우 비효율적입니다.- "A..

DB 2025.03.20

[DB] Disk I/O란?

Disk I/O(Input/Output, 디스크 입출력)는 디스크에서 데이터를 읽거나 쓰는 작업을 의미합니다.즉, 디스크에서 데이터를 가져오거나 저장하는 모든 과정이 Disk I/O라고 할 수 있습니다.1. Disk I/O의 기본 개념컴퓨터에서 데이터를 읽고 쓰는 방식은 크게 메모리(RAM)와 디스크(SSD/HDD) 두 가지가 있습니다.- 메모리(RAM)에서 읽기/쓰기속도가 매우 빠름 (나노초(ns) 단위) 전원이 꺼지면 데이터가 사라짐(휘발성)- 디스크(HDD/SSD)에서 읽기/쓰기 (Disk I/O)속도가 느림 (마이크로초~밀리초 단위) 데이터를 영구적으로 저장 (비휘발성)디스크는 메모리에 비해 속도가 훨씬 느리기 때문에, Disk I/O가 많아지면 성능이 저하됩니다.즉, 데이터를 디스크에서 읽어오는..

DB 2025.03.20

복합 인덱스(Composite Index)와 B-Tree 원리 분석 - 1억 개 이상의 데이터 빠르게 조회하기

데이터가 많을 때, 조회 성능이 느려지는 이유SQL을 실행했을 때, 데이터를 빠르게 조회하려면 인덱스를 잘 활용해야 합니다.하지만 많은 사람들이 단순 인덱스만 생성하고, **복합 인덱스(Composite Index)**를 활용하지 않아서 쿼리 속도가 최적화되지 않는 경우가 많습니다.오늘은 복합 인덱스가 왜 중요한지, 그리고 B-Tree 구조가 어떻게 작동하는지를 깊이 있게 다뤄보겠습니다.실제 1억 개 이상의 데이터를 다룰 때 어떻게 최적화할 수 있는지 살펴볼까요?      복합 인덱스란? 단일 인덱스(Single Index) vs 복합 인덱스(Composite Index)1.  단일 인덱스(Single Index)단일 인덱스는 한 개의 컬럼에만 인덱스를 생성하는 방식입니다.CREATE INDEX idx_..

DB 2025.03.18

Java Stream anyMatch(), allMatch(), noneMatch() 완벽 정리

안녕하세요!이번 포스팅에서는 Java 8 Stream API에서 제공하는 anyMatch(), allMatch(), noneMatch() 메서드에 대해 자세히 알아보겠습니다.이 메서드들은 리스트(List), 집합(Set) 등의 컬렉션에서 특정 조건을 만족하는 요소가 있는지 확인하는 데 유용하게 사용됩니다.하지만 동작 방식이 비슷해서 헷갈리기 쉬운데요. 이번 글을 통해 공통점과 차이점, 그리고 실행 과정을 완벽하게 이해해 봅시다!   1. anyMatch(), allMatch(), noneMatch() 개념 정리1) anyMatch()리스트에서 하나라도 조건을 만족하면 true 반환 (즉시 종료)anyMatch()는 스트림 내 요소 중 하나라도 주어진 조건을 만족하면 true를 반환하고, 즉시 실행을 종료..

JAVA 2025.03.17

Google Elevation API를 활용한 고도 데이터 수집 및 DB 저장 방법

https://kwakscoding.tistory.com/73 [고도데이터수집]국토정보플랫폼에서 DEM 다운로드 + 고도 데이터 추출 후 DB저장고도데이터를 기반으로 경사로를 파악해야하는 프로젝트를 진행하게 되었다. 전국에 있는 고도데이터가 필요한 상황에서 국내에서 정확도가 높다는 국토정보플랫폼에서 무료로 다운받을 수kwakscoding.tistory.com  지난 글에서 국토정보플랫폼에서 DEM 파일을 다운로드하여 고도 데이터를 DB에 저장하는 방법을 소개했습니다. (👉 이전 글 보기)하지만 국토정보플랫폼에서 제공하는 DEM 데이터는 최대 해상도가 90m로, 원하는 수준의 정밀한 데이터를 얻기에 부족함이 있었습니다.이번에는 Google Elevation API를 활용하여 더 정밀한 고도 데이터를 수집..

빅데이터 2025.03.10
반응형