본문 바로가기

전체 글60

데이터베이스 인덱스 제대로 이해하기 서비스가 커지면서 가장 먼저 마주하는 문제는 느린 쿼리다. 분명 개발 환경에서는 빠르게 동작했는데, 운영 데이터가 쌓이면서 점점 느려진다. 이 문제를 해결하는 가장 기본적이면서도 강력한 방법이 인덱스다. 인덱스란 무엇인가?인덱스는 데이터베이스 테이블의 검색 속도를 높이기 위한 자료구조다. 책의 색인과 같은 역할을 한다. 원하는 내용을 찾기 위해 책 전체를 읽는 대신, 색인에서 페이지 번호를 찾아 바로 이동하는 것과 같다.100만 건의 데이터에서 특정 사용자를 찾는다고 가정하자. 인덱스가 없다면 데이터베이스는 첫 번째 행부터 마지막 행까지 모든 데이터를 확인해야 한다. 이를 Full Table Scan이라고 한다. 반면 인덱스가 있다면 정렬된 구조에서 빠르게 원하는 데이터의 위치를 찾을 수 있다.인덱스를 .. 카테고리 없음 2025. 12. 15.
Oauth2.0은 무엇인가(Spring Boot + Goolge 로그인) 웹 서비스나 앱을 이용하다 보면 "구글로 로그인", "네이버로 로그인" 같은 버튼을 자주 볼 수 있다.사용자는 별도의 회원가입 없이 기존 계정으로 다른 서비스에 로그인할 수 있고, 개발자는 복잡한 인증 시스템을 직접 구축할 필요가 없다. 이 모든 것을 가능하게 하는 것이 바로 OAuth(Open Authorization)다. OAuth란 무엇인가?OAuth는 사용자가 비밀번호를 제3자 서비스에 직접 제공하지 않고도, 다른 웹사이트 상의 자신들의 정보에 대해 접근 권한을 부여할 수 있는 공개 표준이다. 단순히 로그인을 위한 프로토콜을 넘어, 안전하고 표준화된 방식으로 API 접근 권한을 관리하는 핵심 메커니즘이다. OAuth를 제대로 이해하고 사용하면 보안성과 사용자 경험을 향상시킬 수 있다. 그리고 안전.. CS 2025. 8. 4.
JWT란 무엇인가? 웹 개발에서 인증과 권한 부여는 필수적인 요소다. 특히 stateless한 인증 방식의 필요성이 더욱 커졌다. 이런 요구사항을 만족시키는 것이 바로 JWT(JSON Web Token)이다.JWT란 무엇인가?JWT는 두 당사자 간에 정보를 안전하게 전송하기 위한 컴팩트하고 자체 포함적인 방식의 토큰이다. 단순히 사용자 인증을 위한 도구를 넘어서, 서비스 간 통신에서 신뢰할 수 있는 정보 교환의 핵심 역할을 한다. JWT를 제대로 이해하면 확장 가능한 인증 시스템을 구축할 수 있고, 서버 부하를 크게 줄이면서 보안성을 유지할 수 있다. 특히 분산 시스템에서는 세션 상태를 공유할 필요 없이 각 서비스가 독립적으로 토큰을 검증할 수 있다는 점이 큰 장점이다. JWT는 크게 세가지 주요 구성 요소로 나뉘는데 He.. CS 2025. 7. 31.
JVM은 무엇인가 Java 개발을 하며 공부를 하다 보면 "Write Once, Run Anywhere"라는 말을 자주 보게 된다. 이것이 가능한 이유가 바로 JVM(Java Virtual Machine) 때문이다. JVM은 단순히 Java 코드를 실행하는 것을 넘어서, 자바 개발의 핵심 인프라다.JVM 이란 무엇인가?JVM은 Java 프로그램이 운영체제에 독립적으로 실행될 수 있게 하는 핵심 런타임 환경이다. 단순히 바이트코드를 실행하는 것을 넘어, 메모리 관리, 성능 최적화, 보안 등 다양한 역할을 담당한다.JVM은 을 제대로 이해하면 Java 애플리케이션의 성능을 크게 향상시킬 수 있고, 메모리 누수나 성능 병목 현상을 효과적으로 해결할 수 있다.JVM은 크게 세 가지 주요 구성 요소로 나뉜다. Class Loade.. Java 2025. 7. 25.
@Override는 왜 써야 할까? 면접 준비를 하며 오버라이딩과 오버로딩의 차이에 대해 한번 더 상기하던 도중, 자바에서 @Override를 왜 쓰는지에 대한 궁금증이 문득 생겼습니다. 이미 알고 계신분도 많겠지만, 저는 지금까지 자바로 코드를 작성할 때 @Override를 거의 사용하지 않았고, 자동으로 작성되는 경우에는 지우기까지 했습니다. 이번글은 짧을 수도 있지만 저처럼 막 지우고 넘어가지 않기를 바라며 작성해봅니다. 그럼 @Override는 왜 사용해야 할까요? 쉽게 얘기하면 @Override는 컴파일 타임에 오버라이딩이 제대로 이루어졌는지를 확인할 수 있고, 타입 안정성을 부여할 수 있기 때문에 사용합니다. 아래 예를 봅시다.class Parent { void greet() {}}class Child extends Pa.. 카테고리 없음 2025. 6. 24.