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에서 제공..
알게 모르게 한 번이라도 들어본 JDBC를 정리해보았습니다. Java Database Connectivity? Java와 여러 가지 데이터베이스 간의 연결을 위하여 제공되는 표준 인터페이스이다. DB 벤더나, 써드파티 관련 라이브러리에서 JDBC를 구현한 드라이버를 제공한다. DB 데이터 접근을 위해 계층 처리 모델을 제공한다. (기본 2계층 사용, 3계층 지원) 데이터베이스 벤더마다 각각의 SQL 문, 작성 방식을 사용함으로써 발생했던 문제점을 해결하였다. 달랐던 메서드, 구조, 전역 변수 등의 모든 문법을 통일시켜 API로 명세한 것이다. JDBC 구성 요소 JDBC DriverManager DB의 드라이버 목록을 관리하는 클래스 Java Application의 연결 요청을 적절한 DB Driver와..
Proxy Pattern? Proxy Pattern? 실제 비즈니스 로직과 그 외의 코드를 분리시키는 역할을 수행하는 객체를 만드는 패턴이다. -> 실제로 로직을 수행하는 객체의 인터페이스 역할을 하게된다. 객체를 호출하는 지점에서 프록시 객체를 호출하여 부가적인 코드를 수행한 뒤 참조 변수를 통해 실제 서비스 객체를 호출한다. 클라이언트는 프록시를 통해 서비스 객체 기능을 사용하기에 접근 권한 부가기능 리턴 값 변경 로깅 트랜잭션 등 이러한 기능을 추가 할 수 있다. 즉 서비스 객체의 SRP를 해치지 않고 프록시를 통해 책임을 추가할 수 있다. 해당 Pattern의 특징 프록시 객체는 실제 서비스 객체와 같은 이름의 메서드를 구현한다. 프록시 객체는 합성을 통해 서비스 객체에 대한 참조 변수를 가진다...
- Total
- Today
- Yesterday
- 근황
- lambda
- JVM
- AMQP
- configuration
- Url
- Cache Design
- java
- Local Cache
- mybatis
- spring AOP
- URI
- THP
- Distributed Cache
- Switch
- RESTful
- spring
- cglib
- JPA
- URN
- 게으른 개발자 컨퍼런스
- Global Cache
- 게으른개발자컨퍼런스
- HTTP
- JDK Dynamic Proxy
- RPC
- hypermedia
- Data Locality
- 소비자 관점의 api 설계 패턴과 사례 훑어보기
- 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 | 31 |