본문 바로가기

연재작

(37)
Thread와 자원 분배 문제 1. Thread의 정의와 만들어진 배경 스레드(Thread)란, 프로세스(Process) 보다 작은 프로그램의 실행 단위이다. 컴퓨터가 발달하면서 하나의 프로그램에서 복잡한 동시 작업의 필요성이 제기됐다.이에 따라서 하나의 프로그램에 여러 개의 프로세스가 필요했지만, 프로세스 간에는 자원의 공유가 어려웠다. 왜냐하면 서로 다른 프로세스는 완벽히 독립적인 메모리가 할당되기 때문이다. CPU가 프로세스의 작업 중에 다른 프로세스에게 작업을 전환하는 과정을 컨텍스트 스위칭(Context Switching)이라고 한다. 그런데 프로세스라는 단위 자체가 Context Switching에는 적합하지 않은 실행 단위이다. 각각의 프로세스는 고유한 스택과 데이터 영역을 가지고 이는 침범하지 않도록 보호받기 때문이다...
Spring과 Spring Boot 1. Tomcat과 Spring Container의 주 요소 Spring에 대해서 처음 배울 때 가장 이해하기 어려웠던 부분이자 지금도 약간 헷갈리는 부분의 도식이다. DispatcherServlet, DelegatingFilterProxy 둘 다 각각 Servlet, Filter 의 구현체이다.관리 자체는 Servlet Container 관할이기에 왼쪽에 있지만, 구현체는 Spring Bean 이라는 것을 알아두어야 한다. 만약 순수하게 Spring만을 사용한다면, Spring Container에서 제공되는 WebApplicationContext,즉 Bean의 생성과 주입까지는 우리가 Spring Boot환경에서 사용해왔던 것 처럼 사용이 가능하다. 그런데 이를 통해서 우리가 만들 수 있는 것은 서버 ..
Spring Bean Deep Dive Spring Bean과 관련해서 알게된 몇 가지 사실을 적어보고자 한다. 1. 생성자 주입을 권장하는 이유 MVC 패턴에 맞게, 그리고 3-layered-Architecture 패턴에 맞게 만들어오던 그동안은 순환 참조 자체가 발생할 일이 없었다.계층이 다른게 패키지 단위로부터 구분이 됐기 때문이다. 문제가 되는 시점은 @Configuration을 통해서 @Bean을 정의하고,해당하는 @Bean을 다른 @Configuration 혹은 @Component에 정의할 때 만들어졌다. 최근에 Spring Security를 배우다 생긴 상황이다. CustomAuthenticationProvider는 CustomUserDetails와 passwordEncoder에 의존@Component@RequiredArgsCon..
Persistence Context의 Entity 상태 관리, Life-Cycle 영속성 컨텍스트(Persistence Context)는 JPA에서 Entity의 관리를 하기 위한 중요한 factor이다.이를 통해서 우리는 객체 지향적인 entity의 관리만으로도 DB의 조작이 가능해진다. 그렇다면 Entity는 영속성 컨텍스트에서 어떤 식으로 관리가 되는지에 대해서 써볼 것이다.또한, Spring Boot, Tomcat 서버에서 영속성 컨텍스트에서 entity를 관리하기 위한 EntityManager와 Transaction, Thread, Connection, 그리고 영속성 컨텍스트가 어떤 생명주기를 갖고 있는지이에 대해서 알아보도록 하겠다.  1. Entity의 4가지 상태 Transient : 비영속 상태DB에도, 영속성 컨텍스트에도 존재하지 않는 Entitynew 생성자를 통해..
Transaction Deep Dive (5) 이제 transaction 추상화의 최종장이라고 할 수 있는 부분까지 도달했다.지난번 까지의 글의 흐름에서는 아래와 같은 순서로 추상화를 진행해왔다.JDBC API를 사용한 Transaction의 구현 : Connection, Statement, ResultSetTransactionSynchronizationManager를 통한 Transaction 동기화의 추상화 + DataSourceUtils를 사용한 connection의 공유PlatformTransactionManager를 통한 Transaction 관리, connection등 resource의 추상화+ DataSourceUtils를 사용한 connection의 공유PlatformTransactionManager와 JdbcTemplate을 통한 최..
Transaction Deep Dive (4) 지난 번 글에서는 가장 저수준 방식인 JDBC API를 통해connection을 직접 다루면서 Transaction을 동기화 하는 작업을 소개했다. 지금부터는 이러한 작업을 토대로 추상화를 진행해 차차 고수준으로 올려갈 것이다.우선 첫 번째는 connection을 감추는 작업이다. connection을 감춘다기보다는, Transaction Synchronization을 위해서필수적으로 connection의 단위가 transaction의 단위가 동일시 되어야 하기 때문에 Transaction에 connection을 내재화 해서 추상화가 되도록 진행하는 방식이 된다.  1. 앞으로 사용할 용어의 정리 예시를 들때도 부모 Transaction, 자식 Transaction 이렇게 쓰는 것도 부정확해보이고,Ser..
Aspect Oriented Programming 요즘 DB와 Transaction에 대한 공부를 하면서 AOP라는 흥미로운 개념에 대해 배우게 됐다.방식 자체도 특이하지만 기존에 배웠던 Lombok과 유사한 것처럼 보여서 해당 개념을 설명하고 어떤 부분이 다른지를 설명하고자 한다.  1. Aspect Oriented Programming "In computing, aspect-oriented programming (AOP) is a programming paradigm that aims to increase modularity by allowing the separation of cross-cutting concerns. It does so by adding behavior to existing code (an advice) without modify..
Transaction Deep Dive (3) 이전 글에서 예고했듯, 앞으로의 글에서는Transaction과 Transaction Synchronization의 추상화 진행 과정을 살펴볼 것이다.그렇지만 그 전에 Connection과 Transaction이 어떻게 밀접한 연관을 가지고 있는지를 확인해야 한다.이에 대해서 자세히 풀어보도록 하겠다.  1. Connection과 Transaction Synchronization의 관계 결론부터 말하자면, 원하는 대로 Transaction Synchronization이 이뤄지도록 하려면Connection의 단위와 Synchronization의 단위가 같아져야 한다. 그래서 Connection의 생명주기와 Transaction의 생명주기가 같아지도록 하는 것이다. Connection은 트랜잭션에서 사용하는 ..