스프링부트 개발을 하면서 겪었던 에러들과 그 해결방법을 정리해보았다.
※ 개인의 개발 환경에 따라 발생 원인이 다르거나, 동일한 방법으로 해결되지 않을 수도 있으며 같은 에러라도 다른 다양한 이유 때문에 발생할 수 있음을 명심하자!
해당 에러들이 발생하고 해결한 환경은
구름IDE Springboot Container(gradle) 컨테이너, Spring boot 1.5.10 , Gradle 4.6 , Java 8 이다.
에러메시지)
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (111)
-> cmd에서, service mysql start 하여 mysql을 시작한 후 mysql로 다시 실행하면 된다.
에러메시지)
Cannot determine embedded database driver class for database type NONE
applicaton.java 파일에,
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
- (자동 임포트 안 될시, 직접 추가하기)
메인 클래스 위에,
@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
추가 해준다.
에러메시지)
Cannot determine embedded database driver class for database type NONE.
If you want an embedded database please put a supported one on the classpath.
application.properties에 아래를 추가해준다.
spring.datasource.url=jdbc:mysql://localhost/test
spring.datasource.username=dbuser
spring.datasource.password=dbpass
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
에러메시지)
java.lang.IllegalStateException: Cannot load driver class: com.mysql.jdbc.Driver
build.gradle에,
compile group: 'org.hibernate', name:'hibernate-entitymanager',
version:'5.2.2.Final'
compile("mysql:mysql-connector-java")
를 추가해준다.
에러메시지)
Parameter 0 of constructor in org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration required a bean of type 'javax.sql.DataSource' that could not be found.
- Bean method 'dataSource' not loaded because @ConditionalOnProperty (spring.datasource.jndi-name) did not find property 'jndi-name'
- Bean method 'dataSource' not loaded because @ConditionalOnBean (types: org.springframework.boot.jta.XADataSourceWrapper; SearchStrategy: all) did not find any
application.properties에,
spring.datasource.url=jdbc:mysql://localhost/test
spring.datasource.username=dbuser
spring.datasource.password=dbpass
spring.datasource.url=jdbc:mysql://<IP주소>:<포트번호>/<db이름>?useSSL=false&useUnicode=true&serverTimezone=UTC
를 추가해준다!
에러메시지)
gradle build && java -jar /workspace/spring_boot_study/build/libs/*.jar
구름IDE에서 화면 상단우측의 실행 아이콘을 눌러 돌리면 에러 페이지가 뜬다. 위의 명령어가 실행되기 때문인데 정확한 이유는 모르겠으나 실제 build된 jar 파일을 실행했을 때는 classpath 내에 spring-boot-starter-web jar 파일이 없기 때문에 서버가 뜨지않는 것이라고 한다. bootRun task의 classpath가 더 정확하다고 하니 gradle bootRun으로 실행하자!
에러메시지)
db에 테이블이 하나도 없어서 뜨는 에러라고 한다. 아래와 같은 방법으로 mysql을 실행한 후, db에 테이블을 생성해주자.
create table member
(
id bigint auto_increment,
name varchar(255),
primary key (id)
);
기본적으로 mysql은 character set이 latin1으로 설정되어 있다. latin1을 사용하면 한글이 깨져 한글 입력시 에러를 뱉는다. 따라서 character set을 utf-8로 변경해주어야 한다.
mysql을 실행하여, use [db명]을 한다음,
alter database [DB_NAME] character set utf8 collate utf8_general_ci;
을 입력해주면 된다!
<db의 charset 확인 방법>
SELECT default_character_set_name, DEFAULT_COLLATION_NAME FROM information_schema.SCHEMATA
WHERE schema_name = "db명";
하지만,,, utf-8로 변경하고 다시 실행하면 아래와 같은 에러가 발생하게 된다.
에러메시지)
java.sql.SQLException: Illegal mix of collations (latin1_swedish_ci,IMPLICIT)
and (utf8_general_ci,COERCIBLE) for operation '='
mysql에서 db나 table, column이 각각 다른 character set encoding으로 설정되어 있어서 발생하는 에러이다!
character set을 맞추어주면 된다! 즉,
alter table 테이블명 default character set = utf8;
위의 명령어로 table의 character set도 utf8로 맞추어 주면 해결된다!
<table의 charset 확인방법>
SELECT CCSA.character_set_name FROM information_schema.`TABLES` T,
information_schema.`COLLATION_CHARACTER_SET_APPLICABILITY` CCSA
WHERE CCSA.collation_name = T.table_collation
AND T.table_schema = "db명"
AND T.table_name = "테이블명";
스프링부트를 이클립스나 인텔리제이같은 대중적인 개발 환경을 경험해보지 못한 상태에서 구름IDE에서 처음 시작하였다.
그러다보니 이 에러가 스프링부트 세팅 과정에서 발생하는 에러인지, 구름IDE를 쓰기 때문에(gradle 버전, 자바 컴파일러 차이, 구름IDE 자체의 오류 등) 발생하는 에러인지 명확하게 알기 힘들다. 에러 메시지 복붙해서 스택오버플로우 뒤져가면서 어찌저찌 해결해나가고 있긴한데 혼자 처음보는 에러를 고치려하니 시간이 너무 오래 걸린다. 에러가 에러를 낳는다. 얼른 웹페이지 만들고 싶은데.. 최대한 헛수고 안하게 겪었던 에러들을 여기에 다 메모해야겠다!
'Study > Spring' 카테고리의 다른 글
싱글톤 패턴 (0) | 2022.06.23 |
---|---|
게시판에 사용한 HTML 정리(feat. thymeleaf) (0) | 2022.01.16 |
스프링 CRUD 게시판 구현(SpringBoot, MySQL, SpringDataJPA) (2) | 2021.12.29 |
좋은 객체 지향 설계의 5가지 원칙 - SOLID (0) | 2021.11.10 |
[구름IDE] 스프링부트 개발환경 세팅하기 (0) | 2021.09.23 |