반응형 spirng boot4 [Spring + JPA] 동시성 문제를 해결해보자! 서버에서 여러 트랜잭션에서 동시에 같은 데이터를 변경하려고 시도할 경우 데이터 요청이 일부 유실될 수 있습니다. 이것은 큰 장애로 커질 수 있는데요. 예를 들어 상품이 100개인 상품이 있다고 가정해봅니다. 서로 다른 5명이 동시에 100개를 동시에 주문할 경우 한 명의 주문만 성공해야 합니다. 5명의 주문이 성공할 경우 큰 장애로 이어집니다. 이런 이슈를 JPA의 락 기능을 통해서 동시성 문제를 해결해보려고 합니다. 이슈 동시에 여러 트랜잭션을 통해 주문이 들어올 경우 주문이 모두 성공하는 이슈가 있었습니다. 해당 상품으로 테스트를 진행해보겠습니다. 상품 테이블에 맥북의 재고가 100개가 저장되어있습니다. 아래 테스트 코드를 보면서 문제점을 확인해봅니다. package assignment.shop.co.. 2022. 9. 9. Spring Boot에서 타임리프 이미지 동적 리소스 사용하기 스프링 부트에서 타임리프를 사용하던 중 이미지를 업로드 후 파일이 즉시 반영이 안 되는 이슈가 있었습니다. 스프링에서 static 폴더는 정적 리소스 폴더인데 여기 안에서 사용자가 이미지를 업로드하고, 삭제, 이용하게 설계해서 이슈가 발생했습니다. 대부분 AWS S3나 외부 디렉터리를 사용하여 컨트롤러 라우터에서 이미지 path를 받고, 외부 디렉터리에서 파일을 가져와 이미지를 뿌려주는 방식입니다. 여기서 중요한 점은 파일이 업로드한다고 해서 바로 웹 리소스로 쓸 수 없습니다. 컨트롤러에 한 번 요청해서 내려줘야 합니다. /resources/user 유저가 파일을 업로드하면 위와 같은 위치에 파일을 저장하게 됩니다. 여기서 웹 리소스로 한 번 더 매핑해서 내려주는 작업을 해주어야 합니다. package .. 2022. 2. 23. Spring Boot 이미지업로드 (환경: gradle, java11,Spring Boot 2.6.2, thymeleaf) 회원의 사진을 업로드하기 위해서 한번 구현해봤습니다. build.gradle dependencies { implementation 'commons-io:commons-io:2.6' ... } 의존성을 주입해줍니다. form.html .... form에서 중요한 부분이 바로 enctype="multipart/form-data"를 추가해줘야합니다. 간단하게 설명하자면, enctype는 폼 데이터(form data)가 서버로 제출될 때 해당 데이터가 인코딩되는 방법을 명시해줍니다. common.properties ## FilePath file.path=/Users/sungmin/Desktop/~/images/user properties에 파일을 저장할 위치를 선언해줍니다. 이 방법을 쓴 이유는 밑에서 설명해드.. 2022. 2. 14. Spring 빈 스코프를 알아보자♻️ 빈 스코프는 말 그대로 스프링 빈이 존재할 수 있는 범위를 말합니다. 스프링은 아래와 같은 스코프를 지원합니다. 싱글톤: 기본 스코프, 스프링 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위의 스코프입니다. 프로토타입: 스프링 컨테이너는 프로토타입 빈의 생성과 의존관계 주입까지만 관여하고 더는 관리하지 않는 매우 짧은 범위의 스코프입니다. 웹 관련 스코프 request: 웹 요청이 들어오고 나갈때 까지 유지되는 스코프입니다. session: 웹 세션이 생성되고 종료될 때 까지 유지되는 스코프입니다. application: 웹의 서블릿 컨텍스트와 같은 범위로 유지되는 스코프입니다. https://applepick.tistory.com/129 스프링에서 싱글톤 적용 시 주의 할 점! ⚠️ 스프링 컨테이너.. 2022. 1. 31. 이전 1 다음 반응형