JavaRush /Java Blog /Random-KO /Spring Boot의 RESTful 서비스에 PostgreSQL 데이터베이스를 추가합니다. 1 부
Artur
레벨 40
Tallinn

Spring Boot의 RESTful 서비스에 PostgreSQL 데이터베이스를 추가합니다. 1 부

Random-KO 그룹에 게시되었습니다
Eleanor Kerry 가 쓴 "REST 개요"라는 기사 시리즈를 정말 즐겼다는 점부터 말씀드리겠습니다 . 다음은 해당 기사에 대한 링크입니다. Spring Boot의 RESTful 서비스에 PostgreSQL 데이터베이스를 추가합니다.  파트 1 - 1일반적으로 나는 자유를 갖고 그들에게 약간을 추가하기로 결정했습니다. 즉, 데이터베이스를 생성하고 이를 이 애플리케이션에 연결하는 방법을 알려줍니다. 어디서부터 시작해야 할까요? 아마도 데이터베이스 자체에서 나온 것 같습니다. 저는 사용자 친화적인 관리 인터페이스가 마음에 들었기 때문에 PostgreSQL을 사용하기로 결정했습니다. 먼저 여기에서 PostgreSQL 설치 프로그램을 다운로드해야 합니다. PostgreSQL 데이터베이스 다운로드 전체 설치 프로세스는 설명하지 않기 때문입니다. OS에 따라 다를 수 있습니다. 하지만 이 과정에서 기본 postgres 역할(계정) 에 대한 관리자 비밀번호를 찾아 두 번 입력해야 합니다. 단순화를 위해 비밀번호를 123 으로 설정했습니다 . 물론 실제 프로젝트에서는 좀 더 복잡한 것을 생각해 내는 것이 필요합니다. Spring Boot의 RESTful 서비스에 PostgreSQL 데이터베이스를 추가합니다.  파트 1 - 2다음으로 설치 프로그램에서 포트를 선택하라는 메시지를 표시하는데 저는 기본값으로 두었습니다. Spring Boot의 RESTful 서비스에 PostgreSQL 데이터베이스를 추가합니다.  파트 1 - 3로케일 도 기본값으로 남겨두었습니다. Spring Boot의 RESTful 서비스에 PostgreSQL 데이터베이스를 추가합니다.  파트 1 - 4설치한 다음 관리자 인터페이스 pgAdmin 을 엽니다 . 이전에 생성한 비밀번호를 입력하라는 팝업 창이 브라우저에 열립니다. Spring Boot의 RESTful 서비스에 PostgreSQL 데이터베이스를 추가합니다.  파트 1 - 5이제 인터페이스 언어를 설정해야 합니다. 이렇게 하려면 pgAdmin 구성 --> 기타 --> 사용자 언어 를 클릭 하고 원하는 언어 --> 저장 을 선택한 후 브라우저 페이지를 다시 로드하세요 . Spring Boot의 RESTful 서비스에 PostgreSQL 데이터베이스를 추가합니다.  파트 1 - 6페이지 왼쪽 상단에서 서버를 클릭하면 “ 서버에 연결 ” 창이 나타납니다 . 비밀번호를 다시 입력하고 매번 입력하지 않도록 비밀번호 저장 상자를 선택하십시오 . Spring Boot의 RESTful 서비스에 PostgreSQL 데이터베이스를 추가합니다.  파트 1 - 7모든 데이터베이스에 대해 관리자 역할을 계속 사용할 수 있지만 이를 사용하는 데이터베이스와 프로그램이 많을 수 있으므로 새 역할을 만드는 것이 더 좋습니다. 이렇게 하려면 왼쪽 상단에서 PostgreSQL 12 --> 로그인/그룹 역할 RMB --> 생성 --> 로그인/그룹 역할을 Spring Boot의 RESTful 서비스에 PostgreSQL 데이터베이스를 추가합니다.  파트 1 - 8 클릭합니다 . 팝업 창의 " 일반 " 탭에서 다음을 입력합니다. 역할의 이름. 저는 역할 이름을 root 로 지정했습니다 . Spring Boot의 RESTful 서비스에 PostgreSQL 데이터베이스를 추가합니다.  파트 1 - 9" 정의 " 탭에서 새 비밀번호를 생성합니다. 혼동하지 않도록 123을 남겨 두었습니다. Spring Boot의 RESTful 서비스에 PostgreSQL 데이터베이스를 추가합니다.  파트 1 - 10권한 ” 탭으로 이동하여 필요한 항목을 모두 표시하세요. 모든 항목을 " YES " 로 설정했습니다 . " 저장 "을 클릭하면 Spring Boot의 RESTful 서비스에 PostgreSQL 데이터베이스를 추가합니다.  파트 1 - 11데이터베이스 생성이 진행됩니다. "데이터베이스"를 마우스 오른쪽 버튼으로 클릭 --> 생성 --> 데이터베이스 Spring Boot의 RESTful 서비스에 PostgreSQL 데이터베이스를 추가합니다.  파트 1 - 12 " 일반 " 탭에서 데이터베이스 이름을 생성합니다. 예를 들어 고객이라고 가정해 보겠습니다 . 이전 단계에서 생성한 root 에 소유자를 할당합니다 . Spring Boot의 RESTful 서비스에 PostgreSQL 데이터베이스를 추가합니다.  파트 1 - 13"에정의 » 인코딩이 UTF8 로 설정되어 있는지 확인하세요 . “ 저장 ”을 클릭하세요. 그게 다입니다. 데이터베이스가 생성되었습니다(현재는 비어 있음). Spring Boot의 RESTful 서비스에 PostgreSQL 데이터베이스를 추가합니다.  파트 1 - 14이 시점에서 pgAdmin으로 끝날 수 있습니다. 왜냐하면... 우리는 프로그래밍 방식으로 테이블을 생성할 것이지만 만일을 대비하여 수동으로 테이블을 생성하는 방법을 보여 드리겠습니다. 고객 --> 스키마 --> 공개 트리를 확장합니다 . 테이블 --> 생성 --> 테이블을 마우스 오른쪽 버튼으로 클릭합니다 . Spring Boot의 RESTful 서비스에 PostgreSQL 데이터베이스를 추가합니다.  파트 1 - 15팝업 창이 열립니다. " 일반 " 탭에서 테이블에 이름(예: test_table) 을 할당 하고 루트를 소유자로 할당합니다 . Spring Boot의 RESTful 서비스에 PostgreSQL 데이터베이스를 추가합니다.  파트 1 - 16' 열 ' 탭으로 이동하여 ' + '를 클릭하여 새 열을 만듭니다. 이름 " id "와 데이터 유형 bigserial 을 입력합니다 . 이는 Java의 Long 유형과 동일 하지만 자동 증가 기능이 있습니다(새 레코드를 추가하면 id가 자동으로 1씩 증가합니다). NULL이 아닌 것을 " Yes "로 표시하고 기본 키도 " Yes "입니다. Spring Boot의 RESTful 서비스에 PostgreSQL 데이터베이스를 추가합니다.  파트 1 - 17같은 방법으로 " name ", " email " 및 " phone " 열을 만듭니다 . 데이터 유형 문자 가변을 선택합니다. 이는 문자열 유형 에 해당 하지만 최대 길이를 설정할 수 있습니다. 전체 이름을 입력할 수 있도록 최대 이름 길이를 200 자로 설정했습니다. 한 열에. 최대 이메일 길이를 254 자로 설정했습니다 . 이메일의 최대 길이가 이렇게 긴 이유는 여기에서 확인할 수 있습니다 . 전화번호는 20 자 정도면 충분합니다. 전화번호에 대한 약간: 전화번호에 대한 프로그래머의 오해 (Habr) 이 데이터를 필수로 지정하려면 모든 열에서 NULL이 아닌 항목을 " 예 "로 표시합니다. 저장 ”을 클릭하세요. 이제 테이블이 생성되었습니다. Spring Boot의 RESTful 서비스에 PostgreSQL 데이터베이스를 추가합니다.  파트 1 - 18테스트 테이블을 삭제하려면 (트리에서) 해당 테이블을 마우스 오른쪽 버튼으로 클릭하고 " 삭제 "하십시오. 프로그램에서 테이블을 생성하므로 더 이상 필요하지 않습니다. pgAdmin을 닫고 프로그램으로 이동하세요. 우리 프로젝트로 IDEA를 열어 보겠습니다. 인터페이스 오른쪽 열에서 데이터베이스를 클릭하고 " + "를 클릭하여 데이터베이스를 추가합니다. 다음 데이터 소스 --> PostgreSQL . Spring Boot의 RESTful 서비스에 PostgreSQL 데이터베이스를 추가합니다.  파트 1 - 19팝업 창에서 사용자 필드에 이전에 생성한 루트 역할 과 비밀번호를 입력합니다.비밀번호 필드 에 123이 있습니다 . 데이터베이스 필드 에는 고객 데이터베이스 의 이름을 씁니다 . 연결 테스트 버튼을 누르고 그 아래에 녹색 확인 표시가 있으면 모든 것이 정상이며 확인 버튼을 누릅니다 . Spring Boot의 RESTful 서비스에 PostgreSQL 데이터베이스를 추가합니다.  파트 1 - 20그게 다입니다. 데이터베이스에 연결했습니다. 이제 pom.xml 파일로 이동하여 종속성을 추가해 보겠습니다. ORM 데이터베이스로 작업하려면 다음을 수행하십시오 .
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
REST 컨트롤러를 생성하려면:
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>
Tomcat 서버의 경우:
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
</dependency>
PostgreSQL의 경우:
<dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <version>42.2.10</version>
</dependency>
이제 pom.xml을 정리했으므로 리소스 폴더로 이동하여 다음과 같이 application.properties 파일을 작성해 보겠습니다.
spring.datasource.url=jdbc:postgresql://localhost:5432/customers
spring.datasource.username=root
spring.datasource.password=123

spring.datasource.driver-class-name=org.postgresql.Driver
spring.jpa.database=postgresql
spring.jpa.database-platform=org.hibernate.dialect.PostgreSQL10Dialect
여기에서 우리는 데이터베이스의 URL을 입력하고, 이에 대한 로그인과 비밀번호를 제공하고, PostgreSQL용 드라이버를 등록하고, PostgreSQL 데이터 유형을 사용할 것임을 표시하고, Hibernate용 방언을 지정했습니다. 다음으로, 동일한 리소스 폴더에 데이터베이스 라는 새 디렉터리를 생성해 보겠습니다 . 이 디렉터리에 initDB.sqlpopulateDB.sql 이라는 두 개의 파일을 생성합니다 . 첫 번째 사람은 테이블 생성을 담당하고 두 번째 사람은 처음에 테이블을 채우는 일을 담당합니다. initDB.sql을 열고 상단에 SQL 언어가 구성되지 않았다는 녹색 막대가 표시되는 것을 확인하세요 . 이는 우리 프로젝트에 대해 SQL 언어를 선택하지 않았음을 의미합니다(그리고 그 중 여러 가지가 있습니다). 비문 Change 방언을... 에서 동일한 스트립의 오른쪽을 클릭합니다 . 팝업 창에서 Project SQL Dialect를 클릭 하고 데이터베이스가 PostgreSQL 이므로 동일한 이름의 방언을 선택합니다. 확인을 클릭합니다 . .sqlSpring Boot의 RESTful 서비스에 PostgreSQL 데이터베이스를 추가합니다.  파트 1 - 21 파일을 작성하는 작업으로 넘어갑니다 . 먼저 initDB.sql 파일을 채워보겠습니다 .
CREATE TABLE IF NOT EXISTS clients
(
    id    BIGSERIAL PRIMARY KEY ,
    name  VARCHAR(200) NOT NULL ,
    email VARCHAR(254) NOT NULL ,
    phone VARCHAR(20)  NOT NULL
);
파일을 작성한 후 클라이언트 이외의 일부 단어가 흰색 글꼴로 작성되어 있는 경우 텍스트 내부를 마우스 오른쪽 버튼으로 클릭하고 Change Dialect --> PostgreSQL을 다시 선택합니다 . 이미 이해하셨겠지만 이는 테스트 테이블을 수동으로 생성할 때 입력한 데이터와 동일합니다. 여기에서는 SQL 언어의 PostgreSQL 방언으로 형식이 지정됩니다. 이제 populateDB.sql 파일을 채워보겠습니다 .
INSERT INTO clients VALUES
(1, 'Vassily Petrov', 'vpetrov@jr.com', '+7 (191) 322-22-33)'),
(2, 'Pjotr Vasechkin', 'pvasechkin@jr.com', '+7 (191) 223-33-22)');
클라이언트 테이블 의 이름이 빨간색 글자로 적혀 있으면 괜찮습니다. 요점은 우리가 아직 이 테이블을 만들지 않았고 IDEA가 이를 인식하지 못한다는 것입니다. 테이블을 생성하고 채우려면 application.properties 파일로 돌아가서 다음 세 줄을 추가해야 합니다.
spring.datasource.initialization-mode=ALWAYS
spring.datasource.schema=classpath*:database/initDB.sql
spring.datasource.data=classpath*:database/populateDB.sql
이 줄에서는 프로그래밍 방식으로 데이터베이스를 초기화하고 이를 위해 어떤 파일을 사용해야 하는지 표시하려고 한다고 말합니다. 다음으로 애플리케이션의 기본 메소드로 이동하여 실행합니다 . 그런 다음 pgAdmin --> 서버 --> PostgreSQL 12 --> 데이터베이스 --> 고객 --> 스키마 --> public 으로 이동하여 " Tables ", " Update "를 마우스 오른쪽 버튼으로 클릭하십시오. 모든 것이 잘 진행되면 우리가 만든 클라이언트 테이블이 표시됩니다 . 그런 다음 application.properties 파일 로 돌아가서 해당 행을 주석 처리하십시오.
spring.datasource.data=classpath*:database/populateDB.sql
아래:
spring.datasource.url=jdbc:postgresql://localhost:5432/customers
spring.datasource.username=root
spring.datasource.password=123

spring.datasource.driver-class-name=org.postgresql.Driver
spring.jpa.database=postgresql
spring.jpa.database-platform=org.hibernate.dialect.PostgreSQL10Dialect

spring.datasource.initialization-mode=ALWAYS
spring.datasource.schema=classpath*:database/initDB.sql
#spring.datasource.data=classpath*:database/populateDB.sql
이렇게 하지 않으면 다음에 프로그램을 실행할 때 다음 오류가 발생합니다: org.postgresql.util.PSQLException: ERROR: A 중복 키 값이 고유 제약 조건 "clients_pkey" 를 위반합니다 . 이는 테이블에 ID 12 가 있는 필드를 이미 입력했기 때문에 발생합니다 (첫 번째 실행 중에도). 우리가 만든 테이블에서 id 필드는 Java의 Long 유형 에 해당하는 bigserial 로 지정됩니다 . 그러나 우리 프로그램에서 이 필드의 유형은 Integer 입니다 . Integer보다 범위가 넓기 때문에 Long(BIGSERIAL)을 사용하는 방법을 보여 주기로 했습니다. 사실 테이블에서 기본 키로 지정된 필드는 사용자 ID를 저장할 뿐만 아니라 다양한 데이터의 인덱스를 저장하는 데에도 사용할 수 있으며 이러한 레코드의 수가 최대 정수 값을 초과할 수 있습니다. 예를 들어, 프로그램이 매초 몇 가지 측정을 수행하고 데이터를 테이블에 기록한다고 가정해 보겠습니다. Long 데이터 유형을 사용하도록 클래스를 다시 작성하려면 id 필드 를 사용하는 모든 클래스와 메소드에서 유형을 Integer에서 Long으로 변경해야 합니다 . 이 프로그램은 원래 작성자가 id Integer 유형으로 작성했기 때문에 이 작업을 수행하지 않을 것입니다. 이는 이것이 어느 정도 의미가 있음을 의미합니다. 계속하려면 데이터베이스에서 생성한 클라이언트 테이블을 다시 한 번 제거해 보겠습니다 . 이제 수동이 아닌 프로그래밍 방식으로 수행해 보겠습니다. 이렇게 하려면 initDB.sql 파일의 코드를 주석 처리 하고 한 줄을 추가합니다.
-- CREATE TABLE IF NOT EXISTS clients
-- (
--     id    BIGSERIAL PRIMARY KEY ,
--     name  VARCHAR(200) NOT NULL ,
--     email VARCHAR(254) NOT NULL ,
--     phone VARCHAR(20)  NOT NULL
-- );
DROP TABLE IF EXISTS clients
프로그램을 실행하고 pgAdmin 으로 이동하여 " Tables "( 고객 데이터베이스 에서 ) -> " Update "를 마우스 오른쪽 버튼으로 클릭하면 테이블이 사라진 것을 볼 수 있습니다. 주의! 이 명령을 사용할 때는 주의하세요. 그렇지 않으면 테이블에 있는 모든 데이터가 손실될 위험이 있습니다! initDB.sql 파일 로 돌아가서 다음과 같이 다시 작성해 보겠습니다.
CREATE TABLE IF NOT EXISTS clients
(
    id    SERIAL PRIMARY KEY ,
    name  VARCHAR(200) NOT NULL ,
    email VARCHAR(254) NOT NULL ,
    phone VARCHAR(50)  NOT NULL
);
여기서는 id 유형을 SERIAL 로 변경했습니다 . 이는 프로그램의 id 필드 에 사용하는 Integer 유형과 일치합니다. 또한, 작성 시 공백과 특수문자(괄호, 대시 등)를 자유롭게 사용할 수 있도록 전화 필드의 최대 길이를 늘렸습니다. 전화번호의 최대 자릿수는 현재 18자리입니다(내 기억이 정확하다면). 확실하게 하기 위해 크기를 50자로 설정했습니다. application.properties 파일로 이동하여 다음 줄의 주석 처리를 제거해 보겠습니다.
spring.datasource.data=classpath*:database/populateDB.sql
프로그램을 실행하고 pgAdmin으로 이동하여 테이블이 생성되었는지 확인한 후 이 줄을 다시 주석 처리해 보겠습니다.
#spring.datasource.data=classpath*:database/populateDB.sql
아마도 여기서 기사의 첫 번째 부분을 마치게 될 것입니다. 마음에 드셨으면 좋겠습니다. 댓글을 작성해 주세요(마음에 들지 않더라도). 2부에서는 클래스가 실제 데이터베이스에서 작동할 수 있도록 다시 작성하겠습니다. 계속: Spring Boot의 RESTful 서비스에 PostgreSQL 데이터베이스를 추가합니다. 2부 UPD 사진과 텍스트 서식을 수정해 주신 중재자에게 감사드립니다!
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION