BE/Spring

· BE/Spring
// TemplateServiceTest @DisplayName("템플릿 작성자는 템플릿을 삭제할 수 있다.") @Test void deleteTemplateTest() { //given var position = positionRepository.save(UserFixtures.createPosition()); var user = UserFixtures.createUser(position); var savedUser = userRepository.save(user); var template = createTemplate(savedUser); var savedTemplate = templateRepository.save(template); //when templateService.deleteTemplat..
· BE/Spring
// @Transaction 사용 X @DisplayName("템플릿 수정 요청을 받아서 기존 템플릿을 업데이트한다.") @Test void updateTemplateTest() { var position = positionRepository.save(UserFixtures.createPosition()); var user = UserFixtures.createUser(position); var savedUser = userRepository.save(user); var template = createTemplate(savedUser); var savedTemplate = templateRepository.save(template); var questions = List.of("변경된 질문1", "변경된..
· BE/Spring
문제 상황 PostService에서 사용하는 PostRepository(Jpa)에 직접 의존을 하고 있었고 이런 구조는 상위모듈이 하위모듈에 직접 의존하는 관계라고 생각해서 DIP을 사용해 자주 변하는것과 변하지 않는것을 구분하는 설계로 변경했다. 하지만 그 뒤에 정상적으로 동작하던 테스트가 깨져버렸다.. 적용된 Repository // PostRepository는 도메인 Repository @Repository @RequiredArgsConstructor public class PostRepositoryAdapter implements PostRepository { private final PostJpaRepository postJpaRepository; @Override public Post save..
· BE/Spring
문제 상황 레디스를 사용하는 테스트코드에서 임베디드 레디스가 아닌 테스트컨테이너를 선택했습니다. 전체 테스트를 실행했을 때 레디스 컨테이너에 연결이 실패하는 현상이 발생하고 있습니다. 현재 레디스와 레디스 테스트 컨테이너의 설정입니다. // 프로덕션 코드에서 RedisTemplate Bean 등록 @Configuration @EnableRedisRepositories public class RedisConfig { @Bean public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory) { RedisTemplate redisTemplate = new RedisTemplate(); redisTemplate.setConnec..
· BE/Spring
@SpringBootApplication 에는 대표적으로 3개에 어노테이션이 붙어 있습니다. @SpringBootConfiguration @EnableAutoConfiguration @ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class), @Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) }) public @interface SpringBootApplication { @SpringBootConfiguration 어노테이션 @Target(ElementType.TYPE) @Retenti..
· BE/Spring
문서화 게시판 프로젝트 미션에는 API 문서화에 대한 조건이 주어졌다. API 문서화를 해본 적이 없었기 때문에 조사를 먼저 시작했다. 우선 스프링 부트 환경에서 문서화로 유명한 도구는 REST Docs와 Swagger로 알고 있었기에 두 가지를 짧게 사용해 보면서 비교해 보고 현재 내 상황에 맞는 것을 사용하기로 했다. REST Docs Spring REST Docs는 RESTful 서비스의 정확하고 읽기 쉬운 문서를 생성하기 위한 도구입니다. 이는 실제 코드와 함께 동작하며, 테스트 기반의 접근 방식을 사용하여 API 문서화 작업을 수행한다. 주요 특징 장점 테스트 기반: Spring REST Docs는 테스트 중에 문서 조각(snippets)을 생성합니다. 코드 변경으로 테스트코드가 같이 변경될 때..
· BE/Spring
Spring DataJPA 쿼리메서드는 어떤값을 사용할까? 문제 상황 Comment가 Post를 갖고 있고 Post는 Comment를 갖고 있지않습니다. 그래서 Post에 맞는 댓글을 조회해야하는 상황이고 Comment에서 ID가 1인 Post를 찾기위해 쿼리메소드를 아래처럼 작성했지만 오류가 발생했습니다. List findByPostId(Long postId) Failed to create query for method public abstract java.util.List com.devboard.comment.repository.CommentRepository.findByPostId(java.lang.Long); No property 'id' found for type 'Post'; Traversed..
· BE/Spring
Spring Data JPA를 이용한 쿼리 메서드에 대해 알아보겠습니다. 레포지토리는 JpaRepository를 상속받는 것만으로도 다양한 CRUD 메서드를 제공합니다. 하지만 기본 메서드들은 식별자 기반으로 생성되어 있기 때문에 결국 별도의 메서드를 정의해서 사용하는 경우가 많습니다. 이때 간단하게 사용할 수 있는것이 쿼리 메서드입니다. //리턴타입 + {주제 + 속성} 구조의 메소드 List findByLastnameAndEmail(String lastName,String email); find...By, exists...By 와 같은 키워드로 쿼리의 주제를 정하며 'By'는 서술어의 시작을 나타내는 구분자 역할을 합니다. 서술어 부분은 검색 및 정렬 조건을 지정하는 영역입니다. 그리고 And,Or을..
E@st
'BE/Spring' 카테고리의 글 목록