Back-end/Spring Boot, JPA

스프링 intro 강의 복습 차원 정리, ★ 단축키

philo0407 2021. 3. 19. 01:17

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 (김영한)

 

★ 유용한 단축키 !

https://velog.io/@progress0407/갓IntelliJ-IDEA-단축키

 

갓IntelliJ IDEA ☆ 단축키 ★

인텔리제이는.. 정말 sexy하다.. 마치 this 이탤릭체처럼안녕 ! 여러분 philz아조씨야\~\~~자 지금부터 오늘은 ! 갓텔리제이의 단축키를 설명하려고해\~~짜잔! 흥칫뽕 !!

velog.io

이곳으로 이주했다 !!

 

 

/** 한담 엔터 치면 초록색 + @파라미터들 나옴

 

개념 정리
@ResponseBody
정적컨텐츠를 제외하고 
html 만들어서 넘기거나 api(일반적으로 객체를 뜻함)로 데이터를 넘기거나

자바 객체를 JSON으로 바꾸어주는 유명한 lib에 잭슨, gson 이 잇음
스프링은 잭슨을 기본 탑재


ㅇ Assertions
org-jupitor
.assertEquals(예상한것, 실제로)

ㅇ org-assertJ
예는 사용을 더 편하게 해줌
.assertThat(실제).isEqualTo(예상);
해석할때 :  실제는 "예상"이 나와야 한다.
내 생각) "예상"은 좀더 단순한것 이상적인것을 넣도록 하자.

ㅇ TDD : 테스트 주도 개발
테스트를 먼저 만들고 구현클래스를 나중에

ㅇ 압셔널
.get() 보다는 .orElseGet을 많이 사용함
.orElseGet(() -> "no name");

  
ㅇ 서비스계층 네이밍은 비지니스에 의존적으로 설계하자. 

이래야 기획자나 상담원 등이, "어? 지금 회원가입이 잘 안돼요." 하면

바로 찾아볼 수 있다.

반면에 리포지토리 이런건 기계적, 개발스럽게 ! 


먼가.. fail to start 메세지가 이쁘게 나온다..

 


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를 가지고.. 스프링에서 다루고 조작을 하겟당 !

 

 

 

** 단축키 참고

Intellij 자주쓰는 단축키 정리 ~ 후회하기 싫으면 그렇게 살지 말고, 그렇게 살거면 후회하지 마라 ( live a life without regrets J. ) (lalwr.blogspot.com)

 

Intellij 자주쓰는 단축키 정리

Editing Ctrl + Space : Basic code completion (the name of any class,method or variable) Ctrl + Shift + Space : Smart code completion (fil...

lalwr.blogspot.com