[2020.07.01] 업무일기: Django ORM 의 Join 방식 강제 수정은 어떻게 하나? 개발 이것저것

업무일기는 그날 일하면서 인상 깊었던 기억들을 두서없이 나열한 것입니다.



1. [Django] ORM join 타입 강제 변경

- prefetch 가 걸려있는 queryset 에 루프를 돌면서 아래처럼 적용해준다.

for key, item in queryset.query.alias_map.items():
    # BaseTable 혹은 Join 객체가 올 수 있다.
    # Join 객체의 경우 join_type 에 조인 정보를 가지고 있는데 해당 값을 수정하면 조인을 변경할 수 있다.
    if isinstance(item, Join) and item.join_type == "INNER JOIN":
        item.join_type = "STRAIGHT_JOIN"
    return queryset



2. [MySQL] Straight join 으로 속도를 개선하다?

사실.. 이 내용은 위 1번과 관련이 있는데,,,
기존에 inner join 을 하는 곳이 있었는데 이게 쿼리하는게 느려서 Straight join 으로 바꾸었다.

간단히 straight join 을 설명하자면..
쿼리상에서 "table_a straight join table_b" 뭐 이런구문이 있을경우,
왼쪽에 명시한 테이블(table_a) 의 대상 레코드를 먼저 불러온뒤, 다른 테이블 정보를 불러와 join 한다는 뜻이다.

MySQL 은 join 구문을 해석할때, 자동으로 오른쪽에 적읕 테이블부터 레코드를 불러와 매치를 시키는데,
우측 테이블의 선택된 레코드량이 많으면 많을수록 실행 속도가 느려진다.




3. 메시징 큐 컨슈머의 속도조절

token-bucket 이라는 알고리즘이 있다.
이것을 잘 활용하면 ... 됨

[ubuntu 18.04] Broadcom 와이파이 (wireless network) 드라이버 복구하기 (wifi driver) 잡다한 지식들

난 아주 오래된 HP 노트북을 하나 가지고 있다.
모니터도 나가서 사실 그냥 .... 서버용으로 쓸라고 우분투를 깔았음.

그래서 우분투 최신버전 18.04 를 설치 했는데 와이파이가 안되더라!
일단 LAN선을 꽂고 잠시 삽질을 했다.

이런저런 정보들을 찾아보다가 결국 아래 방법으로 해결.

======================

1. 터미널을 연다

2. 아래 명령어를 입력하고 Wireless LAN 접속용 하드웨어가 있는지 목록을 본다.
lshw -C network

3. 드라이버 패키지 설치
sudo apt-get install firmware-b43-installer
4. 시스템 재시작

======================

<참고 링크>
https://wikidevi.com/wiki/Broadcom_BCM94322USA
https://wireless.wiki.kernel.org/en/users/Drivers/b43
http://linuxwireless.sipsolutions.net/en/users/Drivers/b43/

[Work log] 나의 업무일기 2020-06-30 (Java, Spring, React) 주저리주저리


1. Java 에서 Http Response 가 배열로 시작하는 JSON으로 들어올때 POJO 매핑을 어떻게 처리해야 하나?

요런 오류가 났음
: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 path ...

일단은, Http Request를 날렸는데, 요건 응답이 JSON 이긴한데 중괄호가 아닌 대괄호로 시작한다.
즉, 시작부터 배열인 셈... 그래서 POJO 로 매핑할때 배열로 받아와야 하는거다.

아래와 같이 해결 함..
ChannelSearchEnum[] enums = gson.fromJson(yourJson, ChannelSearchEnum[].class);



2. 프론트 (React.js) 개발 꿀팁

- UI용 컴포넌트와 비즈니스 로직용 컴포넌트를 구분하기 (UI 컴포넌트의 재활용성 증가)
- 자주 사용하는 UI 컴포넌트는 한번 자체 component 로 래핑하여 자주 사용하는 스타일 스펙을 코드화 하여 Prop + typescript 으로 넘겨받아서 처리하면 UI 가 규격화 되고 코드 관리 및 커뮤니케이션이 편해진다.
- CSS in JS 가 트렌드다
- 공통 코드 관리는 리액트 훅으로...
- 프로젝트 초기 세팅할때는 일반적으로 create-react-app / 서버사이드 렌더링 할꺼면 next.js 활용 하라

[Work log] 나의 업무일기 2020-06-29 (Spring, Vault, Java) 주저리주저리

그냥... 가끔 개발하다가 그때그때 부딪혔던 난관과.. 극복? 에 대한 것들을 주저리주저리 적고싶어서 이 글을 쓴다.



1. Java Spring Boot 에서 Vault 에서 데이터를 불러오지 못하는 문제

Spring vault 를 써봤는데 아래와 같은 방식이 잘 먹혀들지 않았다.

VaultResponseSupport<T> response = vaultOperations.read(secretPath, objClass);

여기서 objClass 를 넘기면 해당 타입의 POJO 를 리턴해줘야 하는데.. 자꾸 null 만 넘어오더라는...
그래서 결국 Vault API 를 직접 호출하여 데이터를 불러오도록 바꿔주니 잘 되더라!!



2. Vault app token 의 Access Permission 문제

Vault 에는 wallet 이라는 일종의 디렉토리가 있다.
각 wallet 에는 dict(맵) 형식으로 데이터를 세팅할 수 있음
내가 만드는 앱에서 접근하고자 하는 데이터들이 여러 wallet 에 들어있다면 토큰을 발급받을 때,
액세스 하고자 하는 wallet 을 전부 지정해 주어야 한다!!



3. Spring Boot 의 서로다른 RabbitMQ Consumer Config 클래스가 같은 Queue 를 바라보고 있으면 문제가 된다?

Spring 이 기동이 안됨.. Queue Name 을 다르게 지정해주니 잘 기동 됨



4. Django App 서버 배포

- 테스트용 프로젝트여도 sqlite3 는 쓰지말자... 뭔가 버전 안맞는다고 에러나면서 사람 귀찮게 함
- 아래 링크들을 참고 하자!


[팁] 윈도우10 windows10 에서 원하는 영역 스크린샷 찍기 잡다한 지식들

아래 단축키를 누르자

윈도우 버튼 + Shift + S

이렇게 하고나면 마우스가 열십자 형태로 바뀔거임
그럼 이제 스샷 찍고싶은 영역을 드래그 하면 됨

드래그 하면 이 이미지가 클립보드로 복사 되는데..

근데 이때 중요한거 !!!
자동으로 파일 저장되는거 아님!!!

이때 파일로 떨구고 싶으면 스샷 찍혔다는 알림창을 눌러서 별도 저장 동작을 해주어야 함.
아니면 에디터나 카톡등의 메신져 화면에 Ctrl+V(붙여넣기) 하게되면 스샷 이미지가 곧바로 전송됨

- 끝 -

1 2 3 4 5 6 7 8 9 10 다음


통계 위젯 (블랙)

23204
676
235528

GoogleAdsenseResponsive

Cluster map