일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- MSA
- ocp
- 정규화
- 3-way handshaking
- 삭제 이상
- JPA
- DB
- 네트워크
- 낙관적 락
- Kotlin
- Redis
- HTTP
- 자료구조
- AWS
- 캐시 오염
- 스레드 풀
- 삽입 이상
- 데이터베이스
- well-know port
- Dirty Checking
- 갱신 이상
- 비관적 락
- 자바
- Kafka
- null
- gatway
- Spring
- buildSrc
- java
- 페이지네이션
- Today
- Total
728x90
목록
728x90
분류 전체보기 (70)
어 나 갱수.
우리가 스레드를 계속해서 만들면, 운영 체제의 자원이 빨리 소진될 수 있습니다. 서버는 동시 접속자가 많아지면 스레드가 무한대로 생성되면서 서버가 다운될 위험이 있습니다. 스레드의 개수를 관리하기 위해서는 스레드 풀을 사용할 수 있습니다. 스레드를 단순하게 사용하면 ? 스레드 생성비용이 크기 때문에 요청에 대한 응답시간이 늘어난다. 스레드가 너무 많으면 여러 가지 문제를 발생시킨다. 메모리 문제가 발생할 수 있고 CPU 오버헤드가 증가한다. 스레드 풀 이란? 스레드 풀은 미리 일정 개수의 스레드를 풀(Pool)이라는 곳에 생성해 놓고 필요할 때마다 사용하고 다 사용한 스레드는 다시 풀(Pool)에 반환하도록 작동합니다. 스레드 풀을 사용하면 스레드 생성 및 삭제에 따른 오버헤드를 줄일 수 있습니다. 이를..
오늘은 즉시 로딩과 지연 로딩에 대해 정리해 보겠습니다. 각각 어떤 상황에서 사용해야 하고 왜 사용해야 하는지 알아보겠습니다. JPA는 데이터를 조회할 때, FetchType으로 즉시로딩(Eager)과 지연로딩(Lazy)가 있습니다. Fetch Type이란 ? Fetch Type이란, JPA에서 하나의 Entity를 조회할 때, 연관관계에 있는 객체들을 어떻게 가져올 것이냐를 나타내는 설정값입니다. JPA는 ORM기술로, 사용자가 직접 쿼리문으로 쿼리를 생성하지 않고, JPA에서 JPQL을 이용해서 쿼리를 생성해 줍니다. JPA에서 Entity의 필드와 객체를 보고 쿼리문을 생성합니다. 따라서 Entity에 연관관계 매핑이 되어있으면 그 Entity들까지 함께 조회하게 되는데, 그 매핑되어 있는 Enti..
오늘은 Call by value와 Call by reference의 차이를 알아보고 자바에서는 어떻게 사용되는지 알아보겠습니다. 함수를 호출하는 방법은 크게 두 가지가 있습니다. Call by value(값의 의한 호출), Call by reference(참조의 의한 호출) Call by value(값의 의한 호출)는 인자로 받은 값을 복사하여 처리합니다. Call by reference(참조의 의한 호출)는 인자로 받은 값의 주소를 참조하여 직접 값에 영향을 줍니다. Call by value는 말 그대로 호출 시 자신의 값을 복사해서 넘겨주는 방식이고 Call by reference는 자신의 값이 아닌 자신을 직접 공유해서 사용하도록 허용하는 개념이다. Call by value(값의 의한 호출) Cal..
오늘은 Index에 대해 알아보겠습니다. 인덱스(Index)란 ? 인덱스란 추가적으로 저장 공간을 만들어서 데이터베이스 테이블의 검색 속도를 향상하기 위한 자료구조입니다. 예를 들어 만약 책에서 원하는 내용을 찾는다면 책의 모든 페이지를 하나하나 확인하면서 책의 원하는 내용을 찾는 거는 너무 비효율적인 방법입니다. 이런 비효율을 막기 위해 책의 맨 앞에 목차를 두고 원하는 위치에서 정보를 얻을 수 있도록 하고 있는데요. 정리하면 데이터는 책의 내용, 인덱스는 책의 목차, 데이터의 물리적인 주소는 책의 페이지라고 생각하면 됩니다. 특정 칼럼(필드)에 대한 인덱스를 생성하게 되면 해당 칼럼의 데이터들을 정렬해서 별도의 메모리에 저장합니다. 인덱스를 활용하면 검색속도가 빨라진다는데 어떻게 빨라진다는 걸까요 ?..
안녕하세요, 오늘은 DBCP(데이터베이스 커넥션 풀)에 대해 알아보겠습니다. Client로부터 웹 애플리케이션에 요청이 들어올 때마다 데이터베이스 연결을 수립하고, 해재하는 것은 굉장히 비효율적이라고 생각합니다. 여러 개의 DB Connection을 미리 생성해 놓고, 필요할 때마다 DB Connection을 가져다가 사용하는 방식을 사용한다면 더 효율적인 방식이라고 생각합니다. WAS는 기본적으로 DB Connection이 필요할때 DB Connection을 직접 생성하지 않고 DB Connection Pool에 있는 Connection 객체를 가져다가 사용하고, 다 사용한 Connection 객체는 반환합니다. connection Pool에 대해 다시 정리해 보겠습니다. Connection Pool에..
오늘은 Kotlin을 사용하게 된다면 많이 사용하게 되는 리스트 정렬 관련된 함수들을 알아보겠습니다. Immutable 리스트 정렬 sorted() 함수는 데이터 변경이 되지 않는 리스트(Immutable)를 정렬할 때 사용합니다. sorted() 함수는 기존 리스트의 원본을 변경하지 않고 정렬된 리스트를 생성하여 리턴합니다. val list = listOf(20, 100, 5, 60, 40) val sortedList = list.sorted() println("List : $list") println("SortedList : $sortedList") 결과 List : [20, 100, 5, 60, 40] SortedList : [5, 20, 40, 60, 100] 원본은 list는 그대로 반환하고 s..
오늘은 자료구조에서 Array와 LinkedList에 대해 알아보겠습니다. 배열(Array) 배열은 입력된 데이터들이 메모리 공간에서 연속적으로 저장되어 있는 자료구조이다. 메모리 상에서 연속적으로 저장된다는 특징이 있기 때문에, index를 통한 접근이 용이하다. 배열의 크기를 처음 정하고 이후에는 변경하지 못한다. 장점 인덱스 접근 가능 : 인덱스를 통해 임의의 원소에 접근 가능하다. 처리하는 데이터의 양이 많아질수록 더 유리하다. 연속된 메모리 할당 : 주소값으로 원소에 접근할 수 있어서 편리하다. 단점 삽입 삭제가 어려움 : 원소를 삽입하거나 삭제할 경우, 해당 원소 이후 모든 원소를 한칸씩 밀거나 당겨야 하는 상황이 발생한다.(데이터를 연속된 메모리에 저장하기 때문이다) 배열의 크기는 고정적 :..
좋은 데이터베이스를 설계한다. 좋은 데이터베이스를 설계한다는 것은 이상 현상(Anomaly)이 생기지 않도록 고려해 설계하는 것입니다. 이상 현상은 테이블을 설계할 때 잘못 설계해서 데이터를 삽입, 삭제, 수정하는 과정에서 오류가 발생하는 것을 의미합니다. 이상 현상은 갱신 이상(Modification Anomaly), 삽입 이상(Insertion Anomaly), 삭제 이상(Deletion Anomaly)으로 구성됩니다. 위의 사진과 같이 설계한 데이터베이스 테이블이 있습니다. 테이블의 이름은 학생테이블이고 테이블의 필드로는 학번, 이름, 나이, 성별, 강의명, 전화번호 등이 있습니다. 1. 삽입 이상 자료를 삽입할 때 의도하지 않은 자료까지 삽입을 해야 자료를 테이블에 추가가 가능한 현상 강의를 아직..