반응형
목차
DI
- setter 주입
- 생성자 주입
- xml 형태의 bean 주입 방식
<beans>
<bean id="memberService" class="com.spring.ex03.MemberService">
<property name="memberDAO" ref="memberDAO" />
</bean>
<bean id="memberDAO" class="com.spring.ex03.MemberDAOImpl">
</beans>
관점 지향 프로그래밍 (AOP)
- 공통의 기능을 구현해 주는 것
- 사용자 접속 내역 로그, 트랜잭션, 예외 처리, 이메일 통보 등 모든 웹 애플리케이션에서 공통으로 사용하는 기능
- AOP는 메서드 안의 주기능과 보조 기능을 분리한 후 선택적으로 메서드에 적용해서 사용
- 관련 용어
- aspect
- 구현하고자 하는 보조 기능
- advice
- aspect의 실제 구현체, 메서드 호출을 기준으로 여러 지점에서 실행
- joinpoint
- advice를 적용하는 지점, 스프링은 method 결합점만 제공
- pointcut
- advice가 적용되는 대상, 패키지이름/클래스이름/메서드이름을 정규식으로 지정
- target
- advice가 적용되는 클래스
- weaving
- advice를 주기능에 적용하는 것
- aspect
- 구현 과정
- 타깃 클래스 지정
- 어드바이스 클래스 지정
- 설정 파일에서 포인트컷 설정
- 설정 파일에서 어드바이스와 포인트컷을 결합하는 어드바이저 설정
- 설정 파일에서 스프링의 ProxtFactoryBean 클래스를 이용해 타깃에 어드바이스 설정
- getBean() 메서드로 빈 객체에 접근해 사용
ex) 보조기능인 timer(aspect)를 calculator(pointcut)에 적용
- 진짜 서비스기능을 넣는 것이 아닌 Proxy객체를 대신 넣어주는 것
스프링 MVC의 특징
- 모델 2 아키텍처 지원
- 스프링과 다른 모듈과의 연계가 쉬움
- 타일즈나 사이트메시 같은 View 기술과의 연계가 쉬움
- 태그 라이브러리를 통해 message 출력, theme 적용 그리고 입력 폼을 보다 쉽게 구현할 수 있음04
Web.xml 경로 오류
- / 경로로 매핑하면 다른 리소스 같은 경로도 다 서블릿으로 들어와 요청을 받을 수 없음
- ✅ 해결 방법 1: DefaultServletHttpRequestHandler 사용 (Spring MVC)
- Spring에서는 static 리소스를 default servlet에 넘겨주기 위한 설정이 필요합니다.
- 📁 예: mvc:default-servlet-handler (XML 기반)
<mvc:default-servlet-handler/>- 📄 예: WebMvcConfigurer (Java Config 기반)
@Override public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { configurer.enable(); }
✅ 해결 방법 2: 리소스 핸들러 등록
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/resources/**")
.addResourceLocations("/resources/");
}
- 그럼 /resources/style.css 요청은 /resources/ 폴더에서 서빙됨.
🔚 요약
설정 정적 리소스 처리
| <url-pattern>/</url-pattern> | 못함 (서블릿이 가로챔) |
| *.do | 정적 리소스는 서블릿으로 안 감 (OK) |
| 해결 방법 | default-servlet-handler 설정 또는 리소스 핸들러 등록 |
MyBatis
- jdbc로 구현했을 때 반복적인 sql, 복잡한 설정 등을 간편하게 할 수 있도록 도와줌
- sql 실행 결과를 자바 Beans 또는 Map 객체에 매핑 해주는 Persistence 솔루션으로 관리
- xml로 sql을 따로 분리
- iBatis의 후속
- SQL Mapper
- 파라미터 자동으로 매핑 (객체)
- 실행 결과 자동으로 매핑 (객체)
- 동적(Dynamic) SQL
@Repository
public class MemberDAO {
@Autowired
private SqlSessionTemplate sst; // 자동주입
public List<MemberVo> all() {
return sst.selectList("member.all"); //네임스페이스.아이디
}
}
- 파라미터가 없는 경우
http://mybatis.org/dtd/mybatis-3-mapper.dtd>">
SELECT * FROM MEMBER;
- 파라미터가 있는 경우
http://mybatis.org/dtd/mybatis-3-mapper.dtd>">
SELECT * FROM MEMBER WHERE id=#{id}
package chap06;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import chap04.MemberVO;
@Controller
public class MemberController {
@Autowired
private MemberDAO dao;
@GetMapping("/member/all")
public void all(Model model, MemberVO vo) {
model.addAttribute("list", dao.all());
System.out.println(dao.all());
}
}
?id=lee → 컨트롤러가 MedelAttribute로 파라미터를 “객체”로 받아서 → DAO → SQL
SQL : SELECT * FROM t_member WHERE id=? 1,”lee”
타입은 클래스 parameterType="chap06.MemberVO”
- DAO에서 실행할 때
- SqlSessionTemplate 객체 주입받아
- 객체.메서드명(”namespace.id”)
- 객체.메서드명(”namespace.id”, 파라미터)
- 메서드
- selectList() : 여러 개(목록)
- selectOne : 하나
- insert(), update(), delete()
- #{변수명} : PrepareStatement
- ?로 들어갈 때
- ${변수명} : Statement
- 있는 그대로 들어갈 때 (ex) tableName)
메모
- 프로젝트 세팅 시 리소스 경로 수용을 위해 MvcConfig에 아래 함수 넣기
// 정적리소스 처리(스프링이 아니라 톰캣이 처리하도록) 활성화
// img, css, js..
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer config) {
config.enable();
}
- 비즈니스 로직이 필요 없는 페이지
- 컨트롤러 파일을 만들지 않아도 연결됨
// 비즈니스 로직이 필요없는 페이지
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/home.do").setViewName("home");
}
- hibrernate = jpa
728x90
반응형
'BackEnd' 카테고리의 다른 글
| 6/5 - Mapper 클래스, 트랜잭션 제어 (5) | 2025.06.06 |
|---|---|
| 6/4 - MariaDB, Log4JDBC (0) | 2025.06.06 |
| Spring Lagacy Project, Spring MVC, MyBatis 인텔리제이에서 세팅하기 (0) | 2025.06.03 |
| 5/30 - Spring, AspectJ (1) | 2025.06.01 |
| 5/29 - MVC (0) | 2025.06.01 |