백엔드/Spring Boot 32

JPQL 예제 실습 - @Query

◉ @Query ▪︎ JPA에서 직접 쿼리를 작성할 수 있게 해주는 애너테이션 ▪︎ JPA가 쿼리를 자동으로 생성해주지만, 상황에 따라 직접 쿼리를 작성할 필요가 생기기도 함 - 이럴 경우를 대비해, JPA에서 직접 쿼리를 작성할 수 있는 방법에 대해 알아보자 ◉ JPA에서 직접 쿼리 작성하는 방법 1. JPQL로 작성 2. 일반 SQL로 작성 ▪︎ JPQL : JPA의 일부분으로 정의된 플랫폼 독립적인 객체지향 쿼리 언어 일반 SQL : 데이터베이스를 보고 작성 / JPQL : 엔티티 클래스를 보고 작성 ▪︎ JPQL과 SQL 모두 직접 쿼리를 작성하는 방법은 동일하게 @Query 어노테이션 이용 - @Query 어노테이션의 nativeQuery 속성 이용하여 JPQL로 작성할지, SQL로 작성할지 결..

모던 웹 애플리케이션 개발 - 3. JPA를 이용한 데이터베이스 생성 및 접근 (2)

6. 스프링 데이터 리포지터리에 쿼리 정의 - 쿼리 접두사 ( 예 : findBy )로 시작하고, 그 다음 쿼리에 이용할 엔티티 클래스 필드가 나와야 함 ▪︎ CarRepository 인터페이스 생성 ① 단일 조건으로 검색 public interface CarRepository extends CrudRepository{ // * // 단, PK 데이터 타입은 wrapper 클래스명으로 넘겨주어야 함 // ( long이 아닌 Long ) // * JPA에서는 일반적인 검색은 직접 구현하지 않음. 여기서는 선언만 함. // * 스프링 데이터 리포지토리에 다음 쿼리 정의 // 1. 단일 조건으로 검색 // 브랜드로 자동차 검색 List findByBrand(Str..

모던 웹 애플리케이션 개발 - 3. JPA를 이용한 데이터베이스 생성 및 접근 (1)

◉ 엔티티 클래스 생성 ▪︎ 엔티티 클래스 - JPA의 @Entity 어노테이션을 사용하는 자바 클래스 1. JPA와 H2 데이터베이스를 이용하기 위해 pom.xml 파일에 다음의 의존성 추가해야 함 - 라이브러리 추가 시, Gradle과 같이 업데이트 해주어야 함 ① pom.xml에서 오른쪽 클릭 - Maven - Update Project 클릭 ② 업데이트할 프로젝트 선택 : 현재 프로젝트 선택 2. domain 패키지에 Car 클래스 생성 @Entity public class Car { @Id @GeneratedValue(strategy = GenerationType.AUTO) // DB 종류에 따라 JPA가 기본키를 자동으로 생성함 private long id; private String bran..

모던 웹 애플리케이션 개발 - 1. 환경과 툴 설정

◉ IDE 특징 - IntelliJ : 스프링 이니셜라이저 이용(spring.io)해서 프로젝트 생성 후. import - STS : 스프링 이니셜라이저 기능 내장되어 있음 - Apache Maven 소프트웨어 개발 프로세스를 간소화하는 소프트웨어 프로젝트 관리 툴이며, 개발 프로세스를 통합하는 기능 제공 ◉ 스프링 이니셜라이저 활용해 maven project 생성 1. 프로젝트 만들기 • Packaging name = Group명.Artifact명 • JSP : War 사용 권장 타임리프 : Jar 사용 권장 • 의존성 추가 - Spring Web / Lombok / Spring Boot Dev Tools • Generate - 압축파일 생성 • 압축파일 압축 푼 후, app/java 아래로 옮기기 2..

6. 블로그 기획하고 API 만들기 흐름 요약

1. 데이터베이스에서 테이블 구조와 매핑될 엔티티 구성 - src/main/java/domain → Article.java - @Entity 애너테이션 사용 2. 레포지터리 생성 - src/main/java/repository → BlogRepository.java - 인터페이스로, JpaRepository 상속받아 JPA에서 제공하는 메서드 이용 - 상속 받을 때, 인수로 지정해야 함 3. 글 작성 API 구현 1) 컨트롤러로부터 서비스 계층에서 요청받을 객체 생성 - src/main/java/dto → AddArticleRequest.java 2) 서비스 - src/main/java/service → BlogService.java - save() 메서드 추가 •..

Maven Project를 Gradle Project로 변경하기

1. Maven Project 폴더를 원하는 경로(/app/spring)에 위치시키기 2. 외부 파일인 Maven Project를 import하기 ① 이클립스의 상단 File - Import - Existing Maven Projects 선택 ② Browse 클릭 - 다운로드된 폴더를 찾아 경로 지정 후, Finish 클릭 ③ Package Explorer 창에서 확인 가능 → Maven Project의 설정 파일 : pom.xml 3. Gradle 설치 ( 맥북 ) ① 터미널창 이용해 자동으로 다운로드 받기 brew install gradle ② 설치 완료가 되면, 다운로드 받은 gradle 버전 확인 gradle -v ③ init 명령어를 이용해 gradle 초기화시킴 gradle init • mav..

7. 블로그 화면 구성하기 (5) - 수정 / 생성 기능 추가

5. 수정 / 생성 뷰 컨트롤러 작성하기 - 보통 블로그 글 수정과 생성은 같은 화면에서 진행됨 - 수정 / 생성에 따라 버튼 다르고, 기존 값의 유무가 다름 → URL의 설계와 흐름 또한 다름 ❶ 이미 생성한 글을 수정할 때 /new-article?id=123 123 id를 가진 사용자 -------------------------> 뷰 컨트롤러 -------------------------> 뷰 ( id가 123인 글 수정 ) 엔티티 조회 후 모델에 추가 ❷ 새 글을 생성할 때 /new-article 사용자 -------------------------> 뷰 컨트롤러 -------------------------> 뷰 (생성) • 쿼리 파라미터 : HTTP 요청에서 URL의 끝에 '?'로 시작하는 키..

7. 블로그 화면 구성하기 (4) - 삭제 기능 추가

◎ 글 상세 화면에서 [ 삭제 ] 버튼 클릭 시, 글을 삭제해보자. 삭제 API로 요청을 보낼 코드를 작성하고 테스트해보자 1. 삭제 기능 코드 작성 - 삭제 코드는 자바스크립트로 작성 ▪︎ article.js ( src/main/resources/static 디렉터리) // * 삭제 버튼이 눌러졌으면 그 삭제 버튼의 이벤트 등록 // HTML에서 id를 'delete-btn'으로 설정한 엘리멘트를 찾아 상수로 선언 const deleteButton = document.getElementById('delete-btn') // deleteButton이 있는 경우 if (deleteButton) { // 그 엘리멘트에 클릭 이벤트를 발생하면 fetch() 메서드를 통해 // '/api/articles/DEL..

Oracle Database 연결 시 환경설정 및 확인 방법

1. build.gradle에서 JDBC 드라이버를 Oracle로 변경 후, 반드시 Refresh Gradle 실행 ▪︎ 사용할 데이터베이스 JDBC 드라이버만 주석 풀고 사용 ▪︎ 전체 build.gradle 코드 - 무슨 기능을 하는지 알아야 함 - Snippets 등록해놓음 ( SpringBoot 폴더에 '최종 build.gradle 정리' 이름으로 등록 ) plugins { id 'java' id 'org.springframework.boot' version '3.1.2' id 'io.spring.dependency-management' version '1.1.2' } group 'org.choongang' version '1.0' sourceCompatibility = '17' repositor..

7. 블로그 화면 구성하기 (3) - 블로그 글 구현하기

◎ 블로그 화면 상의 [ 보러 가기 ] 버튼을 누르면, 블로그 글이 보이도록 블로그 글 뷰를 구현해보자. 1. 엔티티에 생성, 수정 시간 추가하기 1) 글이 언제 생성되고 수정되었는지 뷰에서 확인 가능하게 코드 추가 ▪︎ Article.java에 아래의 필드 추가 @CreatedDate // 엔티티가 생성될 때 생성 시간 저장 @Column(name = "created_at") private LocalDateTime createdAt; @LastModifiedDate // 엔티티가 수정될 때 수정 시간 저장 @Column(name = "updated_at") private LocalDateTime updatedAt; • @CreatedDate : 엔티티가 생성될 때 생성시간을 'created_at' 컬럼..