전체 글
사용하면서 느낀 장단점 Django의 장점 기본 어드민 페이지 제공 데이터베이스 관리 용이 기본 CRUD를 빠르게 개발할 수 있는 viewset 제공 기본 viewset 상속받고 사용법만 익히면 너무나도 쉽게 CRUD 구현 가능 다양한 파이썬 라이브러리 사용 가능(Pandas, selenium 등) 기본 ORM 제공 Django 템플릿을 활용하면 손쉽게 풀스택 개발 가능 초반 학습할 때 FE 지식도 자연스럽게 학습 가능! 러닝커브가 적은 언어 python으로 이루어짐 개발 서버의 자동 감지 및 재시작 코드의 변경을 감지하여 개발서버 자동으로 재부팅해줌 빠른 build 가능 Serverless 아키텍처로 구현 시 매우 유리(Spring으로는 꿈도 못 꿀 아키텍쳐...) django 한번 익히면 fast a..
문제 상황 태그 테이블을 리팩토링하면서 태그 리스트를 String으로 받도록 변경하였다. @NotNull(message = "아이템 태그는 빈칸일 수 없습니다") private String itemTagList; 문제는 이렇게 변경할 경우 태그 기반 검색을 수행할 때 기존의 like로 조회 시 극심한 성능 저하가 에상된다는 점이다. 이 때의 상황에 대비하여 멘토님께서 조언해주신대로 MySQL의 full text search를 적용해보았다. 해결방법 Full Text Search란? Full text search는 MySQL을 사용한다면 하나의 서비스나 시스템에 대해 데이터 저장, 관리, 저장된 데이터 내에서의 간단한 검색 기능을 제공할 때 사용 elastic search 같은 검색 엔진을 사용하지 않더라..
상황 좋아요 테이블 반정규화 그 전 글을 통해 좋아요 기능을 구현할 때 테이블을 어떻게 설계해야할지에 대해 많은 고민을 했다는 사실을 알 수 있을 것이다. 좋아요를 구현할 때 좋아요 테이블을 만드는 것은 당연하다. 하지만 그 좋아요가 여러 개에 해당할 때에는? 테이블을 어떻게 해야할 것인지에 대해 많은 고민을 하였다. 결국 나는 테이블을 나누는 정규화 대신, 반정규화를 이용하여 테이블을 합쳤다. 데이터 중복을 견디고 조회 성능을 선택하다.. 태그 비슷한 예시로 태그가 있다. 예비부부, 플래너, 포트폴리오, 아이템에서 태그를 참조하고 있다. 기본적으로 N:M 관계이기 때문에 현재는 중간테이블을 두어 태그 테이블과 연결하는 방식을 사용하였다. 하지만 이는 과도하게 테이블이 많아지는 결과를 초래하고 성능 향상..
문제 상황 내가 개발을 맡았던 좋아요 기능에서 내가 봐도 문제가 많은 코드가 있었다. 부끄럽지만 이를 공개하자면.. /*================== User가 좋아요 한 Entity 리스트 반환 ==================*/ public List getUserLikedPortfolio(Users users) { List likeList = likesRepositoryService.getLikesByUsersAndType(users, LikeEnum.PORTFOLIO); return likeList.stream() .map(userLikes -> portfolioRepositoryService.findPortfolioById(userLikes.getLikedId())) .filter(portf..
멘토링 중 멘토님께서 지적해주셨던 내용! GET 메소드 일 때에는 readOnly=true를 붙이라고 말씀해주셨는데 이는 Transactional에서 readOnly=true를 사용하면 다음과 같은 이점이 있기 때문이다. 1. JPA와 관련된 이점 1. 트랜잭션 Commit 시 영속성 컨텍스트가 자동으로 flush 되지 않으므로 조회용으로 가져온 Entity의 예상치 못한 수정을 방지 2. JPA는 해당 트랜잭션 내에서 조회하는 Entity는 조회용임을 인식하고 변경 감지를 위한 Snapshot을 따로 보관하지 않으므로 메모리가 절약되는 성능상 이점 2. Replication 부하 분산 readOnly = true가 설정되어있는 메서드의 경우 Slave DB에서 데이터를 가져오도록 동작한다. 이를 통해 ..
문제 상황 code deploy 배포 시 AllowTraffic 과 BlockTraffic 단계에서 시간이 매우 오래 걸리는 문제 발생 AllowTraffic은 1분 32초, BlockTraffic은 5분 5초가 소요됨. 해결방법 AllowTraffic은 상태 검사 간격 및 횟수를 조정해주어야 함. EC2 > 대상그룹 > 상태검사 > 편집 에서 변경. 정상 임계 값 2회, 간격 5초로 조정 시간 1분 이상 단축👍 BlockTraffic에서는 대상그룹 속성 편집 > 대상 취소 지연(드레이닝 간격) 줄이기 default 300초로 설정되어 있던 드레이닝 간격 10초로 변경 16초로 단축 성공!
문제 상황 스프링 부트 재시작 때마다 hibernate에서 특정 datatype의 칼럼이 변경되었다는 쿼리가 나옴 [Hibernate] alter table chat_messages modify column last_message_time datetime(6) [Hibernate] alter table chat_rooms modify column last_message_time datetime(6) [Hibernate] alter table companies modify column created_on datetime(6) [Hibernate] alter table companies modify column modified_on datetime(6) [Hibernate] alter table custom..
문제 상황 spring boot 서버 연결 시 mysql too many connections error 발생 현재 mysql에 연결된 connections이 max_connections보다 많기 때문에 연결되지 않는 문제 발생 default max_connections는 60 해결방법 timeout 파라미터 값 변경 max_connections의 개수를 늘려주는 것은 근본적인 해결방법이 아님. AWS RDS로 mysql을 사용 중이므로 AWS RDS 접속 RDS > 파라미터 그룹 에서 파라미터 그룹 생성 파라미터 그룹 > 수정에서 wait_timeout, interactive_timeout 값 변경 default로는 둘 다 28800초로 설정되어 있음 RDS 재부팅 후 해결 마치면서 code deplo..
문제 상황 리눅스 운영체제를 사용하다보면 파일 권한을 변경해야 할 일이 있다. 제일 많이 쓰는 chmod 400 000.pem.. 사실 chmod를 무지성으로 많이 사용했었는데 이번 기회에 리눅스 파일 권한 설정에 대해 알아보겠다. 리눅스 파일 권한 리눅스에 접속하여 ls -l 명령어를 쳐보자. 다음과 같은 결과가 나올 것이다 (이건 맥에서 친거긴 하지만 비슷하게 나온다) 저기서 맨 앞의 -rw-r--r--을 살펴보자. 파일 vs 디렉토리 맨 앞의 d, - 를 살펴보자. d는 디렉토리를 의미하고 -는 파일을 의미한다. User, Group, Other 리눅스의 파일 사용자 접근 권한은 User, Group, Other로 나뉜다. User는 소유자, Group은 소유자가 속한 그룹, Other는 그 외를..