2022. 2. 28. 00:30ㆍJAVA
12강 : 컴포넌트 스캔과 자동 의존관계 설정
스프링 빈과 의존관계
- 컴포넌트 스캔, 자동 의존관계 설정
- 자바 코드로 직접 스프링 빈 등록
@Controller 애노테이션을 붙이면 스프링이 직접 관리함
@Autowired 애노테이션을 붙이면 컨테이너에서 service를 가져옴 (@Service 필요)
디펜던시 인젝션 - 스프링이 뭔가 넣어주는 느낌이 나야함
컴포넌트 스캔의 범위는 기본적으로 같은 레벨의 패키지까지만. 물론 특정 설정을 해주면 더 상위나 하위도 되지만 ....
스프링 컨테이너에 스프링 빈이 등록될 때 기본으로 싱글톤. 이것도 특수하게 싱글톤이 안될 수도 있지만 ....
13강 : 자바 코드로 직접 스프링 빈 등록하기
@Configuration
public class SpringConfig {
@Bean
public MemberService memberService() {
return new MemberService(memberRepository());
}
@Bean
public MemberRepository memberRepository() {
return new MemoryMemberRepository();
}
}
컨트롤러는 스프링이 관리해야함..
거의 생성자 주입 방식을 쓴다고 보면 됨
14강 : 회원 웹 기능 - 홈 화면 추가
Controller의 Mapping이 static 컨텐츠보다 우선시 됨.
컨트롤러에서 @GetMapping("/") 으로 루트를 지정해놓으면 welcome page는 무시된다.
15강 : 회원 웹 기능 - 등록
16강 : 회원 웹 기능 - 조회
@PostMapping - form의 post를 매핑해줌
"redirect:/"
타임리프가 힘을 발휘하기 시작.
<tr th:each="member : ${members}">
<td th:text="${member.id}"></td>
<td th:text="${member.name}"></td>
</tr>
java의 foreach 같은 문법. Model의 members를 가져와서 뿌려줌
현재는 데이터가 메모리 상에 있어서 서버 재시작 시에 데이터가 모두 사라짐
17강 : H2 데이터베이스 설치
순수 JDBC -> 스프링 JDBCTEMPLATE -> JPA -> 스프링 데이터 JPA
18강 : 순수 JDBC
build.gradle에 관련 라이브러리 추가
implementation 'org.springframework.boot:spring-boot-starter-jdbc'
runtimeOnly 'com.h2database:h2
application.properties 스프링 부트 데이터베이스 연결 설정 추가
spring.datasource.url=jdbc:h2:tcp://localhost/~/test
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.username=sa
19강 : 스프링 통합 테스트
DB에 있는 데이터를 연동해서 테스트해야 하기 때문에 조금 복잡할 수 있음.
그러나 스프링은 이런 것 까지 편리하게 도와줌 !
@SpringBootTest - 스프링 컨테이너와 테스트를 함께 실행해줌
@Transactional - 롤백기능, 다음 테스트에 영향을 미치지 않음. @Commit 붙이면 커밋 되기는 함
20강 : 스프링 JDBCTEMPLATE
순수 jdbc와 동일한 환경설정.
반복 코드를 대부분 제거해줌. 그러나 SQL은 여전히 직접 작성해야함
실무에서 많이 쓰기도 함
21강 : JPA
build.gradle
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
application.properties
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=none
Jpa를 쓰려면 EntityManager를 주입받아야 한다.
여전히 JPQL 이라는 기술이 필요함
스프링데이터 jpa 로 넘어가면 jpql도 필요없음
22강 : 스프링 데이터 JPA
스프링 데이터 JPA는 JPA를 편리하게 사용하도록 도와주는 기술임. 따라서 JPA 먼저 공부해야함
인터페이스를 통한 기본적인 CRUD
메서드 이름만으로 조회 기능 제공
페이징 기능 자동 제공 (?)
23강 : AOP
모든 메소드의 호출 시간을 측정하고 싶다면 ?
- 핵심 로직 아님
- 공통 관심 사항일 뿐
- 별도의 공통 로직으로 만들기 매우 어려움
- 정답은 AOP
24강 : AOP 적용
@Component
@Aspect
public class TimeTraceAop {
@Around("execution(* hello.hellospring..*(..))")
public Object execute(ProceedingJoinPoint joinPoint) throws Throwable {
long start = System.currentTimeMillis();
System.out.println("START: " + joinPoint.toString());
try {
return joinPoint.proceed();
} finally {
long finish = System.currentTimeMillis();
long timeMs = finish - start;
System.out.println("END: " + joinPoint.toString()+ " " + timeMs +"ms");
}
}
}
프록시라는걸 씀.....
25강 : 다음으로
'JAVA' 카테고리의 다른 글
[SPRING] 인프런 스프링 기본편 강의 공부기록. 中 (2) | 2022.03.03 |
---|---|
[SPRING] 인프런 스프링 기본편 강의 공부기록. 上 (0) | 2022.03.02 |
[SPRING] 인프런 스프링 입문 강의 공부기록. ~ 11강 (0) | 2022.02.24 |
TDD와 private 메서드에 관한 고민 (0) | 2022.02.23 |
[JAVA] 참조변수 this, 생성자 this() (0) | 2022.01.13 |