프로젝트 진행의 흐름을 드디어 알았다. Service와 Dao는 고정 형태가 고정되어 있기에 그리 어렵지 않다. 하지만 Controller, Mapper-DB, JSP(화면)은 프로젝트의 핵심기능이자 로직이기에 복잡하다. 여기에는 웹의 핵심기술인 Java, HTML, CSS, JavaScript, SQL이 들어간다. 웹기술을 잘 이용하느냐 못하느냐가 개발자의 실력에 더불어 프로젝트의 양질을 결정한다. 기술의 중요성과 더불어 업무를 파악하는 게 무엇보다 중요하다. 업무의 흐름을 알고 있어야 어디서 시작하고 끝나는지 알 수 있다. 또한 프로젝트가 어긋날 경우 어디서 어긋나고 고쳐야하는지 파악이 가능하다.
INSERT INTO qna (qna_cd, email, phn, qna_ttl, qna_cont) VALUES (1, test, 010-5029-7490, Test, Test입니다) Error Code: 1054. Unknown column 'test' in 'field list' 0.031 sec 오류의 원인: Error Code : 1054의 원인은 sql문의 컬럼 값 혹은 values값을 잘못 입력. 오류 해결의 과정: 해당 SQL문의 컬럼값과 values값을 확인해봤다. 컬럼값은 문제 없는데 아니나다를까 values값에서 문제가 발생했다. 컬럼 값에 해당되는 values의 값은 varchar 타입이기 때문에 값에 작은따옴표('')이 붙어야 한다. 또한 컬럼이 not null이면 값이 모두 들어가..
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping': Invocation of init method failed; nested exception is java.lang.IllegalStateException: Ambiguous mapping. Cannot map 'testController' method public java.lang.String com.devcamp.eztour.controller.test.TestController.testMappin..
오류 원인: sqlSessionfactory와 Bean 생성에 실패했다. 오류해결과정: sqlSessionfactory의 버전 설정이 잘못됐는지 확인해봤지만, 버전 설정이 잘못되거나 빼먹지 않았다. myBatis의 연동 문제는 아니였다. 문제해결: myBatis내의 설정이 잘못됐는지 myBatis-config를 살펴봤다. 그런데 alias의 명칭이 잘못 설정되어있는 걸 확인했다. alias명이 CustomerInquiryDto어야하는데, ReservInfoDto로 적혀었다. alias명을 바꿔주지 깔끔히 문제가 해결됐다.
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 2 SQL 두 번째 문장이 잘못됐다는 오류다. Mapper에 있는 SQL문을 확인하니 SQL문에 작은 따옴표('')가 없었다. 작은 따옴표를 붙여 문제 해결 문제의 원인: SQL문이 잘못 작성됐다. 문제해결: 빠져있는 SQL문을 보충한다.
org.springframework.beans.factory.BeanInitializationException: Could not load properties; nested exception is java.io.FileNotFoundException: class path resource [config/db.properties] cannot be opened because it does not exist properties 파일이 존재하지 않아서 오류가 생긴거다. db.properties 파일을 생성해도 문제가 해결 안되는 경우가 있다. 그럴경우는 클래스패스가 잘못된 경우이기에 모든 프로젝트 파일을 삭제하고 다시 깔아 실행해주면 된다.
1.TransactionManager 하나의 메서드는 하나의 Connection을 가진다. 하지만 하나의 메서드에 하나의 Connection을 가지면 중복된 메서드의 Connection은 개별 커넥션을 갖기 때문에 Tx가 안된다는 문제가 발생한다. 예를들어 UserDao의 deleteUser(100);를 실행하면 메서드에 해당하는 Connection이 commit되면서 100이라는 키를 가진 유저의 정보가 삭제될거다. 그런데 여기에 deleteUser(200);을 실행한 후 rollback을 해야하는 상황이 발생하면, 이미 deleteUser(100);이 실행된 Connection은 commit 되었기에 rollback이 되지 않는다. 이 문제를 해결하기 위해선 두 메서드의 Connection을 하나의 ..