티스토리 뷰
반응형
ORM
ORM의 장점
-
- 쿼리를 객체 관점으로 작성함으로써 재사용성을 높일 수 있다.
- 반복되는 코드를 줄일 수 있다.
- 특정 데이터베이스가 아닌 범용적으로 작성할 수 있다.
- 생산성을 높일 수 있다.
ORM의 단점
-
- ORM 관련 메소드를 모르면 문제를 해결하기 힘들다
- 잘못 사용할 경우 N+1 문제 등 다양한 문제를 겪을 수 있다.
- 연관관계를 잘못 맺을 경우 원하는 흐름으로 작성되지 않을 수 있다
Django ORM의 장점
-
- 동적으로 처리하기 좋다.
- 예를 들어 특정 필드의 결과값만 가져오고 싶으면 values 혹은 values_list를 사용하면 된다.
- 조건절에 대해서 다양한 Lookup 필드를 제공해줘서 해당 lookup 필드를 알고 있다면 쉽게 사용할 수 있다.
- 모든 결과는 lazy해서 실제로 사용하기 전까지 쿼리가 안날라간다.
- dirty checking을 지원한다.
- 동적으로 처리하기 좋다.
Django ORM의 단점
-
- NoSQL의 경우에는 다른 라이브러리를 통해 해결해야 하기 때문에 장고 ORM의 기능을 사용할 수 없다.
- 중복되는 쿼리가 많이 생긴다. 스프링의 경우에는 Repository Layer가 존재하는데 장고의 경우에는 Repository Layer가 존재하지 않기 때문에 Service Layer와 혼재되어 있다.( 단, manager 를 활용하면 어느 정도 해결해줄 수는 있다.)
JPA의 장점
-
- DB에 종속적이지 않다.
- RDBMS를 쓰다가 NoSQL로 전환해도 서비스 레이어에 변경되는 로직이 존재하지 않다.
- 영속성 컨텍스트를 활용한 dirty checking을 사용할 수 있다.
- 중복되는 코드를 줄일 수 있다. Repository Layer가 있기에 중복되는 쿼리를 한 곳에서 관리한다는 장점이 있다.
- DB에 종속적이지 않다.
JPA의 단점
-
- 특정 필드 결과값만 가져오기 번거롭다. ( QueryDSL을 사용하지 않는 경우)
- 복잡한 쿼리의 경우에는 @Query 안에서 String으로 처리하기 때문에 테스트케이스를 작성하지 않는 경우 실수가 발생할 수 있다.
- 단순한 경우에는 쿼리 네이밍으로 처리가 가능하지만 복잡한 경우에는 네이밍 방식으로 처리하기 힘들다.
FRAME WORK
Django의 장점
-
- 빠른 생산성
- 어드민 페이지 제공
- 기본 CRUD를 처리할 수 있는 ViewSet 제공
- 유저 권한 처리를 서비스 레이어 내에서 아닌 미들웨어로 처리함으로써 재사용성을 높일 수 있다.
- 다양한 Python 라이브러리를 사용할 수 있다.
- Mock 라이브러리를 통해 외부 API 테스트를 진행할 수있다. (ex> boto3)
- Pandas를 통해 엑셀, CSV 파일 처리를 쉽게 할 수 있다.
- 빠른 생산성
Django의 단점
-
- 다소 분리되지 못한 레이어
- 스프링의 경우, 서비스 레이어, 컨트롤러 레이어로 분리되어 있지만 장고의 경우에는 두 레이어가 섞여있는 상태로 존재, 스프링의 경우에는 쿼리 결과를 모킹하여 순수로직을 테스트함으로써 POJO를 지킬 수 있지만, 장고의 경우에는 그렇게 처리하기 힘든 구조로 실제 쿼리를 날려서 테스트하는 것이 일반적
- 다소 분리되지 못한 레이어
스프링의 장점
-
- 역할과 분리가 제대로 이루어짐
- IoC 컨테이너로 구성되어 있다는 점
- DI 개념으로 의존 주입을 통해 처리가 된다는 점
- 테스트할 때 mocking하기 용이하다는 점
- 객체 단위로 다룰 수 있다는 점
- 객체지향적으로 처리
- 유지보수성이 올라감
- 스프링 관련 다양한 오픈소스
- Security, JPA, Cloud 등 존재스프링의 장점
- 초반 러닝커브가 존재
- 기본 언어가 자바로 자바스크립트나 파이썬에 비교하면 난이도가 있는 편
- 역할과 분리가 제대로 이루어짐
반응형
'회고록' 카테고리의 다른 글
[회고록] 라인 합격하기까지(코테/필기/1차면접/2차면접) [신입공채][2022][상반기] (3) | 2022.06.11 |
---|---|
[Refactoring] 조건문이 많다면 리팩토링을 해야할 시점이다. (0) | 2022.03.05 |
[회고] 응답에 대한 처리 속도 개선 방안은 뭐가 있을까? (2) | 2022.02.26 |
[Flask][Slack][Modal]패턴화된 나의 삶을 구원해 줄 slack app (0) | 2021.12.17 |
2021년 전반기 끝없는 실패 그리고 하나의 성공 (0) | 2021.06.27 |
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Java
- docker-compose
- dockerignore
- ubuntu
- setattr
- 프로그래머스
- 면접
- 파이썬
- DRF
- Python
- 자바
- Spring
- Linux
- postgres
- Pattern
- env
- 그래프
- 알고리즘
- 백준
- thread
- 2021 KAKAO BLIND RECRUITMENT
- headers
- 카카오
- BFS
- PostgreSQL
- django
- Collections
- docker
- Celery
- Command Line
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함