우아한테크코스 6기/2단계

우아한테크코스 6기/2단계

테스트 시 데이터베이스 격리 성능 개선하기 (+ AbstractTestExecutionListener)

밀리고 밀리다가 이제 쓰는 Test 개선기....ㅠ 기존 방식통합 테스트와  레포지토리 테스트 시 H2 데이터베이스를 사용하여 테스트를 진행 했다.데이터베이스를 사용한 테스트에서, 각각을 격리하기 위해 @DirtiesContext를 ClassMode.AFTER_EACH_TEST_METHOD 옵션으로 사용했다. 테스트 격리용 어노테이션을 생성하고 해당 기능이 필요한 테스트에 대해 선언을 한다.아래는 레포 테스트와 통합 테스트용 어노테이션에 격리용 어노테이션을 적용하여 사용한 예시이다. 그런데 해당 옵션은 매 테스트 @DirtiesContext는 DataSource를 포함한 전체 ApplicationContext을 새로 생성한다.초반 미션을 진행할 때에는 데이터베이스 격리가 필요한 테스트가 많지 않아 해당..

우아한테크코스 6기/2단계

난 레벨 2 동안 어떤 경험들을 했을까?

레벨1에 이어 레벨2도 매우 빠르게 지나갔다.개인적으로 레벨1보다 더 시간이 빨랐던 것 같다. 그 기념으로 회고를 작성한다.더이상 비교하지 않는다.우테코에 오고나서 레벨1을 보내며 가장 큰 생각은 "과연 나는 다른 사람들처럼 성장하고 있나?"였다."대단한 사람들이 정말 많은데, 내가 어떻게 이 곳에 있지?", "저 사람은 저렇게 빨리 배우고 습득하는데, 나는 왜 느리지?" 라는 생각과 비교가 레벨1기간동안 나를 잡아먹었던 것 같다.또 객체지향에 대해 어려움을 심하게 느끼면서 더 비교를 많이 하고 힘들어했던 것 같다. 레벨1을 마치며 객체지향과 "정답은 없다"에 대한 고민이 어느정도 해소가 되면서 이런 비교가 드는 이유에 대해 알게 되었다.이유는 내 욕심이었다. 되돌아보면 열심히 하고 싶은 욕심이 나를 채..

우아한테크코스 6기/2단계

gradle 살펴보기

스프링으로 개발을 하면서 항상 사용했던 빌드 툴은 gradle 이였다.Maven보다 간결하고 가독성이 좋다고 생각했기 때문인데, 이번 미션을 하면서 자주 사용해왔던 gradle의 기본적인 기능에 대해 학습해보고자 글을 작성하게 되었다. Gradle이란?소프트웨어의 빌드, 테스트, 배포를 자동화하는 도구로 주로 JVM 프로젝트를 빌드할 때 사용된다.Gradle 주요 개념Build ScriptsGradle이 프로젝트를 빌드하는 방법을 정의하는 스크립트를 말한다.Dependency Management프로젝트에 필요한 외부 리소스를 자동으로 관리해준다.Tasks코드 컴파일, 테스트 실행 등의 기본 작업 단위를 말한다.PluginsGradle의 기능을 확장하는 플러그인, 선택적으로 기능을 추가할 수 있다. Jav..

우아한테크코스 6기/2단계

JPQL new 연산은 지양해야 할까? JPQL은 어떻게 동작할까?

🦵🏼발단우테코에 오기 전, 팀 프로젝트를 하면서 JPQL의 new 키워드를 통해 생성한 DTO를 받은 적이 있었다.그러고 난후 코드리뷰에서 다른 팀원이 비용이 비싸기 때문에 DB단에서 연산을 지양하는 것이 좋을 것 같다는 식의 피드백을 주었는데, 당시에 new 키워드의 실행 시점이 어느 시점인지 파악해보거나 깊게 생각해보지 않고 코드를 변경했었다. 우테코에 오고 난후, 미션을 진행하면서 JPQL로 new 키워드를 사용한 예제 코드가 있었는데 당시의 경험이 기억나면서 정말 지양해야 할지 장단점이 무엇일지 파악하고자 글을 작성하게 되었다. 🤔 의문new 키워드가 정말 DB단에서 연산이 맞을까?new 키워드, 더 나아가 JPQL은 어떻게 동작할까?아니라면, 지양해야 하는 다른 이유가 있을까?최종적으로 n..

우아한테크코스 6기/2단계

[방탈출 사용자 예약] @Bean, @Component, 그리고 POJO

이번 방탈출 사용자 예약에서 아래와 같은 예제 코드가 있었는데, 무지성으로 복붙하고 나서 보니 @Bean에 대해 궁금함이 생겼다. 이 기회에 @Bean, @Component의 차이가 무엇인지에 대해 정리하고 어떤 경우에 사용하면 좋을지에 대해 이야기 해보고자 한다.Spring Bean이란스프링 부트에서 Bean은 Spring Container가 관리하는 객체들을 말한다.따라서 내가 사용하고자 하는 객체를 Spring DI를 통해 사용하기 위해서는 객체를 Bean으로 등록하는 과정이 필요하다.Spring Boot에서의 Bean 등록 방법spring boot에서는 Bean을 등록할 수 있는 방법을 두가지를 제공한다.spring은 xml 등의 방식도 제공하는 것 같으나 아직은 패스한다.1. @Component..

우아한테크코스 6기/2단계

영속성 entity 와 domain entity 분리해보기

기존 프로젝트를 할 때, 스프링과 비슷하게 "객체지향" 에 대해서도 깊은 고민 없이 자바를 사용했었다.돌아보면 도메인 객체를 사용하지 않고 그저 영속성 entity를 가지고 개발을 했던 것 같다. 이번 9단계 요구사항을 반영하기 위해 코드를 볼아보면서, 기껏 열심히 레벨 1동안 배운 내용들을 써먹지 못하고 옛 프로젝트를 할 때처럼 사용한 것 같아서 아쉬웠다. 따라서 이 프로젝트에서의 엔티티 객체들을 어떻게 바라보아야 할까 고민하다가 혼란이 와버렸다.public class Reservation { private final Long id; private final String name; private final ReservationDate reservationDate; private f..

우아한테크코스 6기/2단계

[방탈출 예약 관리] 템플릿 엔진과 @RestController

템플릿 엔진스프링 부트는 정적 페이지와 템플릿 시작 페이지를 모두 지원한다.먼저, static 아래의 index.html 파일을 찾고 없다면 index 템플릿을 찾는다. 아래와 같은 위치로 파일이 존재한다면, /static/index.html을 찾고, (/static/index.html)이 없다면, /templates/index.html를 찾아 응용 프로그램 시작 페이지로 띄운다.static에는 보통 정적 파일인 js나 css 같은 파일들이 위치하고, templates에는 서버가 실행되면서 동적으로 렌더링되는 Thymeleaf 템플릿 파일들이 위치한다.템플릿 엔진 반환하기@Controllerpublic class MemberController { @GetMapping("/hello") publ..

우아한테크코스 6기/2단계

[방탈출 예약 관리] @DiritesContext, 알고 쓰자

미션 예제 코드에 @DirtiesContext라는 어노테이션을 사용하던 중 정확하게 어떤 어노테이션인지 알고자 정리한다. 기본적으로, 스프링 테스트에서는 ApplicationContext를 캐싱하여, 기존의 Context를 재활용한다.따라서 DB 작업이 수행된 테스트가 존재할 때, 테스트 간에 격리가 되지 않고 테스트 간에 영향을 받게 될 수도 있는 것이다.이럴 때 사용할 수 있는 것이 바로 @DirtiesContext 어노테이션이다. @DirtiesContext 너는 누구냐@DirtiesContext는 테스트 실행 중, Spring ApplicationContext가 Dirty 상태가 된다면 컨텍스트를 닫아버리는 것을 말한다.즉, 애플리케이션 컨텍스트가 더티로 표시되면 테스트 프레임워크의 캐시에서 제거..

우아한테크코스 6기/2단계

[레벨2] 1주차 회고

Keep[기존 회고 반영] 레벨 1의 액션 플랜을 지키고자 1주차 회고를 작성한 점[페어 프로그래밍] 학습 테스트에 충분한 시간을 투자한 점[페어 프로그래밍] 모르는 부분이나 애매한 개념들에 대해 짚고 넘어간 점[리뷰 제출] 미리 참고할 부분을 코멘트로 작성하여, 불필요한 리뷰 사이클을 줄인 점[리뷰 제출] 레벨1의 코드 리뷰를 통해 배웠던 마인드셋을 적용하려고 한 점현구막의 리뷰를 통해 동료 개발자의 관점으로 보고자 하는 것을 이번 리뷰에도 적용[미션 전체] 기존에 사용법만 익혔던 어노테이션이나 원리 등에 대해 깊게 고민하려고 한 점Problem[페어 프로그래밍] 페어와 함께 중요하지 않는 것에 매몰되었다.레벨1을 통해 다른 페어들과 개발을 하면서 작은 것이라도 넘어가지 않는 태도(?)에 익숙해졌는데,..

우아한테크코스 6기/2단계

@SpringBootTest의 RANDOM_PORT 옵션과 RestAssured 함께 사용하기

1단계 방탈출 예약 관리 미션의 제공된 테스트 코드를 보면,클래스단에 @SpringBootTest가 붙여져 있고 RestAssured 라이브러리를 통해 테스트 코드를 작성하고 있습니다. 오늘은 테스트 포트를 변경하려다 삽질을 해본 이야기에 대해 작성해보겠습니다.👀 @SpringBootTest란Spring Boot에서 Spring Boot 기능이 필요할 때 표준 스프링 테스트 @ContextConfiguration 어노테이션의 대안으로 사용할 수 있는 어노테이션입니다.이 어노테이션은 Spring을 통해 테스트에 사용되는 ApplicationContext를 생성하는 방식으로 작동합니다.다시 말해 스프링 테스트를 위해 ApplicationContext를 생성합니다.🤔 webEnvironment 속성값@Sp..

minl741
'우아한테크코스 6기/2단계' 카테고리의 글 목록