@senspond

>

개발기>Web 개발기

postgreSQL 데이터베이스 백업 및 다른 환경으로 이전하여 복원하기

등록일시 : 2025-03-02 (일) 01:19
업데이트 : 2025-03-02 (일) 01:19
오늘 조회수 : 2
총 조회수 : 9

    postgreSQL 데이터베이스 백업 및 다른 환경으로 이전하여 복원하기

    서론

    rgbitcode 블로그는 맥OS 환경에서 postgreSQL 15버전으로 개발이 됬습니다.

    처음에는 NextJS 13버전과 postgreSQL 14버전으로 만들다가 버전업을 해서 NextJS 14와 postgreSQL 15버전이 됬을거에요.

    그리고 오랫동안 이 사이트를 유지보수를 하지 않았는데요.


    그동안 AI 대학원 생활을 하고 논문을 작성하고… 정신이 없었던 이유도 있었고요.

    또 웹 개발보다는 AI 모델을 개발하는 것에 더욱 관심을 가지게 되면서 Nvidia 그래픽카드를 통한 CUDA 가속이 가능한 윈도우 작업환경을 주로 쓰게 됨에 따라 맥 OS를 잘 사용하지 않게 되면서 거리가 멀어진 것도 있었습니다.


    돌이켜보니 6개월 넘게 방치를 한것 같습니다. 현재 Redis를 통해 방문 트래픽을 수집하고, Spring 배치 프로그램으로 게시글 당 조회수와 일일 조회수를 집계해서 DB에 기록하고 있는데요.



    자세하게 본적은 없지만, 생각보다 찾아와주시는 분들이 많이 계시는것 같습니다.

    게시물에 달린 댓글도 확인을 거의 못했는데, 확인해보니 댓글이 달린 게시물들도 있었는데요.

    정말 너무 답글이 늦은것 같은데, 확인한 부분들 댓글 달아드렸습니다.


    현재는 리눅스를 메인 PC로 사용하고 있고, 더 이상 맥OS에서는 맥 기기 테스트 하는 용도외에는 맥에서는 개발은 하지 않을 예정이라

    맥OS에서 사용했던 개발 DB를 그대로 옮겨와야 하는 상황인데요. 작업을 하면서 정리해봤습니다.


    백업 및 복원하기

    pg_dump로 백업

    pg_dump -U [계정명] --no-owner -Fc -f backup.dump [데이터베이스명]


    먼저 기존에 쓰던 postgreSQL 버전은 동일하게 맞추는게 좋습니다.

    특히 postgreSQL 14버전과 15버전은 호환되지 않는 일부 쿼리들이 있더라고요.


    그리고 소유자와 권한을 백업 DB와 복원할 DB에 동일하게 맞추는게 좋은데, 이게 안맞으면 복원할때 오류가 나버립니다.


    그래서 --no-owner 옵션을 줘서 소유권(owner) 정보를 제외했습니다.

    즉, 이전 DB의 원래 소유자(계정)을 무시하고 이전하는 postgreSQL의 사용자가 소유되도록 해줍니다.

    -Fc 는 압축된 포맷으로 백업이 되고요.

    pg_restore로 복원

    pg_restore -U [계정명] -d [데이터베이스명] -h localhost -p 5432 -Fc backup.dump

    백업 할때는 -Fc 로 했기 때문에 복원도 -Fc 로 해줍니다.


    백업(pg_dump) 시 --no-owner를 사용했다면, 복원(pg_restore) 시에는 --no-owner 옵션이 필요 없습니다.

    다만, 백업 시 --no-owner를 사용하지 않았다면, 복원 시 기존 소유자(owner) 정보를 유지하기 때문에, 새로운 환경에서 소유자 오류가 난다면 복원시 --no-owner를 추가해주면 됩니다.







    이렇게 맥OS의 로컬환경에서 작업하던 DB스키마와 데이터들을 모두 다른 pc의 작업환경으로 이전했습니다.

    그외 MariaDB 도 그대로 가져와야하는데, 그건 나중에 하면서 작성해봐야겠습니다.




    아무튼 postgreSQL은 이런식으로 운영서버에 있는 DB도 백업을 해서 가져올 수 있을 것 같습니다.

    다만 운영서버는 docker로 postgreSQL을 띄어놨는데, 이런 경우 아래처럼 하면 될것 같네요.


    도커로 postgreSQL을 사용하는 경우

    services:
      postgres:
        image: postgres:15
        container_name: my_postgres
        environment:
          POSTGRES_USER: postgres
          POSTGRES_PASSWORD: mypassword
          POSTGRES_DB: mydatabase
        ports:
          - "5432:5432"
        volumes:
          - ./backup:/backup  # 호스트의 ./backup 디렉터리를 컨테이너의 /backup에 마운트
    docker exec -t my_postgres pg_dump -U [계정명] --no-owner -Fc -f /backup/backup.dump [데이터베이스명]


    회고

    지금 시점에서 돌이켜보면, 이 사이트를 처음 개발할 때 NextJS를 공부해가면서 개발을 했었고,

    지금처럼 AI를 쓰지 않고 모든 것을 직접 코딩으로 만들다보니,

    당시 부족한 실력에 지금이라면 절때 이렇게 짜지 않을것 같은 소스코드들이 있는것 같습니다.

    요즘은 AI를 통해서 "아~ 이렇게 짜면 좀더 좋겠구나" 하며 배울때가 생기네요.


    아무튼 기존에 만든 이 사이트 리팩토링도 좀 해보고, 다시 웹개발로 뭔가를 만들어 볼 생각입니다.

    senspond

    안녕하세요. Red, Green, Blue 가 만나 새로운 세상을 만들어 나가겠다는 이상을 가진 개발자의 개인공간입니다.

    댓글 ( 0 )

    카테고리내 관련 게시글

    현재글에서 작성자가 발행한 같은 카테고리내 이전, 다음 글들을 보여줍니다

    @senspond

    >

    개발기>Web 개발기

    • [현재글] postgreSQL 데이터베이스 백업 및 다른 환경으로 이전하여 복원하기

      postgreSQL 데이터베이스 백업 및 다른 환경으로 이전하여 복원하기
        2025-03-02 (일) 01:19
      1. NextJS14 로 RgbitSoft 홈페이지 개발, 그리고 시작

        NextJS14 로 RgbitSoft 홈페이지 개발, 그리고 시작
          2024-08-15 (목) 07:23
        1. 알지빗소프트(RgbitSoft) 홈페이지 다국어 지원 적용 / 성능 테스트

          알지빗 소프트(RgbitSoft) 다국어지원 홈페이지로 개발 및 적용해본 과정을 상세하게 다룹니다.
            2024-09-19 (목) 02:52