Gradle 테스트 로그 출력과 GitHub Actions CI 확장
·
📒 Java & Spring/Spring
🤔 학습 계기레벨 3 프로젝트 '페스타북'에서 GitHub 협업 중 PR을 생성했을 때, CI 과정에서 테스트가 실패했다. 그러나 로컬에서 IDE로 실행했을 때와 달리, CI 로그에서는 구체적인 실패 원인을 찾아볼 수 없었다. 이를 개선하기 위해 Gradle과 오픈 소스 GitHub Actions에 대해 집중적으로 학습했다../gradlew clean test📚 학습 내용 정리왜 출력이 안될까? 🤔일반적으로 IDE에서 테스트를 실행할 때와 달리, Gradle CLI로 테스트를 실행하면 로그(System, Slf4j)가 출력되지 않는다. 왜, Gradle은 이와 같은 환경을 구성했는지 궁금해 자료를 찾아보았다.공식 포럼에 의하면 테스트가 수백 ~ 수천 개가 실행될 경우, 로깅 출력이 터미널에 도배된다..
JPA Repository 테스트, EntityManager vs Domain Repository
·
📒 Java & Spring/Spring
🤔 학습 계기우테코 레벨 2 과정 '방탈출 예약 대기' 미션의 학습 목표인 여러 계층 테스트를 작성하기가 있었다. 그렇기에 여러 테스트를 경험하기 위해 Repository Test를 작성했고, 그 과정에서 테스트할 초기 데이터 값을 어떤 방법으로 저장해 검증할지 고민이 되었다.🎯 학습 목표 : @DataJpaTest, @WebMvcTest 등을 사용하여 특정 계층의 테스트를 수행할 수 있다. 🛠️ 목표 정의🟡 Before (시작 전)EntityManager 사용은 영속성 컨텍스트 활용으로 다른 Domain Repository 의존 없이 가능하다.의존성 감소로 결합도가 낮은 테스트 코드 작성 가능EntityManager 사용할 경우 flush(), clear() 반복 명시 필요하다.초기 값 설정을 ..
IoC Container와 Spring Bean 파악하기
·
📒 Java & Spring/Spring
🤔 학습 계기우테코 레벨 2 과정에서 IoC 컨테이너와 Spring Bean이 학습 주제로 선정되었다. 처음 이 키워드 접했을 때 개념을 대략적으로는 이해했지만, 구체적인 사용 목적과 지식이 모호해 개인 학습 주제로 선정하게 되었다.🛠️목표 정의🟡 Before (시작 전)IoC 컨테이너는 Bean들의 저장소 역할을 한다.@Component로 선언된 클래스는 자동으로 Bean으로 등록되어 관리된다.@Component가 생성될 때 필요한 의존성을 다른 Bean들에서 찾아 자동으로 주입한다.🟢 After (완료 후)IoC 컨테이너는 객체를 생성, 연결해 주는 역할이다.객체 간의 결합도를 낮추고, 테스트에 용이제어의 역전으로 개발자에게 편리한 환경 제공Spring Bean은 Spring이 직접 관리하는 ..
Spring MVC 요청 흐름, @Controller의 역할
·
📒 Java & Spring/Spring
🤔 학습 계기우테코 레벨 2 과정의 Spring Annotation MVC 복습 중, @Controller 어노테이션이 어떤 과정을 통해 HTTP 요청을 가로채고 응답을 반환하는지 궁금해졌다. 실무에서도 자주 사용하는 개념인 만큼, 이번 기회에 짚고 넘어가고자 학습 주제로 선정했다.🛠️목표 정의🟡 Before (시작 전)@Controller 어노테이션 선언 시, Spring은 웹 요청을 처리할 수 있는 정보를 바구니에 별도로 관리하나?@Contoller도 @Component를 통해 Bean 등록만 하는 것이 아니라, 요청 매핑 정보도 별로 저장하나?🟢 After (완료 후)@Controller은 단순히 Spring Bean 등록을 넘어 매핑 정보도 함께 HandlerMapping에 저장한다.모든 ..
[Spring] Cannot resolve parameter names for constructor 오류 해결 (@ModelAttribute)
·
📒 Java & Spring/Spring
1. 오류 발생 - 뭐가 문제지..?인터넷 강의를 들으며, 실습 중에 다음과 같이 java.lang.IllegalStateException: Cannot resolve parameter names for constructor public hello.itemservice.domain.item.Item(java.lang.String,java.lang.Integer,java.lang.Integer)오류가 발생했습니다. ⚠️ parameter.. names.. constructor..? 파라미터.. 이름.. 생성자? 우선 구글 번역기를 돌려 메시지를 확인했습니다.이름을 확인할 수 없다? 바로 domain으로 정의한 Item 클래스를 내용을 확인했습니다.@Datapublic class Item { priva..
[Spring] 프로젝트 설계 패키지 구조는 어떤식으로 하지?
·
📒 Java & Spring/Spring
1.  "와.. 이게 무슨 구조야?"인터넷 강의와 서적으로 Spring를 하고 있던 중, 궁금증이 생겼습니다. "실무에서는 프로젝트할 때 파일 구조를 어떤 식으로 구성할까?"그래서 GitHub에서 Spring Boot 기반 오픈소스 프로젝트를 탐색하기 시작했습니다. woowacourse-teams GitHub에서 '2023-hang-log 행록' 프로젝트를 살펴보았습니다.프로젝트 디렉토리 구조를 보자마자 "와.. 이게 무슨 구조야?" 말이 입으로 튀어나왔습니다. 🫢 GitHub - woowacourse-teams/2023-hang-log: 장소 기반 여행 기록 서비스, "행록"⛱️장소 기반 여행 기록 서비스, "행록"⛱️. Contribute to woowacourse-teams/2023-hang-lo..