JPA에서 흔히 발생하는 N+1이란?
·
IT 지식 (기술면접 대비)
⭐️ N + 1 이란?JPA를 사용하다보면 예를들어 내가 쿼리를 1번만 날리게 설계를 했는데, 콘솔창을 보니까 3번이상이 찍히는 경우를마주칠 수 있을 것이다. 이를 N+1문제라고 부르는데, 하나의 쿼리를 실행한 후 추가로 N개의 쿼리가 실행되는 상황을 의미한다. [ N + 1 개념 ] List teams = teamRepository.findAll(); // 1번 쿼리for (Team team : teams) { System.out.println(team.getMembers()); // N번 쿼리 발생} 위의 코드를 보자. findAll(); 메서드는 전체팀을 한번 조회한다 -> 쿼리 1번 team.getMembers(); 메서드는 각 팀의 멤버를 조회하면서 출력한다 -> 팀 수만큼 쿼리를 발생..
@RequestParam과 @PathVariable 애노테이션이란 무엇이고, 서버에서 값을 전달받아 사용할 수 있는 다른 방법이 있나?
·
IT 지식 (기술면접 대비)
⭐️ @RequestParam과 @PathVariable이란?Spring Boot에서 백앤드 API를 만들다 보면 클라이언트단에서 요청된 값을 받아 처리하고 응답을 내려줘야한다. 이때 @RequestParam 어노테이션과 @PathVariable 어노테이션을 자주 만나게 되었다. 🧐 하지만 이 둘의 차이가 무엇인지 헷갈린다. 오늘은 이 두가지에 대해서 자세하게 알아보고, 또 다른 방식으로 값을 받을 수 있는지 알아보자. 🔥 @RequestParam@RequestParam은 HTTP 요청의 쿼리 파라미터 값을 받아오기 위한 어노테이션이다. http://localhost:3000?key=value 형식의 URL에서 사용한다. [ 예시코드 ] // 앤드포인트 LIST: (currentPage, userNo..
EC2 생성및 활용을 해보자
·
AWS
⭐️ IAM 사용자 생성우선 EC2를 생성하기 위해서 AWS 페이지에 로그인하여 사용자를 만들고 시작하자. 왜냐하면 처음에 가입을하면 Root계정인데 모든 권한이 다 있기 때문에 보안성 너무 위험하다. 그렇기 때문에 사용자를 만들어 필요한 권한만 부여해서 사용해야한다. 이렇게 하면 역할 분리와 최소 권한 원칙을 지킬 수 있어 보안성이 증가한다. 우선 AWS에 로그인하자. Root 계정으로 로그인 한 뒤 IAM에 들어가자. IAM의 사용자 탭을 누르면 존재하는 사용자가 나온다. 미리 admin이라는 사용자를 만들어 놨기때문에 admin 사용자가 뜬다. 사용자를 만들었으니 EC2를 만들어 보자 ‼️ ⭐️ EC2 생성 admin 계정으로 로그인해서 EC2에 들어가보자. EC2가 존재하지 않으면 ..
Weekly TIL - Day 43
·
Weekly TIL
⭐️ Today's summary오늘은 파이널 프로젝트 시작전 React 프로젝트의 기본 구조 세팅 및 반응형 UI 작업을 좀 더 유지보수가 쉽게따로 js 파일로 빼서 관리하는 방법을 배웠다. 반응형 잡는 코드는 큰 어려움이 없었지만, 기본적인 react에서 props가 어떻게 전달되는지, 객체 접근시에.접근과 []접근의 차이에 대해서 궁금증이 생겨 찾아보았다. ⭐️ Problem오랜만에 React를 하다보니 아래와 같은 코드의 props이 어떻게 넘어가는지 헷갈렸다. Styled-components에서 지원하는 ThemeProvider를 사용하면 하위 컴포넌트 (자식 컴포넌트)에게 props를전달할 수 있는데, theme={theme}에서 props가 어떻게 넘어가는지 기억이 안났다. 이 props는..
@SpringBootApplication 이란?
·
IT 지식 (기술면접 대비)
위 사진처럼 Spring initalizr를 통해 Spring Boot 프로젝트를 생성하면 위와같은 코드가 존재한다. 여기서 @SpringBootApllication이 무슨 역할을 하는지 알아보자. ⭐️ SpringBootApplication 내부 구조 @SpringBootApplication 어노테이션은 3개의 핵심 어노테이션을 조합한 메타 어노테이션이다. 아래에서 3가지의 핵심 어노테이션 안에는 여러개의 컴포넌트가 존재하는데, 간단하게 여러 컴포넌트는 무슨 의미인지, 그래서 핵심 컴포넌트를 정리하자면 무엇이고, 왜사용하는지에 대해서알아보겠다. 🔥 @SpringBootConfiguration @Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)..
Spring과 React 연동 (Weekly TIL - Day 39)
·
Weekly TIL
⭐️ Today's summary오늘은 학원 과제인 저번에 만들어둔 React SPA 프로젝트에 이번에 배운 JPA를 통해 Spring boot와React를 연동하여 Postman을 통하여 좀더 쉬운 백앤드 - 프론트 앤드 연동을 해보겠다. [ Postman ] ⭐️ Problem이번에 가장 어려웠던 부분은 바로 에러 처리하는 부분이였다. 예시로 MemberServiceImpl의 로그인 코드를 보자.// 로그인 @Transactional(readOnly = true) @Override public MemberDto.Response loginMember(MemberDto.LoginRequest memberDto) { // Dto -> Entity Member ..
Weekly TIL - Day 38
·
Weekly TIL
⭐️ Today's summaryDTO 객체가 서버와 클라이언트 사이에서 데이터를 주고받을 때Jackson을 기반으로 직렬화(Java 객체 → JSON)와 역직렬화(JSON → Java 객체) 과정을 거친다. ✅ 역직렬화 (JSON → Java 객체)클라이언트에서 JSON 데이터를 보내면 서버에서는 해당 JSON을 DTO 객체로 변환한다. 이때 Jackson은 내부적으로 기본 생성자로 DTO 객체를 생성하고 JSON의 key와 일치하는 setter 메서드를 찾아 값을 주입한다. 즉, 역직렬화에서는 기본 생성자와 setter가 필요하다 ‼️ ✅ 궁금증이 생김🧐 @Setter가 없는데도 값이 들어가는 경우가 있다? 이 경우 Jackson이 필드에 직접 접근(Reflection) 하여 값을 주입하는 것이다...
Weekly TIL - Day 37
·
Weekly TIL
⭐️ Today's summary오늘은 나의 공부 방향성을 고치려고 한다. 강사님께서 매번 글로 작성하라 했지만, 모르는 부분을 머리로만 생각하다 매번 알고 있는 것도 모르는 경우가 있고, 모르는 경우에는 더더욱 알 수 없는 길로 빠졌다. 강사님의 특단의 조치내가 이해한 개념은 이건데 왜 이렇게 동작하지않고 다르게 하는건지?내가 여기서 이개념이 이해가 안된다.(단 여기에 값이 왜 있어요?안됨 -> 왜 없어야되는지) 글로작성 오늘부터는 좀더 상세하게 모르는 부분을 글로 써볼 예정이다. ⭐️ Problempublic static Response toDto(Board board) { System.out.println(board.getBoardTagList()); return Respo..
Weekly TIL - Day 35
·
Weekly TIL
⭐️ Today's summary오늘은 객체지향 쿼리에 대해서 배웠다. JPQL 기본문법, 네이티브 SQL 사용법을 배우고 JPQL을 통하여 간단하게 제목으로 공지사항 조회하는것을 해보았다. 조회하는것은 어렵지 않았으니 코드는 생략하겠다. ⭐️ ProblemJPQL 문법중에 페치 조인이라는것이 있다. 이 페치 조인 (Fetch Join)은 조인시 발생하는 N+1 문제를 해결해준다 했다. 하지만 의문점이 들었다. 이것이 어떻게 N+1을 해결할까? 아래에 정리해보겠다. ⭐️ Try[ 일반 Join ]// 단순히 조인해서 조건에 따라 필터링만 할 뿐, team 정보는 지연 로딩됨String jpql = "SELECT m FROM Member m JOIN m.team t WHERE t.name = :name";..
Weekly TIL - Day 34
·
Weekly TIL
⭐️ Today's summary오늘은 Member쪽 CURD를 완료했으니 Notice엔티티를 CRUD하면서 어려웠던 부분을 다뤄보겠다. ⭐️ Problem시작하자마자 Insert 부분에서 어제까지 했던 Member와 다르게 Notice엔티티는 FK가 존재했기 때문에, Entity로 변환하는 과정에서 헷갈리는 부분이 있어서 아래에 정리해 보겠다. ⭐️ Try[ NoticeController.java ]package com.kh.jpa.controller;import com.kh.jpa.dto.NoticeDto;import com.kh.jpa.service.NoticeService;import lombok.RequiredArgsConstructor;import org.springframework.http..