ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Spring boot와 Docker Postgresql
    카테고리 없음 2023. 4. 18. 12:31

    Spring boot와 Docker Postgresql

    이번엔 docker와 posrgresql에 대해 알아보겠다. 1. centos 6에 docker를 설치해보자 2. Spring boot와 Docker 3. Spring boot와 Docker Mysql mysql과 소스는 동일하다.
    @SpringBootApplication
    public class SpringBootDockerPostgresqlApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(SpringBootDockerPostgresqlApplication.class, args);
        }
    
        @Autowired
        private AccountRepository repository;
    
        @Bean
        CommandLineRunner runner() {
            return args -> Arrays.asList(
                    new Account(1L,"wonwoo","wonwoo@test.com"),
                    new Account(2L,"kevin","kevin@test.com"),
                    new Account(3L,"mink","mink@test.com")
            ).forEach(repository::save);
        }
    }
    
    Account class
    @Entity
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    public class Account {
    
        @Id
        @GeneratedValue
        private Long id;
    
        private String username;
    
        private String email;
    
    }
    
    AccountController class
    @Slf4j
    @RestController
    public class AccountController {
    
        @Autowired
        private AccountRepository repository;
    
        @RequestMapping(value = "/accounts", method = RequestMethod.GET)
        public ResponseEntity<?> getAccount() {
            List<Account> accounts = repository.findAll();
            log.debug("accounts : {} ", accounts);
            return new ResponseEntity<>(accounts, HttpStatus.OK);
        }
    }
    
    AccountRepository class
    @Repository
    public interface AccountRepository extends JpaRepository<Account, Long> {
    }
    
    따로 설명은 하지 않겠다. mysql과 다른점은 yml 파일과 maven이다. application.yml
    spring:
      jpa:
        hibernate:
          ddl-auto: create
        database-platform: org.hibernate.dialect.PostgreSQLDialect
      datasource:
        url: jdbc:postgresql://${POSTGRES_PORT_5432_TCP_ADDR}:${POSTGRES_PORT_5432_TCP_PORT}/docker
        username: dbuser
        password: dbpassword
        driver-class-name: org.postgresql.Driver
    
    
    <dependency>
        <groupId>org.postgresql</groupId>
        <artifactId>postgresql</artifactId>
        <version>9.4-1200-jdbc4</version>
    </dependency>
    
    일단 postgresq pull 하자
    docker run --name spring-boot-postgres -e POSTGRES_PASSWORD=dbpassword -e POSTGRES_DB=docker -d postgres
    
    latest: Pulling from postgres
    00b8e8227087: Pull complete 
    1ad190f65f04: Pull complete 
    60f2f5fb5bf9: Pull complete 
    2d0c73368a74: Pull complete 
    a786535117f1: Pull complete 
    dd182ad340e4: Pull complete 
    c05a4dbabb61: Pull complete 
    d147dcf8581e: Pull complete 
    358e57fb3884: Pull complete 
    9c4b8b3535ba: Pull complete 
    adf658a6b808: Extracting [==================================================>] 41.23 MB/41.23 MB
    0fc677feeba3: Download complete 
    0dceace87c23: Download complete 
    23b5786d3dce: Download complete 
    9b00a7295803: Download complete 
    f88f356d246d: Download complete 
    d6fb5e6e70f6: Download complete 
    07e6c1333fa3: Download complete 
    6f960967c8bf: Download complete 
    d8bd0657b25f: Already exists 
    a582cd499e0f: Already exists 
    
    위와 같이 이미지를 생성한다.
    docker images
    
    이미지가 잘 있나 보자
    postgres                    latest              6f960967c8bf        5 days ago          264.5 MB
    
    잘있다. 다음으로 메이븐 빌드를 하자!
    mvn clean package docker:build
    
    빌드가 잘 되었다면 docker를 실행시키자
    docker run --name spring-boot-docker-postgresql --link spring-boot-postgres:postgres -p 9000:8080 -d wonwoo/spring-boot-docker-postgresql
    
    로그를 확인하기 위해 아래와 같이 입력하자
    docker logs $CONTAINER_ID 
    
    잘되었다면 브라우저를 열어 확인해보자 http://localhost:8080/accounts 그리고 postgres 클라이언트 연결도 가능하다.
    docker run -it --link spring-boot-postgres:postgres --rm postgres sh -c exec psql -h "$POSTGRES_PORT_5432_TCP_ADDR" -p "$POSTGRES_PORT_5432_TCP_PORT" -U postgres
    
    위와 같이하면 접속도 가능하다.
    postgres=# \\l
    
                                     List of databases
       Name    |  Owner   | Encoding |  Collate   |   Ctype    |   Access privileges   
    -----------+----------+----------+------------+------------+-----------------------
     docker    | postgres | UTF8     | en_US.utf8 | en_US.utf8 | 
     postgres  | postgres | UTF8     | en_US.utf8 | en_US.utf8 | 
     template0 | postgres | UTF8     | en_US.utf8 | en_US.utf8 | =c/postgres          +
               |          |          |            |            | postgres=CTc/postgres
     template1 | postgres | UTF8     | en_US.utf8 | en_US.utf8 | =c/postgres          +
               |          |          |            |            | postgres=CTc/postgres
    (4 rows)
    
    디비 목록이다.
    postgres=# \\connect docker
    
    선택을 해보자
    docker=# \\d
    
    테이블을 보자. account 테이블이 잘 있다.
                     List of relations
     Schema |        Name        |   Type   |  Owner   
    --------+--------------------+----------+----------
     public | account            | table    | postgres
     public | hibernate_sequence | sequence | postgres
    (2 rows)
    
    한번씩 해보자!

    댓글

Designed by Tistory.