개인 공부/spring
-
Spring Stop Watch 로직 속도 체크개인 공부/spring 2024. 8. 5. 20:18
🔴 StopWatchspring에서 자체적으로 제공해주는 StopWatch 라이브러리로 간편하게 로직의 성능을 체크해볼 수 있다.🟠 사용법🟢 객체 만들기import org.springframework.util.StopWatch;StopWatch stopWatch = new StopWatch();stopWatch.start();stopWatch.stop();위와 같이 객체로써 받아오면 끝이다.그리고 start와 stop으로 시간을 체크할 수 있다.🟢 시간 체크하기stopWatch.start("Task1");stopWatch.stop();stopWatch.start("Task2");stopWatch.stop();stopWatch.start("Task3");stopWatch.stop();log.info..
-
동시성 제어 [3] Redis개인 공부/spring 2024. 8. 5. 19:54
🔴 분산 Lock동시성 제어 [1] java 처리동시성 제어 [2] DB Lock에 이어 Redis를 사용한 동시성 제어 방법을 학습해보자.분산된 서비스에서 사용할 수 있는 락 방법으로 DB를 사용하는 방법에 대해 알아봤었다. 하지만 DB의 경우 이미 insert와 select 등 다양한 처리를 진행하고 있기에 lock을 걸었을때 성능의 이슈와 DB 자체가 빠른 시스템이 아니라 처리 속도면에서도 좋은 결과를 보여주진 않는다.그래서 우리가 선택할 수 있는 동시성 제어 방법으로 in-memory의 캐시를 사용하는 Redis를 통해 Lock을 처리할 수 있다.🟠 Redis(lettuce) 설정Redis를 사용하기 위해서는 Redis 서버를 생성해야되기 때문에 설정부터 시작해보자.🟢 docker compo..
-
동시성 제어 [2] DB Lock개인 공부/spring 2024. 8. 5. 19:53
🔴 분산 Lock지난 번 글에 이어 동시성 문제를 해결해보려고 한다.java 동시성 제어 [1]java 처리분산된 여러 서버에서 서버마다 락을 처리해놔도 여러 서버가 존재한다면 동시성은 해결될 수 없다. 그래서 여러 서버가 DB 한곳으로 요청할때 DB에서 락을 걸어 동시성 이슈를 해결하는 방법에 대해 알아보자.🟠 DB Lock (비관적 락)데이터를 저장하고 있다면 당연히 DB를 사용하고 있을것이다. RDB를 사용하고 있는 경우 query를 통해 Lock을 걸어줄 수 있다.여기서 비관적 락이란 트랜잭션이 발생하면 DB에서 락을 걸어서 대기시키는 것이다.🟢 Service@Service@RequiredArgsConstructor@Transactional(readOnly = true)public class..
-
동시성 제어 [1] java 처리개인 공부/spring 2024. 8. 5. 19:51
🔴 동시성 제어란?회사 공고나 백엔드 개발자로써 성장하다 보면 가장 많이 듣게되는 부분 중 하나가 동시성 제어다. 특히 자바 개발자는 스프링의 멀티 쓰레드 특성상 해당 부분을 해결할 능력을 갖추는 것이 필수이다.여러 쓰레드가 동시에 요청을 처리하는 프로세스를 순서대로 처리되도록 개발자가 처리해주면 되는 것이다.🟠 고려할 점동시성을 처리하기 전에 환경, 프로젝트 규모를 먼저 고려해야 한다. 작은 프로젝트(=1개의 서버만 운영)작은 프로젝트라면 하나의 서버에서 처리하고 있기 때문에 서버 내에서 java의 Lock이나 Synchronize를 통해 처리할 수 있다.큰 프로젝트(=여러개의 서버 운영 =분산 시스템)프로젝트 당 쓰레드도 여러개지만 서버 자체도 여러개라 Lock을 처리해줄 외부 설정이 필요함. D..
-
spring[19] Spring의 요청과 응답 과정개인 공부/spring 2021. 6. 19. 22:01
HTTP 메세지 컨버터 지금까지 우리는 HTTP의 요청과 응답을 알아봤다. Spring에서 우리가 요청하는 내용과 응답하는 값들을 자동으로 설정을 해준다고 하는데 이것은 어떻게 작동하는 것일까? 그 자동으로 변환시켜주는 것이 HTTP 메세지 컨버터이다. HTTP API처럼 JSON 데이터를 HTTP 메세지 바디에 직접 읽거나 쓰는 경우 HTTP 메세지 컨버터를 사용하면 편리하다. 우리가 HTTP 메세지 바디에 데이터를 전달하기 위해 사용했던 @ResponseBody를 사용했을 때 viewResolver 대신 HttpMessageConverter가 동작하여 데이터를 그대로 전달받을 수 있는데 그 예시로 ByteArrayHttpMessageConverter StringHttpMessageConverter M..
-
spring[18] Response 응답개인 공부/spring 2021. 6. 19. 21:19
Response 응답 응답 데이터를 만드는 방법도 크게 3가지이다. 정적 리소스 : HTML, css, js 등 웹 브라우저에 정적인 데이터를 제공할 때 뷰 템플릿 사용 : 웹 브라우저에 동적인 데이터를 제공할 때 HTTP 메세지 사용 : HTTP API를 제공하는 경우 HTTP 메세지 바디에 데이터를 제공할 때 정적 리소스 스프링 부트는 아래 디렉토리에 있는 정적 리소스를 제공한다. /static, /public, /resources. /META-INF/resources뷰 템플릿 뷰 템플릿은 jsp, thymeleaf 등의 뷰 템플릿을 거쳐 HTML이 생성되고 뷰가 응답을 만들어서 전달하는 것인데 스프링 부트는 기본적으로 아래 디렉토리에 있는 경로로 제공한다. src/main/resources/temp..
-
spring [17] request 요청개인 공부/spring 2021. 6. 19. 11:18
request 요청 Spring에서의 요청을 알아보려고 한다. 먼저 매핑정보에 대해서 알아봐야하는데 class 단위의 controller 설정 @Controller : 반환 값이 String이면 뷰 이름으로 인식된다. 그래서 뷰를 찾고 뷰가 렌더링된다. @RestController : 반환 값이 HTTP message body에 입력된다. 따라서 실행결과를 메세지로 받을 수 있다. method 단위 설정 @RequestMapping("url") : url 호출이 오면 해당 메서드가 실행된다. 또한 배열로 제공하여 다중 설정이 가능하다 @RequestMapping({"url1","url2"}) method 속성을 명시하지 않으면 모든 요청에 호출된다. @RequestMapping(value = "url",..
-
spring[16] Spring MVC 실제 사용법개인 공부/spring 2021. 6. 13. 10:22
Spring MVC 스프링은 어노테이션을 활용하여 매우 유연하고 실용적인 컨트롤러를 만들었는데 @ReqeustMapping을 사용하는 컨트롤러가 그것이다. @RequestMapping RequestMappingHandlerMapping RequestMappingHandlerAdapter 핸들러 매핑과 핸들러 어댑터의 우선순위가 있는데 HandlerMapping 0 = RequestMappingHandlerMapping : 애노테이션 기반의 컨트롤러인 @RequestMapping에서 사용 1 = BeanNameUrlHandlerMapping : 스프링 빈의 이름으로 핸들러를 찾는다.HandlerAdapter 0 = RequestMappingHandlerAdapter : 애노테이션 기반의 컨트롤러인 @Req..