java 53

RESTful 웹 서비스 구축 - # Project 04 - 이미지 업로드 (5)

질문 8. 개발한 프로그램에서 파일 이미지 업로드 REST API 가 @PostMapping("/{book_id}/{type}/upload") 이런식으로 했었어. 그렇다보니, 이미지 파일을 업로드할 때, book_id 가 만약에 1, 2, 3, 4 이렇게 여러 가지의 이미지를 대량으로 업로드하는 건 불가능해. 그냥 book_id 가 1에 해당하는 이미지들만 업로드가 가능하지. 그리고 거기서 여러가지의 이미지를 업로드할 수는 있긴 하지만, type 이 동일해야 해. type 을 입력해야 하다보니, type 은 1, 2, 3 밖에 없지만 1, 2, 3 을 동시에 업로드할 수가 없는거야. 당장 어떤 코드를 알고 싶다는건 아니지만, 내가 궁금한 건, type 이 1, 2, 3 이든 상관없고 book_id 도 1..

RESTful 웹 서비스 구축 - # Project 04 - 이미지 업로드 (4)

질문 4. resources 디렉토리에서, static, template 등의 폴더가 있는데, 거기서 새로운 디렉토리를 만들게 되면, static.uploads 이런식으로 표시가 되던데, 원래라면 디렉토리 아래에 새로 만들어진 디렉토리가 표시가 되어야 하는데, 왜 resources 디렉토리 아래에 있는 디렉토리들은 그 안에 새로운 디렉토리를 만들면 왜 그렇게 표시를 해주는건가?예를 들어서, src/main 에서 util 이라는 디렉토리를 만든다고 하면, .util 로 표시되는게 아니라 단독으로 디렉토리 아래에 표시가 되잖아. 왜 차이가 있는거지? 좋은 질문이에요! 이는 **IDE(통합 개발 환경)**와 Spring Boot의 프로젝트 구조에서 resources 디렉토리가 특별한 역할을 하기 때문입니다. ..

RESTful 웹 서비스 구축 - # Project 04 - 이미지 업로드 (3)

학습을 하다보면 질문이 참 많다. 그 질문에 스스로 답을 찾아나가는 것만으로도 공부가 많이 된다. 그런데 과거에는 chatGPT가 없었고 그래서 스스로 질문에 답을 찾는데에 굉장히 많은 시간이 들었고, 심지어 끝끝내 찾지 못 하는 경우도 있었다. 그런데 chatGPT가 나오고 나서, 학습하는데에 굉장히 많은 효율이 발생한다. 질문에 답을 찾는데에도 시간이 현격히 감소했고 심지어 답을 찾지 못 하는 경우는 거의 없다고 봐야 한다. chatGPT 유료 버전을 꽤 초기부터 사용해왔던터라 무료 버전은 어떤지 잘 모르겠지만, 유료 버전은 정말 "Awesome!" 그 자체다.여러 가지 분야들이 있겠지만, 개발 공부에 있어서는 정확도도 굉장히 높다는 생각이 든다. chatGPT와 MS의 관계는 굉장히 밀접한 관계이다..

RESTful 웹 서비스 구축 - # Project 04 - 이미지 업로드 (2)

지난 게시글에 작성했던 질문에 대한 답을 기록한다. 질문 1: @PostMapping의 {"multipart/form-data"}에서 {}는 무엇을 의미하나요?{}는 Java에서 배열(array)을 나타내는 문법이에요. consumes는 이 API가 처리할 데이터 형식(MIME 타입)을 배열로 받을 수 있습니다.예시:"application/json": 단일 값 (JSON 형식만 처리){"multipart/form-data"}: 배열 형식으로 하나 이상의 데이터 형식을 처리할 수 있음.여기서는 배열로 지정했기 때문에 확장성을 고려한 것으로 보입니다. 실제로 다른 형식도 추가하려면 배열에 더 넣을 수 있습니다:consumes = {"multipart/form-data", "application/json"}질..

RESTful 웹 서비스 구축 - # Project 04 - 이미지 업로드 (1)

지금까지 Book 이라는 table 만 가지고, GET/POST/PUT/DELETE 를 해볼 수 있는 RESTful을 만들어봤었다.직전 게시글에서 전역 예외 처리에 대해서 공부했고,이제는 Book 이라는 table 말고도 다른 table 도 만들어볼 것이고, 그 table 간의 관계 설정도 해볼 것이다.책과 관련된 이미지를 업로드, 다운로드, 삭제 등을 RESTful API로 만들어볼 것이다. Book 이라는 Entity 를 만들었었다. 이제는 BookImage 라는 Entity 를 만들것이다. (table 이 될 것)책 하나에는 여러개의 책 이미지가 있을 수 있다. 교보문고 같은 책 판매 페이지를 보면, 알 수 있듯이 여러 개의 이미지가 등록되어 있을 수 있다. 그러므로 1:N 의 관계를 맺게 된다.B..

RESTful 웹 서비스 구축 - @ControllerAdvice / @ExceptionHandler

간단한 REST API 를 만들어봤었다.추가적인 REST API 들을 만들어보기 전에, 예외 처리와 관련된 공부를 하고 가자.프로그램 개발과 예외 처리프로그램 개발 과정에서 **예외(Exception)**는 예상치 못한 상황에서 자주 발생합니다. 이러한 예외를 처리하는 방법은 다양합니다:try-catch를 이용한 예외 처리개별 코드 블록에서 발생할 수 있는 예외를 직접 처리합니다.try { // 예외 발생 가능성 있는 코드} catch (Exception ex) { // 예외 처리 코드}예외를 호출한 곳으로 전달 (throws)특정 메서드에서 발생한 예외를 호출한 메서드로 던질 수 있습니다.이를 위해 throws 키워드를 사용합니다. 예외를 직접 처리하지 않고 위임하는 방식입니다.public ..

RESTful 웹 서비스 구축 - @PutMapping / @DeleteMapping

PutMapping 은 수정하기 인데, 왜 CREATED 가 있는것인지,여기서 @Valid 는 @RequestBody 만 @Valid 하는 것인지, 아니면 @PathVariable 까지 포함해서 @Valid 하는 것인지.book.set~~() 을 해서 수정되는 데이터를 교체해줬는데, 왜 book=bookService.save(book); 을 해주는것인지,그리고 save 를 해주게 되면, id 값은 새롭게 부여되는것인지,아니면 id 값은 그대로 있고 @PrePersist 인 createdAt 의 값만 LocalDateTime.now() 를 받아서새롭게 부여되는것인지가 궁금해. 질문에 대한 답변:1. @PutMapping과 HttpStatus.CREATED의 조합:**@PutMapping**은 일반적으로 리..

RESTful 웹 서비스 구축 - @PostMapping / @RequestBody / swagger

entity, repository, service 까지 만들었다.첫번째로 만들어볼 REST API 는, 책 데이터를 저장하는 REST API를 만들어볼 것. 저장은, 기본적으로 POST, @PostMapping 이다. 요청은 /api/books 로 하겠다.요청을 처리하려면 Controller 를 만들어야 한다.@RestController 와 @RequestMapping("/api") 를 붙여준다.@Tag 는 Swagger 에 표시되는 걸 정할 수 있다고 했다. 1. 클래스 선언부@RestController이 클래스가 REST API의 엔드포인트를 제공하는 컨트롤러라는 것을 의미합니다.@Controller와 @ResponseBody가 합쳐진 형태입니다. 반환하는 값은 HTTP 응답의 바디에 직접 들어갑니다..

RESTful 웹 서비스 구축 - @PrePersist / DTO 구분 (Entity, Payload, View)

REST 프로젝트를 MVCS 구조, 3-tier 구조로 만들어보고자 한다. createdAt 같은 경우에는, 우리가 직접 값을 입력하는게 아니라 DB에 데이터가 insert 가 될 때, 날짜는 자동으로 입력이 되도록 하기 위해서 @PrePersist 라는 어노테이션을 붙이면 Book 이라는 객체가 만들어져서 데이터가 DB table 에 들어갈 때 미리 @PrePersist 라는 어노테이션 부분이 실행이 된다. onCreate() 메소드가 실행이 될 것이라, 날짜를 우리가 입력하는게 시스템에서 직접 입력이 될 수 있도록 해주면 된다. protected 라고 했지만, public 이라고 해도 문제는 없다.1. @PrePersist의 의미PrePersist 는 "저장 전에" 라는 뜻을 가진 영어 단어입니다.P..