본문 바로가기

전체 글99

[Spring] JPA Specification을 통해 다중 검색 조건에 따른 검색 API 구현(feat. 메소드 체이닝) 검색 API를 구현하는 방법에는 내 나름 대로 생각해본 여러 가지 방법이 있다.1. 백엔드에서 전체 data를 다 주고 프론트에서 contains과 같은 개발 언어 내장함수를 이용해서 프론트에서 처리2. jpa repository로 like containing을 이용해서 원하는 조건의 쿼리를 날리기3. elastic search 검색 엔진을 이용하기 위 세가지 중에서 1번은 기능 구현 자체를 프론트에게 너무 위임하여 불필요한 data 까지 전달할 우려가 있어서 사용하지 않았고 elastic search는 단순 게시글 검색 기능이기 때문에 기능에 비해 큰 툴을 사용한다는 점 때문에 지양하였고 2번 방법을 통해 containing을 처음에 이용하려고 하였다.  그러나 검색 조건 record request D.. 2024. 5. 19.
[Spring] 무한 스크롤에서 Page vs Slice의 차이(feat. Slice 구현 코드) 프로젝트에서 내가 맡은 기능 이슈에서 게시글 목록 전체 조회 시 무한 스크롤 구현이 있었다. 작년에 프론트로 개발을 처음 시작했었을 때 무한 스크롤의 경우 백엔드에서 전체 데이터를 다 주면 안드로이드에서 recyclerView를 이용해서 무한스크롤을 구현했었는데 올해부터 백엔드 개발을 시작한 이래로 2월에 기본기를 다지기 위해 다른 프로젝트에서 CRUD를 맡다가 지금은 백엔드 입장이 되어서 백엔드 단에서 이 기능을 맡게 되어 감회가 새롭다. 백엔드로서 처음 맡는 기능인 만큼 단계적으로 진행하고자 무한 스크롤 없이 200OK가 응답되도록 전체적인 게시글 GET 요청에 대한 코드 설계는 완료를 해서 feature/#189 (이슈 번호) 브랜치에 push를 해둔 상황이고(엔티티 3개를 거쳐야 해서 구현이 재밌.. 2024. 5. 18.
[Python] 백준 1261번 알고스팟 보호되어 있는 글 입니다. 2024. 5. 16.
[CICD] application 관리 submodule 문제를 git secrets으로 해결하기: DEV, PROD 분리 그동안 AWS RDS, S3, credentials와 같은 민감 정보를 Springboot project git 레포에 올릴 수가 없어서 .gitignore로 처리하였고 submodule을 이용해서 private repo access token을 git secret 상에 넣고 cicd pipeline에서 submodule 항목을 true로 설정하여 build시 submodule 내 코드들을 원하는 프로젝트 path로 복사하여 jar 파일을 만듦으로써 해결하였다. 그러나 dev에서는 jpa 속성을 update로 하는 것이 좋지만 prod 환경에서는 validate로 설정이 되어야했기에 이러한 부분까지 submodule로 분리하여 관리하는 것이 어렵다고 느껴져 submodule을 해제하고 git secret.. 2024. 5. 15.
[Spring] JPA 일대다 양방향 관계 주의할 점: MappedBy와 연관 관계 주인 bookStore과 book가 일대다 양방향 연관 관계를 맺고 있는 상황을 생각해보자. entity 코드는 아래와 같다.(entity에 @setter는 일반적으로 쓰지 않는 것이 좋지만 JPA 일대다 양방향 연관 관계 맵핑 시 주의할 점을 설명하기 위해 선언하였다.)@Entity@Getter @Setterpublic class BookStore { @Id @GenerateValue private Integer id; private String name; @OneToMany(mappedBy = "bookStore") private Set books = new HashSet(); public void add(Book book) { this.books.a.. 2024. 5. 13.
[Spring] 성능 개선을 위해 Querydsl을 어떻게 활용해야 할까 query dsl을 이 pr 링크에서 처음 시도해보았으나 기존에 내가 계속 리펙토링 하던 로직보다 성능이 나아지지 못하여서 보다 활용 원리를 더 공부하고 다른 플젝에 이슈를 생성하여 적용하고자 해당 게시글을 작성하게 되었다. 어렵지만 공부하고 적용해서 계속 추가할 예정이다. 제목 그대로 성능 개선을 위해 Querydsl을 어떻게 활용해야 할까? extends / implements 사용하지 않기일반적으로 repository를 만들면 spring data jpa 기능을 이용하기 위해 jpa repository를 extends로 상속 받고, query dsl에서도 custom repository를 만든 뒤 상속 받으며 이를 구현한 구현 객체가 필요하다. 혹은 query dsl의 경우 QuerydslRepos.. 2024. 5. 13.
[Python] 백준 1504번 특정한 최단 경로 보호되어 있는 글 입니다. 2024. 5. 12.
[Python] 백준 1253번 좋다 보호되어 있는 글 입니다. 2024. 5. 12.
[Python] 백준 1043번 거짓말 보호되어 있는 글 입니다. 2024. 5. 10.
[DB] MySQL이 아니라 redis에 refresh token을 저장했을 때의 이점이 뭘까 Refresh token을 MySQL과 같은 일반 RDBMS를 사용하는 것이 아니라 RDBMS가 아닌 redis에 저장하여 사용하는 사례가 있어서 "왜?"라는 질문을 던지고 답을 해나아가는 과정을 기록하고자 한다. Redis란redis는 디스크가 아니라 메모리에 데이터를 저장하는 인메모리 방식의 DB이다.익숙한 MySQL의 경우 SSD, HDD와 같은 보조기억 장치(involatile 비휘발성)에 데이터를 저장하는데 In-Memory 방식의 데이터베이스의 경우 컴퓨터의 주 메모리인 RAM(volatile 휘발성)에 데이터를 저장한다. 운영 체제 시간에 배웠던 내용을 떠올려 보면특정 프로세스가 실행이 되면 컴퓨터는 보조기억장치에 저장된 데이터를 RAM으로 불러와 CPU가 일을 수행한다. 따라서 redis와.. 2024. 5. 9.