본문 바로가기

전체 글

(53)
[pandas] google sheet 에서 데이터 가져오기 문제 상황 회사에서 google sheet 데이터를 받아온 후 그 데이터로 처리해야하는 일이 있었다. 인풋값으로 구글 시트를 다운 받아 해당 엑셀파일을 하나하나 전달받아서 받아와야한다는 점이 비효율적으로 느껴져서 google sheet 데이터를 바로 받아올 수 있는 방법이 없을리가 있겠어? 하고 찾아보니까 google sheet 링크를 file_path에 전달하면 됐다. 해결 구글 시트에서 파일>공유>웹에 개시 를 통해 링크를 생성할 수 있다. 원하는 옵션으로 지정하면 된다. csv 파일을 가져오는게 빠르기 때문에 나는 csv 파일로 가져왔다. 공유하고싶은 시트도 지정할 수 있다. 게시를 누르면 생성된 url을 복사할 수 있는데 그 url을 pandas의 read_csv의 file_path로 넣어주면 된..
[django] DB replica 트래픽량이 많아지면 DB에 접근하는 I/O 작업 시간이 길어지기 때문에 Application의 CPU 연산보다 더 큰 bottleneck이 된다. DB 작업은 read, 즉 select가 대부분이기 때문에 read replica를 두어 read는 replica가, write는 master(default)가 하게하면 read 작업을 분산시킬 수 있다. django에서는 multidatabase를 쓸 수 있도록 되어있다. Model.objects.using('{dbname}') Model Manager에서 .using('{dbname}') django.db.router로 DB Router 설정 모든 read 작업이 replica로 가는 것을 처리하기 위해서는 Router에서 db_for_read는 repli..
[python] @property, __init__ 먼저, __new__ 메소드와 __init__ 메소드의 차이를 알아보려한다. 파이썬은 항상 __new__ 가 __init__ 보다 먼저 호출된다. __new__는 인스턴스 객체를 메모리에 할당하고 object를 반환한다. __init__은 인스턴스를 생성하는 것이 아니고 생성된 인스턴스의 멤버 변수를 초기화하고 필요에 따라 자원을 할당한다. __new__의 첫번째 인자에는 cls(클래스)가 들어가고 __init__의 첫번째 인자에는 self(인스턴스)가 들어간다. 파이썬에서는 @property를 사용하면 getter와 setter를 일반 필드로 바로 접근하는 것처럼 사용할 수 있다. class MyClass: @property def title(self): return self._title @title...
[python] self와 cls의 차이 / instance method, static method, class method의 차이 class MyClass: # instance method def instance_method(self, a): print (a) # class method @classmethod def class_method(cls, a): print (a) # static method @staticmethod def static_method(a): print (a) python class의 3가지 method를 위처럼 작성했다. 1. instance method instance method는 첫번째 인자에 인스턴스가 들어가야한다. instacne method는 자기자신을 인자로 받기 때문에 인스턴스의 속성에 접근하거나, 다른 instance method를 호출하거나 클래스 속성이나 class method에 접근할 수..
[springboot] 순환 참조 해결 조회 쿼리를 한번에 날리기 위해서 이런식으로 작성했더니 public Optional findOrder(Long orderId, String loginId) { return em.createQuery("select o from Order o" + " join fetch o.orderItems" + " join fetch o.delivery" + " where o.member.loginId = :loginId" + " and o.id = :orderId", Order.class) .setParameter("loginId", loginId) .setParameter("orderId", orderId) .getResultList().stream().findAny(); } 주문 리스트가 중복으로 출력됐다. sel..
[springboot - h2] docker 적응기 처음(인줄 알았으나 두번째)으로 도커를 사용해봤다 내 프로젝트는 thymeleaf, springboot, h2 를 사용했는데 springboot, h2를 같이 한 번에 사용하려면 각 컨테이너를 만들고 docker compose를 사용해 묶어야 한다. 매번 개발 때랑 서비스 때랑 properties의 datasource url을 바꿔주기 귀찮아서 테스트용 h2 컨테이너도 하나 더 만들었다. 그럼 테스트 용 h2를 실행하고 그냥 인텔리제이에서 앱을 실행시키면 동작한다 spring과 h2 연결은 아래 블로그 글들을 참고했고 https://velog.io/@seungju0000/docker%EC%99%80-h2-%EC%97%B0%EA%B2%B0%ED%95%98%EA%B8%B0 docker와 h2 연결하기 doc..
SQLD 정리 45회 SQLD 시험 공부하면서 노션에 정리했던 글 데이터 모델의 이해 데이터 모델의 이해 데이터 모델과 성능 SQL 기본 및 활용 SQL 기본 SQL 활용 SQL 최적화 기본 원리 제 1장 데이터 모델의 이해 제 1절 데이터 모델의 이해 더보기 모델링의 이해 모델링의 정의 : “다양한 현상을 표기법에 의해 표기하는 것” 특징 : 추상화, 단순화, 명확화 모델링의 3가지 관점 : 데이터, 프로세스, 상관 데이터 모델링의 유의점 중복 : 데이터베이스가 여러 장소에 같은 정보를 저장하지 않게 함 비유연성 : 데이터정의를 데이터 사용 프로세스와 분리 비일관성 : 상호 연관 관계 대해서 명확하게 정의 생길 수 있는 문제 ex) 신용상태에 대한 갱신없이 고객의 납부이력정보 갱신 데이터 모델링의 3단계 진행 개념적..
[springboot - thymeleaf] Form Dto : NullPointerException 마이페이지의 회원 정보를 미리 로딩하고, 수정 사항이 있으면 바로 POST 요청을 보내기 위해서 UpdateForm.class를 만들어 model Attribute에 매핑하고, form의 th:object로 매핑했다. MyPageController.class @GetMapping(value = "/myInfo") public String myInfo(@AuthenticationPrincipal LoginUserDetails member, Model model) { if(member==null) return "redirect:/members/login"; Member findMember = memberService.findUser(member.getUsername()); UpdateForm updateFo..