Task ON!

2023년 11월 22일 TIL

Today I Learned

날짜

2023년 11월 22일 수요일

내용

로컬에 개발 환경을 구축하는데 성공했다.. 역시 막힐땐 차근차근 적으면서 해야 잘 풀린다. Docker 에 대한 이해가 너무 없다…

서버 가동을 위한 데이터베이스 설정 과정(장문주의)

  1. 초기 세팅(기존 시도들로 인한 오류를 방지하기 위해)
    1. 생성된 postgres 폴더 삭제
    2. docker system prune -a 로 모두 삭제
    3. docker volume prune -a 로 볼륨도 삭제
    4. 이후 각 단계마다 b,c 는 반복
  2. docker-compose -f .\docker-compose.local.yml up 으로 구동
    1. 가설 : local-postgres가 superuser 계정을 이용할 수 없어서 DB를 새롭게 못만든다. 계정 비밀번호 설정해주자
  3. .local.env에 POSTGRES_PASSWORD 추가
    1. 결과 : local-postgres는 문제 없이 실행된걸로 보임
    2. 가설 : superuser 계정 문제는 해결. 로컬에서 local-shop 서버를 접근 못한다. 연결을 열어주자.
  4. root 디렉토리에 생성된 postgres 폴더 내 pg_hba.conf에서 IPv4 local connections에 host all all 0.0.0.0/0 md5 를 추가
    1. 결과 : local-postgres에서 다른 계정에 대한 오류발생
    2. local-shop에서도 위 계정에 대한 오류 발생
    3. 가설
      1. local-postgres : 계정을 사용해야하는데 발견을 못했다. 저 계정을 만들어주자.
        1. psql로 postgres라는 DB로 접속했다.
        2. \d 로 조회하니 postgres, template0, template1 3개가 있다.
        3. \du 로role을 조회하니 postgres라는 superuser뿐이었다.
        4. 슈퍼우저, DB 생성, 로그 옵션을 준 계정 생성. \du 로 조회되는 것, 로그인 도 확인
      2. local-shop : 이친구도 마찬가지. 근데 발견에 대한 얘기는 없는데.. 우선 1번을 해결하고 지켜보자.
  5. postgres DB에 계정 생성
    1. 결과 : 문제가 해결되지 않았다.
    2. 가설 : 내가 만든건 localhost고, 컨테이너 내부의 DB들은 전혀 못건드리고 있다. local-postgres라는 DB를 건드리기 위해 컨테이너 내부에 접속해야 한다.
      1. windows powershell 에서 docker exec -it local-postgres psql -U postgres 로 접속
      2. \du 로 role을 확인해보니 postgres만 있었다.
      3. 계정을 만들고 슈퍼유저, role과 DB 생성, 로그인 권한을 주었다. 로그인은 안줘도되지만(자동이라) 명시적으로 주었다.
      4. 이때부터 docker 관련 초기화는 하지 않음
  6. local-postgres에 계정 생성
    1. 결과 : 오류 메시지가 변경되었다.
    2. 가설 : 계정 문제는 해결된듯 하나 DB가 생성되지 않았다. 다시 local-postgres로 들어가서 DB를 만들어주고 계정에 권한을 준다.
      1. 접속하여 create database postgres_shop; 으로 DB 생성
      2. grant all privileges on database postgres_shop to 로 권한 수여
      3. down 후 up 하여 docker 재빌드
  7. local-postgres에 pastgres_shop DB 생성
    1. 결과
    2. 가설 : DB내부가 제대로 갖춰지지 않은것 같다. 시스템을 구동할 때 없으면 만드는게 아닌가..? 만들도록 설정하거나, 만들어주거나, 테스트 배포 DB를 가져와서 그대로 갖추거나 3개 중 하나를 해야할 듯 하다.
      1. pgAdmin4를 이용해 AWS RDS에 구동중인 DB에 접속하고 backup 파일을 plain 형식으로 생성
      2. docker cp C:\workspace\shop.sql local-postgres:/tmp 로 컨테이너 내부로 덤프파일 복사
      3. 컨테이너 내부 데이터베이스에 접속하여 \i /tmp/shop.sql 로 적용
      4. docker 서비스 재시작
  8. 덤프 파일 적용
    1. 결과 : 변경되지 않음
    2. 가설 : dump 적용을 확인해봐야 한다. docker 내부의 postgres로 들어가보니 db 이름이 lcoal-shop이아니라 postgres-shop으로 되어있었고 따라서 덤프파일도 적용이 안되있었다. 이름을 바꾸고 다시 적용해야한다.
      1. ALTER DATABASE postgres_shop RENAME TO local_shop; 로 이름 변경
      2. 다시 덤프 적용

        1
        2
        3
        
         docker cp [덤프 파일 경로] local-postgres:/tmp
         docker exec -it local-postgres bash
         psql -U postgres -d local_shop -f /tmp/[덤프 파일 이름]
        
      3. \c local_shop 으로 데이터베이스 접속하여 \dt 로 테이블 생성 확인
      4. local-shop 환경변수에서 schema 이름을 postgres_shop에서 local_shop으로 변경
  9. 덤프 파일 재적용
    1. 접속완료!

프론트 가동

기존 버전 20의 node가 오류가 발생하는 것 같아 삭제하였다. 프로젝트는 angular 12.2.x 버전이라 홈페이지에서 compatibility 를 확인하여 14.5 버전의 node로 변경하여 설치하였더니 문제가 해결되었다.

QA

문제 : 어드민 내에서 스토어 리뷰 게시처리 미작동

원인 :

  • 리뷰의 publish status를 변경할 때, product_id를 키로 하여 관계가 있는 product를 조인함.
  • 하지만 store 리뷰이기 때문에 관련된 product가 없음.
  • 따라서 join문에서 반환되는 값이 없기 때문에 선택한 리뷰 레코드를 DB에서 찾아내지 못함.

해결방안 :

  • LEFT JOIN 으로 있을떄만 product를 출력하는 것.

회고

오늘 개발 진짜 재밌었다.