일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Redis
- 3-way handshaking
- 자바
- 낙관적 락
- buildSrc
- Dirty Checking
- java
- Spring
- Kafka
- 네트워크
- 삽입 이상
- well-know port
- 삭제 이상
- DB
- gatway
- 스레드 풀
- HTTP
- 페이지네이션
- AWS
- ocp
- 비관적 락
- MSA
- 캐시 오염
- 데이터베이스
- Kotlin
- 자료구조
- null
- 갱신 이상
- 정규화
- JPA
- Today
- Total
728x90
목록
728x90
전체 글 (72)
어 나 갱수.

싱글톤 패턴 (Singleton pattern) 소프트웨어 디자인 패턴에서 싱글톤 패턴을 따르는 클래스는, 생성자가 여러 차례 호출되더라도 실제로 생성되는 객체는 하나이고 최초 생성 이후에 호출된 생성자는 최초의 생성자가 생성한 객체를 리턴한다. 싱글톤 패턴을 사용하는 이유 만약 우리가 만들었던 DI 컨테이너인 요청을 할 때마다 새로운 객체를 생성한다. 요청이 엄청나게 많은 트래픽 사이트에서는 계속 생성하게 되면 메모리 낭비가 심하기 때문이다. 순수한 DI 컨테이너 객체를 생성하면 매번 새로운 객체가 생성된다. 많은 객체를 생성해야 하는 서비스에서는 메모리 낭비가 많아진다. 싱글톤 패턴 구현 클래스 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴이다. 그래서 객체가 2개 생성되는 것을 막아야 한..

정규화란 ? 정규화는 테이블 간에 중복된 데이터를 허용하지 않기 위해 정해놓은 정의 같은 것입니다. 중복된 데이터를 허용하지 않음으로써 무결성을 유지할 수 있으며, DB의 저장 공간 또한 줄일 수 있습니다. 결과적으로, 정규화를 하는 목적은 데이터들을 조금 더 효율적으로 관리하기 위함입니다. 정규화의 목적 중복을 허용하지 않으며 삽입, 삭제, 갱신 이상의 발생을 감지한다. 데이터를 삽입하거나 수정할 때 릴레이션의 재구성을 최소화하는 것을 목표로 하고 있다. 각 릴레이션에 중복된 종속성을 여러 개의 릴레이션으로 분할한다. 정보의 중복 한 릴레이션에 여러 엔티티의 애트리뷰트들이 존재하면 정보가 중복 저장된다. 저장 공간 낭비 갱신 이상 발생 정규화 과정 정규화는 제1 정규화부터 제5 정규화까지 있지만, 실질..

우리가 스레드를 계속해서 만들면, 운영 체제의 자원이 빨리 소진될 수 있습니다. 서버는 동시 접속자가 많아지면 스레드가 무한대로 생성되면서 서버가 다운될 위험이 있습니다. 스레드의 개수를 관리하기 위해서는 스레드 풀을 사용할 수 있습니다. 스레드를 단순하게 사용하면 ? 스레드 생성비용이 크기 때문에 요청에 대한 응답시간이 늘어난다. 스레드가 너무 많으면 여러 가지 문제를 발생시킨다. 메모리 문제가 발생할 수 있고 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..