Week 49(1202-1208)
241202(Mon)
- 노마드 코더 Flutter 로 웹툰 앱 만들기 강의 수강
- ~Section 2까지
- 플러터로 웹뷰앱 만들어보기
- webview_flutter 라이브러리를 썼는데 의외로 잘 돌아간다
- 여기에 alert와 네비게이션정도만 플러터로 해서 배포하면 좋겠다 싶음
- 앱 배포 알아보기
- 역시나 앱 정보 기입이 불편하다. 디자인도 만들어야 하고
- 애플 개발자 계정도 새로 결제해야하고…
241203(Tue)
- influxdb 공부
- Point()에 들어가는게 대략 _measurement 명이었다
- _measurement는 table명 느낌. bucket이 db 느낌?
- 즉 _measurement명과 주요 필드를 동일한 이름을 써서 헷갈렸던 것이 있었다
- group은 group_by 느낌? 쿼리문 내의 순서도 중요한듯
- influxdb의 candidate key 관련 조사, 공부
- 우선 InfluxDB에서는 (TimeStamp, tags, measurement)가 candidate key 처럼 보인다. 여기서 tag는 일반 field와는 달리 주로 특정 객체를 식별하기 위해 사용되는 필드로, index가 적용된다는 특징이 있다.
- 여기서 timestamp를 제외한 부분을 series key라고도 한다
- 즉 같은 tag와 같은 timestamp를 가지는 데이터가 다시 삽입되면 influx db에서는 이를 overwrite한다
- 실제로 테스트 해봤을 때도 overwrite 되는 것을 확인👍
241204(Wed)
- 내부에서만 접근 가능한 디비 추출
- 원래는 보통 rds등을 쓰는데 이건 도커로 내부에서 같이 돌리고 있어서 접근이 어려웠다
- pg_dump로 덤프를 땄다
- 날씨 api 사용 관련 문제
- api가 느리고, 가끔은 오류가 나고, 가끔은 404가 난다
- 그래서 전체 api 서버가 느려지는 문제가 생겼다
- 문제를 종합적으로 고려했을때 중간에 redis로 캐싱을 하기로 결정했다
- redis말고 장고 메모리를 써도 ok 이긴한데 이미 celery로 사용하고 있었다
- 캐싱으로 결정한건 api 호출횟수 제한도 있기 때문에 적용하기로 결정
- db에 저장할정도의 데이터는 아니고, 날씨 데이터라 날짜가 지나면 의미가 없어진다
cache_page
를 사용할까 싶기도 했는데, 정말 유용해 보였으나, cache_page는 자동으로 클라이언트 캐싱도 해준다는 문제가 있었다- 날짜 기반이다보니 날짜가 지나면 바로 데이터를 바꿔줘야 하는데 클라이언트 캐싱은 내가 조절할 수가 없었다
- 아무튼 키 바탕 캐싱으로 직접 적용해줬다
- 다음날 매일메일에서 동기 방식으로 외부 서비스를 호출할 때 외부 서비스 장애가 나면 어떻게 조치할 수 있나요? 라는 비슷한 문제가 나와서 좀 재밌었다
- 리엑트 렌더링 관련 문제 해결하며 공부
- memo, useMemo 등도
241205(Thu)
- 파이썬 코드를 보다 든 생각 → 파이썬은 타입에 따른 오버로딩이 가능한가?
- 물론 내부에서 if, instance_of()로 처리는 가능하겠다만 ocp 위반이 아닌가 싶다
- 찾아보니 @singledispatch 가 있다고 한다
- drf-yasg swagger 오류
- swagger에서 auto schema 만들어낼 때 GenericAPIView을 쓰면 post시에 serializer_class를 반드시 설정해주어야 하는 것 같다
- 다만 body로 받는 데이터가 없음 문제는. 단순 이벤트 트리거용이라. parameter로 값을 받음
- response를 만들어내기 위한것으로 보아 responses= 를 정해주면 뭐라 안할까 했는데, 어림도 없음…
- 이걸 해결하기 위해 제네릭 안쓰고 APIView를 그냥 쓰면 object 불러올때 404랑 권한 처리가 귀찮아지는…듯? 이라 생각했는데
- 실제로 APIView로 구현해보니, get_object_or_404랑 check_permission만 써주면 되서 어짜피 2줄로 쉽게 구현이 가능했다.
241206(Fri)
- datetime → django.utils.timezone 을 이용하게 일괄 수정
- 일단 지금 당장은 상관없어도 미래에 국제화 추가하며 크게 변경할 일이 있다면 설정 변경 하나로도 가능하니깐
- 그리고 개인적으로 통일성을 중요하게 생각. 크게 틀린게 아니라면 차라리 일관성있게 가져가는게 좋다고 생각
- 타임존에 대해서도 많이 공부했다… spring/java에서도 가장 처음 공부한게 이것 같은데
- 다만 이후에 버그 발생. now() 가 아닌 localtime(), localdate()를 써야한다. 이걸 써야 get_current_timezone()가 자동으로 된다.
- 아니면 장고에서는 now()시 USE_TZ=True면 utc 기준으로 저장한다
241207(Sat)
241208(Sun)
Week 50(1209-1215)
241209(Mon)
- SonarQube 정적분석
- 학교 수업 때 잠깐 들어봤고, 유료 서비스가 많아 써볼일이 없을거라 생각했는데, 사용할 수 있게 되어 재밌었다
- 순환 복잡도도 같은 수업에서 들었는데, 실제로 분석하고 있어 재밌었다. 다행히 코드에서 순환복잡도 초과는 없었는듯? 나름 클린코드를 짰다고 생각하겠다
241210(Tue)
- SonarQubr 이용해서 code smell 수정 작업들
- casing과 lambda lazy binding, 순환 복잡도 문제가 많았다.
241211(Wed)
- 기존에 확장가능하게 인터페이스 분리해서 제작한 서비스에서
- 새롭게 구현체를 만들게 되었다
- 다만 기존에는 껏해야 웹 크롤링 / 파싱만 있을거라 생각하고 구현했는데
- 아에 DB에 직접 접속해서 가져오게 되었다. 그러나 같은 인터페이스 사용에 문제는 없었다. 👍
- mongodb에 대해 학습하고 사용
- 솔리드 커넥션 웹 작업
- 글 목록화면 Modal → Dropdown 변경
- 기본 프로필 이미지 추가
241212(Thu)
- MongoDB 조회성 쿼리 학습, 작업
- database - collection - document 구조
- 일반 쿼리로 조회하기
- pipeline 만들어서 aggregation 하기
- Celery task retry() 시 오류 디버깅
- FAILED가 뜨면 모르겠는데, 아에 result 자체가 안남았다
- kwarg 전달과 관련된 문제였고, 파이썬 인자 전달에 대해 한번 다시 공부함
- 아래 순서대로 인자가 전달된다
- 위치 인자 (arg)
- 키워드 인자 (key=value)
- *args (가변 위치 인자)
- **kwargs (가변 키워드 인자)
- 솔리드 커넥션 웹 작업
- 폰트 깨짐 오류 → tailwind 적용으로 해결
- 북마크 ui 위치 수정
- github release와 tag를 알게됨. 직접 release branch push말고 release tag걸면 자동 push로 하는것도 좋을듯? 백엔드 배포 내가 구성하게 되면 이걸 써봐야겠다
241213(Fri)
- 솔리드 커넥션 도메인 이전 작업
- 새로운 도메인 등록
- DNS 레코드 이전
241214(Sat)
- 솔리드 커넥션 서버 개발
- 신규 인스턴스 환경 설정
- 도메인 변경에 따른 코드 수정
- 기존 CORS관련 하드코딩된 사항 환경변수로 분리
@Value
대신@ConfigurationProperties
을 사용한 분리- https://velog.io/@ssol_916/스프링에서-property-사용할-때-Value-사용을-추천하지-않는-이유
241215(Sun)
- 미식록 서버 개발
- sentry 오류 수집시 ALLOWED_HOST 관련 오류 수정하기
- nginx단에서 아이피를 통한 요청을 막아 해결
- https://devlog.jwgo.kr/2020/12/29/how-to-block-suspicious-scan-related-to-allowed-hosts/
- 444 응답은 Nginx 내부에서 사용하는 코드로 외부에서는 응답이 없는것으로 확인된다
Week 51(1216-1222)
241216(Mon)
- 솔리드 커넥션 서버 배포
- 도메인, compartment별 IAM 권한 설정
- compartment 생성, 리소스 이동
- compartment는 논리적 개념이라 쉽게 이동이 가능했고, 이동시에 리소스에서 ‘리소스 이동’을 찾으면 된다
- 배포시에 yml 에서 값을 불러오지 못하는 문제
- 로컬환경에서 제대로 읽어오는지 테스트하니 문제 없음
- 그래서 jar 파일 풀어서 어떤값이 들어가 있는지 확인. 확인해보니 yml이 업데이트가 안되있었음
- 즉 문제 → 배포시에 서브모듈이 최신화가 안되어 있는 문제
- 서브모듈은 자동으로 최신화 되는것이 아니라, 커밋시에 서브모듈 버전을 정해서 같이 커밋해서 지정하는 방식이라는 것을 깨달음.
- 최종 도메인 전환
241217(Wed)
- 미식록 서버 데이터베이스 교체
- AWS RDS로 교체
- RDS 퍼블릭 접속시 체크할 것 → 인바운드 보안규칙, 서브넷 퍼블릭, 라우팅 테이블 외부 연결, RDS 퍼블릭 접근 허용
241220(Fri)
- Python docstring의 param, return 값 포매팅 해주는 기능이 안됨
- Google, NumPy 방식, reST 방식 모두 해보았으나 안됨
- Python 확장기능 레포지토리 → Pylance 확장기능 레포지토리 보며 이슈 확인
- 따로 확인되는게 없어서 이슈 올릴까 하다 마지막 pre-release 버전으로 업데이트 해보니 해결됐다
- 이슈 올렸으면 이미 solved 되었다고 말 들을뻔
241221(Sat)
- 솔리드 커넥션 서버 개발
- OCI IAM 정책 설정
- group name으로 안되서 group id로 설정하니 정상적용
- 알고보니 domain있으면 domain/group_name으로 subject 설정해야함
- 마이그레이션
- DBeaver로 스키마 차이점 추출
- jpa 생성 ddl 추출
- FK, index 명이 무작위인지 알았는데 규칙이 있는듯? 뭔가 해시돌린 값으로 읽을수는 없어도 동일값 유지하는듯
- 그리고 flyway 추가
- flyway도 디비에 테이블 추가해서 마이그레이션 내역 관리하는듯?
241222(Sun)
- 솔리드 커넥션 서버 개발
- 테스트 MySQL 디비 띄우기
- DBeaver의 restore 사용하려니 자꾸 오류 발생…
- Docker랑 사용하기 힘들다
- 그냥 직접 접속해서 restore sql문을 직접 타이핑
- 이때 한글 Enum에서 한글이 인식이 안되는 문제. 이건 그냥 손수 수정해줌
- 이때 임시로 데이터 삭제했더니 해당 데이터 참조하는 FK가 마이그레이션시 오류… 화난다
- 심지어 3번 당했다…
Week 52(1223-1229)
241225(Wed)
- AWS Certified Cloud Practitioner(CLF-C02) 공부
241228(Fri)
- AWS Certified Cloud Practitioner(CLF-C02) 시험