상속 관계 JpaRepository > PagingAndSortingRepository > CrudRepository PagingAndSortingRepository 는 페이징 처리를 위한 메소드를 제공해준다 아래의 코드는 PagingAndSortingRepository 인터페이스의 내부 구조이다 @NoRepositoryBean public interface PagingAndSortingRepository extends CrudRepository { /** * Returns all entities sorted by the given options. * * @param sort * @return all entities sorted by the given options */ Iterable findAll(S..
테스트 코드 작성 중 에러발생 cannot deserialize from Object value 가 핵심 에러인 듯하여 찾아보니 Object Mapper로 매핑이 안되었던 것 같아 확인해 본 결과 *)자바의 객체를 json으로 변환하는 작업을 serialize(직렬화), json을 자바의 객체로 변환하는걸 deserialize(역직렬화)라고 한다. 첫번째 오류, 기본 생성자를 만들지 않았다 ,,,, Json를 객체에 파싱할 때 객체의 프로퍼티 정보를 알기 위해서는 객체 생성을 위한 기본 생성자(접근 제한자 무관)가 반드시 존재해야 하고, Getter/Setter/Field 중에 접근 제한자가 위 조건을 만족하는 것이 하나라도 있어야 한다. (Dto에서 Builder 패턴 사용할 때 AllArgsConst..
1. @webMvcTest 를 사용한 스프링 부트 테스트 @RunWith(SpringRunner.class) @WebMvcTest(controllers = HelloController.class) public class HelloControllerTest { @Autowired private MockMvc mockMvc; @Test public void hello() throws Exception { String hello = "hello"; mockMvc.perform(get("/hello")) .andExpect(status().isOk()) .andExpect(content().string(hello)); } } @RunWith(SpringRunner.class)는 스프링부트 테스트와 Junit 사..
스프링 프로젝트를 진행하며 문든 둘의 차이가 무엇인지 궁금해서 찾아보았다 별거 아닌 내용이지만 나는 몰랐으니까 ㅎㅂㅎ 정리해야겠다!! 1. @RequestParam - 파라메터의 값과 이름을 함께 전달하는 방식으로 게시판 등에서 페이지 및 검색 정보를 함께 전달하는 방식을 사용할 때 많이 사용한다. controller layer에서의 사용법 @GetMapping("/comments") @ResponseStatus(HttpStatus.OK) public GetCommentsResponse getComments( @RequestHeader String accessToken, @RequestParam(required = false, defaultValue = "0", "page") int currentPage..
프로그램의 오류 두가지 1. 컴파일 에러 (컴파일 중 발생하는 에러) 2. 런타임 에러 (어플리케이션 실행 중 발생하는 에러) 자바 1. 에러 - JVM 실행에 문제 -> 개발자가 해결할 수 없음 2. 예외 - 사용자의 잘못된 조작 or 개발자의 잘못된 코딩으로 발생 둘의 공통점 : 둘다 프로그램이 예기치 못하게 종료된다 예외는 예외처리를 통해 프로그램의 종료를 막고 정상 실행할 수 있다 - Exception 클래스는 자바 모든 예외의 조상이 되는 클래스 해결방법 : 예외가 발생하는 시점에 RuntimeException클래스를 상속받아 만든 예외처리 메소드를 실행시켜줘야 한다 Springboot에서의 예외처리 방법 3가지 1. @ControllerAdvice - 전역 예외처리 지원 2. @Exceptio..
Gradle을 이용한 멀티 모듈 동아리 프로젝트를 시작하며 프로젝트 구조를 어떤식으로 할지 논의 중 멀티 모듈 구조를 사용해 보기로 해였다. 저번 기수때 멀티 모듈 구조를 사용해 봤지만 내가 프로젝트 초기 설정을 하지 않아서 자세히 알아보지는 않았는데 이번에 초기 설정을 하게 되면서 멀티모듈의 필요성과 구조에 대하여 학습하고 정리하기로 하였다. 멀티 모듈 이거 왜 쓰는거야? 사실 아직도 완벽하게 이래서 써야하는군! 이라고는 이해하지 못했다. 하지만 구글링을 해보며 어느정도 느낌을 알것 같다.. 프로젝트를 사용자와의 접점을 담당하는 서버프로젝트와 DB와의 접점을 담당하는 서버프로젝트로 구분한다면 공통으로 사용되는 클래스들은 어떻게 다룰 것인가를 생각해보자 가장 직관적인 방법으로는 복사 & 붙여넣기가 있다 ..
스프링 부트와 AWS로 혼자 구현하는 웹 서비스 책 실습 후 이론 정리 목적으로 작성한 자료입니다 참고자료 : 스프링 부트와 AWS로 혼자 구현하는 웹 서비스 Chap3. 스프링 부트에서 JPA로 데이터베이스 다뤄보자 관계형 데이터베이스의 패러다임 : 어떻게 데이터를 저장할지에 초점 객체지향 프로그래밍 언어 : 메시지를 기반으로 기능과 속성을 한곳에서 관리할지에 초점 = 관계형 데이터베이스와 객체지향 프로그래밍 언어의 패러다임 불일치 발생 -> 데이터 베이스 모델링에만 초점이 맞춰지게 된다 패러다임 일치를 시켜주기 위한 기술이 JPA이다 즉 개발자는 객체지향적으로 프로그래밍을 하고 JPA가 이를 관계형 데이터베이스에 맞게 SQL을 대신 생성해서 실행해준다 -> 더 이상 SQL에 종속적인 개발을 하지 않아..
스프링 부트와 AWS로 혼자 구현하는 웹 서비스 책 실습 후 이론 정리 목적으로 작성한 자료입니다 참고자료 : 스프링 부트와 AWS로 혼자 구현하는 웹 서비스 chap1. 인텔리제이로 스프링 부트 시작하기 인텔리제이 설치 Github 연동 및 프로젝트 생성 chap2. 스프링 부트에서 테스트 코드 작성하기 테스트 코드의 종류 (TDD 테스트, 단위 테스트) TDD란? 테스트가 주도하는 개발 항상 실패하는 테스트 작성 -> 테스트 통과하는 프로덕션 코드 작성 -> 테스트 통과하면 프로덕션 코드 리팩토링 단위 테스트란? 기능 단위의 테스트 코드 작성 단위 테스트 코드를 작성해야 하는 이유 개발 단계 초기에 문제를 발견할 수 있게 해준다 개발자가 코드를 리팩토링하거나 라이브러리 업그레이드 등에서 기존 기능이 ..