24년 12월을 돌아보며

Published
December 31, 2024
Last updated
Last updated December 28, 2024
Tistory
Category

Week 49(1202-1208)

241202(Mon)

  • 플러터로 웹뷰앱 만들어보기
    • 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)

241215(Sun)

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) 시험