본문 바로가기

Java46

애노테이션(Annotation) 애노테이션(Annotation): 사전적 의미로는 주석을 의미하나, 일반적인 주석과 다르게 코드를 작성할 수 있음. 클래스, 메서드, 변수, 매개변수 등에 사용이 가능하며 문자 @로 시작Bean빈(Bean)은 스프링 컨테이너가 관리하는 자바 객체를 뜻함인스턴스화된 객체를 의미하며, 스프링 컨테이너에 등록된 객체를 스프링 빈이라고 함(new 대신 사용)사용하는 가장 큰 이유는 스프링 간 객체가 의존관계를 관리하도록 하는 것에 큰 목적. 객체가 의존관계를 등록할 때 스프링 컨테이너에서 해당하는 빈을 찾고, 그 빈과 의존성을 만듬Bean을 주입받는 방식@Autowiredsetter method@AllArgsConstructor(생성자)@Bean개발자가 직접 제어가 불가능한 외부 라이브러리등을 Bean에 등록하.. 2024. 5. 23.
스프링 MVC 구조 동작 순서핸들러 조회 : 핸들러 매핑을 통해 요청 URL에 매핑된 핸들러(컨트롤러)를 조회핸들러 어댑터 조회 : 핸들러를 실행할 수 있는 핸들러 어댑터를 조회핸들러 어댑터 실행 : 핸들러 어댑터를 실행핸들러 실행 : 핸들러 어댑터가 실제 핸들러를 실행ModelAndView 반환 : 핸들러 어댑터는 핸들러가 반환하는 정보를 ModelAndView로 변환 후 반환viewResolver 호출 : 뷰 리졸버를 찾고 실행View 반환 : 뷰 리졸버는 뷰의 논리 이름을 물리 이름으로 바꾸고, 렌더링 역할을 담당하는 뷰 객체를 반환View 렌더링 : 뷰를 통해서 뷰를 렌더링 함핸들러(컨트롤러) 조회HandlerMapping핸들러 매핑에서 이 컨트롤러를 찾을 수 있어야 함ex : 스프링 빈의 이름으로 핸들러를 찾을 수.. 2024. 5. 22.
벌크연산(Bulk Operation) 기존연산ex) 모든 직원들 연봉 30% 인상em.find() 메서드를 통해 모든 직원을 리스트로 조회직원 엔티티의 연봉을 30% 증가Commit 시점에 변경감지(Dirty Checking)가 일어나며 update 쿼리 실행만약 리스트로 조회된 결과가 몇십만, 몇백만개라면 성능의 문제 발생따라서 벌크연산이 필요벌크연산(Bulk Operation)쿼리 한 번으로 여러 테이블 로우 변경(엔티티)executeUpdate() 메서드를 통해 벌크연산 수행executeUpdate()의 결과는 영향받은 엔티티의 수UPDATE, DELETE 지원String qlString = "update Product p " + "set p.price = p.price * 1.1" + .. 2024. 1. 17.
Named 쿼리 Named 쿼리미리 정의해서 이름을 부여해두고 사용하는 SQL미리 정의하기 때문에 정적 쿼리어노테이션이나 XML에 정의@Entity@NamedQuery( // Named 쿼리 사용 name = "Member.findByUsername", query = "select m from Member m where m.username = :username")public class Member{ ...}...public class JpaMain { public static void main(String[] args) {List resultList = em.createNamedQuery("Member.findByUsername", Member.class) .setParameter("u.. 2024. 1. 17.
페치조인 페치조인(fetch join)JPQL에서 성능 최적화를 위해 제공하는 기능으로 SQL 조인 종류가 아님연관된 엔티티나 컬렉션을 SQL 한 번에 함께 조회하는 기능join fetch 명령어 사용N+1 문제Team teamA = new Team();teamA.setName("팀A");em.persist(teamA);Team teamB = new Team();teamB.setName("팀B");em.persist(teamB);Member member1 = new Member();member1.setUsername("회원1");member1.setTeam(teamA);em.persist(member1);Member member2 = new Member();member2.setUsername("회원2");memb.. 2024. 1. 15.
값 타입 컬렉션 값 타입 컬렉션값 타입을 하나 이상 저장할 때 사용@ElementCollection, @CollectionTable주요 특징데이터베이스는 컬렉션을 같은 테이블에 저장 불가 -> 별도의 테이블이 필요@Entitypublic class Member { @Id @GeneratedValue @Column(name = "MEMBER_ID") private Long id; @Column(name = "USERNAME") private String userName; @Embedded private Address homeAddress; // 값 타입 컬렉션 사용 @ElementCollection // FAVORITE_FOOD 테이블 정의 @CollectionT.. 2024. 1. 2.