목록Framework/Spring (15)
코딩하는 오징어
Asynchronous - Non Blocking framework가 화두가 된지 꽤 오랜 시간이 흘렀다. WebFlux, Akka, Node.js, Vert.X 같은 다양한 Asynchronous - Non Blocking 모델을 제공하는 Web Framework가 등장하였고, Spring 을 사용하는 다수의 팀들은 WebFlux를 선택하여 Blocking 모델인 WebMvc로 부터 벗어나 Asynchronous - Non Blocking을 지향하고 있다고 이야기하고 있다. 하지만 우리는 정말 Thread를 block 시키지 않도록 코드를 작성하고 있을까?? Asynchronous와 Non Blocking에 대한 이야기 부터 간단하게 소개하고 현재 우리는 어떤 방식으로 Asynchronous - Non..
spring web mvc를 이용하여 서버 어플리케이션을 개발한다면 @Transactional을 이용하여 트랜잭션을 적용할 것이다. @Transactional이 적용된 메서드는 다음과 같은 flow로 메서드가 실행된다. (PlatformTransactionManager, DataSource 인터페이스에 대한 자세한 설명은 이 글에서 다루지 않는다.) 1. CglibAopProxy.DynamicAdvisedInterceptor.intercept(...) 2. TransactionInterceptor.invoke(...) 3. TransactionAspectSupport.invokeWithinTransaction(...) 4. TransactionAspectSupport.createTransactionIfN..
Spring boot logback 설정classpath(resource디렉토리 밑)에 logback-spring.xml파일이 있으면 Boot가 설정파일을 읽어감.logback-spring.xml파일이 없다면 .yml(.properties)파일의 설정을 보게됨.설정시 특징 ${LOG_PATH}/private.${port:-default}.log ${LOG_PATH}/private.${port:-default}.log.%d{yyyy-MM-dd} 7 %replace(%msg){'\n', ' '}%n ${LOG_PATH} 변수에 들어가는 값을 .yml파일에 속성 값이 있다면 그것을 가져옴.file태그가 없을 경우 fileNamePattern태그 설정이 파일 이름을 세팅함.spring: profiles: def..
Spring Boot Profile 설정 Spring Boot를 사용하기 전에는 maven을 이용했다면 태그를 이용하여 profile을 설정하였다. Spring Boot를 이용하면 보다 손쉽게 profile을 설정할 수 있다. 참고 docs : https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html#boot-features-external-config-profile-specific-properties application.properties를 파일을 이용할 경우 application-{profile}.properties 형식으로 다음과 여러개의 파일을 생성하면 된다. applicatio..
Junit 4 & Spring Test을 이용한 TDD 환경 세팅(다음은 Spring boot를 이용하지 않은 애플리케이션에서의 테스트 환경이다.)SpringTestSupport 클래스에 설정 후 이 클래스를 상속받아 테스트를 개발함.@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = { RootContextConfig.class }, loader = AnnotationConfigWebContextLoader.class) @WebAppConfiguration public class SpringTestSupport { @Autowired protected WebApplicationContext wac; protected MockM..
Junit 5 & Spring Test을 이용한 TDD 환경 세팅기본 세팅@ExtendWith(SpringExtension.class) @SpringBootTest(classes = KkApplication.class) @ActiveProfiles("test") public abstract class SpringTestSupport { } TestContext를 사용하려면 위의 SpringTestSupport를 상속받아 테스트 코드를 개발한다.@ExtendWith는 Junit4의 RunWith(SpringRunner.class)와 비슷하다고 생각하면 된다.@SpringBootTest는 @SpringBootApplication이 붙은 애너테이션을 찾아 context를 찾는다.@SpringBootApplic..
spring-data-jpa와 hibernate를 이용하여 프로젝트를 설정하던 중 발생한 이슈를 해결하면서 Spring 5.xx에서 새로 나온 CandidateComponentsIndexLoader클래스에 대해 알아보았습니다. 이를 공유하고자 글을 쓰게 되었습니다. 먼저 제가 설정한 pom.xml을 들여다 봅시다. 4.3.14.RELEASE ... ... org.springframework spring-webmvc ${spring.version} javax.servlet javax.servlet-api com.fasterxml.jackson.core jackson-databind org.springframework.data spring-data-jpa 2.0.5.RELEASE org.hibernate h..
Spring data jpa & hibernate를 이용하기 위한 빈 설정에 대해 알아보자. 먼저 코드와 dependency부터 보자. @Bean(destroyMethod = "close") public LocalContainerEntityManagerFactoryBean entityManagerFactory(DataSource dataSource) { HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter(); vendorAdapter.setGenerateDdl(true); vendorAdapter.setShowSql(true); LocalContainerEntityManagerFactoryBean factory = new Loc..