오늘 김영한의 스프링 입문 강의를 진도상으로 50%완료했다.
어제 세일이 1시간 남아서 홧김에 산 것도 분명 있지만 스프링에 대한 필요성을 느끼고 있었기 때문에 산 것 이라고 할수있다.
취업 준비하는 입장에서 아주 자세한 것은 모르겠지만, 우리나라 큰 IT 기업들은 거의 스프링을 사용하고 있고 그 시장에서 커리어를 쌓으려면 나에게도 스프링이 필요할거란 생각 때문이다.
다음은 오늘 강의를 들으며 내가 모르는 부분이나 유용했던 부분을 틈틈이 기록한 내용이다.
@Controller 처럼 이노테이션이라고 하나 @쓰는게 익숙하지 않아서 좀 더 찾아봐야겠다.
Controller클래스 위에는 @Controller라고 적어주어야 하나보다 강의가 끝나고 찾아보기
컨트롤러에서 @GetMapping("hello")를 적으면 http get host/hello 로 들어온 요청을 처리할 수 있다.
그럼 혹시 싶어서 @PostMapping을 찾아보니까 역시 있다. 뿐만 아니라 Delete, Patch등도 다 이걸로 처리할 수 있는 것 같다.
spring-boot-devtools : 재시작 없이 view 파일 동기화 가능 - 찾아볼것*
gradlew로 빌드 후 실행: 배포할 때 jar파일만 있으면 서버가 실행됨
@RequestParam를 controller 메소드 인자로 넣어서 파라미터를 가져올 수 있다.
역시 보니까 비슷하게 body나 header도 가져올 수 있다.
Spring은 이런걸 보면 다른 라이브러리 가져올 필요 없이 직관적으로 사용 가능해서 좋다.
@ResponseBody: responsebody를 return 값으로 직접 대입하겠다.
:: => return 값에 대해서 HttpMessageConverter가 실행된다.
=> string은 그냥 반환되지만 객체를 넣으면 converter가 자동으로 json으로 변환하여 반환된다
:: 보통은(MVC) view-resolver가 실행되어 template을 찾아 데이터를 넣고 반환함
비즈니스 로직이 무엇인지 찾아보기*
회원 관리 예제
컨트롤러: 웹 MVC의 컨트롤러 역할
서비스: 핵심 비즈니스 로직 구현
리포지토리: 데이터베이스에 접근, 도메인 객체를 DB에 저장하고 관리
도메인: 비즈니스 도메인 객체, 예) 회원, 주문, 쿠폰 등등 데이터베이스에 저장하고 관리됨
서비스는 좀 더 비즈니스 로직스럽게 구성
리포지토리는 좀 더 DB, 기계, 개발에 가깝게 구성
테스트 코드 작성
test 패키지와 클래스를 test 폴더 안에 만든다.
클래스 안에 테스트 메소드를 작성하고 메소드 위에는 @Test를 붙여야 한다.
assertThat().isEqualTo()..
메소드끼리 의존성을 가지지 않아야 한다. 예제에서는 repository 객체가 모든 메소드에서 사용되었으므로
메소드가 repository를 사용하는 순서에 따라 문제가 생길 수 있다.
클래스에서 테스트 메소드들이 실행되는 순서는 랜덤이다.
@AfterEach
각 테스트가 끝난 후 실행되는 함수를 정의한다.
여기에 repository를 clear하는 부분을 넣어주면 해결될 것이다.
테스트케이스 작성 시에 메소드 명을 한글로 하는것이 보기 편하다.
정상작동을 확인하는 것만큼 예외 상황을 테스트하는 것 또한 중요하다.
assertThrows( Exception.class, ()->service.join(member) )
를 통해 원하는 상황에서 원하는 Exception이 들어오는 것을 assert할 수 있다.
테스트 코드 작성시
//given
//when
//then
주석을 적어놓고 상황에 맞는 코드를 적는 것이 초보자에게 도움이 된다.