티스토리

공부
검색하기

블로그 홈

공부

codingstudy95.tistory.com/m

김검정 님의 블로그입니다.

구독자
1
방명록 방문하기

주요 글 목록

  • 기능은 됐는데 성능이 안 나오는 코드의 특징 5가지 코드는 돌아가기만 하면 되는 거 아니야?? 라는 생각을 처음엔 했었다. 하지만 서비스가 커지고 사용자 수가 늘어나거나, 잘못된 로직으로 인해 장애, 운영 비용 증가, 사용자 이탈로 이어지게 된다. 그래서 개발자는 기능과 성능을 동시에 잡는 코드를 짤 줄 알아야 한다. 그럼 성능이 안나오는 코드는 어떤 특징을 가지고 있는지 알아보자 1. 데이터 구조를 무시한 코드일을 하다보면 무의식적으로 무조건 List에 담고 for문을 돌리는 경우가 있다. 그러다 해시맵을 써야 할 곳에 배열을 쓰게 되는 경우가 발생한다. 이렇게 되면 검색, 삽입, 삭제할 때 시간 복잡도가 폭발하게 된다.// 10,000건 데이터 중에서 특정 ID 찾기for (User user : userList) { if (user.getId(.. 공감수 0 댓글수 0 2025. 5. 9.
  • Oracle SQL Developer 에서 쿼리 계획(EXPLAIN PLAN) 보는 방법 쿼리 계획이란?쿼리 계획(Execution Plan)은 오라클 데이터베이스가 SQL 문장을 실행할 때 "어떤 방법으로 데이터를 읽고 처리할지" 미리 계산해서 보여주는 설명서이다. 즉,테이블을 풀스캔할지?인덱스를 탈지?조인을 어떤 순서로 할지? 등을 알려주는 실행 청사진이다. 이걸 보면 쿼리 성능 문제를 미리 예측하거나 최적화할 수 있다. SQL Developer에서 Explain Plan 확인하는 기본 방법SQL Developer 실행오라클 DB에 로그인쿼리 작성 ex) SELECT * FROM employees WHERE department_id = 10;쿼리 블록을 드래그하거나 선택한 후, 상단 메뉴에서 Explain Plan(F10) 버튼 클릭 또는 오른쪽 클릭 → Explain Plan 선택 .. 공감수 0 댓글수 0 2025. 5. 7.
  • DB Connection Pool 고갈이 되면 무슨 일이 벌어질까? 대부분의 웹 애플리케이션은 DB Connection Pool을 사용한다. DB 커넥션 풀 덕분에 동시 사용자 요청을 빠르게 처리할 수 있다. 하지만 어느 순간, 예상치 못한 상황이 발생한다. 그 순간중 하나가 바로 커넥션 풀 고갈(Connection Exhaustion) 이다. DB 연결 대기 시간이 급격히 증가한다요청이 지연된다최악의 경우 애플리케이션 전체가 다운된다. 그렇다면 DB Connection Pool에 대해서 알아보자. DB Connection Pool 이란?DB 연결(Connection)을 매번 새로 열고 닫으면 비용이 크기 때문에, 일정 수의 커넥션을 미리 생성해 풀(pool)에 담아두고 재사용하는 구조이다. 특징설명커넥션 생성 비용 절감연결이 미리 준비되어 빠른 응답 가능커넥션 수 제.. 공감수 0 댓글수 0 2025. 5. 5.
  • 할머니도 이해할 수 있는 자바 Thread Thread에 대해서 오래전에 정리했던 적이 있다. 하지만 일을 하다가.. 아직도 Thread에 대해서 잘모른다는 느낌이 들어서 더 자세하게 다시한번 정리를 하고자 한다. https://codingstudy95.tistory.com/67 스레드사전적 의미로 한 가닥의 실이라는 뜻으로 한가지 작업을 실행하기 위해 순차적으로 실행할 코드를 실처럼 이어놓았다고 해서 유래된 이름이다. 하나의 스레드는 하나의 코드 실행 흐름이므로codingstudy95.tistory.com  스레드란 무엇인가!!?자바에서 Thread(스레드)는 프로그램 내에서 동시에 실행되는 작업의 단위를 의미한다. 회사에서 여러 사람이 각자의 다른 일을 동시에 하는 것과 마찬가지로, 스레드는 하나의 프로그램 안에서 여러 작업을 동시에 처리할 .. 공감수 1 댓글수 0 2025. 5. 1.
  • ArrayList vs LinkedList -add 시간복잡도와 메모리 사용 차이(Kotlin / Java) 개발을 하다 보면 ArrayList를 쓸지, LinkedList를 쓸지 고민할 때가 많다. 특히 데이터를 추가할 때(add), 성능이나 메모리 측면에서 어떤 차이가 있는지 정확하게 이해하고 있으면, 더 좋은 성능을 만들 수 있을 것 같아서 정리해본다. 1. ArrayList 내부적으로 배열(Array) 기반으로 데이터를 저장하는 컬렉션이다.데이터가 추가되면서 배열 크기를 초과하면, 더 큰 배열을 새로 만들고 기존 데이터를 복사한다.val arrayList = ArrayList()arrayList.add(10) // 배열에 10 추가 특징 : 인덱스를 통한 접근 ( get(index) ) 이 매우 빠름 → O(1)중간 삽입/삭제는 느림 → O(N) (요소 이동 발생) 2. LinkedList노드(Node).. 공감수 2 댓글수 0 2025. 4. 30.
  • Kotlin val 은 왜 값이 변하는가?? Kotlin을 공부중인데 val에 대해서 글을 읽던 중 엥? 이게 무슨 말이지 하는 부분이 있었다. 분명 "val 로 선언하면 값을 바꿀 수 없다" 라고 봤는데, val로 선언했는데 객체 내부 값이 변하는걸 목격했다. 분명히 고정된 값(val)인데 왜 내부 데이터는 바뀌는건지 혼란스러웠다. 이건 Kotlin이 값을 불변하게 만든다고 오해한 데서 시작된 착각이라는 것을 알았다. 진짜로 불변(Immutable)한 것은 "참조(reference)" 이지, "객체의 상태(state)" 가 아니다. 1. Kotlin의 val 과 var 기본 개념먼저, Kotlin의 val 과 var 는 변수 선언 방식이다.키워드의미val읽기 전용(Read-only) 참조var읽기/쓰기(Read-Write) 참조 val 은 참조.. 공감수 0 댓글수 0 2025. 4. 28.
  • Spring Boot 의존성 주입 (Dependency Injection) 의존성? 의존성이 뭘까?어떤 물건을 만들거나 사용할 때 다른 것이 꼭 필요할때 우리는 그것을 의존한다고 한다.예를 들어 자동차는 엔진이 꼭 필요하다.자동차는 혼자서는 움직일 수 없다.반드시 엔진이 있어야 움직일 수 있다.즉 자동차는 엔진에 의존하고 있다고 말할 수 있다.이처럼 어떤 객체가 다른 객체를 필요로 할 때, 의존성이 있다고 말한다. 그렇다면 의존성 주입(Dependency Injection) 이란 무엇일까? 만약 자동차가 엔진을 직접 만들 필요 없이, 공장에서 엔진을 가져와 조립할 수 있다면 더 편리하지 않을까?? >>> 이것이 의존성 주입니다. 쉽게 말해자동차(클래스)는 엔진을 직접 만들지 않음필요한 엔진을 공장에서(스프링)  가져옴스프링이 자동차에 엔진을 자동으로 넣어줌(의존성 주입)! 오호.. 공감수 1 댓글수 2 2025. 4. 16.
  • 백엔드 개발자도 알아야 하는 브라우저 캐시의 브라우저 캐시는 단순히 프론트엔드의 영역이 아니라, 실제 서비스의 성능과 트래픽 비용, 심지어 버그 발생 가능성까지 영향을 미치는 아주 중요한 요소이다. 브라우저 캐시란?브라우저 캐시는 클라이언트(사용자의 웹 브라우저)가 자주 사용하는 데이터를 저장해두고, 다음에 다시 요청할 때 빠르게 보여주기 위한 기술이다. 예 : 어떤 쇼핑몰 사이트에 방문시, 그 사이트의 로고 이미지가 매번 서버에서 오면 느릴것이다. 그래서 브라우저는 이걸 한 번 다운로드한 뒤, 다음부터는 자기 컴퓨터에 저장된걸 보여준다. 브라우저 캐시의 핵심 메커니즘 1. Cache-Control서버가 클라이언트에게 이 리소스를 어떻게 캐시해야 할지 알려주는 HTTP 헤더이다.max-age=3600 -> 1시간 동안 캐시해라public -> .. 공감수 0 댓글수 1 2025. 4. 9.
  • 오라클 날짜별 조회 대부분의 테이블에 날짜 데이터가 등록된 컬럼이 있을 것이다. 날짜별로 그룹화 하여 조회하려면 어떻게 해야할까?? 1. TRUNC 함수 사용TRUNC 함수를 사용하면 날짜별로 잘라낼 수 있다. * 월 단위로 자르는 예시SELECT TRUNC(REG_DT, 'MM') AS month_start, COUNT(*) AS cntFROM your_tableGROUP BY TRUNC(REG_DT, 'MM')ORDER BY month_start;이 쿼리는 REG_DT의 월의 첫 날(예: 2024-08-01) 기준으로 그룹화하여 각 월에 해당하는 데이터 건수를 보여준다. 2. TO_CHAR 함수 사용 날짜를 원하는 형식(예: 'YYYY-MM')으로 변환하여 그룹화할 수도 있다.SELECT TO_CHAR(REG.. 공감수 0 댓글수 0 2025. 4. 7.
  • Spring Boot와 WebSocket 을 이용한 실시간 통신 시스템 구축해보기 실시간 통신은 채팅, 알림, 게임. 금융 거래 등 다양한 분야에서 핵심 기술로 사용된다. 예를 들어, 소셜 미디어에서 친구가 게시물을 올릴 때 실시간 알림이 전송되는 경우, WebSocket을 통해 효율적으로 구현할 수 있다. 추후에 어떤 서비스를 구현해 볼지 모르기 때문에 한번 관련된 내용을 정리해두자 기본 개념을 먼저 이해해보자  1. HTTP 프로토콜HTTP(HyperText Transfer Protocol)는 웹의 기본 통신 프로토콜이다. 요청-응답 구조 : 클라이언트가 요청하면 서버가 응답단발성 연결 : 요청 후 연결 종료비상태성 : 각 요청이 독립적위처럼 HTTP의 한계는 실시간 상호작용에 적합하지 않다는 점이다. 실시간 데이터 전송이나 서버의 지속적인 이벤트 알림은 HTTP만으로 구현하기 어.. 공감수 1 댓글수 1 2025. 4. 7.
  • 오라클 ORA-00054 : 리소스가 사용 중이어서 NOWAIT가 지정되었거나 시간 초과가 만료된 상태로 획득합니다. 컬럼 삭제 중 해당 에러가 떴다.  원인테이블이 다른 세션에서 사용 중이다.다른 사람이 테이블에 대해 SELECT나 UPDATE를 하고 있거나, 트랜잭션이 열려 있어서 락이 걸려 있는 상태이다. Oracle은 ALTER TABLE 같은 DDL 문장을 실행할 때 해당 테이블에 대해 exclusive lock을 걸려고 시도하는데, 이미 누군가 쓰고 있다면 그 락을 못 걸고 에러가 난다. 누군가 테이블을 사용하고 있군...   해결 방법잠깜 기다렸다가 다시 시도 : 누군가 사용하고 있다는건 일시적인 현상이므로 가장 직관적인  해결 방법인것 같다.락 걸린 세션 확인하기(DBA 권한 필요)락 잡고 있는 세션 종료(주의! 꼭 필요한 경우에만 진행한다.)* 락 걸린 세션 확인 쿼리SELECT l.session_id.. 공감수 0 댓글수 0 2025. 4. 3.
  • Jar 파일과 War 파일의 차이점 및 활용법 Java 기반 프로젝트를 배포할 때 자주 사용하는 Jar 파일과 War 파일이 있다. 누군가는 War 파일로 달라고 하고, 누군가는 Jar 파일로 달라고 한다. 두 파일의 차이점은 무엇이고 어떨때 활용하면 좋을까? Jar, War 모두 패키징이다. 여기서 패키징은 단순히 파일을 압축하는 것이 아니라, 실제 애플리케이션을 실행 가능한 형태로 만들어 주는 매우 중요한 단계이다. 연인에게 줄 선물을 박스째로 주는 것보다 예쁘게 포장해서 주면 더 좋은것과 마찬가지이다. 소프트웨어도 Jar 파일이나 War 파일과 같은 포맷으로 잘 포장되어 있어야, 다른 개발자나 운영자가 쉽게 사용하고 배포할 수 있다. Jar 파일(Java Archive)Jar 파일은 Java 애플리케이션을 패키징하는데 사용되는 파일 형식이다. .. 공감수 1 댓글수 0 2025. 3. 26.
  • Spring Boot와 Kolin으로 고성능 백엔드 구축해보기 회사에서 일을 하면서 실제로 대규모 트래픽을 경험해 볼 수는 없다. 끽해야 일일 접속자가 350명 정도..? 사내 서비스라 이용자가 너무 적다.  여러 구인구직 공고를 보면 대부분 대규모 트래픽을 구축해보거나 경험해본 사람들을 우대하는 것을 보고 나 스스로 대규모 트래픽에 관해 여러 문서나 사례등을 바탕으로 대규모 트래픽을 처리하는 방법에 대해 많이 공부해야 된다고 느꼈다. 이 글 하나만 읽어도 대규모 트래픽 환경에서 어떻게 안정적인 시스템을 설계할 수 있는지 확실하게 정리하고자 한다.(나처럼 실제 트래픽을 경험해 본 적이 없더라도 말이다..)  1. 대규모 트래픽이란?대규모 트래픽은 한꺼번에 수많은 사용자가 웹사이트나 애플리케이션에 접속해 데이터를 요청하는 상황을 말한다. 예를 들어, 쇼핑몰의 대규모 .. 공감수 4 댓글수 0 2025. 3. 20.
  • Spring Boot와 Kotlin 백엔드 서버에서 로그 관리하기(2) 앞서 로그와 로그를 관리하는게 얼마나 중요한지 알아보았는데 중앙 집중식 로그 관리에 대해 알아두면 좋을것 같아서 정리를 했다. 중앙 집중식 로그 관리의 필요성1. 문제 진단과 모니터링서버에 문제가 발생했을 때, 로그를 통해 문제의 원인을 빠르게 파악할 수 있다. 중앙 집중식 로그 관리 시스템은 모든 로그를 실시간으로 모니터링하고, 이상 징후가 보이면 즉시 알림을 보내어 빠른 대응이 가능하게 해준다. 2. 보안 및 규정 준수로그는 보안 사건을 추적하는 데도 유용하다. 로그를 중앙에서 관리하면, 보안 침해나 이상 행동을 쉽게 감지할 수 있고, 법정 규정을 준수하기 위한 증거 자료로 활용할 수도 있다. 3. 성능 분석과 최적화로그 데이터를 분석하면 애플리케이션의 성능 병목이나 자원 사용 패턴을 파악할 수 있다.. 공감수 0 댓글수 0 2025. 3. 19.
  • Spring Boot와 Kotlin 백엔드 서버에서 로그 관리하기 우선 로그란 컴퓨터 프로그램이 실핸되는 동안 일어나는 사건이나 상태를 기록한 기록부라고 생각하면 된다.예를 들어, 사람이 일기를 쓰고 나중에 일기장으로 그날 하루를 돌아보듯 프로그램도 "어떤 일이 일어났는지"를 기록한다.  로그 관리는 문제를 빠르게 찾아내거나, 시스템. 상태를 확인할 때 매우 중요하다. Gradle을 이용한 프로젝트 설정 (Gradle로 개발을 하고 있기 때문에 Gradle에 대해서 작성)더보기더보기Gradle에 대해 모르거나 까먹었을 수 있다. Gradle은 프로젝트를 빌드(컴파일, 테스트, 배포 등) 하는 도구이다.  그렇다면 또 빌드에 대해서 헷갈릴 수 있다. 빌드란? 소스코드 파일을 컴퓨터에서 실행할 수 있는 독립적인 형태로 변환하는 과정과 결과를 말한다. 즉, 개발자가 작성한 .. 공감수 2 댓글수 3 2025. 3. 17.
  • Spring Boot에서 AOP(관점 지향 프로그래밍) 활용해보기 AOP란 무엇일까?AOP(Aspect-Oriented Programming)는 관점 지향 프로그래밍이라고 부른다. 너무 어려운데 풀어서 설명하면 프로그램의 핵심 로직과 공통 기능(예 : 로깅, 보안, 트랜잭션 관리)을 분리하여 작성할 수 있도록 도와주는 것이라고 보면 된다. 즉, 핵심 비즈니스 로직에 영향을 주지 않으면서도 여러 곳에서 반복되는 기능을 한 곳에 모아서 관리할 수 있게 해준다(너무 좋은것 아닌가?) 더보기더보기더 쉽게 예를 들어 학교에서 학생들이 공부하는 주요 수업(핵심 로직)이 있다고 해보자. 그런데, 시험 감독, 출석 체크, 학부모 연락 등과 같은 공통 작업도 있는데, 이 작업들은 모든 수업에 걸쳐 반복된다. AOP는 이처럼 "공통 작업(예 : 시험 감독)" 을 한 곳에서 관리하고, 각.. 공감수 0 댓글수 0 2025. 3. 13.
  • 오라클에서 정말 많이 사용하는 GROUP BY 졸업하기 일을 하다 보면 데이터가 중복으로 들어가 있는 테이블에서 특정 조건을 만족하는 데이터만 조회하는 경우가 정말 많다. 매번 찾아보기도 힘들고 한번 알아두면 누구보다 빠르게 쿼리를 작성할 수 있기 때문에 처음이자 마지막으로 정리를 하려고 한다.   우선 GROUP BY는 각종 집계함수, 그룹함수와 함께 쓰이며 그룹화된 정보를 제공한다. 데이터를 그룹으로 나누어, 그룹별로 집계된 정보를 출력하고 비교할 때 GROUP BY 가 사용된다. GROUP BY로 그룹화된 결과에 대해 조건을 걸 수 있는데 이것이 HAVING 절이다. 그룹별로 적용할 수 있는 함수 및 연산자를 사용할 수 있다. 1. HAVING에서 사용할 수 있는 연산자연산자설명예제=특정 값과 같은 그룹 선택HAVING COUNT(*) = 10!=, 특.. 공감수 0 댓글수 0 2025. 3. 12.
  • Spring Boot Auto Configuration 이해해보기 Spring Boot는 빠르게 프로토타입을 만글고, 반복적인 설정 작업 없이 비즈니스 로직에 집중할 수 있게Auto Configuration (자동 구성) 기능을 제공한다. 한번 Spring Boot Auto Configuration 기본 개념과 동작 원리, 활용예제에 대해서 알아보자. Auto Configuration이란 무엇인가?Auto Configuration은 개발자가 매번 복잡한 설정 파일이나 보일러플레이트 코드를 작성하지 않아도, 애플리케이션이 실행될 때 필요한 설정을 자동으로 구성해주는 기능이다. Spring Boot는 클래스패스에 포함된 라이브러리와 프로젝트 설정을 기반으로, 애플리케이션에 필요한(Bean)들을 자동으로 등록한다.더보기비유를 들어보자면 새로운 스마트폰을 구입했다고 생각해보자.. 공감수 1 댓글수 2 2025. 3. 10.
  • Kotlin의 Null Safety 자바로 개발을 하다 보면 가장 자주 발생하는 오류 중 하나가 NullPointerException 이다. (진짜...) NullPointerException은 프로그램이 '값이 없다'는 상태인 null 값을 사용하려고 할 때 발생하는 오류이다. 정말 초보 개발자일때 뿐만 아니라 숙련이 되더라도 언제든 큰 골칫거리가 될 수 있다고 생각한다. Kotlin은 이러한 문제를 근본적으로 해결하기 위해 Null Safety라는 개념을 도입했다.  우선 Null에 대해서 정의를 해보자  Null이란 무엇인가?Null은 "값이 없음"을 의미하는 특별한 값이다.프로그래밍에서 어떤 변수에 값이 할당되지 않았거나, 사용할 수 없는 상태를 표현할 때 null을 사용한다. 예를 들어, 친구 목록을 저장하는 변수에 친구가 한 명.. 공감수 1 댓글수 2 2025. 3. 8.
  • Kotlin 기본 문법 1. 변수와 상수Kotlin에서는 변수를 선언할 때 var 와 상수를 선언할 때 val 키워드를 사용한다.var : 값이 변경 가능한 변수 val : 값이 변경 불가능한 변수fun main() { var age: Int = 20 // 가변 변수 val name: String = "Alice" // 불변 변수 (상수) println("이름: $name, 나이: $age") age = 21 // 값 변경 가능 println("변경된 나이: $age")}  2. 타입 추론Kotlin은 변수의 타입을 자동으로 추론한다. 명시적으로 타입을 지정하지 않아도, 초기 값으로부터 타입을 유추할 수 있다.fun main() { val language = "Kotlin" //.. 공감수 1 댓글수 1 2025. 3. 5.
  • Spring Boot와 Kotlin: 기본 개념과 시작하기 복잡한 시스템을 신속하고 안정적으로 구축하는 것이 중요하다고 생각한다. 이에 따라 개발 생산성과 유지보수성을 극대화할 수 있는 도구와 언어의 선택은 필수적이다. Spring Boot 와 Kotlin은 이런 요구에 부합하는 강력한 조합으로 주목받고 있다. Spring Boot란 무엇인가?Spring Boot는 전통적인 스프링 프레임워크의 복잡한 설정 문제를 해결하기 위해 나온 경량화된 프레임워크입니다.주요 특징과 장점을 구체적으로 살펴보면:1. 자동 구성 (Auto-Configuration)설정의 단순화:Spring Boot는 애플리케이션 시작 시 프로젝트의 클래스패스와 설정 파일을 기반으로 자동으로 적절한 빈(Bean)들을 구성합니다.이는 개발자가 일일이 XML이나 복잡한 자바 설정을 작성할 필요 없이 .. 공감수 2 댓글수 3 2025. 3. 1.
  • 오라클 MERGE INTO 구문과 INACTIVE 24년 8월달에 개발한 소스를 운영서버에 반영후 새벽시간대 갑자기 테이블의 INACTIVE LOCK이 발생하였다.  INACTIVE LOCK이 발생한 테이블은 기존에 아무런 문제가 없던 SELECT 쿼리였다.  8월달에 적용된 목록은새벽시간대 영화관련 서버의 인물 정보를 연동받아 데이터를 최신화하는 배치의 로직 주석처리 쿼리 튜닝 2건실시간으로 연동되던 이미지 정보를 배치작업으로 변경해 실시간 -> 배치로 변경 이렇게 3가지 였다.  원인을 찾던 중 3번 항목의 로직에서 트랜잭션 처리가 제대로 되지 않아 발생할 수 있다는 의견이 있어 트랜잭션 처리를 추가후 긴급빌드를 진행하게 되었다.  빌드후 모니터링시에는 아무 문제가 없어 해결된줄 알았지만 이전과 동일한 새벽 시간대에 INACTIVE LOCK이 발생하.. 공감수 2 댓글수 1 2024. 10. 18.
  • DB Connection is not associated 얼마전 배치를 추가하여 운영서버에 반영하였는데 위와 같은 에러가 뜨면서 쿼리들이 Lock에 걸리기 시작했다. Lock이 걸린 세션을 Kill 한 후 killed session의 connection을 정리 하려고 하였으나 lock에 걸려 서비스에 문제가 생겨 서버를 재기동하는 상황까지 발생하였다. 원인 분석이 명확하게 되지 않아 여러가지 방법을 시도하여 보았다. 배치주기 변경 : 기존 5초마다 반복실행하던 배치를 6분마다 작동으로 배치주기를 변경하였다.Lock이 걸린 쿼리를 사용하는 배치 인덱스 생성 및 쿼리 수정 : Lock 이 걸린 쿼리를 포함하고 있는 배치내에 모든 쿼리들을 전수조사하여 실행속도가 늦거나 인덱스를 타지 않고 Full Scan을 타는 쿼리들을 수정하였다.위 두가지 개선책을 운영에 반영하.. 공감수 0 댓글수 0 2024. 9. 10.
  • FastAPI? 유튜브에서 FastAPI 관련한 영상을 봤는데 너무 간편해보여 찍먹을 해보려고 한다. FastAPI는 API를 만들기 위한 파이썬 웹 프레임워크이다. FastAPI는 이름에 걸맞게 빠른 속도를 자랑한다. 높은 성능과 쉬운 사용성을 목표로 설계되었으며, 대규모 애플리케이션 부터 간단한 프로젝트까지 다양한 요구 사항을 만족시킬 수 있다.더보기API(Application Programming Interface)는 서비스의 요청과 응답에 대한 규칙을 의미하지만 보통 API라고 하면 이러한 요청과 응답을 처리하는 서비스(기능)을 의미한다. 주요 특징으로는고성능 : 비동기 프로그래밍을 지원한다. 내부적으로 Starlette 라는 비동기 프레임워크를 사용한다.쉬운 사용성 : Python의 타입 힌트를 활용하여 자동으.. 공감수 0 댓글수 0 2024. 8. 12.
  • 인덱스 구조 및 탐색 데이터를 찾는 두 가지 방법어떤 초등학교를 방문해 '홍길동' 학생을 찾는 방법은 두 가지다. 첫째는, 1학년 1반부터 6학년 맨 마지막 반까지 모든 교실을 돌며 홍길동 학생을 찾는 것이다. 둘째는, 교무실에서 학생 명부를 조회해 홍길동 학생이 있는 교실만 찾아가는 것이다. 둘 중 어느 쪽이 빠를까? 홍길동 학생이 많다면 전자가 빠르고, 몇 안되면 후자가 빠르다. 데이터베이스 테이블에서 데이터를 찾는 방법도 아래 두 가지다. 수십 년에 걸쳐 DBMS가 발전해 왔는데도 이 두 방법에서 크게 벗어나지 못하고 있다.테이블 전체를 스캔한다.인덱스를 이용한다.  인덱스 튜닝의 두 가지 핵심요소인덱스는 큰 테이블에서 소량 데이터를 검색할 때 사용한다. 온라인 트랜잭션 처리 시스템에서는 소량 데이터를 주로 검색하므로 .. 공감수 1 댓글수 0 2024. 8. 5.
  • 캐시 탐색 메커니즘 Direct Path I/O를 제외한 모든 블록 I/O는 메모리 버퍼캐시를 경유한다. 인덱스 루트 블록을 읽을 때인덱스 루트 블록에서 얻은 주소 정보로 브랜치 블록을 읽을 때인덱스 브랜치 블록에서 얻은 주소 정보로 리프 블록을 읽을 때인덱스 리프 블록에서 얻은 주소 정보로 테이블 블록을 읽을 때테이블 블록을 Full Scan 할 때 DBMS는 위와 같이 버퍼캐시를 해시 구조로 관리한다.예를 들어, 버퍼캐시에서 20번 블록을 찾고자 하다고 가정해보자. 블록 번호를 5로 나누면 나머지가 0이다. 이 블록이 캐싱돼 있다면 버퍼 헤더가 첫 번째 해시 체인에 연결돼 있을 것이다. 이 블록이 캐싱돼 있다면 버퍼 헤더가 첫 번째 해시 체인에 연결돼 있을 것이므로 찾을 때 항상 첫 번째 해시 체인만 탐색하면 된다. 버.. 공감수 0 댓글수 1 2024. 7. 30.
  • 데이터 저장 구조 및 I/O 메커니즘 SQL이 느린 이유SQL이 느린 이유는 대부분 I/O 때문이다. 구체적으로 디스크 I/O 때문이다. 그렇다면, I/O란 무엇일까? 'I/O = 잠(SLEEP)'이라고 생각하면 쉽다. OS 또는 I/O 서브시스템이 I/O를 처리하는 동안 프로세스는 잠을 자기 때문이다. 프로세스가 일하지 않고 잠을 자는 이유는 여러가지가 있지만, I/O가 가장 대표적이고 절대 비중을 차지한다.  프로세스(Process)는 '실행 중인 프로그램'이며, 생명주기를 갖는다. 즉, 생성(new) 이후 종료(terminated) 전까지 준비(ready)와 실행(running)과 대기(waiting) 상태를 반복한다. 실행 중인 프로세스는 interrupt에 의해 수시로 실행 준비 상태(Runnable Queue)로 전환했다가 다시 .. 공감수 0 댓글수 0 2024. 7. 29.
  • SQL 공유 및 재사용 소프트 파싱 vs 하드 파싱SQL 파싱, 최적화, 로우 소스 생성 과정을 거쳐 생성한 내부 프로시저를 반복 재사용할 수 있도록 캐싱해 두는 메모리 공간을 '라이브러리 캐시(Libray Cache)'라고 한다. 라이브러리 캐시는 SGA 구성요소다. SGA(System Global Area)는 서버 프로세스와 백그라운드 프로세스가 공통으로 액세스하는 데이터와 제어 구조를 캐싱하는 메모리 공간이다. 사용자가 SQL문을 전달하면 DBMS는 SQL을 파싱한 후 해당 SQL이 라이브러리 캐시에 존재하는지부터 확인한다. 캐시에서 찾으면 곧바로 실행 단계로 넘어가지만, 찾지 못하면 최적화 단계를 거친다. SQL을 캐시에서 찾아 곧바로 실행단계로 넘어가는 것을 '소프트 파싱(Soft Parsing)'이라 하고, 찾는 데.. 공감수 0 댓글수 0 2024. 7. 26.
  • SQL 파싱과 최적화 SQL을 실행하기 전 최적화 과정을 세분화해보자 1. SQL 파싱사용자로부터 SQL을 전달받으면 가장 먼저 SQL 파서(Parser)가 파싱을 진행한다. SQL 파싱을 요약하면 다음과 같다.파싱 트리 생성 : SQL문을 이루는 개별 구성요소를 분석해서 파싱 트리 생성Syntax 체크 : 문법적 오류가 없는지 확인. 예를 들어, 사용할 수 없는 키워드를 사용했거나 순서가 바르지 않거나 누락된 키워드가 있는지 확인한다.Semantic 체크 : 의미상 오류가 없는지 확인. 예를 들어, 존재하지 않는 테이블 또는 컬럼을 사용했는지, 사용한 오브젝트에 대한 권한이 있는지 확인한다. 2. SQL 최적화그다음 단계가 SQL 최적화이고, 옵티마이저(Optimizer)가 그 역할을 맡는다. SQL 옵티마이저는 미리 수집.. 공감수 1 댓글수 1 2024. 7. 25.
  • Lock 과 트랜잭션 동시성 제어 (Oracle) Lock은 데이터베이스의 특징을 결정짓는 가장 핵심적인 메커니즘이다. 자신이 사용하는 데이터베이스의 고유한 Lock 메커니즘을 이해하지 못한다면, 고품질, 고성능 애플리케이션을 구축하기 어렵다.  오라클 Lock오라클은 공유 리소스와 사용자 데이터를 보호할 목적으로 DML Lock, DDL Lock, 래치, 버퍼 Lock, 라이브러리 캐시 Lock/pin 등 다양한 종류의 Lock을 사용한다. 이 외에도 내부에 더 많은 종류의 Lock 이 존재한다. 애플링케이션 개발 측면에서 가장 중요하게 다루어야 할 Lock은 무엇보다 DML Lock 이다. DML Lock은 다중 트랜잭션이 동시에 액세스하는  사용자 데이터의 무결성을 보호해 준다.테이블 Lock로우 LockDML 로우 LockDML 로우 Lock은,.. 공감수 0 댓글수 2 2024. 7. 23.
    문의안내
    • 티스토리
    • 로그인
    • 고객센터

    티스토리는 카카오에서 사랑을 담아 만듭니다.

    © Kakao Corp.