728x90 반응형 분류 전체보기229 JPA란 무엇인가? 사실 그간 자바나 관련 공부를 하면서, 실무에서 JDBC를 통해 데이터베이스와 프로그램을 연결했었다. 안 그런 적이 한 번도 없었는데, 그럴 필요가 없다고 해서 급하게 공부하고 글을 쪄봤다. 반복되는 코드를 줄이고, "기본적인 SQL을 직접 만들어서 실행"까지 해주는 게 있다? 이게 JPA다. ORM(Object-Relational Mapping)을 먼저 알아야 한다. 객체와 관계형데이터베이스를 별도로 설계해주는 방법을 총칭한다. 예전에는, 그리고 사실 내 지금 실무에서는 EJB 기반의 희한한 프레임워크를 사용하고 있다... 근데 이게 되게 복잡하고 지저분하고, 그렇다고 한다. 사실 일하면서 프레임워크 자체를 까볼 생각은 자주 해보지 않는 편이다.. 궁금해해본 적 없긴 하다. 그리하여 요즘 대세는 JPA.. 2021. 9. 11. 17:36 SQL 튜닝과 Table Access SQL 튜닝을 왜 해야 할까요 그러면? 사실 그렇잖아요, 뼈빠지게 쿼리를 열심히 짰는데.. 튜닝까지 해야 한다고? 랜덤I/O로 인한 비효율을 최소화하기 위해 필요합니다. 그러려면 어제 길게길게 설명한 인덱스 스캔 방식도 중요하지만, 이게 만능은 또 아니란 말이지요. 알면 알 수록 알아야할 게 많아지는 건 어디나 마찬가지고 여기도 예외가 없다 이겁니다.. 그래서 테이블을 어떻게 액세스해서 찾아들어가는지에 대해서도 알아야 합니다. SQL 조건에서 참조하는 칼럼을 인덱스가 모두 포함하지 않는다면, 인덱스 스캔 후에 테이블을 반드시 한번 더 읽어야 합니다. 스캔을 통해 조건에 맞는 소량의 데이터를 빨리 찾아내요. 근데 그 데이터를 ROWID로 찾는다 말이죠? ROWID는 테이블 레코드를 찾기 위한 주소값이에요... 2021. 9. 1. 19:01 IndexScan이란? 튜닝을 하다보니 Index라는 말이 자주 보이는데, 이게 대체 뭘까 해서 그 다음 주제는 자연스럽게 index가 되었어요. Index는 검색성능을 최적화하기 위해 사용되는 도구입니다. 책의 목차와 같은 역할을 합니다. 애시당초에 쿼리를 짜면서 필요한 경우 인덱스를 추가할 수 있고, 학부 시절 SQL 배우던 데이터베이스 시간에 인덱스 추가하는 방법을 배운 적이 있었어요. 근데 Oracle의 경우 따로 인덱스를 추가하지 않아도 테이블 생성단계에서 다음 2가지 경우에서 인덱스를 자동으로 생성합니다. 1. PK 조건을 거는 경우 2. Unique 조건을 거는 경우 인덱스가 적절히 걸리는 경우, 검색속도가 향상됩니다. 하지만 꼭 모든 경우에서 인덱스가 필요할까요? 아닙니다. Insert, delete같은 DML .. 2021. 8. 31. 18:39 SQL 튜닝에 꼭 필요한 옵티마이저와 실행계획 시즌3 Intro. 튜닝의 ㅌ도 몰랐던 비컴공 개발자였던 2020년 가을의 나, 팀내 개선 프로젝트로 우리 팀/회사에서 가장 유명하고 현장 사용 빈도가 높은 화면의 HeavyTR을 줄이기 위해 튜닝을 갑자기 배워야 하는 처지가 되는데.... 때맞춰 신청한 외부 교육(어차피 고과 산정에 교육이 필요한 참에, 필요한 걸 들으면 가장 좋잖아?) 3일 + [친절한 SQL 튜닝] / [실전사례로 알아보는 SQL 튜닝] 2권의 책(기억은 잘 안 나는데 둘 중 하나는 교육 교재였던걸로 기억하고, 하나는 내돈내산) + 미친듯한 구글링이 큰 도움이 되었다. 튜닝을 이해하기 위해서는 맨 처음 2가지 개념을 알고 넘어가야 합니다. 1. 옵티마이저 : 사용자가 원하는 작업을 가장 효율적으로 수행할 수 있도록 최적의 데이터 액.. 2021. 8. 30. 19:13 Java의 Generic 이번 시간에는 generic에 대하여 알아보려 합니다. 제네릭(generic)이란 데이터의 타입(data type)을 일반화한다(generalize)는 것을 의미합니다. Java 5 이전에는 대부분의 클래스와 메서드에서 인수나 반환값으로 Object을 사용했습니다. 그러나 object을 사용하는 경우에는 저장할 때와 읽어올 때 총 두 번 다시 원하는 타입으로 타입 변환해야 하며, 이때 오류가 발생할 가능성이 여전히 남아 있습니다. 이를 해결하기 위해 Java 5 버전부터 generic이 추가되어, 클래스/메서드 단에서 잘못된 타입 사용으로 인한 문제를 해결할 수 있게 되었습니다. 제네릭의 장점을 크게 2가지로 요약할 수 있습니다. 1. 클래스나 메소드 내부에서 사용되는 객체의 타입 안정성을 높일 수 있습.. 2021. 8. 29. 16:01 Queue에 대해 알아보자 이번 시간에는 queue에 대하여 알아보려 합니다. Queue는 ‘대기줄’이라는 뜻을 가진 영어 단어입니다. Java의 Queue 인터페이스는 선입선출(FIFO: First In First Out) 형태로 자료를 보관하고 꺼내는 버퍼입니다. 음식점, 은행 같은 곳에서 줄을 설 때 먼저 온 사람부터 서비스를 받을 수 있는 것처럼, 가장 먼저 저장(push)된 데이터가 가장 먼저 인출(pop)됩니다. Queue는 주로 linkedlist 형태로 구현되며, queue에서 자주 사용되는 메소드는 다음과 같습니다. 메소드 설명 boolean add(E e) 해당 큐의 맨 뒤에 전달된 요소를 삽입함. 만약 삽입에 성공하면 true를 반환하고, 큐에 여유 공간이 없어 삽입에 실패하면 IllegalStateExcept.. 2021. 8. 28. 15:57 Stack(push/pop) 이번 시간에는 stack에 대하여 알아보려 합니다. Stack은 ‘쌓아 올림’, ‘더미’ 라는 뜻을 가진 단어입니다. 선형 메모리 공간에 데이터를 쌓아 저장하면서 후입선출(LIFO)의 시멘틱을 따르는 자료 구조입니다. 맨 처음 들어간 데이터가 바닥에 쌓이고, 맨 마지막에 저장된(push) 데이터가 제일 먼저 인출되어(pop) 삽입/삭제/수정이 가능합니다. 프링*스 과자를 생각하면 이해하기 쉬울 것 같네요. 통에 과자를 넣을 때, 맨 나중에 들어간 과자를 맨 처음 먹게 될 것입니다. 스택도 같은 원리입니다. 맨 위 데이터를 top이라고, 맨 아래는 bottom이라고 부르며, 보통의 경우 bottom의 값은 0으로 고정됩니다. stack에서 자주 사용되는 메소드는 다음과 같습니다. 메소드 설명 boolean.. 2021. 8. 27. 15:51 Hashmap / Treemap 이번 시간에는 map 구조, 그 중 가장 많이 쓰이는 hashmap과 treemap에 대해 알아보려고 합니다. Map 인터페이스를 구현한 Map 컬렉션 클래스들은 키와 값을 하나의 쌍으로 저장하는 방식(key-value 방식)을 사용합니다. 여기서 키(key)란 실질적인 값(value)을 찾기 위한 이름의 역할을 합니다. Map 컬렉션 클래스의 공통된 특징 2가지가 다음과 같습니다. 1. 요소의 저장 순서를 유지하지 않습니다. 2. 키는 중복을 허용하지 않지만, 값의 중복은 허용합니다. 해시 알고리즘(hash algorithm)이란 해시 함수(hash function)를 사용하여 데이터를 해시 테이블(hash table)에 저장하고, 다시 그것을 검색하는 알고리즘입니다. 자바에서 해시 알고리즘을 이용한 .. 2021. 8. 26. 15:46 Doubly-linkedlist에 대해 알아보자 지난 시간에 살펴본 Linkedlist에는 치명적인 단점이 하나 있습니다. Linkedlist를 사용하면 노드에 저장되는 다음 값의 메모리 주소를 바꾸어 연결을 수정하는 방식으로 효율적인 값 추가 및 제거가 가능합니다. 하지만 리스트의 다음 값으로는 넘어가기 쉽지만, 이전 값을 찾아 접근하기 어렵습니다. Doubly-Linkedlist(이중 연결 리스트)는 이런 단점을 해결하기 위해 탄생했습니다. Doubly-Linkedlist는 다음에 올 값의 메모리 주소와 함께, 이전 값의 메모리 주소를 저장해서, 앞뒤로 탐색이 가능합니다. 처음부터 시작해서 next를 이용해서 탐색하고, 후반부 절반의 엘리먼트는 마지막 노드부터 previous를 이용해서 조회합니다. 값을 추가할 때도 linkedlist와 마찬가지로.. 2021. 8. 25. 15:39 이전 1 ··· 21 22 23 24 25 26 다음 728x90 반응형