스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 (김영한)
★ 유용한 단축키 !
https://velog.io/@progress0407/갓IntelliJ-IDEA-단축키
이곳으로 이주했다 !!
/** 한담 엔터 치면 초록색 + @파라미터들 나옴
개념 정리
@ResponseBody
정적컨텐츠를 제외하고
html 만들어서 넘기거나 api(일반적으로 객체를 뜻함)로 데이터를 넘기거나
자바 객체를 JSON으로 바꾸어주는 유명한 lib에 잭슨, gson 이 잇음
스프링은 잭슨을 기본 탑재
ㅇ Assertions
org-jupitor
.assertEquals(예상한것, 실제로)
ㅇ org-assertJ
예는 사용을 더 편하게 해줌
.assertThat(실제).isEqualTo(예상);
해석할때 : 실제는 "예상"이 나와야 한다.
내 생각) "예상"은 좀더 단순한것 이상적인것을 넣도록 하자.
ㅇ TDD : 테스트 주도 개발
테스트를 먼저 만들고 구현클래스를 나중에
ㅇ 압셔널
.get() 보다는 .orElseGet을 많이 사용함
.orElseGet(() -> "no name");
ㅇ 서비스계층 네이밍은 비지니스에 의존적으로 설계하자.
이래야 기획자나 상담원 등이, "어? 지금 회원가입이 잘 안돼요." 하면
바로 찾아볼 수 있다.
반면에 리포지토리 이런건 기계적, 개발스럽게 !
Test 할 때 !
given when then 전략
given
무언가가 주어졌어
어떤 데이터가 주어지면, 이 데이터를 기반
when
이걸 실행했을때
이런 상황이라는 가정하에, 이걸 검증
then
결과가 이게 나와야 해
이 결과가 도출돼야 한다. 검증 부
test코드는 어짜피 빌드할때 포함되지 않아. 그냥 한글로..
test는 정상flow도 중요하지만 예외flow가 훨씬 중요
중복회원 예외 test코드
// 1번
try {
memberService.join(member2);
fail();
} catch (IllegalStateException e) {
assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다.");
}
// 2번
assertThrows(IllegalStateException.class, ()-> memberService.join(member2));
테스트는 코드의 끝단기이 때문에 제일 편한 방법을 사용하면 된다.
@Transactional을 이용하면
테스트 후에 커밋을 하지 않는 한 롤백을 다 해준다.
메서드에
@Commit 붙이면 진또배기 커밋함.
단위테스트가..
좋은 테스트일 확률이 있어..
스프링 컨테이너 없이 테스트할 수 없이 테스트할 수 있게 훈련해야..
스프링 컨테이너까지 올려야 하는 상태이면.. 테스트 설계가 잘못되었을 확률이 높아.
@SpringBootApplication : 이 패키지의 경로부터 시작해서 콤포넌트 스캔범위를 잡음
component 스캔방식에서 config파일로 가는 이유..
: 구현체가 바뀌엇을 경우 변경 손쉽다 ! 여러군데 바꿀것을 한군데만 바꾸면 된다.
url get요청 오면 우선 컨트롤러부터 찾아봐
없으면 정적 리소스를 찾아봄 (static)
${member.id} : property 접근 방식
ls -arlth : 리눅스 명령어.. h는 사람도 볼수있게
h2 db 관련 내용들
윈도에서 h2 실행할거면 요로케
chmod 755 h2.bat
h2.bat
h2 안뜨면 ip 숫자주소를 localhost로 바꿔주삼!
참고로.. c/Users/progr 이곳에 test.mv.db가 있다.
이후부터는 동접을 위해 다른 JDBC URL을 사용하여야 한다.
Tip! 프로젝트 바로 하위에 sql폴더를 만들어서
ddl.sql 같은걸 저장하면 git에서 소스관리할 떄 좋다
datasource.getConnection();
: 여기서부터 소켓통신이 일어나게 한다.
DataSourceUtils.getConnection(dataSource)
: 이걸 통해야.. 연결을 유지함. 이래야 트랜잭션할 때 문제 안생겨
DataSourceUtils.releaseConnection(conn, dataSource);
: 닫을때도 마찬가지
JdbcTemplate 실무에서도 많이 쓰인다. (템플릿 메서드 패턴으로 이로어져있다.)
private final JdbcTemplate jdbcTemplate;
public JdbcTemplateMemberRepository(DataSource dataSource) {
jdbcTemplate = new JdbcTemplate(dataSource);
}
: 스프링에서도 권장하는 스타일
생성자 하나라면 @Autowired를 생략 가능
실전에선..
6~70% : test code
2~30% : production code
작은 버그 하나가.. 수억~수십억의 피해로 ㅠ
@Entity
: jpa가 관리하는 Entity이다. (테이블)
키 매핑 전략: identity : db가 자동으로 값 증가시켜주는것
ex) 오라클은 시퀀스 . 테이블에서 채번
JPQL : 테이블이 아닌 객체를 조회
interface가 interface를 상속받을 때는 implement가 아니라 extends !
public interface SpringDataJpaMemberRepository extends JpaRepository<Member, Long>, MemberRepository { . . . }
-에서 MemeberRepository를 구현해서 injection해줌
aop 를 사용할 때 컴포넌트 스캔을 써도 되지만
config에 bean등록하는 것이 더 눈에 띄게 해줄 수 있기 때문에 이게 좋아!
class hello.hellospring.service.MemberService$$EnhancerBySpringCGLIB$$a4b2d55f
memberService를 가지고.. 스프링에서 다루고 조작을 하겟당 !
** 단축키 참고
'Back-end > Spring Boot, JPA' 카테고리의 다른 글
newlecture: spring DI (IoC) (0) | 2021.04.23 |
---|---|
스프링 활용 JPA 강의 내용 기록 (0) | 2021.03.29 |
기타 오류들 해결... (lombok 설정 등) (0) | 2021.03.07 |
Webjjang쌤 Spring (0) | 2021.02.06 |
뉴렉쳐 Spring MVC 킹왕쨩 (0) | 2020.12.11 |
hi hello... World >< 가장 아름다운 하나의 해답이 존재한다
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!