Spring Boot (+ RESTful) 23

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..

RESTful 웹 서비스 구축 - @RestController / MySQL / Swagger-ui

지금까지는 H2 DB를 사용했었는데, 이제는 MySQL DB를 사용한다.설치하고 오자. community -> MySQL 8 버전, workbench 가 포함된 걸로 설치하자. @RestController- Spring MVC는 @RestController 을 사용해서 RESTful 서비스 구축을 지원한다.Spring MVC의 RESTful 서비스에는 일반적으로 다양한 HTTP 메서드 (GET, POST, PUT, DELETE 등)에 해당하고특정 URI (Uniform Resource Identifiers, URI 와 URL 은 같은 개념으로 이해) 에 매핑되는 엔드포인트 생성이 포함된다. @RestController - vs - @Controller- 큰 차이는 없다, 클라이언트의 요청이 오면 처리를 ..

RESTful 웹 서비스 구축 - RESTful API와 마이크로 서비스: Spring Boot로 구현한 SOA 기반 아키텍쳐

RESTful 서비스와 백엔드의 역할백엔드 개발에서는 클라이언트의 요청에 따라 데이터베이스(DB)에 저장된 리소스를 클라이언트에게 전달하는 서비스가 핵심입니다.클라이언트는 다양한 시스템이 될 수 있습니다:모바일 시스템: 안드로이드, iOS 등다른 기술 스택: 파이썬, .NET 등이처럼 서로 다른 시스템에서도 우리가 Spring Boot로 만든 백엔드 서비스를 사용할 수 있습니다. 이 경우 백엔드의 역할은 **View(화면 단)**를 개발하는 것이 아니라, 순수하게 클라이언트 요청을 처리하고 데이터(리소스)를 반환하는 것입니다.백엔드와 View의 분리현재는 Java 백엔드와 함께 Thymeleaf나 JSP 같은 Java 기반의 View를 만들어 화면을 구성하고 있습니다. 그러나 프로젝트가 확장되거나 다른 ..

Spring Boot - # Project 03 - Spring 의 데이터바인딩 / html - form / @RequestParam

리뷰 작성하는 것,그리고 반영되는 것,hibernate가 sql 해주는 것,모두 확인을 마쳤다.하지만 아직도 이해가 잘 안 되는 부분, 조금 애매하게 이해한 부분들을 추가로 더 공부해보겠다.    Review 라는 객체는 id, content, rating, createdAt, book 이라는 멤버를 가지고 있어. book 은 ManyToOne 으로 Book 객체랑 연결이 된것이지만. 그리고 id 는 자동으로 증가하는 상황이야. GeneratedValue. 그런데, 여기서, 리뷰 및 평점 쓰기 부분에서, content랑 rating은 입력하는 것이 form 에 있는데, createdAt 은 내가 구현을 하지 않은 것 같은데 어떻게 된거지? 그리고 book은 자동으로 연결이 되는건가? 리뷰 및 평점 쓰기 ..

Spring Boot - # Project 03 - Bootstrap / @PostMapping

detail.html 을 만들어야 한다. template.html 을 복사붙여넣기 해서 detail.html 로 이름을 변경해주자.기존 template.html 코드는 아래와 같다. MainContentSection 부분을 손보면 되겠다. - 상세보기,- 리뷰목록,- 리뷰 및 평점 쓰기,- 리스트로 돌아가기(root page로 돌아가기) 을 만들자.여기서부터는, html 을 공부해본 적이 없기 때문에 강의에서 알려주는 걸 일단은 따라해보고, chatGPT의 도움을 받아서 이해를 많이 해보고 공부해보려고 한다. 상세보기 ..

Spring Boot - # Project 03 - 웹 버튼 클릭 /

자, 이제 View Details 버튼을 누르면 작동되도록 해보자. home.html 을 확인해보자.1. HTML 기본 구조HTML은 HyperText Markup Language의 약자로, 웹페이지의 구조를 만들 때 사용되는 언어입니다.HTML은 태그로 구성되며, 각 태그는 여는 태그 와 닫는 태그 로 나눠집니다.내용여기서 는 **"division"**의 약자이며, 컨테이너(묶음) 역할을 합니다. 즉, 는 다른 요소들을 그룹화하기 위해 사용됩니다.2. class 속성class는 CSS나 JavaScript에서 특정 요소를 선택하거나 스타일을 적용하기 위해 사용되는 속성입니다.하나의 클래스 이름에 여러 요소를 부여할 수 있고, 하나의 요소에 여러 클래스 이름을 붙일 수도 있습니다.예시:여기서 class=..

Spring Boot - 자동 구성 사용자 정의 / # Project 03 - 1:N (OneToMany) DB/Entity Modeling

application.properties 를 yml 로 바꿔보겠다. properties 대신에 yml 을 쓰면 된다.내부 코드가 자동으로 바뀌는 건 아니라서 yml properties 컨버팅 사이트에서 바꿔서 복붙해주자. @Entity 클래스가 가지고 있는 멤버의 변수 이름이 table 열의 이름으로 바뀔 때, 카멜 케이스 표기법에서 스네이크 케이스 표기법으로 자동으로 바뀌는 설정이 되어 있다고 했었다.그런데, 그냥 @Entity 클래스의 멤버의 변수 이름을 그대로 table 열의 이름으로 사용하고 싶다면, 간단하게 설정을 추가해주면 된다.yml 파일에서는 저렇게 추가하면 된다.만약 properties 파일이었다면,spring.jpa.hibernate.naming.physical-strategy=org..

Spring Boot - Maven/Gradle을 사용한 종속성 관리

Maven과 Gradle은 프로젝트의 종속성(Dependency) 관리를 위해 주로 사용되는 빌드 도구입니다. 종속성은 라이브러리를 의미하며, 개발자가 프로젝트에서 필요로 하는 외부 코드, 즉 다른 개발자나 회사가 만들어 놓은 기능들을 가져와서 사용하는 것입니다.  1. Maven을 사용한 종속성 관리Maven은 XML 기반의 빌드 도구입니다. pom.xml 파일이 프로젝트의 중심입니다.주요 개념pom.xml 파일: Maven 프로젝트의 설정 파일입니다. 프로젝트의 종속성, 플러그인, 빌드 설정 등을 정의합니다.의존성(Dependency): 외부 라이브러리의 선언입니다. Maven은 선언된 라이브러리를 중앙 리포지토리에서 다운로드합니다.중앙 리포지토리(Central Repository): Maven이 사..

Spring Boot - 실습 - #Project 02 (Repository, Service, Controller, View 만들자)

나중에 interface BookRepository 안에직접 메서드를 만들 수도 있다.지금은 기본적으로 JpaRepository에서 제공해주는 메서드를 사용하는 방법만 구현한다.이제 Service layer를 만들 것이다.여기서는 insert, select, update, delete 하는 기능을 만들어보려고 한다. 이 서비스 메서드는 위에서 만든 repository가 필요하다. 그래서 @Autowired 로 가지고 올 수 있다.@Autowired 를 해줘야, 메모리에 올라와있는 EntityManager(); 가 bookRepository 에 자동으로 연결이 된다.그래야지만 bookRepository 라는 인터페이스를 이용해서 EntityManager() 라는 구현체에 있는 메서드를 써가지고 CRUD 를..