Spring 부트 입문 요약

송은우·2022년 10월 2일
0

TIL

목록 보기
18/61

External LIbrary 를 통해서 다양한 의존관계를 해결해줌. pnpm 같은 느낌으로 패키지 매니징 그 자체를 intellij가 해준다는 점

왼쪽 밑에 설정을 열어서 보는 것이 좋음

gradle을 통해서 보면, 다양한 내용이 나옴

Dependencies 를 보면, npm같이 안쪽으로 쭉 들어가는 깊은 Link가 있음

여기서 서버를 띄워주는 tomcat이 있음

과거에는 tomcat에 JAVA코드를 push하는 방식으로 진행됨

로깅

요즘은 logback을 통해서 하는 경우가 많음(slf4j interface)

테스팅

JUnit5 버전

mokito 모킹 라이브러리

assertj 편의성

spring-test 스프링 통합 테스트 지원

spring-io 에 가서, run 가서, documentation 을 가면, 간단한 공식문서가 되어있다.

보통 spring을 쓰는 방법

정적 컨텐츠, MVC+템플릿 엔진, API

바로 꺼내는 것이 get이 있지만, ,orElseGet 같은 것을 통해서 없는 경우 처리를 하는 경우가 많음

Optional을 반환시에, 안 이쁨

alt+엔터 자동 import

alt shift enter 다음 줄로 넘어가기

ctrl shift alt t 다양한 옵션 보기

ctrl t 자동 test제작

ctrl alt m 자동 extracting

ctrl p Extract 하기

ctrl alt v 자동 변수로 추출

alt+insert 생성자 자동 생성

given when then문법을 사용해서 Test를 작성하는 것이 좋음

컴포넌트 스캔과 자동 의존관계 설정

@Component, @Service, @Repository, @Controller같은 것들을 알아서 스캔해서 가져옴

@ComponentScan 이라는 것

main함수가 있는 하위 package는 등록을 시켜줌

싱글톤 방식 인스턴스 공유

JAVA 코드로 직접 등록하기

SpringConfig클래스 안에서 @Bean 태그를 이용해서 처리함. 타입 기준으로 생성시켜주는듯

과거에는 XML방식으로 처리했지만, 실무에서는 무조건 코드로 작성함

DI에서는 필드, setter, 생성자 주입

setter는 중간에 생성자가 노출된다는 점이 키워드다

생성자 쪽이 가장 권장됨

스프링 컨테이너에 올라가있는 부분만이 Autowired 가 작동함

우선순위 순서

controller index.html

순수 jdbc =>JDBC Template => JPA =>스프링 데이터 JPA

순으로 감싸는 것이 있음

spring frame work를 통해서 사용한다면

DataSourceUtils.getConnection(dataSource);를 통해서 connection을 가져와야 함.

아니라면 transaction같은 부분을 제대로 지킬 수가 없음

datasource부분은

@Autowired

public SpringConfig(DataSource dataSource){

this.dataSource=dataSource;
}

를 통해서 spring이 관리해줌

이때 db를 바꾸는 것도 정말 간단하게 Interface만으로 처리가 가능해버림

Transactional을 Integration Test 의 단계에서는 필요한데, 그 이유는 db에 데이터를 commit 해버리면 계속 데이터가 누적되어서 당연히 테스트가 깨질 가능성이 높다.

이때 Transaction을 걸면 알아서 rollback을 해줌

spring.jpa.show-sql=true //쿼리 보여주기

spring.jpa.hibernate.ddl-auto=none //테이블 자동 생성

도메이 안에 Member에다가 @Entity annotation을 추가하는 방식으로 진행함

Typeorm 베이스로 진행하는 것과 거의 동일해보인다

@Id @GeneratedValue(strategy=GenerationType.IDENTITY) 같은 것으로 처리 가능함

private final EntityManager em 을 통해서 모든 것을 자동함. Spring에서 em을 주입해줌. 이를 이용해서 쿼리를 알아서 만들어 줄 수 있다

jpql 이라고 하는 언어를 사용해야 함.

em.persist();

return member;

em.find(Member.class,id); 같은 방식으로 처리가 가능하구나...? 정도?

Optioinal.ofNullable(member)로 래핑해줘야 함

em.createQuery("select n from Member n",Member.class);

대상이 조금 특이함. *이 아니라, n을 적게 됨

List results = em.createQuery("select m from Member m where m.name = :name", Member.class)
.setParameter("name", name)
.getResultList();

    return results.stream().findAny();

부분이 조금 특이했음

JPA의 경우 모든 변경이 @Transactional 안에서 실행되어야 함

JPQL 을 간단한 CRUD를 할 때는 interface만으로 처리가 가능함. method 이름을 이용한 쿼리

findByasdf => select m from Member m where m.asdf=:asdf",Member.class) 같은 쿼리를 만들어 낼 것

동적 쿼리 : 쿼리 dsl을 사용함

native 쿼리, jdbc템플릿 가능함.

@Around 라는 것을 통해서 AOP를 진행함

AOP적용시 프록시 패턴을 활용해서 Service를 관리함

Spring Container 를 통해서 관리했을 경우 모킹이 쉬움

profile
학생의 마음가짐으로 최선을 다하자

0개의 댓글