목록Spring (4)
Log4KJS
스프링 MVC 의 @ResponseBody 와 @RequestBody 는 Jackson2HttpMessageConverter 가 Jackson ObjectMapper 를 이용해 json body 를 serialize (object -> json string) 또는 deserialize (json string -> object) 하는 역할을 맡습니다. serialize 와 deserialize 예시를 살펴보면서, ObjectMapper 의 매핑 전략에 대해 살펴보도록 하겠습니다. Serialize (Object -> Json string) Serialize 는 객체에서 Property 를 뽑아 json string 으로 변환하는 과정을 말합니다. 객체에서 Property 를 뽑아내는 기준은 다음과 같습니다..
보통 Master - Slave Replication 을 구현할 때, 단일한 Master 에는 삽입과 수정이 포함된 트랜잭션을 라우팅하고, 복수개의 Slave 에는 read-only 인 트랜잭션을 라우팅합니다. 애플리케이션 서버와 데이터베이스 사이에 프록시를 넣는 방법도 있지만, 애플리케이션에서 복수개의 DataSource 를 사용하는 방법을 간단하게 다루어 보도록 하겠습니다. 키에 따라 다른 DataSource 로 라우팅해주는 기능을 구현한 추상 클래스가 이미 존재합니다. AbstractRoutingDataSource 라는 클래스를 상속해서 determineCurrentLookupKey() 만 구현해주면 됩니다. import lombok.extern.slf4j.Slf4j; import org.sprin..
DispatcherServlet 에서 스프링에서 컨트롤러가 요청을 처리하기까지의 과정을 살펴보면, DispatcherServlet -> HandlerMapping -> HandlerAdapter -> Controller 와 같이 전달됩니다. 보통 사용하는 어노테이션 기반 컨트롤러의 핸들러 메서드를 호출할 때, 먼저 ArgumentResolver 에 의해 @ModelAttribute 나 @RequestBody 어노테이션이 붙여진 파라미터에 대해 바인딩이 이루어진 후, ( @ModelAttribute 의 경우는 먼저 디폴트 생성자가 호출되어 객체가 만들어진 후 WebDataBinder 가 HTTP params 를 수정자를 이용해 매핑합니다. @RequestBody 의 경우 MessageConverter 를 ..
[트랜잭션이란?] 데이터베이스에서 데이터를 조작하는 작업 수행의 논리적인 단위로, 원자성 (Atomicity), 일관성 (Consistency), 독립성 (Isolation), 지속성 (Durability) 과 같은 속성을 가집니다. 원자성 (Atomicity) 트랜잭션 내의 모든 작업은 모두 성공하거나 (Commit) 모두 실패하여야 합니다. 일관성 (Consistency) 기본 키, 외래 키, 유일성과 같은 DBMS 에서 명시하는 무결성 제약 조건들과 '자금 이체에서 두 계좌 잔고의 합이 같아야한다' 와 같은 비지니스 로직에서의 비명시적인 일관성 조건들이 지켜져야 합니다. 고립성 (Isolation) 여러 트랜잭션이 실행될 때, 한 트랜잭션은 다른 트랜잭션에 영향받지 않고 고립되어 수행될 수 있어야 ..