티스토리 뷰
저번 Time Zone 에러 이후 새로운 에러가 등장하였다.
이미 지친 상태였던 나는 도움을 받아 빠르게 해결한 뒤,
코드를 복원하여 복습하는 느낌으로 다시 공부를 하였다.

Description: Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.
Reason: Failed to determine a suitable driver class
번역을 해보면, url 속성을 지정하지 않아 포함된 데이터 소스를 구성할 수 없다고 한다.
DataSource 설정이 자동 구성될 때 필요한 DB 정보가 설정되지 않아 발생하는 문제라는데,
application.yml 파일에 url: jdbc:mysql://localhost:3306/resume?serverTimezone=UT 라고
jdbc를 설정한 것이 있고, build에서 compile(`org.springframework.boot:spring-boot-starter-jdbc`)를
추가하였으나 해결되지 않아 임시적인 방법으로 아래 사진에서 보이는
@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class}) 을 추가하였다.

여기까지 적용한 뒤 잘 돌아갈 것이라 예상했지만, 그것은 나의 착각...ㅠ
Description:
Field privacyRepository in graphQl.resume.service.PrivacyService required a bean of type 'graphQl.resume.domain.PrivacyRepository' that could not be found.
The injection point has the following annotations:
- @org.springframework.beans.factory.annotation.Autowired(required=true)

또 다른 에러를 확인해보니 필드에서 PrivacyRepository의 빈을 찾을 수가 없다고 한다.
처음에는 PrivacyRepository Class에서 @Repository를 지웠고, PrivacyService Class의
@Autowired 뒤에 (required=false)라는 설정을 붙였다.
디폴트는 true로 @Autowired를 적용한 프로퍼티에 대해 굳이 설정할 필요가 없을 때
false값으로 설정해주는 것이라 한다.

그러나...
저렇게 옵션을 붙이지 않아도 다른 해결 방법이 있었다.
바로 @Resource 어노테이션을 사용하는 것이었는데,
조금 더 찾아보니 의존관계를 설정할 때 사용할 수 있는 방법은 @Autowired, @Resource 뿐만 아니라
@Inject이라는 것도 있다는 것을 알게 되었다.
들었던 것에 의하면, 스프링 컨테이너는 class를 담아두는 상자이고 거기서 class를 호출할 때
타입으로 찾을 것인지 이름으로 찾을 것인지의 차이라고 하였다.
@Autowired와 @Inject는 타입으로 의존관계를 맺고,
@Resource는 이름으로 의존관계를 맺기 때문에 뒤에 설정으로 (name = "class명")을 붙이게 된다.
그런데 왜 타입 형태의 어노테이션이 2개일까?
@Inject와 @Resourse는 Java에서 지원하는 어노테이션으로
Spring Framework에서 다른 Framework로 변경하더라도 사용할 수 있지만
@Autowired는 Srping에서 지원하는 어노테이션이기 때문에 Spring에서만 사용할 수 있다고 한다.
이제 이름으로 bean을 찾을 테니 해결됐지!? 라고 생각하는 찰나
최종 보스가 튀어나오는 것처럼 마지막 에러가 튀어나오셨다.

Description: a component required a bean named 'resume' that could not be found.
구성요소에서 `resume`이라는 bean을 찾을 수 없다고 한다.
참고로 이걸 보며 대체 뭔 소리지 했다.
나의 머릿속의 bean은 spring이 관리하는 객체와 비슷한 느낌으로 들어있는데
`resume`는 패키지이고... 흠.

그렇게 의욕을 잃었다.
한참을 또 찾아봐야 하나 한숨을 쉬며 없던 의욕을 끌어당겨 올 때쯤, 해결할 수 있었다.
그리고 그것은 참 간단했는데 @ComponentScan(basePackages = {"resume"}) 를 추가하기만 하면 되는 것이었다.

설명을 들어보자니 run을 눌러 실행을 시키면 패키지를 최상단부터 읽기 시작하는데
그 설정이 되어있지 않아서 에러가 난 것이라고 하였다.
즉, resume 패키지가 최상단이 아니라 허우적거리는걸 @ComponentScan 어노테이션을 이용해
"resume"라는 이름의 패키지부터 찾으세요~라고 설정해줬다는 것이다.

이게 무슨 소리인지 하나도 모르겠던 나는 결국 컴포넌트를 검색해보았고
검색해본 결과 모듈이라는 게 툭 튀어나왔는데,
모듈이 특정 기술을 사용할 수 있게 해주는 것이라면 그 모듈 안에서 재사용이 가능한 단위가 컴포넌트라고 한다.
프로그래밍의 한 부분이긴 한데 재사용이 가능한 최소 단위라고 하는 것 보니
모듈은 실행시켜주는 느낌이면 컴포넌트는 그 실행한 기술 안에서 재사용이 가능한 단위?.. 라....

모르겠으니 다음에 추가로 공부하는 것으로 하고
여기까지 적용 후 잘 실행되었기에, 이제부터 mapping 설정에 도전하겠다.
- 회고 -
그래도 나름 학원에서 1.5개월 정도 web에 대해 공부했는데
정말 자주 나오는 bean이라던지 컨테이너라던지 그 외에도 여러 가지 모르는 게 산더미처럼 있었다.
그래도 나름 이렇게 정리하며 하나하나 알게 되긴 했지만, 지금 당장 어떤 것을 깊게 파기보다는
아 이런 것이구나 하는 느낌 정도로만 알고 싶다는 것 정도로 알아보는 것만으로도 이해가 잘 안 됐다.
아직 프로그래밍 시작한 기간이 짧고, 알아야 할 지식이 많으니 차근차근 공부해나가면서
부족한 부분의 지식을 추가하는 식으로 알아가야겠다는 생각을 많이 했다.그래도 나름 학원에서 1.5개월 정도 web에 관해 공부했는데
정말 자주 나오는 bean이라든지 컨테이너라든지 그 외에도 여러 가지 모르는 게 산더미처럼 있었다.
그래도 나름 이렇게 정리하며 하나하나 알게 되긴 했지만, 지금 당장 어떤 것을 깊게 파기보다는
아 이런 것이구나 하는 느낌 정도로만 알고 싶다는 것 정도로 알아보는 것만으로도 이해가 잘 안 됐다.
아직 프로그래밍 시작한 기간이 짧고, 알아야 할 지식이 많으니 차근차근 공부해나가면서
부족한 부분의 지식을 추가하는 식으로 알아가야겠다는 생각을 많이 했다.
'개발 일지 > <Project> resume' 카테고리의 다른 글
login 구현하기 - 1 (0) | 2019.04.09 |
---|---|
초반 설정 에러 총정리 (0) | 2019.04.05 |
MySQL - Time Zone 에러 (0) | 2019.03.28 |
Privacy 관련 Class 생성기 - 1 (0) | 2019.03.28 |
내부 설계 및 개발 과정 순서 설계 (0) | 2019.03.25 |
- Total
- Today
- Yesterday
- Request Handler
- Spring
- HTTP
- spring-boot
- 자바스크립트
- 멀티모듈
- 회고
- @Autowired
- header
- 한 입 크기로 잘라먹는 리액트
- 일지
- 인텔리J
- JAR
- 모듈
- Gradle
- springboot
- web
- 프로그래머스
- 스터디 회고
- Spring Boot
- 개발일지
- Java
- graphQL
- JavaScript
- RequestHandler
- body
- MySQL
- mapping
- homebrew
- 개발
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |