2024/05/21 3

99클럽 코테 스터디 2일차 TIL: [백준] 2179. 비슷한 단어

https://www.acmicpc.net/problem/2179 반복문을 통해 단순히 구현하면 되는 문제이다. 단순한 문제 같지만 헤맸다. substring()을 통해 두 문자열을 비교하면 메모리 초과가 난다. 따라서 charAt으로 각 자리를 비교하면 된다. 그리고 비교 결과 다르면 반복문을 빠져나오면 된다.접두사 길이가 가장 긴 두 개 이상의 문자열을 set이나 list에 저장하려고 했으나, 굳이 할 필요 없다. 어차피 문자열들 중 가장 먼저 입력된 문자열 2개를 출력해야 하는데, sameCount와 sameCountMax가 같은 경우에 값을 갱신하지 않고 sameCount > sameCountMax인 경우에만 값을 갱신하면 자연스럽게 가장 먼저 입력된 문자열 2개만 출력할 수 있다.import j..

CS/Algorism 2024.05.21

반정규화를 통한 성능 향상

이 글은 프로젝트에서 게시글 페이징 조회시 성능 향상 과정을 기록하는 글이다. 성능 향상을 위해 적용한 것들을 순서대로 설명하겠다.1. 배치 사이즈 설정문제게시글 페이징 조회시 게시글의 좋아요 수, 댓글 수, 북마크 수를 함께 반환하기 위해 Post 엔티티를 Like, Comment, Bookmark 엔티티와 조인해야 한다. 그리고 post.getLikes().size()와 같이 Post 엔티티와 연관된 Like 엔티티의 개수가 몇개인지 판단하여 좋아요 수를 알아내는 방식을 사용했다. 그런데 이 방법은 N+1 문제가 발생한다. 해결 방법 1. 페치 조인따라서 해결 방법으로 페치 조인을 떠올렸다. 그런데 페치 조인은 ToMany 관계에 대해서 페치 조인을 하나만 적용할 수 있다. 나는 Like, Comme..

카테고리 없음 2024.05.21

MySQL에서 의도치 않게 조회시 레코드에 S락을 거는 문제

지난 번 프로젝트에서도 그렇고 이번 프로젝트에서도 동시성을 테스트하는 상황에서 데드락이 발생했다. 데드락 발생 원인을 알고자 InnoDB 로그를 살펴보니, 의도치 않게 조회시 레코드에 S락을 걸면서 데드락이 발생한 것이었다. 이에 대해 더 자세히 알아보자.MySQL이 락을 거는 방식결론부터 말하자면 MySQL은 외래키 제약이 테이블에 정의되어 있으면 레코드 삽입, 수정, 삭제시에 해당 참조 레코드에 S락을 건다. 공식 문서에서는 다음과 같이 말한다.If a FOREIGN KEY constraint is defined on a table, any insert, update, or delete that requires the constraint condition to be checked sets shared..

Trouble Shooting 2024.05.21