Docker 에서 설치
1. docker 버전 확인
docker --version
Bash
복사
2. docker run - postgresql install
docker run --name postgres17 \
-e POSTGRES_USER=admin \
-e POSTGRES_PASSWORD=admin1234 \
-e POSTGRES_DB=testdb \
-p 5432:5432 \
-d postgres:17
Shell
복사
•
-name postgres17: 컨테이너 이름
•
e POSTGRES_USER=admin: 사용자 이름
•
e POSTGRES_PASSWORD=admin1234: 비밀번호
•
e POSTGRES_DB=testdb: 초기 생성할 DB
•
p 5432:5432: 포트 매핑
•
d postgres:17: PostgreSQL 17 버전 이미지
로컬 환경에서 설치 + SpringBoot Setting
•
PostgreSQL 설치 후 접속 (터미널)
psql -d postgres -h localhost
Shell
복사
•
데이터베이스 및 유저 / Role 생성
CREATE USER 사용자이름 WITH PASSWORD '비밀번호';
SQL
복사
•
권한 부여
# 데이터베이스 생성 권한
ALTER USER myuser CREATEDB;
# 로그인 허용 (기본은 허용됨)
ALTER ROLE myuser LOGIN;
# 슈퍼유저 권한 (모든 권한)
⚠️ 보안상 일반 사용자에게는 권장하지 않습니다.
ALTER USER myuser WITH SUPERUSER;
# 특정 데이터베이스에 권한 부여
CREATE DATABASE mydb OWNER myuser;
# 기존 데이터베이스 접근 권한 부여
GRANT CONNECT ON DATABASE mydb TO myuser;
# 테이블/스키마 사용 권한 설정
GRANT USAGE ON SCHEMA public TO myuser;
# 모든 테이블 SELECT/INSERT/UPDATE/DELETE 권한
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO myuser;
# 앞으로 생길 테이블에 대해서도 자동 권한 부여
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO myuser;
# 권한 확인
\du
# 특정 사용자 권한 확인
\du myuser
SQL
복사
•
build.gradle 설정
dependencies {
// WebFlux 스타터
implementation 'org.springframework.boot:spring-boot-starter-webflux'
// R2DBC를 사용할 경우
implementation 'org.springframework.boot:spring-boot-starter-data-r2dbc'
// R2DBC PostgreSQL 드라이버 (PostgreSQL 17 호환 가능)
implementation 'org.postgresql:r2dbc-postgresql:1.0.7.RELEASE'
// 기존 JUnit 설정
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
// 테스트
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'io.projectreactor:reactor-test'
}
Shell
복사
•
application-properties
spring.r2dbc.url=r2dbc:postgresql://localhost:5432/testdb
spring.r2dbc.username=사용자이름
spring.r2dbc.password=비밀번호입력
spring.sql.init.mode=never
spring.sql.init.platform=postgres
logging.level.org.springframework.r2dbc=DEBUG
Shell
복사
SpringBoot 폴더 구조 및 코드 내용
.
├── HELP.md
├── README.md
├── build
│ ├── classes
│ │ └── java
│ │ └── main
│ │ └── org
│ │ └── com
│ │ └── dungeonpoc
│ │ └── DungeonPocApplication.class
│ ├── generated
│ │ └── sources
│ │ ├── annotationProcessor
│ │ │ └── java
│ │ │ └── main
│ │ └── headers
│ │ └── java
│ │ └── main
│ ├── resources
│ │ └── main
│ │ └── application.properties
│ └── tmp
│ └── compileJava
│ └── previous-compilation-data.bin
├── build.gradle
├── gradle
│ └── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── out
│ └── production
│ ├── classes
│ │ └── org
│ │ └── com
│ │ └── dungeonpoc
│ │ ├── DungeonPocApplication.class
│ │ ├── controller
│ │ │ └── BookController.class
│ │ ├── domain
│ │ │ └── Book.class
│ │ ├── repository
│ │ │ └── BookRepository.class
│ │ └── service
│ │ └── BookService.class
│ └── resources
│ ├── db
│ │ └── migration
│ │ └── schema.sql
│ └── application.properties
├── settings.gradle
└── src
├── main
│ ├── generated
│ ├── java
│ │ └── org
│ │ └── com
│ │ └── dungeonpoc
│ │ ├── DungeonPocApplication.java
│ │ ├── controller
│ │ │ └── BookController.java
│ │ ├── domain
│ │ │ └── Book.java
│ │ ├── repository
│ │ │ └── BookRepository.java
│ │ └── service
│ │ └── BookService.java
│ └── resources
│ ├── db
│ │ └── migration
│ │ └── schema.sql
│ └── application.properties
└── test
└── java
└── org
└── com
└── dungeonpoc
└── DungeonPocApplicationTests.java
Shell
복사
•
controller
package org.com.dungeonpoc.domain;
import lombok.Getter;
import lombok.Setter;
import org.springframework.data.annotation.Id;
import org.springframework.data.relational.core.mapping.Table;
@Table("books")
@Getter
@Setter
public class Book {
@Id
private Long id;
private String title;
private String author;
// Constructors, Getters, Setters
public Book() {}
public Book(String title, String author) {
this.title = title;
this.author = author;
}
}
Java
복사
•
domain
package org.com.dungeonpoc.domain;
import lombok.Getter;
import lombok.Setter;
import org.springframework.data.annotation.Id;
import org.springframework.data.relational.core.mapping.Table;
@Table("books")
@Getter
@Setter
public class Book {
@Id
private Long id;
private String title;
private String author;
// Constructors, Getters, Setters
public Book() {}
public Book(String title, String author) {
this.title = title;
this.author = author;
}
}
Java
복사
•
repository
package org.com.dungeonpoc.repository;
import org.com.dungeonpoc.domain.Book;
import org.springframework.data.repository.reactive.ReactiveCrudRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface BookRepository extends ReactiveCrudRepository<Book, Long> {
}
Java
복사
•
service
package org.com.dungeonpoc.service;
import lombok.RequiredArgsConstructor;
import org.com.dungeonpoc.domain.Book;
import org.com.dungeonpoc.repository.BookRepository;
import org.springframework.stereotype.Service;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
@Service
@RequiredArgsConstructor
public class BookService {
private final BookRepository bookRepository;
public Flux<Book> getAll() {
return bookRepository.findAll();
}
public Mono<Book> getById(Long id) {
return bookRepository.findById(id);
}
public Mono<Book> create(Book book) {
return bookRepository.save(book);
}
public Mono<Book> update(Long id, Book book) {
return bookRepository.findById(id)
.flatMap(existing -> {
existing.setTitle(book.getTitle());
existing.setAuthor(book.getAuthor());
return bookRepository.save(existing);
});
}
public Mono<Void> delete(Long id) {
return bookRepository.deleteById(id);
}
}
Java
복사
•
테스트
•
터미널에서 테이블 내역 확인
psql (PostgreSQL) 17.5 (Homebrew)
~ psql -U admin -d testdb ✔
psql (17.5 (Homebrew))
도움말을 보려면 "help"를 입력하십시오.
testdb=# show tables;
ERROR: unrecognized configuration parameter "tables"
testdb=# select * from books;
id | title | author
----+--------------+-------------------
1 | 테스트 | 민성
4 | 테스트4 | 민성4
3 | 테스트2 수정 | 민성2 수정합니다.
(3개 행)
Shell
복사
PgAdmin 활용 (PostgreSQL 설치 이후 - 필자는 Mac 기준으로 진행)
•
윈도우 설치링크: https://www.postgresql.org/ftp/pgadmin/pgadmin4/v9.6/windows/
•
윈도우 설치 관련 참고링크 - 두 링크 참고해서 진행하면 될 듯
•
설치 진행
•
접속 후 확인
•
단축키 변경 (Preference > Keyboard > Query Tool)
◦
수정 후 디스크 버튼(저장) 클릭