인프런 김영한 강사님의 강의를 듣고 정리한 내용입니다. 기존의 프로그램에서는 일반적인 객체가 제어 흐름을 조종하게 된다. 제어 흐름은 생성, 연결, 실행, 소멸을 의미한다. 제어 권한이 개발자에게 있다.IoC는 Inversion of Control의 준말로, 제어의 역
인프런 김영한 강사님의 강의를 듣고 정리한 내용입니다. 동시성 문제 하나의 데이터에 여러개의 쓰레드가 접근하여 값을 변경하게 되는 경우, 의도하지 않은대로 동작할 수 있다. 이를 동시성 문제라고 한다.(읽기만 할 때는 발생하지 않는다.) 동시성 문제는 지역변수에서는 발생하지 않는다. 지역 변수는 쓰레드마다 각각 다른 메모리 영역이 할당된다. 그 이유는 ...
인프런 김영한 강사님 강의를 듣고 정리한 내용입니다.여러 개의 메서드에서 공통된 부분이 발생될 때 그 부분을 메서드로 뽑아낸다. 하지만 중간에 비즈니스 로직이 끼어있고 시작과 끝부분이 같다면 이를 메서드로 뽑아내기 곤란하다. 이때 사용할 수 있는 여러개의 디자인 패턴에
빈의 자동등록은 컴포넌트 스캔을 거쳐서 이루어진다.클래스 상단에 @Component 어노테이션이 있으면 컴포넌트 스캔을 거쳐서 스프링 빈으로 자동등록 된다.이 밖에도 @Component를 포함하는 @Controller, @Service, @Repository도 자동등록
Web Application ArchiveWAR는 WAS(Web Application Server)에 배포할 때 사용하는 압축 파일이다. WAS 위에서 동작하고, HTML과 같은 정적 리소스와 클래스 파일을 모두 포함한다. 그리고 JAR에 비해서 구조가 더 복잡하다.j
외부 설정 코드 내의 변수를 외부에서 가져오려면 외부 설정을 사용해야한다. 외부 설정으로부터 값을 가져오는 방법에는 여러가지가 있다. OS 환경변수 자바 시스템 속성 커맨드 라인 인수 OS 환경변수 OS Environment variables OS에서 지원하는 외
인프런 김영한 강사님 강의를 듣고 정리한 내용입니다.Java Persistence Api자바 진영의 ORM 기술 표준이다.Object-Relational Mapping객체는 객체대로 설계관계형 데이터베이스는 관계형 데이터베이스대로 설계ORM 프레임워크가 중간에서 매핑대
인프런 김영한 강사님 강의를 듣고 정리한 내용입니다. DTO Data Transfer Object Form, API request에서 특정한 엔티티를 파라미터로 받는 경우, 실제 엔티티 클래스의 객체를 파라미터로 받는 대신 DTO라는 특별한 객체를 사용하는 경우가
인프런 김영한 강사님 강의를 듣고 정리한 내용입니다.리포지토리에 가해지는 연산 CRUD 중, 조회는 성능 문제의 90%를 차지한다. 첫번째 이유는 대부분의 사용자가 조회 기능을 가장 많이 사용하기 때문이고, 두번째 이유는 조회에서 N+1 문제가 발생하기 쉽기 대문이다.
인프런 김영한 강사님 강의를 듣고 정리한 내용입니다. ManyToMany 관계는 권장되지 않으며 거의 사용하지 않는다. 그러므로 OneToMany 데이터 조회에 관해서 설명하겠다. OneToMany에서도 XToOne 데이터 조회와 마찬가지로 DTO를 사용해야한다.
인프런 김영한 강사님 강의를 듣고 정리한 내용입니다.일반적으로 사용하게 되는 쿼리들(findById, findAll 등)을 미리 제공한다. JpaRepository를 상속하는 인터페이스를 만들면, 스프링 컨테이너를 띄울 때 구현체를 생성해 주입한다.스프링 데이터 J
인프런 김영한 강사님 강의를 듣고 정리한 내용입니다.엔티티 연관관계에 따라서 N+1 문제가 발생할 수 있다.하나의 팀에 여러 멤버를 둘 수 있다고 가정하자.Member 엔티티와 Team 엔티티가 매핑될 때, Member 기준에서 N:1 관계로 매핑되고, Team 기준에
인프런 김영한 강사님 강의를 듣고 정리한 내용입니다.스프링 데이터 JPA에서 일반적으로 update와 관련해서는 쿼리를 따로 만들지 않는다.그 이유는 update가 트랜잭션 과정에서 객체처럼 setter를 통해 이루어지기 때문이다. 그리고 트랜잭션이 끝날 때 Dir
인프런 김영한 강사님 강의를 듣고 정리한 내용입니다.스프링 데이터 JPA 구현체의 save() 메서드는 new 엔티티라면 persist()를 하고(저장), 그렇지 않으면 merge() 하도록(병합) 구현되어 있다.다음 코드로 merge와 persist의 차이를 알아보자
스프링 부트 3.2.5 버전에서 QueryDSL을 사용하기 위한 build.gradle 설정 방법이다.QueryDSL을 사용하기 위해서는 반드시 플러그인과 라이브러리를 추가해야한다. start.spring.io 에서 프로젝트를 생성할 때 QueryDSL dependen