spring boot 3

spring boot : entity <-> dto 변환 방법에 대한 고민( MapStruct 에 대해)

개요프로젝트를 진행하며 여러 layer사이에 데이터를 전달할 때, dto, entity 간 변경이 자주 일어나는 상황에 변환하는 코드를 일일이 적어넣는 것이 불편했습니다.   예시로 보면, member  한 명을 생성하는 post api는 다음처럼 작성되어 있었습니다.  @Controller@RequiredArgsConstructorclass MemberController { private final MemberService memberService; @PostMapping() public Member createMember(@RequestBody MemberDto memberDto){ //dto 사용 Member member = memberService.createM..

Backend/spring boot 2024.10.09

spring boot jpa : soft delete 구현 (delete 후 데이터 복원)

데이터를 삭제할 때 DB에서 완전히 삭제되는 방식은 사실 프로젝트를 운영해 나갈 때 좋은 방식이 아니다. 누군가 데이터를 실수로 삭제했을 때 복구하려면 DB에 어떤 방식이든 데이터를 남겨둬야 했다. 그렇기에 데이터를 복구하는 방법을 찾아보니, soft delete라는 방식을 통해 데이터 삭제를 하는 방법이 있었다. soft delete란? 데이터를 삭제할 때 두 가지 방식 중 하나다. hard delete, soft delete가 있다. hard delete : 실제로 db에 delete쿼리를 날려 데이터를 삭제하는 것. soft delete : 실제로 삭제하는 것이 아니라, 테이블에 deleted_check 같은 필드를 추가해서 그 데이터가 삭제처리 되면 삭제가 아니라 deleted_check만 바꿔주..

Backend/spring boot 2023.09.06

spring boot JPA : 페이징(paging)

보통 게시판 화면을 보면 게시글이 특정 개수 단위로만 띄워진다. 모든 게시글을 한눈에 보이도록 제공하지는 않는다. 그렇게 하면 서버 부하도 심할 것이고, 보는 사용자 입장에서도 가시성이 떨어질 것이다. 그래서 특정 단위로 쪼개서 데이터를 페이지 구분을 하는 방법을 사용하는데, 이것을 페이징이라고 이야기한다. DBMS를 이용해 쿼리를 할 때 개수를 나눠서 쿼리하는 페이지네이션 방법은 다 다르다. 예로 mysql은 offset, limit를 사용하면 가능하다. 문제는 이건 DBMS마다 다르기에, 페이지네이션을 하는 다양한 방법들을 하나의 방법으로 통합해서 추상화하여 제공하는 것을 필요로 한다. 이것을 JPA에서는 dialect(방언) 설정을 통해 처리한다. 이 덕에 개발자들은 SQL을 사용하지 않고 API를..

Backend/spring boot 2023.05.25