🛠 백엔드/Spring8 N+1 문제 해결을 위한 최고의 선택은? 현재 상황기존 코드의 경우, 키워드를 통한 Blueprint를 검색하는 JPQL을 사용하고 있다. 이 경우에 당연하게도 Blueprint에 있는 연관관계에 의해 N+1이 발생하게 된다.// Blueprint@OneToMany(mappedBy = "blueprint")private List orderBlueprints = new ArrayList();@OneToMany(mappedBy = "blueprint")private List cartBlueprints = new ArrayList();// BlueprintRepository@Query(value = "SELECT b FROM Blueprint b WHERE (b.blueprintName LIKE %:keyword% OR b.creatorName LI.. 2025. 3. 13. 북마크 구현에 관한 고민 현재 프로젝트에선 기업, 로드맵의 각 단계, 강의에 대한 북마크 기능을 지원하려고 한다. 북마크라는 테이블을 만들어 사용자가 북마크한 정보들을 저장하려고 하는데 어떤 식으로 저장하는 것이 합리적일까? 일단 내가 생각한 구현 방법은 2가지 이다. 1. 북마크 테이블을 만들고 기업, 로드맵, 강의 테이블가 각각 북마크 테이블과 연관관계를 가지도록 구현한다.2. 북마크 테이블의 칼럼을 JSON으로 만들어 한 번에 저장한다. 1. JOIN vs. JSON type 먼저, 북마크 조회 시 JOIN을 3개 사용하는 경우와 JSON을 통째로 저장하여 사용하는 경우 성능적으로 얼마나 차이가 나는지 검증해보도록 하자. 기업, 강의 영상, 로드맵 각 10,000개의 데이터가 있는 상황에서 업데이트는 한 번에 하나의 데이.. 2025. 3. 13. [Spring] 민감한 정보 관리하기 wt. secretKey JWT를 사용하다 보면 secretKey를 어떻게 관리해야 하는지 고민해본적이 있을 겁니다.이는 공개되게 되면 매우 위험하므로 적절하게 관리하는 것이 중요하다. 1. 메모장직접 메모장에 시크릿 키를 저장하여 파일을 읽어 사용하는 방법이다.원격 저장소에는 secretKey를 비워두고, 배포 시점에 직접 바꿔주는 식으로 진행하면 된다. 2. application.properties 또는 application.ymlsecretKey를 application에 저장한 후, @Value를 이용하여 가져오는 방법이다.// application.propertiesauth.jwt.secret= Yn2kjibddFAWtnPJ2AFlL8WXmohJMCvigQggaEypa5E=// POJO@Componentpublic cla.. 2024. 7. 1. RequestBody의 원리와 기본 생성자 RequestBody를 원리를 이해하기 전, 먼저 개념 정리를 해보자.직렬화와 역직렬화직렬화는 오브젝트를 문자열 또는 바이트 스트림으로 변환하는 것이다. 보통 오브젝트를 데이터베이스, 파일, 캐시 등 저장하기 위한 연속적인 데이터로 변환할 때 사용된다.이와 반대로 역직렬화는 문자열 또는 바이트 스트림을 오브젝트로 변환하는 것을 의미한다. 쉽게 말해 직렬화 종류는 우리가 자주 사용하는 JSON, XML 등이 존재한다. 이런 직렬화와 역직렬화 시 사용되는 것이 Http Message Converter이다.Http Message Converter 는 HTTP Request Body 를 Java 오브젝트로 변환( 역직렬화 )하거나 Java 오브젝트를 특정 형태로 변환( 직렬화 )하는 역할을 수행한다. Reque.. 2024. 5. 23. JDBC란 무엇인가? (+ Spring JDBC) JDBC쉽게 말해 JAVA에서 데이터베이스에 접근할 수 있도록 도와주는 API이다.먼저 왜 JDBC가 등장했는지 확인해보자.JDBC 이전의 문제점새로운 데이터베이스의 사용법을 배워야한다.DB 벤더마다 사용법은 다름다른 DB 사용 시, 새롭게 배워야하는 함프로덕션 코드의 변경 범위가 커질 수 있다.이게 무엇보다 큰 문제점DB를 다른 것으로 바꿀 경우, 모든 코드를 싹 고칠 수도 있음이를 의존 역전 원칙(DIP)의 위배라고 함DIP는 추후에 알아보자그렇기 때문에 JDBC는 DB에 접근하기 위한 모든 과정을 담당하여 우리는 DB 벤더마다 사용법을 학습할 필요가 없다.JDBC의 구성요소1. DriverDBMS와 통신하는 역할을 수행DB 벤더마다 별도의 드라이버가 필요JDBC Driver Manager라이브러리로.. 2024. 5. 19. [초록스터디] Spring MVC 회고 이번 Spring MVC 미션을 수행하면서 생각했던 점들을 적어볼까 한다.2단계1. 날짜 포맷은 어떻게 써야하는가?이번 문제에서 날짜와 시간을 저장하는 필드가 존재했다.- Java 8 이전에는 Data를 이용하여 날짜를 저장하였지만, Java 8 이후부턴 LocalDate, LocalTime, LocalDateTime을 이용- 날짜 포맷을 맞추기 위해 Reservation에서 @DataTimeFormat을 이용하여 포맷을 정했다.@DateTimeFormat(pattern = "yyyy-MM-dd")private LocalDate date;@DateTimeFormat(pattern = "HH:mm")private LocalTime time; Q. 날짜 타입 객체는 어떻게 만들지?처음에 당연히 이게 정상적으.. 2024. 5. 15. 이전 1 2 다음