전체 글333 2 ) 컴포넌트 생성 , props , 이벤트 App.jsimport logo from './logo.svg';import './App.css';function App() { return ( WEB html css js WelCome Hello, Web );}export default App; app.js는 싱글 페이지 애플리케이션의 주요 컴포넌트 중 하나입니다.이 파일은 보통 리액트 애플리케이션의 진입점(entry point) 역할을 하며, 전체 애플리케이션의 구조를 정의하고.. 다른 온라인 강의/생활코딩- React 2022년 개정판 2024. 6. 18. 1 ) 리액트 프로젝트 구조 리액트 프로젝트 구조 각 파일과 폴더의 역할node_modules/: 현재 프로젝트에 설치된 모든 npm 패키지가 들어 있는 디렉터리입니다. 보통 깃과 같은 저장소에 올릴 때는 이 폴더를 함께 올리지 않습니다. public/: 정적 파일이 들어 있는 디렉터리입니다. index.html 파일과 애플리케이션에 필요한 기타 정적 파일들이 포함되어 있습니다. 컴파일이 필요 없는 파일들이 위치하는 폴더입니다. src/: 소스 코드가 들어 있는 디렉터리입니다. 이 디렉터리에서 React 컴포넌트, 스타일시트, 테스트 파일 등이 포함됩니다. 리액트 내부에서 작성하는 거의 모든 파일들이 이 폴더 내부에서 작성되며 이 폴더에 있는 파일들은 명령어에 따라 JS로 컴파일이 진행됩니다.App.js: 메인 애플리케이션 컴포.. 다른 온라인 강의/생활코딩- React 2022년 개정판 2024. 6. 18. 끝) [미완] 나머지 기능들 - Specifications(명세),Query By Example,Projections,네이티브 쿼리 복잡도에 비해서 실무에서는 많이 사용되지않는다. [ 다른 대안도 존재하기도 하고 ]왜 실무에서 쓰기에 애매한지를 초점에 맞춘다. Specifications (명세) 도메인 주도 설계(Domain Driven Design)라는 책에는 SPECIFICATION(명세)라는 개념을 소개 스프링 데이터 JPA는 JPA Criteria를 활용해서 이 개념을 사용할 수 있도록 지원 [ JPA Criteria를 사용하면 코드가 읽기 어려워서 실무에서는 안쓴다고 한다. 이런게 있구나로 보면된다.] 술어(predicate)- 참 또는 거짓으로 평가- AND OR 같은 연산자로 조합해서 다양한 검색조건을 쉽게 생성(컴포지트 패턴)- 예) 검색 조건 하나하나- 스프링 데이터 JPA는 org.springframework.d.. 인프런/실전! 스프링 데이터 JPA 2024. 6. 14. 5) 스프링 데이터 JPA 구현체 분석,merge,새로운 엔티티 구별방법 스프링 데이터 JPA 구현체 분석 스프링 데이터 JPA가 제공하는 공통 인터페이스의 구현체org.springframework.data.jpa.repository.support.SimpleJpaRepository@Repository@Transactional( readOnly = true)public class SimpleJpaRepository implements JpaRepositoryImplementation {@Repository 적용: JPA 예외를 스프링이 추상화한 예외로 변환 @Transactional 트랜잭션 적용 JPA의 모든 변경은 트랜잭션 안에서 동작 [ 트랜잭션 필수 ] 스프링 데이터 JPA는 변경(등록, 수정, 삭제) 메서드를 트랜잭션 처리@Transactionalpublic .. 인프런/실전! 스프링 데이터 JPA 2024. 6. 14. 4) WEB 확장기능 - 도메인 클래스 컨버터, 페이징과 정렬 Web 확장 - 도메인 클래스 컨버터 HTTP 파라미터로 넘어온 엔티티의 아이디로 엔티티 객체를 찾아서 바인딩 @RestController@RequiredArgsConstructorpublic class MemberController { private final MemberRepository memberRepository; @GetMapping("/members/{id}") public String findMember(@PathVariable Long id) { return memberRepository.findById(id).get().getUsername(); } @PostConstruct public void init() { memberRep.. 인프런/실전! 스프링 데이터 JPA 2024. 6. 13. 3) 확장 기능 - 사용자 정의 리포지토리 구현, Auditing 사용자 정의 리포지토리 구현스프링 데이터 JPA 리포지토리는 인터페이스만 정의하고 구현체는 스프링이 자동 생성스프링 데이터 JPA가 제공하는 인터페이스를 직접 구현하면 구현해야 하는 기능이 너무 많음 다양한 이유로 인터페이스의 메서드를 직접 구현하고 싶다면?JPA 직접 사용( EntityManager )하고 싶다거나스프링 JDBC Template 사용한다거나MyBatis 사용한다거나데이터베이스 커넥션 직접 사용 등등...Querydsl 사용 과 같은 여러 이유에서 스프링 데이터 JPA가 제공하는 인터페이스를 직접 구현하고 싶다면?public interface MemberRepository extends JpaRepository { List findByUsernameAndAgeGreaterThan(S.. 인프런/실전! 스프링 데이터 JPA 2024. 6. 12. 2) 쿼리 메소드 기능 쿼리 메소드 기능스프링 데이터 JPA가 제공하는 마법 같은 기능 쿼리 메소드 기능 3가지- 메소드 이름으로 쿼리 생성 - 메소드 이름으로 JPA NamedQuery 호출 - @Query 어노테이션을 사용해서 리파지토리 인터페이스에 쿼리 직접 정의 메소드 이름으로 쿼리 생성 이름과 나이를 기준으로 회원을 조회하는 메소드를순수 JPA로 구현하면public List findByUsernameAndAgeGreaterThan(String username, int age) { return em.createQuery("select m from Member m where m.username = :username and m.age > :age ") .setParameter("userna.. 인프런/실전! 스프링 데이터 JPA 2024. 6. 12. 1) 예제 도메인 모델, 공통 인터페이스 기능 소개 멤버에서 팀은 다대일팀에서 멤버스[컬렉션]은 일대다양방향 연관관계 @Entity@Getter @Setter// JPA가 프록시 기술같은걸 사용할때 기본생성자가 필요하다, private로 해두면 JPA가 사용할수없으므로 Protected로 해둔다.// [개발자가 실수로 사용하는것을 막기위해 protected로 제한 ]@NoArgsConstructor(access = AccessLevel.PROTECTED)@ToString(of ={"id","username","age"} ) // id, username, age 필드만 포함하여 toString() 메서드를 생성하라는 것, team이 포함되면 무한참조순환이 되므로 뺴준것public class Member { @Id @GeneratedValue .. 인프런/실전! 스프링 데이터 JPA 2024. 6. 11. 끝) API 개발 고급 - 실무 필수 최적화 - OSIV OSIV와 성능 최적화 Open Session In View: 하이버네이트Open EntityManager In View: JPA (관례상 OSIV라 한다.) OSIV ON- spring.jpa.open-in-view : true -> 기본값 [ OSIV ON ] WARN 5472 --- [main] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning.. 인프런/실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화 2024. 6. 11. 3) API 개발 고급 - 컬렉션 조회 최적화 컬렉션인 일대다 관계(OneToMany) 를 조회하고, 최적화하는 방법을 알아보자. 주문 조회 V1: 엔티티 직접 노출@RestController@RequiredArgsConstructorpublic class OrderApiController { private final OrderRepository orderRepository; /** * V1. 엔티티 직접 노출 * - Hibernate5Module 모듈 등록, LAZY=null 처리 * - 양방향 관계 문제 발생 -> @JsonIgnore */ @GetMapping("/api/v1/orders") public List ordersV1() { List all = orderRepository.. 인프런/실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화 2024. 6. 11. 2) API 개발 고급 - 지연 로딩과 조회 성능 최적화 조회용 샘플 데이터 입력 /** * 종 주문 2개 * * userA * * JPA1 BOOK * * JPA2 BOOK * * userB * * SPRING1 BOOK * * SPRING2 BOOK */@Component@RequiredArgsConstructorpublic class InitDb { private final InitService initService; @PostConstruct public void init() { initService.dbInit1(); initService.dbInit2(); } @Component @Transactional @RequiredArgsConstructor static cla.. 인프런/실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화 2024. 6. 10. 1) API 개발 기본 [ 회원 등록,수정,조회 API ] 1편의 프로젝트를 가지고 API 개발을 진행한다. 회원 등록 API V1@RestController@RequiredArgsConstructorpublic class MemberApiController { private final MemberService memberService; @PostMapping("/api/v1/members") public CreateMemberResponse saveMemberV1(@RequestBody @Valid Member member) { Long id = memberService.join(member); return new CreateMemberResponse(id); } @Data static class Cr.. 인프런/실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화 2024. 6. 10. 이전 1 2 3 4 5 6 7 8 ··· 28 다음