본문 바로가기

개인적으로 공부한 것을 정리해 놓은 블로그입니다 틀린 것이 있으면 댓글 부탁 드립니다!


반응형

분류 전체보기

(160)
Spring Annotation @PathVariable @PathVariable -컨트롤러에서 RequestMapping 경로에 파라미터로 지정한 것을 컨트롤러에서 받아낸다. 예제코드 @GetMapping 경로를 /test/{numbs}로 지정하고 @PathVariable 로 데이터타입과 파라미터 변수를 선언했다. 브라우저에서 /test/3으로 요청하였고 3이 응답 되었다. 만약 pathvariable를 받을 파라미터명이 , 다른 파라미터와 겹칠 경우 @pathVariable의 name 속성으로 pathVariable을 직접 지정할 수 있다. @GetMapping("/path-variable/{name}") public String pathVariable(@PathVariable("name") String pathName, String name){ Syste..
JPA 패치조인 활용 패치조인 위의 이미지는 주문 내역을 불러오는 컨트롤러다 . 패치 조인을 사용하지 않고 위의 코드가 실행된다면 n+1 문제가 발생하여 쿼리가 5번 나간다 위에 코드에서 n은 주문 수를 나타내고 +1은 처음 주문을 불러오는 쿼리를 말다 주문수가 2개이고 연관된 테이블 수(회원,배송)에 따라 n번씩 추가가 되기떄문에 총쿼리수는 n+n+1 = 5 가 된다 이런 상황에서는 성능 최적화를 위해 패치조인을 사용하는 것이 좋다 . join fetch 연관된 엔티티명을 적어주면 조인을 통해 한번에 데이터를 불러오기 때문에 쿼리는 한번만 생성된다 . 패치조인은 join 으로 지정해놓은 테이블의 모든 데이터를 가져오기 때문에 selelct절이 길어진다 여기서 한번더 성능을 최적화 하기 위해서는 직접 쿼리를 짜는 방식을 사용..
SPRING - JPA를 활용한 API 개발 ( 권장하는 방법 ) 엔티티를 DTO로 변환하여 사용하는 방법 생성자로는 Order를 파라미터로 받아 order의 정보가 set되게 하였다. 데이터로 받은 리스트인 orders를 SimpleOrderDto에 파라미터로 order 엔티티를 넘기면 리스트에 담긴 order 엔티티가 하나씩 꺼내져서 SimpleOrderDto로 변환되고 .collect를 사용하여 다시 List에 담아준 후 리턴했다 **위처럼 List를 바로 반환하게되면 배열이 반환되기 때문에 API 확장성이 굳어 버리기 떄문에 감싸줄 수 있는 객체를 만들어 한번 감싸주는 것이 좋다 ex)@Data @AllArgsConstructor static class Result{ private T data } -장점 1.DTO의 필드는 곧 API 스펙이 되기 때문에 엔티티를..
SPRING - JPA를 활용한 API 개발 (비권장) -API개발 양방향 연관관계 주의점 1.API 개발시 양방향 연관 관계에서는 한쪽에 @JSONEgnore를 걸어 주지 않으면 Jackson 라이브러리에서 양쪽을 왔다갔다하며 JSON 데이터를 무한으로 만들어 무한루프에 빠지게된다 . 2.지연로딩(Lazy Loading) 으로 해놓을 시 Jackson 라이브러리가 프록시를 인식하지 못해 오류가 난다. -해결방법 bulid.gradle에 라이브러리를 등록해준다. 빈으로 등록시켜 애플리케이션 실행시점에 실행 되도록 빈으로 만든다 애플리케이션을 실행시켜 postman으로 테스트를 해보면 데이터를 가져오긴하나 레이지로딩이 무시되어 DB에 갔다 오지는 않기 때문에 DB에 저장된 데이터는 null로 표시되었다 -강제로 레이지 로딩을 시키는방법 Hibernate5Mod..
SPRING BOOT-JPA entity , repository 생성과 테스트 코드 생성 예시) 회원의 아이디와 이름를 담는 Entity를 만든다한다면 1.Member 클래스 생성 후 어노테이션 지정 @Entity :엔티티를 선언하는 어노테이션 @Getter @Setter : 롬복을 이용할때 getter,setter를 롬복이 생성하도록 하는 어노테이션 @Id : PK를 지정하는 어노테이션 @GeneratedValue : 아이디값을 자동 생성하는 어노테이션 위의 코드에서는 id 값이 PK가되고 자동으로 값이 들어가게된다. 2.MemberRepository 클래스 생성 후 어노테이션 지정 @Repository : 리파지토리를 지정하는 어노테이션 @PersistanceContext: persistance 컨텍스트 지정 EntityManager를 주입(DI)함 회원정보를 저장하는 save 메소드와 ..
Spring boot application.yml 설정 application.properties 혹은 application.yml로 프로젝트를 관리 할 수 있다. 설정할 것이 복잡하고 많아지면 yml 파일이 나을 수도 있다. -application.yml 파일설정 1. resources에 application.yml 파일을 만들고 기존에 application.properties 는 지워준다. 데이터 소스 설정 url은 h2 database JDBC URL 경로를 적어주면 된다. MVCC=TURE로 설정하게 되면 여러곳에서 접근했을때 좀더 빠르게 접근 가능하다. 위와 같이 설정해 놓으면 히카리CP를 통해 스프링부트가 커넥션 풀을 알아서 구성한다. JPA 설정 ddl-auto는 테이블 생성쿼리를 자동으로 생성해 주는 설정 이고 create는 애플리케이션을 런할때..
H2 DATABASE 설치 (개발용 DB) 및 설정 -H2 DATABASE h2database.com/html/main.html H2 Database Engine H2 Database Engine Welcome to H2, the Java SQL database. The main features of H2 are: Very fast, open source, JDBC API Embedded and server modes; in-memory databases Browser based Console application Small footprint: around 2 MB jar file size Suppor h2database.com 1.홈페이지 전면엔 보이는 Download에서 본인의 운영체제에 맞는 것을 다운로드 한다 2. 다운로드 받은 것을 적당한 위치에..
SPRING BOOT STARTER로 프로젝트 생성 SPRING BOOT STARTER로 프로젝트 생성 - start.spring.io 위 사이트를 통해 스프링 프로젝트를 간편하게 생성할 수 있다. 프로젝트 종류 ( maven,gradle) , 사용언어 , Group, Artifact , 자바 버전 , 사용할 디펜던시등을 설정 할 수 있으며 원하는 대로 설정한 후에 GENERATE를 누르면 해당 프로젝트가 압축파일 형태로 생성된다. 적절한 위치에 압축을 풀고 사용하는 IDE에서 import해주면 설정한대로 프로젝트가 빌드 된다. *인텔리 J import file - new - project from Existing Sources 클릭 압축을 풀어 놓은 프로젝트 위치로 찾아가 프로젝트 혹은 build.gradle를 선택해 준다. Spring initiali..

반응형