목록분류 전체보기 (40)
공부일기
이번 프로젝트를 진행하면서 진짜 제일제일제일루다가 신기했던 부분은 Repository 계층에서 직접 쿼리를 작성하지 않아도 쿼리가 동작한다는 점이었다. 예를 들어 이런 코드가 있었다.public interface CommentRepository extends JpaRepository { Page findByPostId(Long postId, Pageable pageable);} 처음에는 이런 의문이 들었다.구현 코드가 없는데 왜 동작하지?findByPostId는 왜 post.id로 해석되지?Pageable은 누가 만들어서 넣어주지?@Query와 findBy...는 언제 다르게 써야 하지?이번 글에서는 Spring Data JPA의 쿼리 방식을 MiniSNS 프로젝트에서 실제로 사용한 코드 기준으로..
MiniSNS 프로젝트를 진행하면서 게시글 목록 조회 API를 구현하다가 예상하지 못한 성능 문제를 발견했다.바로 JPA에서 매우 유명한 N+1 문제였다.이번 글에서는 MiniSNS 프로젝트에서 실제로 발생했던 사례를 기반으로 다음 내용을 정리하려 한다.페이지네이션 구현과 PageResponseJava 제네릭(Generic)의 기본 개념N+1 문제란 무엇인가Lazy Loading과 N+1의 관계EntityGraph와 DTO ProjectionMiniSNS 프로젝트에서 선택한 해결 전략1. 게시글 조회 API와 PageResponse게시글 목록 API는 다음과 같이 구현했다.@GetMapping("/posts")public PageResponse getPosts(Pageable pageable) {retu..
1. 왜 JPA를 공부해야 하는가MiniSNS 프로젝트를 진행하면서 가장 큰 변화는 데이터베이스를 직접 SQL로 다루지 않게 되었다는 점이었다.예전에는 데이터를 조회하려면 이런 SQL을 작성했다.SELECT * FROM post WHERE id = 1;하지만 Spring Boot와 JPA를 사용하면 이렇게 작성한다.postRepository.findById(1L);SQL을 직접 작성하지 않아도 데이터 조회가 가능하다.이것이 바로 JPA(Java Persistence API)가 하는 일이다.2. JPA란 무엇인가Jakarta Persistence 공식 문서에서는 JPA를 다음과 같이 정의한다.JPA는 Java 객체와 관계형 데이터베이스 간의 매핑을 관리하는 표준 API이다.(Jakarta Persisten..
1. 왜 이 글을 따로 쓰게 되었는가MiniSNS 프로젝트를 만들면서 기능은 하나씩 붙여나갔지만, 중간중간 계속 비슷한 의문이 생겼다.API는 그냥 URL인가?REST API는 API랑 뭐가 다른가?Spring Boot에서 요청을 받는 주체는 Controller인가, Servlet인가?DispatcherServlet은 정확히 무슨 역할을 하는가?JSON이 왜 자동으로 DTO 객체로 바뀌는가?Jackson은 라이브러리라고 하는데, 정확히 무슨 일을 하는가?프로젝트를 계속 진행하다 보니, 기능 구현보다 이런 기초 개념을 한번 정리하고 넘어가는 것이 훨씬 중요하다고 느꼈다.이번 글은 MiniSNS 기능 구현을 잠시 멈추고, Spring MVC가 실제로 어떻게 요청을 처리하는지 이해하기 위해 정리한 글이다.2...
1. 이전 글에서 다룬 내용이전 글에서는 MiniSNS 프로젝트를 통해 Spring Boot 백엔드의 기본 구조를 살펴보았다.또한 다음 개념들을 정리했다.Controller의 역할Service와 트랜잭션Repository와 JPAEntity와 DB 매핑이번 글에서는 Controller 계층에서 실제로 일어나는 일을 더 자세히 살펴보려고 한다.특히 다음 질문을 해결하는 것이 목표다.HTTP 요청은 어떻게 Java 객체가 되는가?@RequestBody는 어떻게 JSON을 DTO로 변환하는가?@PathVariable은 URL 값을 어떻게 가져오는가?@RequestParam은 언제 사용하는가?2. HTTP 요청과 REST APISpring Boot에서 Controller는 HTTP 요청을 처리하는 역할을 한다...
https://github.com/seokMini-2/mySpring1. 프로젝트를 시작한 이유Spring Boot를 처음 공부하면서 가장 어려웠던 점은 “이 프레임워크가 도대체 어떻게 돌아가는지”였다.GET / POST는 뭐지?왜 Repository는 구현도 안 했는데 동작하지?save()를 안 했는데 DB가 업데이트 되는 이유는?DTO는 왜 쓰는 걸까?이런 의문을 해결하기 위해 간단한 SNS 서버(MiniSNS)를 직접 만들어보면서 스프링의 핵심 구조를 이해해 보기로 했다.이 프로젝트의 목표는 다음과 같다.Spring Boot 기본 구조 이해REST API 설계 경험JPA 기반 데이터 처리DTO 기반 API 응답 설계2. MiniSNS 프로젝트 기능프로젝트에서 구현한 기능은 다음과 같다.User사용자..