Today I Learned
날짜
2023년 11월 22일 수요일
내용
로컬에 개발 환경을 구축하는데 성공했다.. 역시 막힐땐 차근차근 적으면서 해야 잘 풀린다. Docker 에 대한 이해가 너무 없다…
서버 가동을 위한 데이터베이스 설정 과정(장문주의)
- 초기 세팅(기존 시도들로 인한 오류를 방지하기 위해)
- 생성된 postgres 폴더 삭제
docker system prune -a
로 모두 삭제docker volume prune -a
로 볼륨도 삭제- 이후 각 단계마다 b,c 는 반복
docker-compose -f .\docker-compose.local.yml up
으로 구동- 가설 : local-postgres가 superuser 계정을 이용할 수 없어서 DB를 새롭게 못만든다. 계정 비밀번호 설정해주자
- .local.env에
POSTGRES_PASSWORD
추가- 결과 : local-postgres는 문제 없이 실행된걸로 보임
- 가설 : superuser 계정 문제는 해결. 로컬에서 local-shop 서버를 접근 못한다. 연결을 열어주자.
- root 디렉토리에 생성된 postgres 폴더 내 pg_hba.conf에서 IPv4 local connections에
host all all 0.0.0.0/0 md5
를 추가- 결과 : local-postgres에서 다른 계정에 대한 오류발생
- local-shop에서도 위 계정에 대한 오류 발생
- 가설
- local-postgres : 계정을 사용해야하는데 발견을 못했다. 저 계정을 만들어주자.
- psql로 postgres라는 DB로 접속했다.
\d
로 조회하니 postgres, template0, template1 3개가 있다.\du
로role을 조회하니 postgres라는 superuser뿐이었다.- 슈퍼우저, DB 생성, 로그 옵션을 준 계정 생성.
\du
로 조회되는 것, 로그인 도 확인
- local-shop : 이친구도 마찬가지. 근데 발견에 대한 얘기는 없는데.. 우선 1번을 해결하고 지켜보자.
- local-postgres : 계정을 사용해야하는데 발견을 못했다. 저 계정을 만들어주자.
- postgres DB에 계정 생성
- 결과 : 문제가 해결되지 않았다.
- 가설 : 내가 만든건 localhost고, 컨테이너 내부의 DB들은 전혀 못건드리고 있다. local-postgres라는 DB를 건드리기 위해 컨테이너 내부에 접속해야 한다.
- windows powershell 에서
docker exec -it local-postgres psql -U postgres
로 접속 \du
로 role을 확인해보니 postgres만 있었다.- 계정을 만들고 슈퍼유저, role과 DB 생성, 로그인 권한을 주었다. 로그인은 안줘도되지만(자동이라) 명시적으로 주었다.
- 이때부터 docker 관련 초기화는 하지 않음
- windows powershell 에서
- local-postgres에 계정 생성
- 결과 : 오류 메시지가 변경되었다.
- 가설 : 계정 문제는 해결된듯 하나 DB가 생성되지 않았다. 다시 local-postgres로 들어가서 DB를 만들어주고 계정에 권한을 준다.
- 접속하여
create database postgres_shop;
으로 DB 생성 grant all privileges on database postgres_shop to
로 권한 수여- down 후 up 하여 docker 재빌드
- 접속하여
- local-postgres에 pastgres_shop DB 생성
- 결과
- 가설 : DB내부가 제대로 갖춰지지 않은것 같다. 시스템을 구동할 때 없으면 만드는게 아닌가..? 만들도록 설정하거나, 만들어주거나, 테스트 배포 DB를 가져와서 그대로 갖추거나 3개 중 하나를 해야할 듯 하다.
- pgAdmin4를 이용해 AWS RDS에 구동중인 DB에 접속하고 backup 파일을 plain 형식으로 생성
docker cp C:\workspace\shop.sql local-postgres:/tmp
로 컨테이너 내부로 덤프파일 복사- 컨테이너 내부 데이터베이스에 접속하여
\i /tmp/shop.sql
로 적용 - docker 서비스 재시작
- 덤프 파일 적용
- 결과 : 변경되지 않음
- 가설 : dump 적용을 확인해봐야 한다. docker 내부의 postgres로 들어가보니 db 이름이 lcoal-shop이아니라 postgres-shop으로 되어있었고 따라서 덤프파일도 적용이 안되있었다. 이름을 바꾸고 다시 적용해야한다.
ALTER DATABASE postgres_shop RENAME TO local_shop;
로 이름 변경-
다시 덤프 적용
1 2 3
docker cp [덤프 파일 경로] local-postgres:/tmp docker exec -it local-postgres bash psql -U postgres -d local_shop -f /tmp/[덤프 파일 이름]
\c local_shop
으로 데이터베이스 접속하여\dt
로 테이블 생성 확인- local-shop 환경변수에서 schema 이름을 postgres_shop에서 local_shop으로 변경
- 덤프 파일 재적용
- 접속완료!
프론트 가동
기존 버전 20의 node가 오류가 발생하는 것 같아 삭제하였다. 프로젝트는 angular 12.2.x 버전이라 홈페이지에서 compatibility 를 확인하여 14.5 버전의 node로 변경하여 설치하였더니 문제가 해결되었다.
QA
문제 : 어드민 내에서 스토어 리뷰 게시처리 미작동
원인 :
- 리뷰의 publish status를 변경할 때, product_id를 키로 하여 관계가 있는 product를 조인함.
- 하지만 store 리뷰이기 때문에 관련된 product가 없음.
- 따라서 join문에서 반환되는 값이 없기 때문에 선택한 리뷰 레코드를 DB에서 찾아내지 못함.
해결방안 :
LEFT JOIN
으로 있을떄만 product를 출력하는 것.
회고
오늘 개발 진짜 재밌었다.