본문 바로가기

Spring/boot6

[Spring Boot] 개발 단계에서 테스트를 위한 DB data 만들기 개발 중에 테스트를 진행할 때, 아예 db에 테스트 data를 넣고 싶다면 was가 띄워지기 전에 DB에 data들을 넣는 방법이 있다 그전에 Spring Component와 Bean에 대해 간단히 정리하고 가고자 한다 Spring Bean Spring 을 구성하는 핵심요소들 Spring IOC(Inversion Of Control) 컨테이너에 의해 관리되는 POJO (Plain Old Java Object) Spring Container에서 생성하는 객체 Spring Component bean으로 등록될 로직을 가진 class Spring이 IOC 컨테이너를 만들고 그 안에 Bean 객체들을 생성해서 등록시킬 때(Life Cycle CallBack) Component들을 모두 스캔하여 그러한 class.. 2022. 2. 18.
[JPA] DB의 data가 update 되는 플로우 정리 유져가 회원가입을 완료한 후에 마이페이지 같은 곳에서 자신의 정보를 바꾼다고 가정 JPA는 이러한 update 에서 어떠한 과정을 거치는가에 대해 정리해보려 한다 예시 코드 @Service @Transactional(readOnly = true) @RequiredArgsConstructor // final에 해당되는 필드에 대한 constructor 자동 생성 어노테이션 public class UserService{ private final UserRepository userRepository; @Autowired // constructor injection public UserService(UserRepository userRepository){ this.userRepository = userRepos.. 2022. 2. 18.
[Spring Boot] Rest Controller DTO 의 필요성 Entity를 Client에 노출하지 말자 API 스펙과 엔티티가 깊이 연관 엔티티를 아래와 같이 직접 노출할 경우, 추후 entity를 수정시 API 스펙 자체가 바뀌어버리는 상황이 온다 클라이언트 쪽과 공유하는 부분이라 큰 혼란이 초래됨 @GetMapping("/api/users") public List userList(){ return userService.findUsers(); // User entity 리스트가 반환됨 } 반환값에 특정 필드 추가 불가 클라이언트에서 특정 계산된 값이 필요하다고 할 때, 예를 들어 user의 총 인원 수 JSON의 기본틀이 깨지게 된다 { "count" : 100, "users" : [ { "id" : 1 "name" : "hj" "email" : "email@g.. 2022. 2. 15.
Spring Boot - Test 코드 작성 Spring 과 Integration하여 Test @RunWith(SpringRunner.class) spring과 integration하여서 메모리 모드로 엮는다 junit4가 지원하는 어노테이션으로, @Autowired @MockBean 이 붙어있는 것들만 application context로 로딩함 Runner - test 프로세스들을 계획하고 실행하는 클래스 @SpringBootTest application context를 모두 적재하여 RunWith를 사용하였을 때보다 무겁다 @Transactional 모든 테스트를 한 후에 roll-back을 하기 위함 @RunWith(SpringRunner.class) @SpringBootTest // unit test 할때는 @DataJpaTest를 써주는.. 2022. 1. 4.