요약 스프링 부트는 AutoConfiguration 기능을 제공함. 스프링부트가 제공하는 자동 구성 기능을 이해하려면 다음 두 가지 개념을 이해해야함. @Conditional : 특정 조건에 맞을 때 설정이 동작하도록 함. @AutoConfiguration : 자동 구성이 어떻게 동작하는지 내부 원리 이해. 스프링부트가 제공하는 자동 구성 기능을 이해하려면 다음 개념을 이해해야 함. @Conditional : 특정 조건에 맞을 때 설정이 동작하도록 함. @AutoConfiguration : 자동 구성이 어떻게 동작하는지 내부 원리 이해 자동구성 - 예제 만들기 @Slf4j @Configuration public class DBConfig { @Bean public DataSource dataSource(..
코드 사용된 코드는 이곳에서 확인할 수 있습니다. ApplicationEventPublisher를 이용하기 스프링부트는 ApplicationEventPublisher 객체를 자동으로 스프링빈으로 등록해준다. 이 객체를 이용하면 객체 간의 의존 관계를 줄이는 방향으로 코드를 작성할 수 있다. 의존성이 약해지면서 상대적으로 문맥 파악이 어려워진다는 단점이 있지만 불필요하게 강하게 결합한 객체들을 분리해 줄 수 있어서 좋을 때도 있다. @RestController @Slf4j @RequiredArgsConstructor public class MyController { private final ApplicationEventPublisher eventPublisher; @GetMapping("/event") p..
들어가기 전 조회수는 별거 아닌 기능인 것처럼 생각되지만, 이번에 구현해보려고 할 때 정말 어려운 작업이라는 것을 느꼈다. 특히 다음 관점에서 어렵다. 아래에서는 여러 버전을 구현하고 테스트 하면서 결론을 하나씩 정리해보고자 한다. 동시성 문제 실시간 반영성 문제 정확성 문제 요구 사항 가능한 실시간으로 업데이트 되어야 함. 한 명이 하나의 가게를 하루에 여러 번 조회해도 가게의 조회수는 단 한 번만 증가해야 함. 조회수 기능이 동작하지 않더라도 어플리케이션은 동작해야 함. 내가 구현한 조회수 기능의 요구 사항은 다음과 같다. 결과 검증 코드 많은 요청이 동시에 들어왔을 때 발생할 수 있는 동시성 문제 / 성능 문제를 확인하기 위해 아래 파이썬 코드를 이용했다. aiohttp와 asyncio를 이용해 비..
Spring Tomcat Thread Pool 스프링 MVC는 내장 톰캣을 사용하고, 요청마다 새로운 쓰레드가 배정된다. Tomcat 서버에서는 쓰레드 생성 비용을 절감하기 위해 쓰레드 풀에 미리 생성되어 있는 쓰레드를 재활용한다. 톰캣 서버와 관련된 설정값을 바꿔서 이런 부분들 조절할 수 있다. server: tomcat: threads: max: 200 min-spare: 50 accept-count: 10 max-connections: 1000 각각이 의미하는 것은 다음과 같다. max : 톰캣 쓰레드풀이 동시에 사용할 수 있는 최대 쓰레드 개수. 쓰레드 개수만큼 동시 요청 처리가 가능함 min-spare : 톰캣 쓰레드풀에 대기 상태로 있는 쓰레드 개수. max-connections : 톰캣 커넥..
Spring : 동일 타입 여러 스프링 빈 주입 받기 OCP를 지키기 위한 수단 중 하나로 인터페이스를 도입한다. 인터페이스를 도입하면 객체 사이의 결합이 낮춰진다는 장점이 있다. 그런데 이것은 동일한 인터페이스를 갖지만 서로 다른 구현체를 가지는 스프링 빈을 여러 개 등록하고 사용할 때는 꽤 귀찮은 상황이 될 수도 있다. 스프링은 기본적으로 타입을 보고 스프링 빈을 주입해준다. 동일한 타입의 스프링 빈이 여러가지 존재한다면 필드의 이름과 스프링 빈의 이름이 일치하는 것을 넣어준다. 그래도 잘 안된다면 ObjectProvider 등을 이용해서 넣는 방법이 있다. 이 때 필드의 이름을 직접 지정하거나, ObjectProvider에 이름을 직접 지정해야하기 때문에 하드코딩에 조금쯤은 가까운 방법이 되기도 한..