티스토리 뷰

저번 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}) 을 추가하였다.

@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
링크
«   2024/05   »
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 31
글 보관함