Programming/SpringBoot
-
[SpringBoot] OOME, hprof 덤프 파일, 메모리 디버깅Programming/SpringBoot 2024. 7. 31. 16:20
hprof 생성hprof 덤프 파일을 생성하기 위해서는 JVM실행 옵션을 설정하면 됩니다. 인텔리제이를 사용중이므로 인텔리제이 옵션 설정으로 어플리케이션 실행시 적용되도록 해봅시다. Edit Configurations > Modify options > add VM optionsadd VM options 버튼을 클릭하면 추가 입력 칸이 생깁니다. 입력 칸에 JVM 힙 메모리, OOME 발생시 덤프 파일을 생성하는 옵션, 덤프 파일 저장 경로를 입력합니다.-Xmx50m-Dfile.encoding=UTF-8-Dconsole.encoding=UTF-8-XX:+HeapDumpOnOutOfMemoryError-XX:HeapDumpPath=E:\dump Shallow Size: 객체를 저장하는 데에 사용된 메모..
-
[SpringBoot] batchUpdate()를 활용한 bulkInsertProgramming/SpringBoot 2024. 7. 30. 16:49
saveAll()jpa에서 제공하는 saveAll() 메소드를 사용하면 100건 등록시 insert가 100번 수행됩니다.100명의 사용자가 각각 saveAll()메소드를 사용한다면 100*100 = 10000 번의 insert가 수행되는 것입니다. 요청 사용자가 많을 수록 데이터베이스 성능 저하의 원인이 되고 결과적으로 서버 응답 시간이 길어지게 됩니다. spring data jpa구현체인 SimpleJpaRepository를 확인해보면 saveAll() 메소드 내부에서 for문을 통해 save() 메소드를 호출합니다.@Override @Transactional public List saveAll(Iterable entities) { Assert.notNull(entities, "Entities..
-
[Spring] ModelMapper MapStructProgramming/SpringBoot 2024. 7. 2. 13:41
Object MappingController, Service, Repository 등 레이어 간 데이터를 주고 받을 때 하나의 객체를 타입이다른 객체로 형변환하는 일이 빈번하게 발생한다. ( DTO와 Entity간 형변환 과정)이런 작업을 개발자가 모두 직접하게 되면 발생하는 문제점이 있다.반복적이고 코드 중복이 발생실수하기 쉽다필드 추가, 수정, 삭제가 일어날 경우 변환하는 로직에 대해 수정이 필요하다비즈니스 로직에 섞이게 되면 코드가 복잡해진다결국 생산성이 떨어진다.Object Mapping라이브러리는 이런 문제를 해결해주는 도구이다. ModelMapper, MapStructObject Mapping을 위한 Model Mapper와 MapStruct라이브러리가 있다. MapStruct는 컴파일 시..
-
[Spring] TransactionProgramming/SpringBoot 2024. 6. 20. 10:00
트랜잭션더 이상 쪼갤 수 없는 최소 단위의 작업트랜잭션 경계 안에서 진행된 작업은 모두 성공하던지 모두 취소돼야 함 트랜잭션 속성● 트랜잭션 전파 Propagation트랜잭션 경계에서 이미 진행 중인 트랜잭션이 있을 때 또는 없을 때 어떻게 동작할 것인가를 결정하는 방식▷ PROPAGATION_REQUIRED가장 많이 사용진행 중인 트랜잭션이 없으면 새로 시작하고 이미 시작된 트랜잭션이 있으면 이에 참여함 ▷ PROPAGATION_REQUIRES_NEW항상 새로운 트랜잭션을 시작한다.독립적인 트랜잭션이 보장돼야 하는 코드에 적용할 수 있다. ▷ PROPAGATION_NOT_SUPPORTED트랜잭션 없이 동작하도록 만들 수 있다.진행 중인 트랜잭션이 있어도 무시한다.트랜재션 경계설정은 보통 AOP를 이용해..
-
[Spring] Spring에서 JSON 파라미터를 Java객체로 받기Programming/SpringBoot 2024. 5. 27. 15:10
Spring에서 Request,Response로 전달되는 파라미터 정보를 컨트롤러에서 어떻게 Java객체로 받을까?Spring에서 HttpMessageConvert가 그 역할을 담당하고 있다.Request, Response내에는 모두 text형식이라고 할 수 있다. 이를 Java자료형으로 변환해주는 역할을 한다. HttpMessageConvertByteArrayHttpMessageConvertStringHttpMessageConvertFormHttpMessageConvertSourceHttpMessageConvertJax2RootElementHttpMessageConvertMarshallingHttpMessageConvertMappingJackson2HttpMessageConverter....이외에도 S..
-
[Spring] Content-Type 'application/octet-stream' is not supportedProgramming/SpringBoot 2024. 5. 27. 15:01
컨트롤러에서 이미지 파일과 dto를 잘 받아오는지 확인하려는 메소드를 실행했을때 @LoginRequired @PostMapping(consumes = MediaType.MULTIPART_FORM_DATA_VALUE) public ResponseEntity test(@RequestPart(value = "files") List files, @RequestPart(value = "postDto") PostDto postDto, @LoginMember MemberDto memberDto){ if(files.isEmpty()){ return ResponseEntity.status(HttpStatus.NOT_FOUND).build(); } ..