실습으로 배우는 선착순 이벤트
·
study/인프런
요구사항선착순 100명에게 할인쿠폰을 제공하는 이벤트를 진행하고자 한다.이 이벤트는 아래와 같은 조건을 만족하여야 한다.선착순 100명에게만 지급되어야한다.101개 이상이 지급되면 안된다.순간적으로 몰리는 트래픽을 버틸 수 있어야합니다.Race condition 해결방법1. synchronizedsynchronized는 서버 인스턴스가 여러개일 경우 race condition이 발생할수 있다.2. 데이터베이스 락데이터베이스 락을 걸 경우 쿠폰 조회부터 완료까지 락이 걸리게 되므로 성능 저하가 발생할 수 있다예를들어, 쿠폰 저장까지 2초가 걸린다면 2초만큼 계속 락이 발생3. Redis쿠폰 갯수만 정확하게 관리하면 되므로 redis incr 명령어를 활용해 쿠폰 갯수 관리 (redis는 싱글스레드로 돌아가..
[Spring] ViewResolver
·
CS/Spring
ViewResolverdispatcherServlet은 Handler Adapter에서 받아온 view 이름을 가지고 viewResolver에게 이러한 view가 있는지 물어보고 viewResolver는 view가 존재하는지 아닌지 판단하는 역할을 하게된다.즉, ViewResolver는 사용자가 요청한 것에 대한 응답 view를 렌더링하는 역할이다.Springboot ViewResolverSpringBoot를 사용하면서 view로는 thymeleaf를 사용했던 경험이 있는데 이 때 ViewResolver를 생성하지도 Bean으로 등록하지도 않았는데 어떻게 처리되는지에 대해서 알아보겠다.일단 먼저 DispatcherServlet은 SpringBoot에 자동설정 기능으로 자동 등록 된다.package org..
[Spring] HttpMessageConverter
·
CS/Spring
HttpMessageConverterHttpMessageConverter는 기존의 뷰 템플릿으로 HTML을 생성해서 응답하는 것이 아니라 HTTP API(REST API)처럼 JSON형식의 데이터 메시지바디를 직접 읽거나쓰기 위해 메시지 본문을 다루는 방식을 말한다.스프링 MVC는 다음의 경우에 HTTP 메시지 컨버터를 적용한다.HTTP 요청 : @RequestBody, HttpEntity(ResponseEntity) (ResponseEntity는 HttpEntity를 상속받았음)HTTP 응답 : @ResponseBody, HttpEntity(ResponseEntity)기존의 요청 URL 파라미터, HTML Form 방식에서의 viewResolver대신 HttpMessageConverter이 동작하게 된..
[Spring] Spring vs SpringBoot
·
CS/Spring
스프링 vs 스프링부트스프링(Spring)스프링 프레임워크(Spring Framework)는 자바 플랫폼을 위한 오픈소스 애플리케이션 프레임워크로서 간단히 스프링이라고도 불린다. 동적인 웹 사이트를 개발하기 위한 여러가지 서비스를 제공하고 있다.스프링은 DI, IOC를 통해 재사용 및 유지보수가 용이한 코드를 작성할 수 있고, 확장성을 가진 코드를 설계할 수 있다 또한 스프링이 제공해주는 기능들을 통해 개발자는 비즈니스 로직에만 집중할 수 있기 때문에 생산성을 증가 시킬 수 있다는 장점을 가지고 있다.스프링부트(Spring Boot)스프링부트는 스프링을 더 쉽게 이용하기 위한 도구라고 볼 수 있다. 스프링을 사용할 때 이것저것 세팅을 해야 될 요소가 너무 많아 불편함이 있었는데 스프링부트는 매우 간단하게..