Language/Spring (28) 썸네일형 리스트형 [SQL Mapper] Mybatis의 태그 [association, collection, sql, include] association과 collection 태그두 개의 태그는 객체의 연관 관계를 나타날 때 사용association (연계, 제휴)제휴는 1:1로 맺는 것이기 때문에 객체 간의 연관 관계가 1:1 관계일 때 사용collection (무리, 더미)무리, 더미는 여러 가지가 모인 것이기 때문에 객체 간의 연관 관계가 1:N 관계일 때 사용 association, collection 태그의 속성property (필수)연관된 객체의 속성명을 지정연관된 객체를 매핑할 대상의 필드명과 일치해야 함예시 설명 : customer는 Order 객체 내의 필드명이고, 이 필드는 Customer 객체와 연관 관계를 맺음 column (필수)SQL 쿼리에서 사용되는 컬럼명을 지정연관된 객체를 매핑할 때 어떤 기준으로 삼을 .. [SQL Mapper] Mybatis의 ResultMap과 ResultType ResultMap과 ResultType두 개 모두 SQL문 수행 결과의 반환형이라는 공통점을 가짐ResultMap개발자가 xml에 임의로 정의한 형식으로 반환을 하는 것복잡한 매핑이 필요할 때 사용 → 여러 개의 테이블을 조인, null 처리 및 특별한 변환 로직이 필요한 경우 resultMap을 사용하여 정밀한 매핑 가능ResultTypeJava의 클래스 형식으로 반환을 하는 것→ 개발자가 생성한 클래스인 VO, DAO 등이 될 수도 있고, 자바에서 기본적으로 제공하는 Collection의 List, Map 등이 될 수도 있음단순한 매핑을 할 때 사용 컬럼명이 자바 객체의 필드명과 일치할 때 resultType을 사용하면 간편하고 효율적ResultMap 태그id 속성 : 해당 resultMap의 참조할.. [STS] JSP 사용법 pom.xml - dependency 추가 jakarta.servlet jakarta.servlet-api provided jakarta.servlet.jsp.jstl jakarta.servlet.jsp.jstl-api org.glassfish.web jakarta.servlet.jsp.jstl org.apache.tomcat.embed tomcat-embed-jasper 프로젝트 구조Spring Boot의 경우 src/main/resources/static 또는 src/main/resources/templates 폴더에 배치하는.. [SQL Mapper] Mybatis 개념 및 구조 MybatisSQL Mapper로 SQL 중심의 프로젝트에 적합 → 객체 중심의 설계라면 JPA(Hibernate)가 더 적합객체와 SQL 쿼리 사이의 매핑을 처리하는 도구ORM처럼 객체를 자동으로 매핑하지 않고, 개발자가 직접 SQL 쿼리를 작성하고 SQL 결과를 자바 객체와 수동으로 매핑하는 방식을 사용→ 수동이긴 하지만 객체와 데이터베이스 테이블 간의 매핑을 다룬다는 점에서 마치 ORM 처럼 사용되긴 하지만 실질적으로는 SQL MapperSQL 쿼리의 세밀한 제어가 필요할 때 유용하고, SQL의 최적화와 복잡한 쿼리 작성에서 강점을 보임Mybatis 등장 배경 복잡한 SQL 쿼리 관리의 어려움 기존의 JDBC를 사용했을 때는 개발자가 직접 SQL 쿼리를 작성하고, 쿼리 실행 결과를 Java 객체로 .. [JPA] N+1 문제 N+1 문제란?ORM 기술에서 특정 객체를 대상으로 수행한 쿼리가 해당 객체가 가지고 있는 연관관계 엔티티를 조회하게 되면서 N번의 추가적인 쿼리가 발생하는 문제 N+1 문제 발생 상황 예시Owner Entity : 고양이 집사는 여러 마리의 고양이를 키움Cat Entity : 고양이는 한 명의 집사에게 종속@Entity@Getter@Setter@NoArgsConstructorpublic class Owner { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private int id; private String name; @OneToMany(mappedBy = "owner", fetch = FetchType.EAGER) .. [JPA] 엔티티 관계의 로딩 전략 - 즉시 로딩 / 지연 로딩 즉시 로딩 (Eager Loading)정의연관된 엔티티를 함께 로딩하는 방식기본 엔티티를 조회할 때 연관된 엔티티도 즉시 데이터베이스에서 조회동작 원리엔티티 조회 시 연관된 엔티티도 함께 쿼리를 실행JPQL 또는 SQL에서 JOIN을 사용하여 데이터를 한 번에 가져옴장점연관된 데이터를 미리 로딩하므로 추가적인 데이터베이스 호출을 방지Lazy Loading의 LazyInitializationException과 같은 문제를 방지단점연관된 엔티티를 항상 로딩하므로 불필요한 데이터가 로드되어 메모리와 성능에 영향을 줄 수 있음복잡한 관계에서는 쿼리가 비대해지고 성능이 저하될 수 있음사용 사례연관된 엔티티를 자주 사용하거나 함께 필요한 경우Ex) User와 UserProfile 관계에서 사용자 정보와 프로필 정보.. [Spring] Controller와 Rest Controller 차이 Controller의 역할 및 특징 역할뷰(View)를 반환하는 컨트롤러.주요 특징주로 HTML, JSP 같은 뷰 페이지를 반환@RequestMapping 또는 @GetMapping, @PostMapping 등의 어노테이션을 사용해 HTTP 요청을 매핑Model 객체를 이용하여 데이터와 뷰를 연결반환값이 문자열(String)일 경우 기본적으로 ViewResolver가 실행되어 해당 문자열을 뷰 이름(view name)으로 간주하고, 뷰를 렌더링@Controllerpublic class ExampleController { @GetMapping("/hello") public String hello(Model model) { model.addAttribute("message", "Hel.. [Spring] DispatcherServlet의 개념과 흐름 DispatcherServlet이란? Spring Framework의 핵심 구성 요소로 Front Controller 패턴을 구현한 클래스이를 통해 Spring MVC 애플리케이션의 모든 HTTP 요청이 중앙에서 처리 DispatcherServlet의 장점중앙 집중화모든 요청 처리를 한 곳에서 관리하므로 유지보수와 확장성이 높음유연성다양한 핸들러 매핑, 인터셉터, 뷰 리졸버를 설정하여 유연하게 동작 가능다양한 기능 제공요청/응답 처리 뿐 아니라 필터링, 예외 처리, 국제화, 데이터 바인딩 등을 제공DispatcherServlet의 동작 과정클라이언트의 모든 요청을 DispatcherServlet이 수신요청 정보에 대해 HandlerMappinng에 위임하여 처리할 Handler(Controller)를 찾.. 이전 1 2 3 4 다음