본문 바로가기

전체 글

(18)
Spring에서 요청값 검증하기 웹툰 등록 API에서 요청값을 받을 때 정상적인 값이 받아졌는지 검증하는 로직이 필요했다. 우선 요청에는 다음과 같은 값들이 있다. comicName:[웹툰이름] genre:[장르] summary:[줄거리] publishDayOfWeek:[연재요일] thumbnailCreateRequests[0].thumbnailType:[썸네일종류] thumbnailCreateRequests[1].thumbnailType:[썸네일종류] thumbnailCreateRequests[0].thumbnailImage:[썸네일파일] thumbnailCreateRequests[1].thumbnailImage:[썸네일파일] 그리고 값들은 다음과 같은 제한을 가진다. comicName : 1~30자, 빈 값이면 안됨 genre : ..
Spring Events로 S3 업로드 문제 해결하기 웹툰 등록 시나리오 우선 웹툰을 등록할 때 시나리오는 다음과 같다. 문제 코드로 나타내면 다음과 같다. @Service @RequiredArgsConstructor public class ComicService { private final ComicRepository comicRepository; private final ThumbnailRepository thumbnailRepository; private final FileStorage fileStorage; @Transactional public void createComic(ComicCreateRequest comicCreateRequest, String loginId) { User user = getUser(loginId); Author auth..
@ModelAttribute의 중첩 프로퍼티 바인딩 프로젝트 중 @ModelAttribute로 바인딩하는 과정에서 생긴 문제가 있어 디버깅을 통해 원인을 파악하고 해결하였다. 문제 @RestController @RequestMapping("/comics") @RequiredArgsConstructor public class ComicController { @PostMapping public ResponseEntity createComic( ModelAttribute @Valid ComicCreateRequest comicCreateRequest ) { comicService.createComic(comicCreateRequest, userAuth.loginId()); return ResponseEntity.ok(null); } } 위와 같이 @ModelA..
도서 주문 관리 서비스 동시성 문제 해결하기 개인적인 생각이 들어갔기 때문에 잘못된 정보가 있을 수 있습니다. 😥 (피드백 환영합니다.) https://github.com/rhdtn311/book-sales-service GitHub - rhdtn311/book-sales-service Contribute to rhdtn311/book-sales-service development by creating an account on GitHub. github.com 현재 프로젝트에는 주문을 할 때 동시성 문제가 있다. @Transactional public Long save(OrderDTO.Req orderDtoReq) { Customer customer = DtoConverter.convertOrderDtoToCustomer(orderDtoReq); ..
타팀 코드리뷰 분석 다른 팀 팀원들의 멘토님은 어떤 코드리뷰를 해주셨을지 궁금하고 많이 도움될 것 같아서 다른 팀의 코드리뷰를 보고 공통적인 것들을 정리해보았다. 1. 자원을 생성했을 때는 201(Created) 상태코드를 사용하는 것이 좋다. 더불어, 201(CreateD) 헤더의 요구사항인 Location 헤더를 충족하는 것도 좋다. → Location : 응답 메시지 본문에 새로 만들어진 리소스 혹은 리소스에 대한 링크를 메시지 본문에 넣어 반환한다. ResponseEntity.created(URI) .body(response) .build(); Spring의 ResponseEntity.create(URI)에 인자로 왜 URI를 받는지 알았다. (헤더에 Location을 알아서 넣어줌) 뿐만아니라 빌더패턴을 적용해서 ..
JPA 게시판 만들기 프로젝트 회고 데브코스 7주차 과제로 JPA를 사용한 간단한 CRUD 게시판을 만들었다. 🎃 목표 REST API DOCS를 사용하여 문서화하기 ✅ 작은 단위로 테스트 코드 작성하기 ✅ 페어프로그래밍 하기 ✅ 🔮 프로젝트를 진행하며 했던 고민 JPA의 엔티티 클래스의 필드는 Primitive Type? Wrapper Class? PK에서는 WrapperClass를 사용한다. PK가 아직 할당되지 않았음을 명시적으로 표현할 수 있다. Hibernate 공식 문서에서 WrapperClass를 사용하는 것을 권장하고 있다. Null의 허용 유무에 따라 결정될 수 있다. ex) Item의 재고 수량 필드 → Null이 필요하지 않고 값을 입력하지 않으면 0으로 지정해도 문제가 없기 때문에 primitive로 할 수 있다. N..
정규화 용어 이상 현상 💡 하나의 테이블에 너무 많은 속성들이 들어갔거나 여러 종류의 종속 관계를 하나의 릴레이션에 표현하는 등 테이블 설계가 잘못된 경우 릴레이션 조작 시 예상치 못한 현상이 발생하는 것을 말한다. 삽입 이상 데이터를 삽입하는 과정에서 필요한 데이터임에도 불구하고 삽입할 수 없거나 NULL을 입력해야 하는 현상 위 테이블에서 만약 학번이 400번인 학생의 데이터를 삽입해야 하는데, 학번이 400번인 학생의 과목코드가 정해지지 않아서 값을 입력할 수 없다면 NULL 값을 입력해야 한다. 하지만 과목 코드는 기본키의 구성 요소이기 때문에 NULL 값을 삽입할 수 없다. 이렇게 데이터 삽입시 예상치 못하는 문제가 발생하는 것을 삽입 이상이라고 한다. 삭제 이상 특정 데이터를 삭제함으로 인해서 삭제하..
데브코스 한 달 차 회고 데브코스가 시작한지 한 달이 넘었다. 한 달동안 느낀점과 좋았던 점, 개선해야 할 점이 많았다. 🌊 한 달 동안 한 것 자바 학습 객체지향적인 콘솔 프로그램 만들기 DB 학습 Spring 학습 Spring Framework를 사용하여 콘솔 프로그램 만들기 독서 객체지향의 사실과 오해 SQL 레벨업 (진행 중) 실전 자바 소프트웨어 개발 (진행 중) 한 달 동안 많다면 많고, 적다면 적은 것들을 배웠다. 적다고 표현한 이유는 내가 게으르지만 않았어도 더 많은 것들을 배울 수 있었는데 가볍게 흘려보낸 시간들이 꽤 많았기 때문이다. (이런 점을 정말 고치고싶다.) 🚀 느낀점 꽤 오랜 시간 프로그래밍 공부를 해왔음에도 불구하고 순수 자바로 하나의 프로그램을 만드는 것은 부끄럽지만 처음 해봤다. 간단한 계산기 구..