제네릭이 나오게 된 이유? 제네릭이 도입되기 이전에는 상황에 따라 각기 다른 데이터를 다루기 위해 최상위 클래스인 Object를 사용하여 코드를 작성하곤 하였다. 그를 통해서 어떠한 데이터라도 받아 저장할 수 있었으나 몇가지 문제가 있었는데. 저장했던 값을 사용해야 할 때 명시적으로 캐스팅을 해서 사용해야 한다. 잘못된 캐스팅을 통한 오류가 발생할 수 있다. (String → Integer 등..) 들어온 타입에 대한 검증하는 로직이 추가로 들어가야한다. ( instanceof 결국 런타임에서 발견 ) 에러의 유무를 컴파일 단계에서 체크할 수 없다. (사전에 방지할 수 없다.) 즉 모호하고 찾기 어려운 잠재적인 오류를 가지게 된다. Reifiable type의 문제점! 이러한 문제를 방지하기 위해서는 컴..
자바 ORM 표준 JPA 프로그래밍 서적을 학습하면서, 정리하고 있는 내용입니다. EntityManagerFactory 사용자의 요청이 들어옴에 따라 EntityManager를 생성하는 책임을 가지고 있다. JPA를 동작시키기 위한 내부 객체들이 이 Factory를 통해 생성되고, 구현체에 따라선 커낵션 풀도 별도로 구성하므로 생성 비용이 크다고 한다. 여러 EntityManagerFactory를 생성하여 공유할 수 있으나. 하나의 객체만 생성해서 전 영역에 공유하는 것이 권장된다. (configuration lite mode를 사용하면 여러 개를 생성하고 공유할 수 있을 것 같다.) EntityManager (Persistence Context) 엔티티 정보를 저장하고 있는 환경. 요청 결과가 DB에 ..
GRASP : General Responsibility Assignment Software Patterns? 해당 내용은 상호작용하는 클래스 혹은 객체에 책임을 할당하는데 도움이 되는 개념과 방법 즉 패턴들로 이루어져 있습니다. 이러한 내용들을 준수함으로써 좋은 객체지향 디자인 패턴을 만들어낼 수 있습니다. Responsibility? 책임은 SOLID나 지금 다룰 GRASP 등 Oriented-Object-Design 패턴과 원칙에서 핵심이 되는 개념입니다. 이는 클래스와 객체가 어떤 메시지(요청)에 대해 처리할 수 있거나, 적절한 행동을 해야 하는 의무가 있는 경우 해당 객체가 이러한 책임을 가진다라고 이야기할 수 있습니다. 책임은 메서드를 통해 구현되게 됩니다. Example. String은 문자열..
Reflection이란? Compile Time에 Class나 Method 명을 알지 못하더라도 Runtime에 Type, Classpath를 이용하여 인스턴스화, 객체의 상태, 메서드 정보 등을 가져올 수 있도록 지원하는 API이다. 사용하는 Library, Framework, API, Feature Jackson, GSON 등의 JSON Serialization Library Log4 j2, Logback 등의 Logging Framework Apache Commons BeanUtils 등의 Class Verification API Spring의 @Autorwired와 같은 DL, DI 기능 (: processInject(), inject() Method ) 내부적으로 Spring의 Reflectio..
G1 GC 구조 개념 구조 (모든 영역을 블록으로 표기하지 않음) G1 GC는 여러 Background Thread를 이용하여 Heap 크기에 따라 1MB~32MB로 분할된 Region들을 지정된 Pointer를 통해 Scan 하고 제일 많은 수집 대상이 존재하는 Region에 대해 이름을 지정한다. 이름이 지정된 영역은 GC의 대상이 된다. Young Generation Region (Non-Contiguous Region) Heap 메모리 공간에서 비연속적으로 존재하는 Young Object의 주거지를 의미한다. 해당 영역의 크기는 Heap 전체 크기의 5~60% 까지를 차지할 수 있다. G1 GC 특징 G1 GC는 Scan을 하는 도중에 해당 Region에 대한 Compacting도 수행한다. Re..
잘못된 내용에 대해서는 댓글 부탁드립니다. Concurrency 하나의 코어가 여러 프로세스를 번갈아가며 실행하는 것을 의미한다. 이는 사용자에게 동시에 실행되는 것처럼 보이게 만드는 효과를 가지며, 단위 시간 내에 더 많은 일을 처리한다. 프로세스 간의 컨텍스트 스위칭이 발생한다. Concurrency의 장단점 장점 CPU의 처리량이 증가한다. 자원의 활용도가 증가한다. 프로세스 간의 대기시간이 감소된다. 단점 Context Switching에 대한 Overhead가 발생한다. Parallelism 하나의 프로세스를 분할하여 처리 여러 개의 코어가 하나의 프로세스의 작업을 분할하여 처리하는 것을 의미할 수 있다. 이는 내부적으로 동작하는 스레드의 개수만큼 CPU에 할당할 수 있음을 의미한다. 화면을 랜..
서비스 메서드에 Transcational을 사용하였을 때와 사용하지 않았을 때, 흐름을 정리해보았습니다. 스프링 @Transaction 미적용 (JDBC API - Local Transaction) 기본적으로 JDBC의 트랜잭션은 하나의 Connection Instance를 생성하고 통신하며 종료하는 흐름과 같이 동작하게 된다. 즉 코드에 존재하는 DAO 로직들은 각각의 트랜잭션 안에서 연산을 진행하게 되는 것이다. 이때의 트랜잭션을 로컬 트랜잭션이라고 한다. 해당 메서드 내에서는 3개의 트랜잭션이 동작하며, 이는 내부에서 하나의 DAO 로직이 실패하더라도 다른 로직들은 성공하고 반영될 수 있는 상태임을 의미한다. 각각의 로직들은 Connection Pool에서 리소스 전달받아 새로운 Connection..
Auto-Configuration Conditions 주어지는 여러가지 조건들을 이용하여 Spring Application 실행시 사용할 Bean Definition을 선택할 수 있도록하는 Annotation들의 집합이다. @ConditionalOnClass 어노테이션의 인자로 받은 클래스가 존재할 때, 해당 주석이 적용된 Configuration class의 Java기반 Bean Definition들을 등록한다. @ConditionalOnMissingClass 어노테이션의 인자로 받은 클래스가 존재하지 않을 때, 해당 주석이 적용된 Configuration class의 Java기반 Bean Definition들을 등록한다. @ConditionalOnBean 어노테이션의 인자로 받은 Bean ID가 존재..
주의 : 틀린 내용이 있을 수 있습니다..! 내용을 보완 중에 있습니다. SpringBootConfiguration? 개발자의 편의를 위해 EnableConfiguration과 SpringBootConfiguration, 그리고 Component Scan을 합쳐 하나로 제공한다. // 기존에 작성하던 방식을 좀더 간편하게 하였다. @SpringBootConfiguration @EnableAutoConfiguration @ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class), @Filter(type = FilterType.CUSTOM, classes = AutoConfigurat..
Logging? 서비스 동작 시 시스템 상태, 작동 정보를 시간의 경과에 따라 기록하는 것을 말한다. 로깅을 사용하는 이유? 서비스 동작 상태를 파악하고, 발생한 장애를 알려주거나, 파악하기 위해 사용한다. 그러기 위해서는 Log Message에 Context를 담아주어야 한다. 어떤 위치에서 어떤 Param을 사용하였고 어떤 것이 실패하였다는 느낌으로 작성하자. 로깅을 사용할 때 주의할 점? Log 파일 / DB 생명 주기 & 저장소 용량 개인 정보 시스템 주요 정보 (시스템 보안, 계정 정보) Logging을 사용하는 방법? Linux System API(sysout) Java API(sysout) Java API(util.Logging) Logging Framework Spring Boot에서 제공..
- Total
- Today
- Yesterday
- 한국 스프링 사용자 모임
- JPA
- Url
- URI
- Switch
- spring AOP
- Redis Key
- configuration
- JDK Dynamic Proxy
- WiredTiger
- cache stampede
- cglib
- RPC
- spring
- 커뮤니티 오거나이저
- AMQP
- HTTP
- URN
- 게으른개발자컨퍼런스
- mybatis
- Request Collapsing
- lambda
- Optimistic Locking
- RESTful
- transaction
- 근황
- JVM
- java
- Thundering Herd
- rabbitmq
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |