jojoldu / freelec-springboot2-webservice

1.07k stars 460 forks source link

[오류] p.311. 초기 실행때 만들어야하는 데이터베이스가 뭔지 알수 있을까요. #861

Closed anthem53 closed 1 year ago

anthem53 commented 1 year ago

기존에 올라온 질문이 아닌지 먼저 검색해주세요!

가장 자주 나온 제보

어떤 오류인가요?

오류설명:

p.311 쪽에서 curl localhost:8080 을 실행하는데 아래와 같은 에러가 떠서 질문합니다.

curl localhost:8080 {"timestamp":"2023-01-03T12:29:54.855+0000","status":500,"error":"Internal Server Error","message":"could not extract ResultSet; SQL [n/a]; nested exception is org.hibernate.exception.SQLGrammarException: could not extract ResultSet","path":"/"}[ec2-user@ip-172-31-5-95 step1]$

어느정도 찾아보니 접근하려는 table이 해당 데이터베이스에 없을때 일어나는 일이라고 하는데요. 이게 원인이 맞다면 AWS에서 만든 데이터베이스에 어떤 table을 만들어야 했는지 궁금합니다.

만약 이게 문제가 아니라면 어떤 부분을 고쳐야 해결되는지 알고 싶습니다.

프로젝트 주소

Github에 오류가 난 프로젝트를 올려주세요.
Github 주소를 작성해주지 않으시면 답변해드릴수가 없어요!

오류 로그

image

어떤 오류인지 캡쳐해주세요.

anthem53 commented 1 year ago

책에서 생성하라는 테이블은 크게 2종류로 소개되어있는데요.

create table user (id bigint not null auto_increment, create_date datetime, modified_date datetime, email varchar(255) not null, name varchar(255) not null, picture varchar(255), role varchar(255) not null, primary key (id)) engine=InnoDB;

랑 .

CREATE TABLE SPRING_SESSION ( PRIMARY_ID CHAR(36) NOT NULL, SESSION_ID CHAR(36) NOT NULL, CREATION_TIME BIGINT NOT NULL, LAST_ACCESS_TIME BIGINT NOT NULL, MAX_INACTIVE_INTERVAL INT NOT NULL, EXPIRY_TIME BIGINT NOT NULL, PRINCIPAL_NAME VARCHAR(100), CONSTRAINT SPRING_SESSION_PK PRIMARY KEY (PRIMARY_ID) ) ENGINE=InnoDB ROW_FORMAT=DYNAMIC;

CREATE UNIQUE INDEX SPRING_SESSION_IX1 ON SPRING_SESSION (SESSION_ID); CREATE INDEX SPRING_SESSION_IX2 ON SPRING_SESSION (EXPIRY_TIME); CREATE INDEX SPRING_SESSION_IX3 ON SPRING_SESSION (PRINCIPAL_NAME);

CREATE TABLE SPRING_SESSION_ATTRIBUTES ( SESSION_PRIMARY_ID CHAR(36) NOT NULL, ATTRIBUTE_NAME VARCHAR(200) NOT NULL, ATTRIBUTE_BYTES BLOB NOT NULL, CONSTRAINT SPRING_SESSION_ATTRIBUTES_PK PRIMARY KEY (SESSION_PRIMARY_ID, ATTRIBUTE_NAME), CONSTRAINT SPRING_SESSION_ATTRIBUTES_FK FOREIGN KEY (SESSION_PRIMARY_ID) REFERENCES SPRING_SESSION(PRIMARY_ID) ON DELETE CASCADE ) ENGINE=InnoDB ROW_FORMAT=DYNAMIC;

인데요.

다음과 같이 database에 반영은 되었습니다.

image

그래도 여전히 다음과 같이 버그가 일어나요.

image

뭔가 설정을 안해준건지 잘 모르겠습니다.

anthem53 commented 1 year ago

해결 됐습니다. 처음할때는 mysql 이해도가 부족해서 버벅거렸으며, 이해가 된 이후 다시 해보니 table posts가 아니라 tables user를 했었네요.

image

이렇게 test 코드를 돌리고 create table하는 post를 복사해서 붙혀넣어야 합니다. 근데 이걸 정말 처음 문구를 봤을 때는 무슨 말인지 몰라서 그냥 패스 했는데 영 모르겠다 싶으면 책에 나와있는 create ,,, 부터 전부 타이핑해도 괜찮을 듯 하네요.

create table posts (id bigint not null auto_increment, create_date datetime, modified_date datetime, author varchar(255), content TEXT not null, title varchar(500) not null, primary key (id)) engine=InnoDB;

create table 찾고나서 헐레벌떡 올렸는데 posts가 아니라 user였어요.

그다음 scheme-mysql 는 그냥 나와있는거 그대로 복붙하면 되더라고요.

CREATE TABLE SPRING_SESSION ( PRIMARY_ID CHAR(36) NOT NULL, SESSION_ID CHAR(36) NOT NULL, CREATION_TIME BIGINT NOT NULL, LAST_ACCESS_TIME BIGINT NOT NULL, MAX_INACTIVE_INTERVAL INT NOT NULL, EXPIRY_TIME BIGINT NOT NULL, PRINCIPAL_NAME VARCHAR(100), CONSTRAINT SPRING_SESSION_PK PRIMARY KEY (PRIMARY_ID) ) ENGINE=InnoDB ROW_FORMAT=DYNAMIC;

CREATE UNIQUE INDEX SPRING_SESSION_IX1 ON SPRING_SESSION (SESSION_ID); CREATE INDEX SPRING_SESSION_IX2 ON SPRING_SESSION (EXPIRY_TIME); CREATE INDEX SPRING_SESSION_IX3 ON SPRING_SESSION (PRINCIPAL_NAME);

CREATE TABLE SPRING_SESSION_ATTRIBUTES ( SESSION_PRIMARY_ID CHAR(36) NOT NULL, ATTRIBUTE_NAME VARCHAR(200) NOT NULL, ATTRIBUTE_BYTES BLOB NOT NULL, CONSTRAINT SPRING_SESSION_ATTRIBUTES_PK PRIMARY KEY (SESSION_PRIMARY_ID, ATTRIBUTE_NAME), CONSTRAINT SPRING_SESSION_ATTRIBUTES_FK FOREIGN KEY (SESSION_PRIMARY_ID) REFERENCES SPRING_SESSION(PRIMARY_ID) ON DELETE CASCADE ) ENGINE=InnoDB ROW_FORMAT=DYNAMIC;

311 뚫을때까지 이슈는 다음과 같네요.

  1. appliacation-real-db port번호 잘못되었다 뭐가 잘못되었다. 계정입력이 실수했다. 하는것.

spring.datasource.url= ... 이 부분이 그나마 양식상 틀릴 수 있는데 그게 아니라면 대부분 오타더라고요.

  1. 테이블 이슈 처음 mysql에 대한 이해도가 완전 전무할 때 어떻게 table을 입력해야할지 몰라서 생긴 이슈입니다. mysql, mariadb로 접속하면 1차적으로 큰 RootFolder에 생성된 데이터베이스들이 있구요. 이 데이터베이스 안에 table들이 만들어지는 방식이네요.

이걸 모른채로 테이블 생성 코드를 보니까 뭐가 뭔지 몰라서 수행못했던 것이 큰 것 같습니다.