ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 패스트캠퍼스 챌린지 12일차
    JAVA/Spring 2021. 11. 12. 22:00

    1. Developer Delete(삭제), 트랜잭션 실무 개발

     

    오늘은 DB에 저장된 데이터를 삭제하는 방법과 실무에서의 트랜잭션 개발에 관련하여 학습한다.

    이전에 했던 것과 동일하게 우선 Controller에 developer를 delete하는 메서드를 등록해준다. 삭제를 위한 프로토콜로는 'Delete'가 있다.

     

    dmaker.controller.DMakerController

    @DeleteMapping("/developer/{memberId}")
    public DeveloperDetailDto deleteDeveloper(
    	@PathVariable String memberId
    ){
    	return dMakerService.deleteDeveloper(memberId);
    }

    트랜잭션은 하나는 성공하고 다른 하나는 실패하는 따로 따로 노는 그런 성질이 아닌 무조건 둘이 함께 성공하거나 실패하는 Atomic한 성질이 있음을 배웠었다. 그러한 성질의 구현을 위해 Entity에 새로운 Entity를 정의해준다.

     

    dmaker.dto.RetiredDeveloper

    @Getter
    @Setter
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    @Entity
    @EntityListeners(AuditingEntityListener.class)
    // 개발자 정보를 완전히 삭제하는 것이 아니라 삭제 시 은퇴한 개발자 목록에 더해질 수 있도록
    // 새로운 entity를 정의한다.
    public class RetiredDeveloper {
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        protected Long id;
        
        // 최소한의 정보만 저장될 수 있도록 한다.
        private String memberId;
        private String name;
        
        // 고용 상태에 대한 코드를 정의한다.
        @Enumerated(EnumType.STRING)
        private StatusCode statusCode;
        
        @CreatedDate
        private LocalDateTime createdAt;
        
        @LastModfiedDate
        private LocalDateTime updatedAt;
    }

    위의 RetiredDeveloper entity에 정의된 개발자 고용 상태에 대한 Enum Class를 만들어준다.

     

    dmaker.code.StatusCode

    @Getter
    @AllArgsConstructor
    public enum StatusCode {
        EMPLOYED("고용"),
        RETIRED("퇴직");
        
        private final String description;
    }

    위와 같은 Enum이 entity에 추가되었기 때문에 developer 생성 시 StatusCode를 삽입할 수 있도록 createDeveloper 메서드를 수정해준다.

     

    dmaker.Controller.DMakerService

    @Transactional
        public CreateDeveloper.Response createDeveloper(CreateDeveloper.Request request) {
            validateCreateDeveloperRequest(request);
    
    		// statusCode를 삽입하도록 수정해준다.
            Developer developer = Developer.builder()
                    .developerLevel(request.getDeveloperLevel())
                    .developerSkillType(request.getDeveloperSkillType())
                    .experienceYears(request.getExperienceYears())
                    .memberId(request.getMemberId())
                    .statusCode(StatusCode.EMPLOYED)
                    .name(request.getName())
                    .age(request.getAge())
                    .build();
    
            developerRepository.save(developer);
    
            return CreateDeveloper.Response.fromEntity(developer);
        }

     

     

    본 포스팅은 패스트 캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
    https://bit.ly/3FVdhDa

     

    수강료 100% 환급 챌린지 | 패스트캠퍼스

    딱 5일간 진행되는 환급챌린지로 수강료 100% 환급받으세요! 더 늦기전에 자기계발 막차 탑승!

    fastcampus.co.kr

    댓글

Designed by Tistory.