일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Algorithm
- MySQL
- 운영체제
- redis
- 백준
- C
- IT
- 디자인 패턴
- mongoDB
- 컴퓨터구조
- JPA
- JavaScript
- react
- OS
- Kafka
- design pattern
- 자바
- Proxy
- 파이썬
- 알고리즘
- 네트워크
- spring webflux
- Galera Cluster
- MSA
- c언어
- Heap
- 자료구조
- Java
- Data Structure
- Spring
- Today
- Total
목록자바 (10)
시냅스
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/kNe5O/btr1f1qn0a4/0ck2gZqKd5NwbF9af3HxBK/img.png)
자바 직렬화 (Java Serialization) 자바 객체를 바이트 스트림으로 변환하여 파일이나 네트워크 상에서 전송 가능하도록 만드는 것 자바 객체는 주소 값을 가지고 있고 이는 프로세스가 새로 실행될 때 마다 변하는 값이다. 프로세스를 새로 실행했을 때 해당 객체에 대한 주소가 같을 거라는 보장이 없다. 따라서 객체(혹은 레퍼런스 타입)에 대한 데이터를 외부에 저장하고 싶다면 직렬화가 필요하다. 직렬화된 객체는 다시 역직렬화(Deserialization)하여 객체로 변환될 수 있다. 역직렬화를 할 때에는 몇가지 조건이 필요하다. 직렬화 대상의 클래스가 class path 에 존재하며 import 되어 있어야 한다. 동일한 버전 (serialVersionId) 를 유지해야 한다. 만약 serialVe..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/dXPpSz/btrKwiWTbf2/mMgGObMWJZ1I9To4OldLkk/img.png)
커넥션 풀, Connection Pool 데이터베이스 커넥션을 획득할 때마다 tcp/ip 커넥션 (3 way handshake)을 연결하는 네트워크 동작이 발생되어 커넥션을 생성하기 위한 리소스를 매번 사용해야 한다. 커넥션을 매번 새로 만드는 시간이 추가되기 때문에 결과적으로 응답 속도에 영향을 준다. 이런 것을 해결하기 위해 커넥션을 미리 생성해두고 사용하는 커넥션 풀을 사용한다. 애플리케이션을 시작하는 시점에 커넥션을 미리 확보한다. 보통 10개이다. 커넥션 풀에 들어있는 커넥션은 TCP/IP로 DB와 커넥션이 연결되어 있는 상태이기 때문에 언제든지 DB에 SQL을 전달할 수 있다. 이렇게 이미 생성되어 있는 커넥션을 가져다 쓴 후 커넥션을 다시 풀에 반환한다. 커넥션 풀 숫자는 서비스의 특징과 서..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/yecr1/btrKvgRyKLO/60XwtqWSwn1fJ462Co4r1K/img.png)
클라이언트, 애플리케이션 서버, DB 클라이언트가 애플리케이션 서버를 통해 데이터를 저장하거나 조회하면, 다음과 같은 과정을 거친다. 1. 커넥션 연결 주로 TCP/IP 를 사용해서 커넥션을 연결한다. 3 way handshake 2. SQL 전달 애플리케이션 서버는 DB가 이해할 수 있는 SQL을 연결된 커넥션을 통해 DB에 전달한다. 3. 결과 응답 다만 각각의 데이터베이스 마다 커넥션을 연결하는 방법, SQL을 전달하는 방법, 응답을 받는 방법이 모두 다르다. JDBC Java Database Connectivity JDBC는 자바에서 데이터베이스에 접속할 수 있도록 하는 자바 API다. JDBC 표준 인터페이스에 의존하게 하여 데이터베이스를 다른 종류의 데이터베이스로 변경하면 애플리케이션 서버의 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/chVpYh/btrKuV0pZK0/8FFqxcBQ1z5hHnpHO5OALK/img.png)
Mediator Pattern 객체간의 상호 작용을 하나의 객체에서 캡슐화하여 처리 UI 프로그래밍에서 많이 사용되는 방법으로 Widget 간의 상호 처리를 서로간에 처리하는 것이 아닌 한 객체가 전담하여 처리하도록 하는 방식 객체 서로간의 메세지를 전달할 일이 있을 때도 중재자를 두고 전달할 수 있음 N:N 의 관계를 1:N의 관계로 바꿀 수 있음 객체 지향 방법론에서는 객체의 관련된 처리는 객체 내부에서 하는 것이 맞지만, 그렇게 하면 상호작용의 급증이 발생하고 시스템의 변경이 어려움 Mediator 객체가 상호작용을 제어하고 조율하게 함, 각 객체는 다른 객체의 참조자는 알 필요 없이 Mediator만 알면 됨 Mediator Colleague 객체와 교류하는데 필요한 인터페이스를 정의 Concre..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/u1eo6/btrKsNPCrcU/2CbeO49IsFmSx3MLGaOeRk/img.png)
Bridge Pattern 기능의 계층과 구현의 계층을 분리함 추상화와 구현을 분리하여 각각을 독립적으로 변경할 수 있게 함 기능의 확장과 구현의 확장을 따로 계층화 함 기능에 대한 여러가지 구현을 다양하게 적용할 수 있음 기능과 구현이 혼자하면 상속의 관계가 복잡해짐 두 계층을 분리하고 서로의 사이에 다리(Bridge)가 필요함 Abstraction (List) 추상화 개념의 상위 클래스이고 객체 구현자 (Implementor)에 대한 참조자를 관리 RefinedAbstraction (Stack, Queue) 추상화 개념의 확장된 기능을 정의 Implementor (AbstractList) 구현 클래스에 대한 선언을 제공 하위 클래스가 구현해야 하는 기능들을 선언한다. Implementor와 Abstr..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/eamsCI/btrKrJ71wgg/WDymOOYMKCHh3Ji0zOMKK0/img.png)
Abstract Factory Pattern 여러 제품굼을 하나의 Set으로 생성하는 패턴 구체적인 클래스를 생성하지 않고도 서로 관련성이 있거나 독립적인 여러 객체의 군을 생성하기 위한 인터페이스를 제공한다. 추상화된 인터페이스 팩토리를 제공하고 상황에 따라 그에 맞는 인스턴스들이 생성되도록 한다. 생성되고 구성되고 표현되는 방식과 무관하게 시스템을 독립적으로 만들고자 할 때 하나 이상의 제품군들 중 하나를 선택하여 시스템을 설정해야 하고 한 번 구성한 제품을 다른 것으로 대체할 수 있을 때 AbstractFactory 개념적 제품에 대한 객체를 생성하는 오퍼레이션 인터페이스를 정의한다. ConcreteFactory 구체적인 제품에 대한 객체를 생성하는 오퍼레이션을 구현한다. AbstractProduc..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/eftb7I/btrJWmED02d/AqZW5mwiEwk50gUiQiAX31/img.png)
반복자 패턴 Iterator Pattern 객체 요소들의 내부 표현방식을 공개하지 않고, 객체에서 되지 않은, 외부에서 객체에 순회하는 객체를 만든다. 내부에서 객체의 순차적인 제공을 하지 않음 순회 구현 방식이 다르더라도 동일한 방식(메서드)로 순회 할 수 있게 제공 여러 리스트 객체에 대한 동일한 방식으로 순회하는 방법을 제공하기 위해 순회하는 객체를 따로만듬 e.g. Java Collection Framework의 Iterator Iterator 요소에 접근하고 순회하는데 필요한 메서드 제공 ConcreteIterator Iterator에 정의된 인터페이스를 구현하는 클래스 Aggregate Iterator 객체를 생성하는 인터페이스 정의 순회할 요소를 가지고 있다. ConcreteAggregate..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/beFdvS/btrJRkuVLVP/IlgW6EvCzNdmB9BTGZY0nK/img.png)
옵저버 패턴 Observer Pattern 객체 사이에 일대다의 의존 관계가 있고, 어떤 객체의 상태변하게 되면 그 객체에 의존성을 가진 다른 객체들이 변화의 통지(notify or update)를 받고 자동으로 갱신될 수 있게 함 dependent, publish-subscribe 하나의 객체에 연동되는 여러 객체 집합이 있을 때 변화에 대한 일관성은 유지하고, 객체간의 결합도는 낮게하기 위한 패턴 느슨한 결합 Loose coupling : 느슨하게 결합되어 있다는 것은 상호작용을 하지만 서로 잘 모른다는 것 변화에 관심이 있는 객체에 대한 가정없이 통보될 수 있도록 해야 함 주로 data - view 의 관계에서 사용됨 log와 handler들의 관계. (file, console, 등등) Subjec..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/dXV34F/btrJRXGlaoE/VNggcKXX1HtpTqRDDlCp90/img.png)
템플릿 메소드 패턴 Template Method Pattern 상위 클래스에서는 전체적인 흐름을 구현하고 구체적인 처리는 하위 클래스에 위임 Operation 에 알고리즘의 기본 골격 구조를 정의하고 구체적인 단계는 서브클래스에 정의한다 추상화된 함수를 통해서 알고리즘의 일부 단계를 정의함으로써 템플릿 메소드의 처리순서를 정할 수 있다. AbstractClass 서브 클래스들이 반드시 구현해야 하는 알고리즘 처리 단계 내의 기본 오퍼레이션이 무엇인지를 정의한다. 서브 클래스에서 이들 오퍼레이션들을 구현한다. Hook method : 추상 클래스 내에 선언(declaration)되어 있는 메소드이지만, 기본적인 내용만 있거나 아무 내용도 들어있지 않음 template method는 final 키워드를 통해..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bjkV8W/btrG1shvhLw/bkTVq62FgN83uYZyAXiTzK/img.png)
자바 가상 머신, JVM이란 운영체제에 독립적으로 실행하게 하는 버츄얼 머신 자바는 컴파일 과정에서 OS와 소통하는 기계어로 컴파일 되지 않고 JVM이 이해할 수 있는 Java bytecode(.class) 로 변환된다. JVM이 이 bytecode를 OS가 이해할 수 있게 해석한다. 자바 바이트 코드, Java Bytecode 바이트 코드란 가상 컴퓨터(VM)에서 돌아가는 실행 프로그램을 위한 이진 표현법을 의미한다. 자바 바이트 코드(Java bytecode)는 JVM이 이해할 수 있는 언어로 변환된 자바 소스코드를 의미한다. 변경된 자바 바이트 코드(.class) 파일들을 클래스 로더를 통해 JVM 메모리 영역으로 로딩한다. 이 바이트 코드는 다시 인터프리터 또는 JIT 컴파일러에 의해 바이너리 코..