참고도서 : 스프링 부트와 AWS로 혼자 구현하는 웹 서비스
AWS 연결까지는 안했고, 네이버랑 구글 아이디 소셜 로그인 하는 것 까지만 봤다.
노션에 오류 난 부분들 따로 적어가면서 체크해뒀던 거, 벨로그로 옮기는 중!
🚨1번

-> @Getter 문제. 추가하니까 변경됨.
🚨2번
java.lang.AssertionError:
Expecting:
<"{"timestamp":"2021-08-04T10:56:30.423+0000","status":404,"error":"Not Found","message":"No message available","path":"/"}">
to contain:
<"스프링 부트로 시작하는 웹 서비스">
at com.jojoldu.book.springboot.web.IndexControllerTest.메인페이지_로딩(IndexControllerTest.java:25)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:78)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:567)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.springframework.test.context.junit4.statements.RunBeforeTestExecutionCallbacks.evaluate(RunBeforeTestExecutionCallbacks.java:74)
at org.springframework.test.context.junit4.statements.RunAfterTestExecutionCallbacks.evaluate(RunAfterTestExecutionCallbacks.java:84)
at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:75)
at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:86)
at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:84)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:251)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:190)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:69)
at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:33)
at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:235)
at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:54)
⇒ [https://github.com/jojoldu/freelec-springboot2-webservice/issues/649](https://github.com/jojoldu/freelec-springboot2-webservice/issues/649)
*문제 해결 완료!
templates라는 폴더를 생성하지 않았던 점, 그리고 mustahce 확장자가 아닌 html으로 진행해서 그런 것이였음.
🚨3번
This application has no explicit mapping for /error, so you are seeing this as a fallback.
Wed Aug 04 20:36:47 KST 2021
There was an unexpected error (type=Not Found, status=404).
No message available
→ 오타 발견해서 fix 완, 그런데 글등록 누르면 또 에러 뜸, 이것도 오타 문제인가?
🚨4번

문제 해결 → IndexController에 연결이 안되어있었음.
🚨5번

문제 해결
2021-08-04 23:49:59.438 WARN 73800 --- [nio-8080-exec-8] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'PUT' not supported]
→ PostsApiController에서 PutMapping에 링크가 잘못 걸려있었다.
🚨6번
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'spring.security.oauth2.client-org.springframework.boot.autoconfigure.security.oauth2.client.OAuth2ClientProperties': Invocation of init method failed; nested exception is java.lang.IllegalStateException: Client id must not be empty.
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:78) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
Bean이 없다는 것 = 패키지명 오류 (설정된 패키지가 없다는 것) → application properties 쪽으로 들어가니까 오타 있었음
🚨7번
IntelliJ finished with non-zero exit value 1 오류 수정
IntelliJ IDEA - preferences - Build,Execution,Deployment - Build Tools - Gradle - Build and run → build and run using을 Gradle default에서 IntelliJ IDEA로 변경하면 됨.
🚨8번
맞는 것
# registration
spring.security.oauth2.client.registration.naver.client-id=아이디
spring.security.oauth2.client.registration.naver.client-secret=비밀번호
**spring.security.oauth2.client.registration.naver.redirect-uri={baseUrl}/{action}/oauth2/code/{registrationId}**
spring.security.oauth2.client.registration.naver.authorization-grant-type=authorization_code
**spring.security.oauth2.client.registration.naver.scope=name,email.profile_image**
spring.security.oauth2.client.registration.naver.client-name=Naver
# provider
spring.security.oauth2.client.provider.naver.authorization-uri=https://nid.naver.com/oauth2.0/authorize
spring.security.oauth2.client.provider.naver.token-uri=https://nid.naver.com/oauth2.0/token
spring.security.oauth2.client.provider.naver.user-info-uri=https://openapi.naver.com/v1/nid/me
spring.security.oauth2.client.provider.naver.user-name-attribute=response
틀린 것
spring.security.oauth2.client.registration.naver.client-id=아이디
spring.security.oauth2.client.registration.naver.client-secret=비밀번호
**spring.security.oauth2.client.registration.naver.redirect-uri={baseUrl}/{action}/oauth2/code/{registrationID}**
spring.security.oauth2.client.registration.naver.authorization-grant-type=authorization_code
**spring.security.oauth2.client.registration.naver.scope=name,email,profile_image**
spring.security.oauth2.client.registration.naver.client-name=Naver
spring.security.oauth2.client.provider.naver.authorization-uri=https://nid.naver.com/oauth2.0/authorize
spring.security.oauth2.client.provider.naver.token-uri=https://nid.naver.com/oauth2.0/token
spring.security.oauth2.client.provider.naver.user-info-uri=https://openapi.naver.com/v1/nid/me
spring.security.oauth2.client.provider.naver.user-name-attribute=response
눈으로 확인하는 거 귀찮아서 아주 간단하게 코딩해서 알아봄
#include <iostream>
using namespace std;
int main()
{
string str1;
string str2;
while(true){
cout<<"1:"<<endl;
cin>>str1;
cout<<"2:"<<endl;
cin>>str2;
if(str1==str2){
cout<<"ok"<<endl;
}else{
for(int i=0;i<str1.length();i++){
if(str1[i]!=str2[i]){
cout<<str1[i]<<endl;
break;
}
}
}
}
}
구글 로그인만 설정했을 때는 되던 것이 네이버까지 설정하니까 안됨