spring boot 13

save랑 saveAll(feat. Transactional)

save랑 saveAll(feat. Transactional) Spring Data JPA를 통해 다양한 쿼링을 쉽게 해줄 수 있다. 근데 만약에 여러 insert를 해줘야 하는 경우가 있다면 어쩔까?? 상황 일단 Spring Data JPA에 대해 안다고 가정한다. 여러 값을 저장할 때에 save방식 넣을값들.forEach( index -> 저장레포지터리.save(index) )이거랑 saveAll방식 저장레포지터리.saveAll(넣을값들);의 차이가 뭘까?? save 일단 save를 한번 본다. saveAll 이제 saveAll을 본다 뭐가 다른겨? 사실 saveAll을 보면 최초에 Transactional 어노테이션 실행 해당 함수 내에서 save함수 실행 저 save는 save함수임 이렇게 간다...

Spring boot Transactional annotation

Transaction이란 DB에서의 상태 변경을 위해 수행하는 작업의 단위 간단하게 말하면 CRUD를 통해 DB에의 접근을 진행하는 것이다. Transaction은 ACID라는 성질을 갖는다. Atomicity(원자성) 트랜잭션은 모두 DB에 반영되거나, 그렇지 않으면 모두 반영되지 않아야 한다. Consistency(일관성) 트랜잭션 처리 결과는 일관성이 있어야 한다. 즉, 트랜잭션 진행 도중 DB가 변경되어도 처음 트랜잭션 진행을 위해 참조한 데이터 기준으로 적용 Isolation(독립성) 둘 이상의 트랜잭션이 동시에 수행되고 있는다면 다른 트랜잭션의 연산에는 끼어들수 없다. Durability(지속성) 트랜잭션이 성공적으로 완료되면 그 결과는 영구적으로 반영되어야 한다. Transactional a..

Soft Delete와 Hard Delete의 차이와 @SQLDelete

DB의 삭제 구현 방법은 두가지가 있다. Soft Delete 데이터를 실제로 삭제하지 않고, 삭제 flag를 변경하는 방법이다. Hard Delete 실제로 데이터를 삭제하는 방법이다. 실제로 서비스를 구현할 때에는 Soft Delete를 자주 사용한다. 하지만 Spring Data JPA에서 이 Soft Delete를 구현할 때에는 주의해야 할 점이 다수 있다. 만약에 한꺼번에 많은 데이터를 삭제하는 경우가 생긴다면 어떨까?? 이러한 Bulk연산에서 Soft Delete를 사용할 때에 여러 번의 쿼링이 진행되게 될 것이다. 이를 해결하기 위해서 @SQLDelete어노테이션과 JPA에서 제공하는 deleteAllInBatch를 사용할 수 있다. @SQLDelete JPA에서 기본으로 삭제는 Hard D..

보일러플레이트란 무엇일까?

보일러 플레이트란? 먼저 보일러 플레이트는 신문사업에서 나온 말인데, 본래 텍스트 인쇄판은 납같은 부드러운 것으로 찍었는데, 광고나 칼럼 등 한번 만들어놓고 계속해서 사용되는 내용에 관한 판은 계속해서 사용할 수 있도록 강철로 찍어서 출시했다. 그것을 Boilerplate라고 불렀고, 이는 한번 만들어두고 여러번 사용할 수 있도록 한 것이다. 우리는 한국인이니까 대충 금속활자같은걸 생각하면 될것같다. ㄱㄴㄷㄹㅁㅂㅅ 이런 자주 쓰이는것을 금속으로 만들어두면 계속 쓸수있는 느낌이다. 개발에서의 보일러 플레이트는? 예전에는 개발을 할 때에 Getter이나 Setter을 모든 변수에 대해 하나하나 세팅을 해주었다. 이런식으로 세팅하는것은 굉장히 귀찮고 솔직히 도움도 되지 않았다. 그리고 @Getter, @Set..

Spring boot를 통한 REST API구현 - 이론(3)

Spring boot로 간단한 rest api를 구현하여 보자!! Spring boot를 통한 REST API의 구현 - 실습(3)에 관한 이론과 내용들에 관한 글이다. 관련 내용 1. Lombok 개념 Lombok이란, 반복해서 사용되는 Annotation을 하나로 묶어서 자동으로 작성해주는 라이브러리이다. 자주 쓰이는 내용들을 한꺼번에 적용할 수 있고 긴 코드를 줄여주기 때문에 생산성에 큰 도움이 되지만, 생각보다 큰 단점이 존재한다. 이 단점에 관해서는 이후에 단점이 발생하게 되는 타이밍에 다시 적겠다. 이게 꼭 그 상황이 터져야 비로소 이해하게 되는 것 같다. 사용 @Data @Getter / @Setter / @ToString / @EqualsAndHashCode / @RequiredArgsCo..

Spring boot를 통한 REST API구현 - 실습(3)

Spring boot로 간단한 rest api를 구현하여 보자!! DTO를 사용한 값 전달, default설정 등 DTO를 사용한 값 세팅 및 전달하기 default값 설정과 required 설정하기 DTO생성 해당 위치에 UserInfoDTO라는 java class를 하나 생성해 준다. import lombok.Data; import lombok.NoArgsConstructor; @Data @NoArgsConstructor public class UserInfoDTO { private String name; private String email; } 해당 클래스의 코드는 다음과 같다. 참고로 여기서 @Data, @NoArgsConstructor을 사용하려면 lombok을 import해줘야 할 것이다. ..

Entity, DTO의 차이와 사용 이유, 개념

Entity, DTO가 뭐지? 분리해서 쓰라고? 개인적으로 생각할 때에 처음 Spring boot를 배울 때 가장 개념이 잡히지 않는 것들 중 하나가 DTO, Entity일 것이라 생각한다. 특히 처음에 볼 때는 걍 Entity를 쓰니까 다 되는데 왜 굳이 이거 두개를 나누지? 라는 생각을 할 수도 있을 것이라 생각한다. 이 글에서는 이 두 가지의 간단한 개념과 나누는 이유, 사용 방법에 대해 기술한다. Entity란? Entity란 DB의 테이블에 존재하는 Column을 필드로 갖는 객체이다. 여기서 중요한 점은 DB테이블과 관련이 있다는 점이다. 즉, Entity는 DB테이블과 소통하는 데에 사용하는 것이다. DTO란? Data Transfer Object라는 뜻이다. DTO는 계층 간 데이터 교환을..

이론 정리/java 2022.02.28

Spring boot를 통한 REST API구현 - 이론(2)

Spring boot로 간단한 rest api를 구현하여 보자!! Spring boot를 통한 REST API의 구현 - 실습(2)에 관한 이론과 내용들에 관한 글이다. 관련 내용 1. Annotation @PathVariable Controller에서 parameter를 받을 수 있는 방법 중 하나이다. http://localhost:8080/users/변수입력 이런 식으로 위치 뒤에 {/변수}를 통해 전달할 수 있다. 주의사항 null / 공백 등이 있는 parameter에는 적용하지 않는다. 값에 { . } 이 포함되면, 그 이후 값은 잘리게 된다. @RequestParam Controller에서 parameter를 받을 수 있는 방법 중 하나이다. http://localhost:8080/users..

Spring boot를 통한 REST API구현 - 실습(2)

Spring boot로 간단한 rest api를 구현하여 보자!! Rest api에서 parameter을 전송하고, 이를 확인하기 다시 해당 위치로 들어가서 코드를 조금 수정해 주자. import org.springframework.web.bind.annotation.*; @RestController @RequestMapping("/users") public class UserController { @GetMapping public String getUsers(@RequestParam(value = "page")int page, @RequestParam(value = "limit") int limit){ return "get users was called with page = " + page + " an..

Spring boot를 통한 REST API구현 - 이론(1)

Spring boot로 간단한 rest api를 구현하여 보자!! Spring boot를 통한 REST API의 구현 - 실습(1)에 관한 이론과 내용들에 관한 글이다. 먼저 REST api의 개념은 이곳에 설명해 두었다. 관련 내용 1. Annotation @RestController Spring MVC Controller에서 요청에 대한 응답을 return하기 위해 사용한다. 해당 메소드를 사용하면 Controller에서는 데이터를 반환하게 된다. @Controller + @ResponseBody 해당하는 위치의 view를 반환하는 Controller 요청에 대한 응답을 반환하는 ResponseBody RequestMapping(value = "/users") 이를 사용하여 localhost:8080..