DB설치

 

PostgreSQL: Downloads

 

www.postgresql.org

 

 

MySQL :: MySQL Downloads

 

www.mysql.com

 

 

DB 설정하기

  • window
    • MySQL
      • 설치시 root password를 만들고 잘 기억해 두자
      • 필요하시면 user도 AddUser버튼을 통해서 등록하시면 된다
    • PostgreSQL
      • 설치시 root password를 만들고 잘 기억해 두자
  • ubuntu
    • MySQL, PostgreSQL설치시에도 비밀번호를 설정하는 부분이 나오니 안전하게 패스워드를 생성하고 잘 기억해 두기!

 

 

Django에서 DB변경하기

# settings.py

...

DATABASES = {
    "default": {
        "ENGINE": "django.db.backends.sqlite3",
        "NAME": BASE_DIR / "db.sqlite3",
    }
}

...
  • MySQL
    • # settings.py
      
      ...
      
      DATABASES = {
          'default' : {
              'ENGINE': 'django.db.backends.mysql',
              'NAME': 'projactname', # 연동할 mysql db 이름
              'USER': 'root', # db 접속 계정명
              'PASSWORD': 'password', # 해당 계정 비밀번호
              'HOST': 'localhost',
              'PORT': '3306',
          }
      }
      
      ...
  • PostgreSQL
    • # settings.py
      
      ...
      
      DATABASES = {
          'default': {
              'ENGINE': 'django.db.backends.postgresql',
              'NAME': 'project',
              'USER': 'root',
              'PASSWORD': 'password',
              'HOST': 'localhost',
              'PORT': '',
          }
      }
      
      ...

'Web' 카테고리의 다른 글

Django) static file & media file  (2) 2024.10.01
Django) Database Table 초기 값 셋팅하기  (1) 2024.09.27
Django) Field  (0) 2024.09.26
Django) web text editor  (3) 2024.09.24
Django) Django-crontab  (2) 2024.09.20

정적 파일 및 미디어 파일을 좀더 쉽게 관리하기 위하여 AWS에서 제공하는 서비스중 S3를 사용하게 되었다.

 

물론 Django를 배포한 곳에서도 관리가 되지만 보안 상의 문제 와 조금더 쉽게 정적 파일 및 미디어 파일을 관리하기 위하여 S3를 사용했다

 

그런데 처음 S3의 버킷 생성 및 IAM에서의 유저생성 및 키셋팅을 순조롭게 진행 하였지만 이후 로컬쪽에서 테스트를 진행 했을때 문제가 발생했다.

 

Django S3 연동에 대해서는 다른 블로그에서 자세히 다루고 있고 S3셋팅 또한 찾아보면 많이 있다.

 

그런데 내가 봤던 문제는 잘 나오지 않았다.

 

처음 S3를 연동 하기 하기 위하여 settings.py에서 여러가지 사전 셋팅을 했는데 이때 AWS_ACCESS_KEY_ID,  AWS_SECRET_ACCESS_KEY 잘 셋팅하고 테스트를 돌렸을 때에는 정상적으로 올라갔다.

 

그러다 코드를 보는데 해당 부분 사용부분이 없어 두 키를 빼봤는데 이때도 정상적으로 올라가는 것을 확인했다.

 

S3가 무료 서비스였다면 아! 키가 중요하지 않네? 라면서 무시할 수 있지만 S3는 사용한 만큼 금액이 청구되는 서비스이기에 이부분은 큰 문제였다.

 

그래서 이부분을 해결 하기 위해서 다방면으로 노력을 했다. get부분을 제외하고 모든것을 막고 일부 유저를 풀어주는 방향으로 했을 때에는 막아주는 부분이 너무 강력하여 풀어주는 부분이 동작을 하지 않았고 그럼 막는 부분에 조건을 주어 풀어줄려고 했을 때에는 다시 누구나 올릴 수 있는 상태가 되었다.

 

그러다 곰곰히 생각해 보다가 혹시 Key를 뺐을때 코드 상에는 빠지고 실제로 동작은 셋팅된 키가 들어가는게 아닌가 라는 의심이 들었다.

 

그래서 일단 컴퓨터를 재부팅하고 난뒤 키 부분을 주석 및 키가 셋팅된 곳에 들어 있던 값도 지우고 테스트를 해보았다.

 

 

키가 없을 때 오류가 나오는 것을 확인하고 주석 부분을 제외해 보았다

 

오류가 달라진 것을 확인 해보고 이번에는 이상한 키값을 넣고 테스트를 진행해 보았다

 

 

이부분은 위와 동일한 오류가 나는 것을 확인 했고 마지막으로 키가 정상적으로 셋팅된 상태로 테스트를 진행해 보았다

 

 

정상적으로 잘 동작되는 것을 확인했다.

 

즉, 이건 오류가 발생했다가기 보다는 vscode 쪽에서 캐시 나 다른 저장소에 사용했던 키를 쥐고 있어서 발생한 문제였다....

 

원인을 알고 난뒤에는 정말 참 어이가 없었으나 이기회에 S3 버킷 셋팅과 IAM쪽에 공부가 조금 되었던거 같다.

'Web > 개발 오류' 카테고리의 다른 글

Django) 테이블 생성 오류 TypeError:ForeignKey  (0) 2024.09.25
Django) 테이블 생성 오류  (1) 2024.09.12
Uncaught ReferenceError  (0) 2024.08.31

Static File

  • 이미지, CSS, JavaScript 파일과 같이 서버에서 변하지 않는 파일을 의미
  • 사용자에게 제공되는 동안 별도로 처리되거나 수정되지 않고 고정된 상태로 제공
  • 대체적으로 settings.py를 수정 하지 않을 경우 /static/ 경로를 가지며 배포 할 때에는 settings.py에 STATIC_ROOT를 설정해 주어여 한다

Media File

  • 사용자가 업로드하는 파일
  • 해당 부분을 관리하기 위해 pillow 패키지를 설치하고 settings.py에 설정을 해주어야한다. 그리고 urls.py에서도 셋팅을 해주어야 한다

 

배포를 생각하기 전인 개발 단계에서는 로컬에서 관리하면 되는 부분이라 따로 신경을 쓰지 않아도 문제가 없다. 문제는 배포때 발생한다.

 

기본적으로 Static File의 경우 github 에 같이 올려도 된다. 이유는 위에 설명한대로 서버에서 변하지 않고 사용자에게 제공해야 하는 파일들이다. 그래서 올려도 된다기 보다는 프로젝트가 정상적으로 구동될려면 올려야만 한다.

 

그에 반해 Media File의 경우에는 올리면 안된다. 이유는 개발 중 테스트중에 올라가는 파일들로 서버 입장에서 보면 더미파일일 뿐이다. 그러나 초기 셋팅이 필요하면 github 에 올리기 보다는 일다는 개발자가 가지고 있다가 배포가 끝난 뒤 셋팅으로 잡는게 어찌보면 더 좋은 방향인거같다.

 

물론 github에 올려도 되기는 한데 한번 배포하고 추후 유지보수를 할 예정이라면 github에 올리지 않는 것을 추천한다. 이유는 git에서는 한번 주시하게 된 폴더나 파일은 gitignore에 등록이 되어 있다고 해도 계속 주시하게 되어 추후 유지보수시 더미데이터가 올라갈 가능성이있다. 물론 해당 부분을 git add &commit 때 제외하면 되지만 계속 제외해줘야하는 수고로운이 있으니 웬만해서는 올리지 말자.

'Web' 카테고리의 다른 글

Django) MySQL or PostgreSQL 변경  (2) 2024.10.04
Django) Database Table 초기 값 셋팅하기  (1) 2024.09.27
Django) Field  (0) 2024.09.26
Django) web text editor  (3) 2024.09.24
Django) Django-crontab  (2) 2024.09.20

개발을 진행하다 보면 정부쪽 DB가 필요한 경우가 있다. 예로는 지하철 시간표 혹은 버스 시간표혹은 실시간 위치가 있다. 이경우 정부에서는 공공DB를 이용하여 쉽게 사용할 수 있게 하였다. 물론 누구나 다 이용할 수 있는 정보도 있고 아니면 신청후 검수를 통하여 제공하는 경우도 있다

 

누구나 신청만 하면 정부쪽에서 가지고 있는 데이터를 손쉽게 사용할 수 있으니 필요 할 경우 https://www.data.go.kr/index.do

 

공공데이터 포털

국가에서 보유하고 있는 다양한 데이터를『공공데이터의 제공 및 이용 활성화에 관한 법률(제11956호)』에 따라 개방하여 국민들이 보다 쉽고 용이하게 공유•활용할 수 있도록 공공데이터(Datase

www.data.go.kr

해당 사이트에 로그인 하여 필요한 자료를 찾아 이용신청서를 제출 하면된다.

 

이때 사용 되는 API키는 상단의 마이페이지를 통하여 쉽게 확인 할 수 있다.

 

인증기카 두개 있는데 이건 각키를 테스트를 하여 사용 가능한 키를 사용하면 된다.

 

이후에는 이용하려는 API 문서를 확인하여 문서를 통하여 API를 사용된다.

일반적으로 회원들의 정보로만 이루어진 사이트의 경우에는 초기 값 셋팅이 필요없을 수 있으나 설문혹은 유형 검사의 경우 질문에 대한 초기 셋팅값이 필요하다. 물론 사이트자체에서 정적으로 올려도 되기는 하지만 그럴경우 수정을 해당 페이지쪽에서 수정을 해야하는 번거로움 및 운영되는 사이트라면 페이지차체를 건드려야 되는 부분이라 문제가 발생할 수 있다.

 

또한, 어드민쪽에서 값을 직접 넣을 수 도 있으나 개발 단계를 거치면서 생성된 내용도 배포 혹은 협업시에는 하나하나씩 넣어줘야 한다.

 

php를 했을 때에는 직접 DB를 열어 내가 만든 테이터를 직접 빼내고 넣었는데 Django에서는 이부분도 쉽게 진행 할 수 있도록 manage.py에 loaddata 라는 명령어를 넣어 두었다.

 

loaddata에 사용가능 한 파일로는 JSON, XML 또는 YAML(PyYAML_installed)의 파일유형을 사용 할 수 있고 이것은 Django 공식문서에서 자세히 설명을 해주고 있다.(https://docs.djangoproject.com/ko/4.2/howto/initial-data/)

 

공식문서도 간단히 설명 되어 있어 쉽게 만들고 테스트 및 적용을 진행하면 될거 같다.

 

일단 나는 파일 유형중 JSON 을 사용했다.

 

[
  {
    "model": "pets.petcategory",
    "pk": 1,
    "fields": {
      "type": "대형견",
      "created_at": "2024-09-25 02:28:02.329859",
      "updated_at": "2024-09-25 02:28:02.329859"
    }
  },
  {
    "model": "pets.petcategory",
    "pk": 2,
    "fields": {
      "type": "중형견",
      "created_at": "2024-09-25 02:28:18.146232",
      "updated_at": "2024-09-25 02:28:18.146232"
    }
  }
]

 

위의 JSON 의 사용방식은 model키에는 앱이름.모델클래스명 형식이 들어가는데 이때 모델클래스명은 전부 소문자로 처리해야 한다.

그다음 pk키에는 넣고자하는 레코드의 pk 값을 넣고 다음 fields에는 JSON 방식으로 다시 모델에서 정의해놓은 칼럼값을 넣어주면 된다.

'Web' 카테고리의 다른 글

Django) MySQL or PostgreSQL 변경  (2) 2024.10.04
Django) static file & media file  (2) 2024.10.01
Django) Field  (0) 2024.09.26
Django) web text editor  (3) 2024.09.24
Django) Django-crontab  (2) 2024.09.20

장고에서는 기본적으로 사용할 수 있는 필드를 통하여 다양한 데이터 유형을 저장 할 수 있고, 저장 할 때 기본적인 검증을 수행하게 설계가 되어있다. 그러나 수동으로 값을 저장 할 때에는 검증로직을 직접 제작을 해야 한다.(검증로직 제작을 하지 않고 기존에 있는 걸 사용할때에는 save()전에 모델객체.full_clean()를 사용하면 된다.)

 

모델 기본 필드

  • 자동 증가 필드
    • AutoField :  자동으로 증가하는 정수 필드로, 주로 기본 키로 사용
    • BigAutoField : AutoField와 유사하지만, 더 큰 범위의 정수를 처리
  • 숫자 필드
    • IntegerField: 정수를 저장
    • BigIntegerField: 더 큰 범위의 정수를 저장
    • SmallIntegerField: 작은 범위의 정수를 저장
    • PositiveIntegerField: 양수만 저장
    • PositiveSmallIntegerField: 작은 범위의 양수만 저장
    • DecimalField: 고정 소수점 수를 저장하며, 정확한 소수점 연산이 가능
    • FloatField: 부동 소수점 수를 저장
  • 문자열 필드
    • CharField: 길이 제한이 있는 문자열을 저장, max_length가 필요
    • TextField: 길이 제한이 없는 긴 문자열을 저장
    • EmailField: 이메일 주소 형식의 문자열을 저장하며, 유효성 검사가 포함
    • SlugField: URL 슬러그 형식의 문자열을 저장
    • URLField: URL 형식의 문자열을 저장하며, 유효성 검사가 포함
  • 날짜 및 시간 필드
    • DateField: 날짜를 저장
    • TimeField: 시간을 저장
    • DateTimeField: 날짜와 시간을 함께 저장
  • 파일 및 이미지 필드
    • FileField: 파일 시스템에 파일을 저장하고 경로를 관리
    • ImageField: 이미지를 저장하며, FileField를 확장하여 이미지 유효성 검사를 추가
  • 기타 필드
    • BooleanField: True 또는 False 값을 저장
    • NullBooleanField: True, False, 또는 NULL 값을 허용하는 불리언 필드(Django 3.1 이후로는 사용하지 않는 것이 권장)
    • BinaryField: 이진 데이터를 저장
    • UUIDField: UUID 데이터를 저장하는 필드

 

모델 공통 필드 옵션

  • null: 이 옵션이 True로 설정되면, 데이터베이스에서 해당 필드에 NULL 값을 허용. 기본값은 False. 주로 CharField나 TextField에서는 사용을 권장하지 않는다. 이는 NULL과 빈 문자열이 혼동될 수 있기 때문이다.
  • blank: 이 옵션이 True로 설정되면, 폼 유효성 검사에서 해당 필드를 비워둘 수 있다. 기본값은 False. null과는 다르게, blank는 폼 유효성 검사와 관련이 있다.
  • choices: 선택 가능한 값들의 집합을 정의 한다. 이 인수가 제공되면, 기본 폼 위젯은 선택 상자로 대체되어 선택 가능한 값만 입력할 수 있다.
  • default: 필드의 기본값을 설정 한다. 이 값은 객체가 처음 생성될 때 사용 된다.
  • primary_key: 이 옵션이 True로 설정되면, 해당 필드를 모델의 기본 키로 지정 한다. 기본적으로 Django는 각 모델에 자동 증가하는 id 필드를 기본 키로 추가 된다.
  • unique: 이 옵션이 True로 설정되면, 테이블 전체에서 해당 필드의 값이 고유해야 한다.
  • verbose_name: 사람이 읽기 쉬운 형식으로 필드명을 지정 한다. 지정하지 않으면 Django가 자동으로 필드명을 사용하여 생성 한다.
  • editable: 이 옵션이 False로 설정되면, 해당 필드는 관리자 인터페이스나 폼에서 수정할 수 없다. 기본값은 True.

 

특수 필드 옵션

  1. CharField
    • max_length: 저장할 수 있는 문자열의 최대 길이를 지정, CharField를 사용할 때 필수로 지정
  2. DateField
    • auto_now: 객체가 저장될 때마다 현재 날짜로 자동 설정
    • auto_now_add: 객체가 처음 생성될 때 현재 날짜로 자동 설정
  3. DecimalField
    • max_digits: 저장할 수 있는 숫자의 전체 자릿수를 지정
    • decimal_places: 소수점 이하 자릿수를 지정
  4. ForeignKey
    • on_delete: 관련 객체가 삭제될 때의 동작을 정의
    • related_name: 역참조 시 사용할 이름을 정의
  5. ManyToManyField
    • related_name: 역참조 시 사용할 이름을 정의
    • through: 중간 테이블을 명시적으로 지정

'Web' 카테고리의 다른 글

Django) static file & media file  (2) 2024.10.01
Django) Database Table 초기 값 셋팅하기  (1) 2024.09.27
Django) web text editor  (3) 2024.09.24
Django) Django-crontab  (2) 2024.09.20
Django) Django-apscheduler  (0) 2024.09.19

 

장고에서 ForeignKey로 칼럼을 생성하게 될경우 필수로 on_delete를 선언해 주어야 한다. ManytoMany에서는 따로 on_delete를 선언하지 않아도 잘 동작이 되어서 ForeignKey도 선언없이 진행해도 되는 줄 알았으나 공식문서를 확인해보니 필수로 입력이 들어가야한다.(https://docs.djangoproject.com/en/4.2/ref/models/fields/#django.db.models.ForeignKey.on_delete)

 

들어갈 수 있는 값으로는 

  • CASCADE: 참조된 객체가 삭제되면, 그 객체를 참조하는 모든 객체도 함께 삭제됩니다. 데이터베이스에 고아 레코드가 남지 않도록 하고 싶을 때 유용합니다.
  • PROTECT: 참조된 객체가 다른 객체에 의해 참조되고 있을 경우, 해당 객체의 삭제를 막습니다. 삭제를 시도하면 Django는 ProtectedError를 발생시킵니다. 이는 관련 데이터를 실수로 삭제하지 않도록 보장합니다.
  • RESTRICT: PROTECT와 비슷하지만 더 유연합니다. 참조하는 객체가 있는 경우 삭제를 막지만, 커스텀 에러 처리나 추가 로직을 구현할 수 있습니다.
  • SET_DEFAULT: 참조된 객체가 삭제되면, 외래 키 필드가 기본값으로 설정됩니다. 이를 사용하려면 필드에 기본값이 정의되어 있어야 합니다.
  • SET(): 참조된 객체가 삭제될 때 외래 키 필드에 설정할 값을 반환하는 호출 가능한 객체(예: 함수)를 지정할 수 있습니다. 삭제된 참조를 대체할 값을 결정하는 데 유연성을 제공합니다.
  • DO_NOTHING: 참조된 객체가 삭제되어도 아무런 조치를 취하지 않습니다. 적절히 처리하지 않으면 데이터베이스에 무결성 문제가 발생할 수 있으며, 고아 참조가 남을 수 있습니다.

이 있다.

'Web > 개발 오류' 카테고리의 다른 글

Django AWS S3 연동  (2) 2024.10.02
Django) 테이블 생성 오류  (1) 2024.09.12
Uncaught ReferenceError  (0) 2024.08.31

1. TinyMCE

  • JavaScript 기반의 리치 텍스트 에디터
  • Django 프로젝트에 고급 편집 기능을 추가
  • 가볍고 빠르며, PyPI를 통해 쉽게 설치가능
  • 주요 기능
    • 사용자 정의 가능한 UI
    • 50개 이상의 고급 콘텐츠 생성 기능
    • Django 통합 패키지를 통한 간편한 설정
    • 다양한 언어 지원 및 콘텐츠 협업 기능

2. CKEditor

  • Django와 쉽게 통합
  • 이미지 업로드 및 다양한 미디어 파일을 지원
  • 주요 기능
    • 강력한 이미지 업로드 및 관리 기능
    • 사용자 정의 가능한 인터페이스
    • 다양한 플러그인을 통한 확장 가능성

 

TinyMCE vs CKEditor 5

설치 및 설정 비교적 간단하게 설치 가능, 기본 설정으로 빠르게 시작 가능 고도의 커스터마이제이션 가능하지만 초기 설정이 복잡할 수 있음
커스터마이제이션 다양한 플러그인과 테마를 통해 쉽게 확장 가능 완전한 커스터마이제이션과 제어 가능, 고급 사용자에게 적합
협업 기능 기본적으로 제공하지 않음 실시간 협업, 트랙 체인지 등 협업 기능 제공
사용자 인터페이스 직관적이고 사용하기 쉬운 UI 클린하고 현대적인 인터페이스
성능 및 속도 가벼운 코드로 빠르고 유연한 성능 제공 초기 로딩 속도 문제 보고됨
라이선스 및 가격 MIT 라이선스(오픈 소스), 일부 프리미엄 기능 유료 GPL 라이선스(오픈 소스), 프리미엄 기능은 별도 요금 부과
플러그인 및 확장성 풍부한 플러그인 라이브러리 제공 새로운 플러그인 추가 시 전체 빌드 필요
문서화 및 지원 광범위한 문서와 커뮤니티 지원 제공 전문적인 지원 옵션 제공

 

'Web' 카테고리의 다른 글

Django) Database Table 초기 값 셋팅하기  (1) 2024.09.27
Django) Field  (0) 2024.09.26
Django) Django-crontab  (2) 2024.09.20
Django) Django-apscheduler  (0) 2024.09.19
Django) Tasks Scheduler  (2) 2024.09.15

+ Recent posts