@Entity보통 기본값인 클래스 이름을 사용, 다른 패키지 이름이 같은 엔티티가 있으면 이름 지정기본 생성자 필수(파라미터 없는 public 또는 protected)final 클래스, enum, interface, inner 클래스에는 사용 x저장할 필드에 final 사용 x @Table엔티티와 매핑할 테이블 지정name: 매핑할 테이블 이름catalog: catalog 기능이 있는 db에서 catalog 매핑schema: shcema 기능이 있는 db에서 schema 매핑uniqueConstraints(DDL): DDL 생성 시 유니크 제약조건
전체 글
읽기 쉬운 코드를 짜기 위해 노력합니다. 좋은 코드는 단순하고 이해하기 쉬워야 한다고 생각합니다.flush는 영속성 컨텍스트의 변경 내용을 db에 반영한다 flush 실행 시1. 변경 감지가 동작, 영속성 컨텍스트에 있는 모든 엔터티 스냅샷과 비교, 수정된 엔터티를 찾는다. 수정 쿼리를 만들어 쓰기 지연 sql 저장소에 등록2. 쓰기 지연 sql 저장소의 쿼리를 db에 전송 em.flush() 직접 호출, 트랜잭션 커밋 시 플러시 자동 호출, JPQL 쿼리 실행 시 플러시 자동 호출 javax.persistence.FlushModeTypeFlushModeType.AUTO(default)FlushModeType.COMMIT //커밋 시만 플러시
JPA update 시 스냅샷을 찍어서 lazy update를 한다(커밋 시에 업데이트) 내부적으로 sql을 모든 필드를에 대해서 업데이트를 진행하게 된다장점으로 수정 쿼리가 항상 같다. 동일한 쿼리를 보내면 db는 이전에 파싱 된 쿼리를 재사용 가능하다단점으로 데이터 전송량이 증가한다=> 보안하기 위해 동적으로 UPDATE SQL을 생성하는 전략인데 하이버네이트 확장 기능을 사용하면 된다@org.hibernate.annotations.DynamicUpdate
DRF 중심의 내용입니다! 혹시 다른 프레임워크는 다를 수 있습니다 url을 통한 파라미터를 통해서 값 들을 받는 방법get을 통해서는 단일 값을 받고 getlist를 통해서는 같은 키 값을 통해서 리스트로 받을 수 있습니다request.GET.get(키 값)# https://www.example.com?키=값request.GET.getlist(키 값)# https://www.example.com?키=값&키=값 body를 통해 요청 된 데이터를 가져오는 방법request.data를 사용 시 body에 첨부된 값을 통해서 원하는 데이터를 찾는다request.data.get(키 값) Serializer을 사용해 데이터를 가져오는 방법request 받아온 data를 그대로 serilizer에 넣어주면 원하는 ..
해당 글은 DRF를 사용하는 사람의 관점에서 적었습니다. 다른 프레임 워크와 다를 경우가 있습니다프론트와 네트워크 관련 내용 정리1. request 관련 내용https://doit-dodu.tistory.com/entry/Request-%EA%B4%80%EB%A0%A8-%EB%82%B4%EC%9A%A9 Request 관련 내용DRF 중심의 내용입니다! 혹시 다른 프레임워크는 다를 수 있습니다 url을 통한 파라미터를 통해서 값 들을 받는 방법get을 통해서는 단일 값을 받고 getlist를 통해서는 같은 키 값을 통해서 리스트doit-dodu.tistory.com
구글 맵으로 lat, lng를 받아 올 일이 있어서 구현해본 API입니다 def edit_place_coord(request, place_id): place = get_object_or_404(Place, id=place_id) if request.method == 'POST': lat = request.POST.get('lat') lng = request.POST.get('lng') if lat and lng: place.coord = f'POINT({lng} {lat})' # PointField 형식으로 변환 place.save() # return redirect('place_detail', plac..
구글 맵으로 해당 lat, lng를 받아 올 일이 있어서 구현해봤습니다 {{ place.name }} - 위치 수정 주소: {{place.address}} {% csrf_token %} 위도: 경도: 저장
회사에서 비정규화를 할 일이 있었는데 데이터가 10만건이 넘어서 실 서버에 db히트 하는 만큼 성능에 신경을 써야됬습니다.그래서 쿼리를 불러 올 때 가장 빠르게 처리하는 방식이 무엇일 지 궁금해졌습니다.count(), annotate(Count()), len(prefetch)를 떠올렸고 비교해 봤습니다.count().count()의 경우 db에서 count를 해서 가져오는 방법입니다db에서 연산을 끝낸 후 가져오는 만큼 cpu와 메모리에는 부담이 없습니다. .count()는 일단 조건을 사용 할 수 없습니다. 연관 된 모든 객체를 count하기 때문에 soft delete된 것이나 filter 조건을 넣을 수 없습니다. soft 삭제를 구현하고 있는 테이블이라 필터 조건이 필요한 만큼 사용 할 수는 없..