제출하지 못했던 10주차까지 완료! 프로세스? 스레드 단위 작업을 지원하기 위한 자원의 할당 단위이며, 커널 위에서 현재 실행 중인 프로그램을 의미한다. 프로세스 안에는 하나 이상의 스레드가 존재한다. 왜 멀티 프로세스 방식을 사용하지 않는가? 프로세스를 이용하여서도 멀티 프로세싱이라고 하는 방법을 이용하여 하나의 작업을 병렬적으로 처리할 수 있다. 하지만 이 방식은 각각의 프로세스가 쉽게 공유되지 않는 자신만의 데이터 영역들을 가지고 있기 때문에 데이터 처리, 공유 방식과 메모리 공간 점유에 대한 문제가 발생한다. 작업을 진행할 때마다 프로세스의 작업 내용이 cpu로 로딩이 된다. 이후 다른 작업을 진행하여야 할 때 기존에 사용하는 것을 내리고 다른 프로세스를 로딩하게 되는데 스레드 방식보다 들어가는 ..
함수형 프로그래밍이란? 순수 함수들을 조합하여 사이드 이펙트(부작용)를 제거하고, 모듈화를 높여 유지보수와 생산성을 올리는데 초점을 둔 패러다임이다. Non Blocking과 Asynchronous , Parallel Programming을 구현, 지원하는데 적합하다고 한다. 함수형 프로그래밍의 사고방식은 문제 해결에 대해 선언적인 행위(함수)들을 조합(구성)하여 해결하는 것이다. 자바도 스칼라, 자바스크립트와 같은 함수형 패러다임 언어 혹은 지원하는 언어, 기술들의 대두로 인하여 JDK 8부터 해당 기능을 도입하게 되었다. 함수형 인터페이스, 람다, 메서드 레퍼런스, 디폴트 메서드, Future, Fork-Join, 리액티브 등 추가 1급 객체 함수형 프로그래밍의 중요한 조건 중 하나를 의미한다. 이는..
Spring DI? Spring DI는 스프링이 내부에 있는 Bean 간의 관계를 관리, 주입할 때 사용하는 기법이다. 스프링 컨테이너를 통해 관리되고 있는 POJO들을 비즈니스 코드에서 필요한 시점에 선택적으로 주입받을 수 있으며 이후 관리는 모두 컨테이너가 담당한다. Singleton Scope Bean DI를 통해 객체 외부에서 생성된 객체(Bean)를 Interface를 통하여 넘겨받게 되므로, 객체 간의 결합도를 낮출 수 있고, 런타임 시에 의존관계가 결정되기 때문에 유연한 구조를 가질 수 있다. 이를 통해 진정한 의미의 컴포넌트화를 가능케한다. DI Annotations @Autowired (AutowiredAnnotationBeanPostProcessor) 우선 빈의 타입을 기준으로 찾아서 ..
Oauth를 사용하는 이유? 사용자의 권한을 인증, 인가하기 위하여 ID와 비밀번호의 직접적인 전달을 하는 것은 탈취될 가능성이 존재한다. 이를 방지하고 안전하게 필요한 정보를 넘겨받기 위해 사용하게 된다. Oauth는 권한 위임을 위해 사용되는 프로토콜이며, 직접적으로 인가를 수행하기보단 요청할 수 있는 흐름과 수단을 제공한다. 웹 또는 모바일에서 개인 정보에 대한 액세스 권한을 요청받은 경우 해당 프로토콜을 사용하였을 것이다. Oauth의 장점 HTTP / HTTPS를 이용해 동작하는 프로토콜이기에 범용적으로 사용할 수 있다. 단순하게 구현할 수 있고, 많은 양의 레퍼런스를 가진다. 스펙이 강제하는 부분이 적고, 선택적으로 제공하거나 자유함으로 필요에 맞게 변경할 수 있는 부분이 많다. Oauth의 ..
제네릭이 나오게 된 이유? 제네릭이 도입되기 이전에는 상황에 따라 각기 다른 데이터를 다루기 위해 최상위 클래스인 Object를 사용하여 코드를 작성하곤 하였다. 그를 통해서 어떠한 데이터라도 받아 저장할 수 있었으나 몇가지 문제가 있었는데. 저장했던 값을 사용해야 할 때 명시적으로 캐스팅을 해서 사용해야 한다. 잘못된 캐스팅을 통한 오류가 발생할 수 있다. (String → Integer 등..) 들어온 타입에 대한 검증하는 로직이 추가로 들어가야한다. ( instanceof 결국 런타임에서 발견 ) 에러의 유무를 컴파일 단계에서 체크할 수 없다. (사전에 방지할 수 없다.) 즉 모호하고 찾기 어려운 잠재적인 오류를 가지게 된다. Reifiable type의 문제점! 이러한 문제를 방지하기 위해서는 컴..
자바 ORM 표준 JPA 프로그래밍 서적을 학습하면서, 정리하고 있는 내용입니다. EntityManagerFactory 사용자의 요청이 들어옴에 따라 EntityManager를 생성하는 책임을 가지고 있다. JPA를 동작시키기 위한 내부 객체들이 이 Factory를 통해 생성되고, 구현체에 따라선 커낵션 풀도 별도로 구성하므로 생성 비용이 크다고 한다. 여러 EntityManagerFactory를 생성하여 공유할 수 있으나. 하나의 객체만 생성해서 전 영역에 공유하는 것이 권장된다. (configuration lite mode를 사용하면 여러 개를 생성하고 공유할 수 있을 것 같다.) EntityManager (Persistence Context) 엔티티 정보를 저장하고 있는 환경. 요청 결과가 DB에 ..
스트림 (Stream) / 버퍼 (Buffer) / 채널 (Channel) 기반의 I/O I/O? Input : 입력, Output : 출력 Application(JVM) 외부의 입력을 받고, 내부의 결과를 외부로 전달하는 모든 흐름을 의미한다. Scanner, InputStream을 통한 키보드, CSV 등의 포맷 파일 입력 등 OutputStream을 통한 Console 출력, TCP/IP를 이용한 외부 Application(JVM)에 전달 등 Stream - Java I/O? 데이터를 전달하고, 입력받을 때 필요한 단방향 통로를 말한다. 기본적인 Java I/O API에서는 입력과 출력을 위한 각각의 Stream이 필요하다. 기본적으로 Buffer를 사용하지 않는 방식이며, 데이터를 받은 즉시 처리..
GRASP : General Responsibility Assignment Software Patterns? 해당 내용은 상호작용하는 클래스 혹은 객체에 책임을 할당하는데 도움이 되는 개념과 방법 즉 패턴들로 이루어져 있습니다. 이러한 내용들을 준수함으로써 좋은 객체지향 디자인 패턴을 만들어낼 수 있습니다. Responsibility? 책임은 SOLID나 지금 다룰 GRASP 등 Oriented-Object-Design 패턴과 원칙에서 핵심이 되는 개념입니다. 이는 클래스와 객체가 어떤 메시지(요청)에 대해 처리할 수 있거나, 적절한 행동을 해야 하는 의무가 있는 경우 해당 객체가 이러한 책임을 가진다라고 이야기할 수 있습니다. 책임은 메서드를 통해 구현되게 됩니다. Example. String은 문자열..
Annotation을 정의하는 방법 Annotation이란? JDK 1.5에 추가된 기능으로 실제 코드에 직접적인 영향을 주지 않고, 해당 코드를 처리하는 ****Compiler , Interpreter 혹은 Runtime에서 JVM에게 처리를 위한 정보를 제공하는 것이 주목적이다. Single-Value Annotation 단일 변수만을 갖는 Annotation을 말하며, 값을 명시하여 데이터를 전달할 수 있다. @SuppressWarnings, @Retention, @Target... Full Annotation 두 개 이상의 변수를 갖는 어노테이션으로 여러 데이터를 ", "를 기준으로 Key : value 형식으로 전달하게 된다. @Generated... Marker Annotation과 Inter..
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..
- Total
- Today
- Yesterday
- configuration
- 한국 스프링 사용자 모임
- spring AOP
- Thundering Herd
- JPA
- lambda
- Url
- 근황
- RESTful
- Redis Key
- Request Collapsing
- 게으른개발자컨퍼런스
- cache stampede
- WiredTiger
- spring
- rabbitmq
- cglib
- Switch
- RPC
- JDK Dynamic Proxy
- Optimistic Locking
- java
- AMQP
- transaction
- URN
- URI
- HTTP
- mybatis
- 커뮤니티 오거나이저
- JVM
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |