[SPRING] 인프런 스프링 입문 강의 공부기록. 12강 ~

2022. 2. 28. 00:30JAVA

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

 

H2 설치시 사용할수 있는 GUI 데이터베이스.

 

 


 

 

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강 : 다음으로