목록전체 글 (79)
yja
회원 등록과 회원 목록 조회 기능을 만들어보자. 회원 리포지토리 개발 먼저 DB 조작을 시키기 위해 EntityManager을 주입받아야한다. EntityManager을 주입받는 방식 a) @PersistencsContext 로 필드 주입@Repositorypublic class MemberRepository { @PersistenceContext // 엔티티 매니저 주입받기 private EntityManager em;} b) @Autowired을 사용하는 방식 Spring Data Jpa에서는 `@PersistenceContext` 대신 `@Autowired`만 써도 된다. @Repositorypublic class MemberRepository { @Autowired priv..
요구사항 분석 회원이 상품을 등록하고, 주문하는 서비스를 만든다. 주요 기능은 다음과 같다. 1. 회원 기능 - 등록 / 조회2. 상품 기능 - 등록 / 수정 / 조회 3. 주문 기능 - 주문 / 주문 내역 조회 / 주문 최소4. 기타 요구사항 - 상품은 재고 관리가 필요하다. - 상품의 종류는 도서, 음반, 영화가 있다. - 상품을 카테고리로 구분할 수 있다. - 상품 주문시 배송 정보를 입력할 수 있다. 도메인 모델과 테이블 설계 회원과 주문: 회원은 여러 주문을 할 수 있다. (1:N)주문과 상품: 한번 주문할 때 여러 상품을 담을 수 있고, 하나의 상품은 여러 주문에 담길 수 있다. (N:N)주문과 배송: 하나의 주문에는 하나의 배송이 이루어진다. (1:1)카테고..
목차 페이징 없이 가게의 미션 조회 API, 내가 작성한 리뷰 조회 API 개발하기 JPA Page (오프셋 기반 페이지네이션)Slice (커서 기반 페이지네이션)페이지네이션 응답 DTO로 정제된 응답 보내주기 검증 어노테이션 조회 API에서 여러 개의 리스트를 반환할 때, 한번에 아주 많은 데이터 200개를 한번에 받으면 성능이 아주 안좋아질 것이다. 그래서 몇 개씩 잘라서 보여주는 페이징이 필요하다. pagable 이란 ? 페이지네이션을 하기 위한 요소들을 담은 객체 인터페이스로, 정렬 방법, 가져올 데이터 수, 현재 페이지 번호같은 정보들을 담는다. PageRequest 란? PageRequest는 Pageable 인터페이스를 실제로 구현한 구현체 클래스로, 개발자가 직접 페이징 조건을 생성..
프로젝트 생성하기 H2 Database 설치 https://www.h2database.com/html/main.html 에서 설치해준다. h2/bin 폴더에 들어가서 다음 명령어를 입력한다. cat h2.sh // 파일의 내용을 확인chmod +x h2.sh // 실행 권한 주기 ./h2.sh // /h2.sh 파일 실행하기 파일을 실행하면 보이는 화면이다. `jdbc:h2:~/jpashop` 으로 한번만 연결해주면 `~/jpashop.mv.db` 파일이 생성된다. 이제 그 다음부터는 `jdbc:h2:tcp://localhost/~/jpashop` 로 접근할 수 있다. application.ymlapplication.yml 에도 datasou..
Controller, Service, Repository1. Controller 컨트롤러는 맨처음 오는 요청을 처리한다.@RestController // @ResponseBody 적용@RequiredArgsConstructor @RequestMapping("/api")public class MemberController { private final MemberService memberService; @PostMapping("/test") public ApiResponse getInfo( @RequestBody MemberReqDTO.GetInfo dto ) { BaseSuccessCode code = MemberSuccessCode.OK; ..
빈 스코프란?빈 스코프란, 빈이 생성되어서 종료될 때까지의 존재 범위를 의미한다. 스프링이 지원하는 다양한 스코프 싱글톤: 스프링 컨테이너의 시작 ~ 종료 프로토타입: 스프링 컨테이너는 빈 생성과 주입까지만 관여하고, 종료는 클라이언트에게 넘긴다. 웹 관련request: 웹 요청이 들어오고 나갈때까지 유지 session: 웹 세션이 생성되고 종료될때까지 유지applicaion: 웹의 서블릿 컨텍스트와 같은 범위로 유지 프로토타입 스코프 싱글톤 빈과는 달리, 프로토타입 빈 요청은 항상 다른 인스턴스를 생성해 반환한다. 스프링 컨테이너는 생성되는 시점에 필요한 의존관계를 주입한다. 프로토타입 스코프 = [빈 생성 + 의존관계 주입 + 초기화]이후에 스프링 컨테이너는 프로토타입을 관리하지 않는다. 싱글톤 스..
1. 빈 생명주기 콜백 시작 NetworkClient.java 여기서 생성자가 호출되면 `connect()` 를 통해 연결된 url을 확인할 수 있다. public class NetworkClient { private String url; public NetworkClient() { System.out.println("생성자 호출, url = " + url); connect(); call("초기화 연결 메시지"); } public void setUrl(String url) { this.url = url; } // 서비스 시작 시 호출 public void connect() { System.out.print..
1. 다양한 의존관계 자동 주입 방법 A. 생성자 주입: 생성자를 통해 의존관계를 주입받는다. 생성자가 1개만 있으면 @Autowired 를 생략해도 된다. 호출 시점에 1번만 호출되고, final을 통해 한번 의존관계가 설정되면 바뀌지 않는다. @Componentpublic class OrderServiceImpl implements OrderService { private final MemberRepository memberRepository; private final DiscountPolicy discountPolicy; @Autowired // B. setter(수정자) 주입이 방식은 의존관계가 설정되었더라도 나중에 수정할 수 있는 방식이다. setter가 public으로 열려 있어서 외..
- 프로젝트 세팅 프로젝트 생성하고 DB 연결하기 # 새 프로젝트 생성 dependencies에 다음을 추가한다. Spring webSpring Data JpaMySQL DriverLombok # mysql Connection 생성 mysql workbench에서 connection을 생성하고 원하는 데이터베이스명으로 데이터베이스를 만든다. 그러면 `jdbc:mysql://ocalhost:3306/mission4`로 DB url을 설정할 수 있다. CREATE DATABASE mission4 # yml 설정 여기서 설정한 `DB_URL`, `DB_USER`, `DB_PW`는 .env에 추가하고 이 파일을 .gitignore에 추가해서 민감정보를 보호해야한다. spring: application: ..
컴포넌트 스캔과 의존관계 자동 주입 1. 컴포넌트 스캔 `@ComponentScan`: `@Component`가 붙은 클래스를 스캔해서 스프링 빈으로 등록해준다. @Configuration@ComponentScan( // @Component가 붙은 클래스를 스프링 빈으로 등록한다. // @Configuration안에 @Component가 있기 때문에 스캔되지 않도록 제외시킨다. excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = Configuration.class))public class AutoAppConfig {} 2. 의존 관계 주입 `@Component` 를 붙인다. 이러면 스프링 ..