본문 바로가기

우아한테크코스 4기48

[Spring] Transaction 추상화, 동기화 스프링은 트랜잭션을 시작(가져오기)하고, 커밋하고, 롤백하는 기능을 추상화하였습니다. 추상화 덕분에 우리는 스프링 트랜잭션을 쉽게 관리할 수 있는데요. 오늘은 스프링 트랜잭션 추상화에 대해 간단히 알아보겠습니다. public interface PlatformTransactionManager extends TransactionManager { TransactionStatus getTransaction(TransactionDefinition definition) throws TransactionException; void commit(TransactionStatus status) throws TransactionException; void rollback(TransactionStatus status) thr.. 2022. 4. 27.
[Spring] 컨트롤러 테스트 시 한글 깨짐 문제 해결 이번 미션에서 MockMvc를 이용하여 컨트롤러 테스트를 진행하던 중 아래와 같은 예외를 볼 수 있었습니다. @DisplayName("진행 중인 모든 방을 찾아온다.") @Test void findRooms() throws Exception { RoomsResponseDto roomsResponseDto = RoomsResponseDto.of(List.of(createRoomEntity(1L) , createRoomEntity(2L))); String response = objectMapper.writeValueAsString(roomsResponseDto); given(chessService.findRooms()) .willReturn(roomsResponseDto); mockMvc.perform(ge.. 2022. 4. 24.
[Spring] MockMvc 를 이용한 컨트롤러 테스트 스프링 프레임워크에는 MockMvc라는 Spring MVC Test 프레임워크가 존재합니다. 서버를 구동하고 있지 않아도 Spring MVC 요청을 처리하는 모듈에서 모의 서블릿을 전달하고 디스패처 서블릿을 구동합니다. 즉, MockMvc는 모의 요청, 응답을 이용해 테스트하고자 하는 시나리오를 가볍게 테스트할 수 있는 프레임워크입니다. 오늘은 MockMvc를 간단하게 알아보고, Controller를 테스트 하는 코드를 작성하고자 합니다. MockMvc 설정 MockMvc를 이용하여 요청을 보내기 위해 몇가지 클래스를 먼저 알아둬야 합니다. MockMvcBuilders.* MockMvcRequestBuilders.* MockMvcResultMatchers.* MockMvcResultHandlers.* 위.. 2022. 4. 23.
[Spring] NamedParameterJdbcTemplate 사용하기 NamedParameterJdbcTemplate Spring에서는 데이터에 접근하는 기능으로 JdbcTemplate을 구현한 다양한 구현체를 갖고 있습니다. 이번 포스팅에서는 JdbcTemplate 를 구현한 구현체인 NamedParameterJdbcTemplate 를 사용할 때 얻을 수 있는 편리함에 대해 글을 작성해보고자 합니다. NamedParameterJdbcTemplate 는 Jdbc를 사용할 때 생기는 ? 코드를 대체하고자 래핑한 클래스입니다. NamedParameterJdbcTemplate 가 sql 쿼리를 만드는 전략은 추가해야 할 파라미터가 많을 때 코드 작성을 정말 편리하게 만들어 줍니다. 직접 코드를 작성해보면 이 편리함을 느낄 수 있습니다. 간단하게 우테코 crew들의 정보를 관리할.. 2022. 4. 21.
[Spring] Spring Boot에서 트랜잭션 사용하기 일반적으로 하나의 비즈니스는 한 트랜잭션 내부에서 다룹니다. 비즈니스로직이 실행되는 도중 어떠한 이유로 메서드 실행이 중단된다면 지금껏 처리한 모든 쿼리가 롤백되어야 합니다. 체스 미션을 예시로 간단히 설명해보겠습니다. a2 포지션의 폰을 a4 포지션으로 옮기려면 a2 포지션은 blank로 a4 포지션은 폰으로 변경해야 합니다. 만약 위 비즈니스 로직이 다른 트랜잭션에서 작동하다 a2 포지션을 blank로 바꾼 후 에러가 발생하면 어떻게 될까요? 그렇다면 a2, a4 모두 blank를 갖게되고 폰은 어디론가 증발하게 될 것입니다. 이러한 문제를 해결하기 위해 주로 비즈니스 로직이 존재하는 Service 레이어에서 트랜잭션을 관리하게 됩니다. 트랜잭션을 완벽하게 이해하기 위해서는 dataSource가 co.. 2022. 4. 20.
[레벨 1 돌아보기] 테스트 코드 작성을 위한 규칙 레벨 1 미션의 주요 학습 목표는 TDD입니다. 그 이후 모든 과제를 TDD로 수행하다보니, 좋은 테스트 코드를 작성하기 위한 규칙을 만들어야 했는데요. 레벨 1을 돌아보며 좋은 테스트 코드를 작성하기 위한 규칙을 재정립하고자 이 포스팅을 작성하게 됐습니다. 먼저 좋은 테스트 코드라는 정의를 내리기 전에 테스트 코드를 왜 작성해야 하는지가 중요합니다. 저도 지금 생각해보니 학습목표이기 때문에 관성적으로 작성했다 라는 답변이 가장 먼저 떠올랐습니다. 이건 이유가 되지 않는 것 같고 다른 이유를 좀 더 고민해보았습니다. 테스트는 왜 작성하는가? 저는 아래 3가지 이유로 테스트 코드를 작성해왔습니다. 1. 시간 단축 하나의 기능을 구현할 때마다 실제 애플리케이션을 실행한다면 얼마나 불편할까요? 특히 나중에 여.. 2022. 4. 17.