분류 전체보기

Spring boot

kotlin coroutine vs node.js의 비동기 처리 차이점

kotlin에서 Coroutine 은 비동기 처리를 지원한다.node.js처럼 싱글 스레드를 이벤트 핸들러로 비동기 동작하는 것과 다르다. Kotlin의 코루틴과 Node.js의 비동기 처리 비교Kotlin에서 **코루틴(Coroutine)**을 사용하면 비동기 코드를 간결하게 작성할 수 있습니다. 이와 비슷한 방식으로 Node.js도 비동기 작업을 처리하지만, 두 방식은 동작 원리에서 차이를 보입니다.1. Kotlin 코루틴 (Coroutine)Kotlin의 코루틴은 비동기 처리를 경량 스레드(lightweight thread) 방식으로 다룹니다. 코루틴은 실제 OS 스레드를 생성하는 것이 아니라, Dispatcher가 내부적으로 스레드를 관리하면서 여러 비동기 작업을 동시에 처리할 수 있게 해줍니다..

코딩테스트

백준 10431 줄세우기 ( set, bst 활용 )

https://www.acmicpc.net/problem/10431 매번 줄을 설 때마다 자기보다 키가 큰 학생 수를 더하면 밀려난 총량이 나온다.따라서, 기존에 줄을 선 아이들 중, 이번에 줄을 설 아이보다 키가 큰 아이의 수를 찾으면된다.이걸 O(N)으로 탐색해도 input 이 크지 않기에 상관 없지만, BST를 구축하면 O(logN)만에 찾을 수 있기에 BST를 사용할 것이다.추가로, vector를 써도 되지만, vector는 매번 줄을 선아이를 추가하는 insert에서 O(N)의 시간 복잡도가 든다. 따라서, 문제의 튜닝 포인트는 아래와 같다1) BST를 통해 자신보다 큰 아이의 개수를 찾기lower_bound & upper_bound 라이브러리는 bst 기반 탐색으로 자기보다 큰 키의 아이들을 ..

sql튜닝

3장 - 인덱스 튜닝

인덱스를 사용하는 것으로 수천만건의 데이터에서 원하는 데이터를 매우 빠르게 찾아낼 수 있다.하지만 그를 넘는 대량의 데이터에서, 인덱스가 오히려 느린 경우가 있다. 테이블 스캔이 블록 엑세스하는 과정익스텐트 맵을 통해 읽을 블록들의 DBA 정보를 얻는다. → 같은 익스텐트 == 같은 데이터 블록 => block I/O 용이하다! 인덱스로 테이블 블록 엑세스하는 과정리프 블록에서 읽은 ROWID를 분해해서 DBA(디스크 주소 정보) 를 얻고, I/O 성능 개선을 위해 버퍼 캐시를 활용하기 위해 버퍼 캐시를 확인하고, 읽으려는 DBA를  해시 함수에 입력해서 hash chain을 찾고 여기서 버퍼 헤더를 찾는다. **캐시 적재시 매번 같은 해시 함수 쓰기에 버퍼 헤더는 항상 같은 해시 체인에 연결되지만, 실..

sql튜닝

sql 최적화 - 2장 인덱스 - index scan 종류

Index Range ScanIndex Range Scan은 B*Tree 인덱스의 가장 일반적이고 정상적인 형태의 엑세스 방식이다.수직적 탐색 후 필요함 범위(Range)만 수평적 탐색한다.인덱스 스캔 범위와 테이블 액세스 횟수를 줄이는 것이 성능 향상의 길이다.Index Full ScanIndex Full Scan은 수직적 탐색 없이 오직 인덱스 리프 블록을 처음부터 끝까지 수평적으로 탐색하는 방식이다.최적의 인덱스가 없을때, 차선으로 선택된다.Index Full Scan 효용성선두 컬럼이 조건절에 없으면 옵티마이저가 Index Full Scan을 고려한다.만약 테이블이 고용량이면 인덱스 활용을 고려하지 않을 수 있다.인덱스 스캔 단계에서 대부분 레코드를 필터링하고 아주 일부만 테이블을 액세스하는 상황..

sql튜닝

1장 sql 처리 과정

데이터 저장 구조index, table, LOB 컬럼 모두 하나의 세그먼트로 표현된다.특정 컴포넌트가 너무 커지면, 해당 세그먼트가 EXTENT를 추가로 할당 받는다. EXTENT는 연속된 블록의 모음이다. 또한 db 테이블을 파티션하면, 하나의 파티션이 하나의 세그먼트로 들어갈 수 있다.  multi block IO → 한번에 인접한 블록 여러개 가져오기 == 같은 extent 내에 있는 블록 가져오기 이다( 다른 extent에 있는 것 까지 가져오기 불가능) library cache: 쿼리 캐싱. 소프트 파싱을 위함buffer cache: 실제 데이터 캐싱. 굳이 disk에서 데이터 가져오지 않고 캐싱된 데이터 가져올 수 있다 만약 1,2,3,4,5,6,7 번 블록이 있는데, 캐시에 1,5,7만 들어..

코딩테스트

프로그래머스 전화번호 목록 c++

포인트) 순서대로 정렬하면, 자신을 포함하는 번호는 무조건 자기 바로 옆에 온다.따라서 정렬 후 자기 다음 수와 비교만 해보면 알 수 있다.   #include #include #include#includeusing namespace std;//12343 123431 12342bool isHead (string a, string b){ for(int i=0;i phone_book) { bool answer = true; sort(phone_book.begin(),phone_book.end()); string prev =phone_book[0]; for(int i=1;i// #include // #include// #include// using namespace std;// ..

코딩테스트

c++ 코딩 테스트 주의사항 -참조 전달

void DFS(vector &numbers, int &target,int sum,int n) { ..... DFS(numbers, target, sum + numbers[n], n+1); DFS(numbers, target, sum - numbers[n], n+1);}파라미터의 vectorint> &numbers, int &target 를 주목하자. c에서 & == 참조값을 나타낸다. 즉, numbers 벡터, target의 '주솟값'을 전달하는 것이다. 따라서, 재귀 함수 등에서 전체 함수에 통용되는 값을 하나 유치하고 싶다면, 전역 변수를 쓰는 것 보다 & 를 통한 참조 전달을 활용하는 것이 더 깔끔하다.  * 매번 value를 전달하는 것은 매번 새로운 공간에 해당 value 값을..

Spring boot

스프링 MVC

HTML은 정적이다. 동적인 리소스를 만들기 위해선 다른 기능이 필요하다. 이때 사용되는 것이 서블릿이다. 서블릿을 한 줄로 정의하자면 아래와 같습니다. 클라이언트의 요청을 처리하고, 그 결과를 반환하는 Servlet 클래스의 구현 규칙을 지킨 자바 웹 프로그래밍 기술 간단히 말해서, 서블릿이란 자바를 사용하여 웹을 만들기 위해 필요한 기술입니다. 그런데 좀더 들어가서 설명하면 클라이언트가 어떠한 요청을 하면 그에 대한 결과를 다시 전송해주어야 하는데, 이러한 역할을 하는 자바 프로그램입니다. 서블릿: 스프링 부트가 내장 웹서버 톰캣을 띄운다. 톰켓은 내부에 서블릿 컨테이너를 가지고 있다. 이를 통해 서블릿 생성(HelloServlet 생성) - JAVA를 사용하여 웹을 만들기 위해 필요한 프로그래밍 기..

코앤미
'분류 전체보기' 카테고리의 글 목록