월 15,400원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결[개념은 호옹~, 실습 빡] 스프링 부트, 입문!
28강 DB mysql연동 관련 질문
server.servlet.encoding.force-response=true spring.h2.console.enabled = true spring.jpa.defer-datasource-initialization=true ## 디버그 레벨로 쿼리 출력 logging.level.org.hibernate.SQL=DEBUG ## 이쁘게 보여주기 spring.jpa.properties.hibernate.format_sql=true ## 파라미터 보여주기 logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE ## 고정 url 설정 spring.datasource.url=jdbc:mysql://localhost:3306/first_db spring.datasource.username=root spring.datasource.password=**** ##비밀번호는 가리겠습니다 spring.datasource.data=classpath:/data.sql spring.datasource.initialization-mode=always spring.jpa.hibernate.ddl-auto=create-drop 저의 application.properties 파일의 코드입니다보시는바와 같이 local 연결에 새로운 디비를 만들고 그 아래에는 같은 코드를 넣어서 초기화를 시켜주는 코드를 가져왔는데 시작시켜보니 테이블은 정상적으로 생성이 되었으나 안에 있는 값들은 없었습니다. 이럴 경우 어디를 고쳐야 할까요?
- 미해결[개념은 호옹~, 실습 빡] 스프링 부트, 입문!
27강 관련 질문
혹시 삭제버튼도 모달로 등록해서 삭제를 할 순없는건가요?그러면 document.querySelectorAll 을 쓰지않아도 되는거 아닌가요? 추가로 // 삭제 버튼 이벤트를 처리 commentDeleteBtns.forEach(btn => { // 각 버튼의 이벤트 처리를 등록 btn.addEventListener("click", (event) => { // 이벤트 발생 요소를 선택 const commentDeleteBtn = event.target; // 삭제 댓글 id 가져오기 const commentId = commentDeleteBtn.getAttribute("data-comment-id"); console.log(`삭제 버튼 클릭: ${commentId}번 댓글`); }); });해당 코드에서 event.relatedTarget이란 함수를 쓰지않는이유는 relatedTarget함수가 모달 전용이라서 그런건가요?
- 미해결[개념은 호옹~, 실습 빡] 스프링 부트, 입문!
22강 관련질문
Comment객체에는 Article객체를 하나의 column으로 가지고 있는데 이는 외래키와의 매핑하고 매핑되는 column을 article_id라고 정하는 것은 이해를 했습니다 하지만 Comment a = new Comment(1L, article, "Park", "굳 윌 헌팅");위 코드처럼 article을 인수로 넘겨주면 article안에는 id, title, content라는 여러 column이 있는데 이중에 왜 id값이 선택되는지 궁금합니다예시로 data.sql에서INSERT INTO comment(article_id, nickname, body) VALUES(4, 'Park', '굳 윌 헌팅');이런 sql문을 넣는데 article_id라는 column은 Article타입인데 정수(Long)를 넣어도 어떻게 성립이 되는건지 궁금합니다.
- 미해결[개념은 호옹~, 실습 빡] 스프링 부트, 입문!
21강 create테스트 질문
테스트를 진행하면서 갑자기 createtest를 할때만 에러가 뜨길래 디버깅을 해보니articleService 클래스 create메소드 return문에서 에러가 나더군요 그래서 article반환값이 돌아오질 않고 에러가 뜹니다 이전에 있던 create관련 질문과 같은 현상으로 보입니다. 보니까 Article에있는 어노테이션이 작동을 안하는건지 id값이 null로 반환이 됩니다 **추가로 질문드리자면 방금 기본 Article 페이지에서 생성을 했는데 처음몇번은 실패하고 그 다음에 다시 시도하니 create메소드가 정상 작동합니다 이건 어디서 잘못된 걸까요
- 미해결[개념은 호옹~, 실습 빡] 스프링 부트, 입문!
9강 질문 있습니다
9강에서 h2데이터 베이스에 자연스럽게 저장이 되는것으로 연결이 되는데 CrudRepository를 사용할 경우 h2데이터 베이스로 자옫적으로 연결이 되는건가요?아니면 h2데이터베이스의 경우는 콘솔의 역할만 하고기본적으로 jdbc서버에 생성된 데이터베이스에 접근하는 방식인건가요?
- 미해결[개념은 호옹~, 실습 빡] 스프링 부트, 입문!
로그창에 내용이 출력이 안됩니다.
강사님과 똑같이 제목과 내용을 입력하고 submit 버튼을 눌러도 제 로그에는 변화가 없는데 뭐가 문제인지 모르겠습니다ㅜ.
- 미해결[개념은 호옹~, 실습 빡] 스프링 부트, 입문!
index()함수 질문있습니다.
index()함수에서는 왜 엔티티->DTO 작업을 하지 않는 건가요?
- 미해결[개념은 호옹~, 실습 빡] 스프링 부트, 입문!
수정완료를 눌렀을때 첫번째 데이터는 전송이 안되고 다시 수정완료 버튼을 눌러야 데이터가 전송 됩니다.
수정완료를 눌렀을때 처음 데이터는 전송이 안되고 다시 수정완료 버튼을 눌러야 데이터가 전송 됩니다. 위 사진과 같이 첫번째 시도에 입력한 수정 데이터는 서버로 전송이 되지 않고 있습니다. 다시한번 수정완료 버튼을 눌러야 그제야 데이터가 서버로 전송되는데 어느 부분이 문제 인지를 모르겠습니다.DB를 확인해보봐도 두번째 클릭했을때만 데이터가 전송됩니다.<_list.mustache><div id = "comments-list"> {{#commentDtos}} <div class = "card m-2" id = "comments-{{id}}"> <div class = "card-header"> {{nickname}} <!--모달 트리거 버튼--> <button type="button" class="btn btn-sm btn-outline-primary" data-bs-toggle="modal" data-bs-target="#comment-edit-modal" data-bs-id="{{id}}" data-bs-nickname="{{nickname}}" data-bs-body="{{body}}" data-bs-article-id="{{articleId}}" > 수정 </button> </div> <div class = "card-body"> {{body}} </div> </div> {{/commentDtos}} </div> <!-- Modal --> <div class="modal fade" id="comment-edit-modal" tabindex="-1"> <div class="modal-dialog"> <div class="modal-content"> <div class="modal-header"> <h1 class="modal-title fs-5" id="exampleModalLabel">댓글 수정</h1> <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> </div> <div class="modal-body"> <!--댓글 수정폼 --> <form name = "edit-form"> <!-- 닉네임 입력--> <div class = "mb-3"> <label class = "form-label">닉네임</label> <input type ="text" class = "form-control form-control-sm" id ="edit-comment-nickname"> </div> <!--댓글 본문 입력--> <div class = "mb-3"> <label class = "form-label">댓글 내용</label> <textarea type ="text" class = "form-control form-control-sm" row = "3" id="edit-comment-body"></textarea> </div> <!--히든 인풋--> <input type = "hidden" id = "edit-comment-id" > <input type = "hidden" id = "edit-comment-article-id" > <!--전송 버튼--> <button type = "button" class = "btn btn-outline-primary btn-sm" id="comment-update-btn">수정 완료</button> </form> </div> </div> </div> </div> <!--모달 이벤트 처리--> <script> { // 모달 요소 선택 const commentEditModal = document.querySelector("#comment-edit-modal"); // 모달 이벤트 감지 commentEditModal.addEventListener("show.bs.modal",function(event){ //트리거 버튼 선택 const triggerBtn = event.relatedTarget; //데이터 가져오기 const id =triggerBtn.getAttribute("data-bs-id"); const nickname =triggerBtn.getAttribute("data-bs-nickname"); const body =triggerBtn.getAttribute("data-bs-body"); const articleId =triggerBtn.getAttribute("data-bs-article-id"); //데이터 반영 document.querySelector("#edit-comment-nickname").value = nickname; document.querySelector("#edit-comment-body").value = body; document.querySelector("#edit-comment-id").value = id; document.querySelector("#edit-comment-article-id").value = articleId; }); } { //수정완료버튼 const commentUpdateBtn = document.querySelector("#comment-update-btn"); //클릭 이벤트 감지 및 처리 commentUpdateBtn.addEventListener("click",function(){ // 수정 댓글 객체 생성 const comment = { id :document.querySelector("#edit-comment-id").value, nickname:document.querySelector("#edit-comment-nickname").value, body:document.querySelector("#edit-comment-body").value, article_id:document.querySelector("#edit-comment-article-id").value }; console.log(comment); // 수정 REST API 호출 { // 수정 완료 버튼 const commentUpdateBtn = document.querySelector("#comment-update-btn"); //클릭 이벤트 감지 및 처리 commentUpdateBtn.addEventListener("click",function(event){ //수정 댓글 객체 생성 const comment = { id: document.querySelector("#edit-comment-id").value, nickname: document.querySelector("#edit-comment-nickname").value, body:document.querySelector("#edit-comment-body").value, article_id:document.querySelector("#edit-comment-article-id").value }; console.log(comment); //수정 REST API 호출 - fetch() const url = "/api/comments/" + comment.id; fetch(url,{ method: "PATCH", //patch 요청 body: JSON.stringify(comment), // 수정된 댓글 객체를 JSON으로 전달 headers: {"Content-Type" : "application/json"} }).then(response => { // 응답 코드에 따른 메시지 const msg = (response.ok) ? "댓글이 수정 되었습니다." : "댓글 수정 실패"; alert(msg); // 현재 페이지 새로고침 window.location.reload(); }); }); } }); } </script>
- 미해결[개념은 호옹~, 실습 빡] 스프링 부트, 입문!
강의와 책 질문
책도 구입하려고하는데강의랑 거의 내용이 같다고 보면될까요?강의가 수강기간이 무제한이 아니라 복습용도로사용하려고 합니다.
- 미해결[개념은 호옹~, 실습 빡] 스프링 부트, 입문!
20강 질문있습니다.
ArticleApiController에서 return ArticleService.index(); 입력하고 create누르면 ArticleService 클래스에이렇게 static으로 정의가 됩니다. 상관없을까요? 또,static으로 정의되는 이유가무엇일까요? 떼면 빨간줄이 생기네요 이상태로 Talent 로 테스트를 해보면(get)이런 에러가 뜹니다.ArticleService.java:17은 이거구요, ArticleApiController.java:25는이겁니다 이유가 무엇일까요? ㅜㅜ... 이런 현상이 일어나는 이유가 궁금합니다
- 해결됨[개념은 호옹~, 실습 빡] 스프링 부트, 입문!
20강에서 Article create 부분
안녕하세요 강사님 강의 잘 듣고 있습니다20강에서 19강때 했던 코드들을 리팩토링 하는 것을 알려주는 강의잖아요그런데 19강에서 했던 코드와 20강 리팩토링하기 전 코드가 달라서 문의 드립니다.19강에서는 코드가 이건데요20강 코드에서는 (8분 55초)이렇게 달라서 그냥 20강 코드를 따라가면 되나요?알려주시면 감사하겠습니다
- 미해결[개념은 호옹~, 실습 빡] 스프링 부트, 입문!
16강 질문있습니다.
안녕하세요. 강의를 보고 나름 응용하여 저만의 딜리트방법을 만들어보았는데, 이 방법의 장단점이 무엇이 있을까요? (show.mustache의 수정 링크옆에 삭제버튼 생성) (ArticleController의 삭제 메소드)
- 미해결[개념은 호옹~, 실습 빡] 스프링 부트, 입문!
mustache의 article의 정의가 뭔가요?
어느덧 강의 중반부까지 흘러왔는데요, 문득 mustache에서 사용하고있던 {{#article}의 article이 무엇인지 떠오르지않습니다 ㅜㅜ 개념이 사라졌어요... article이 entity 패키지에서 정의한 Article 클래스인가요?
- 해결됨[개념은 호옹~, 실습 빡] 스프링 부트, 입문!
17강 Unique index or primary key violation
안녕하세요 홍팍님17강 듣는 중 에러 발생으로 질문있습니다강의 6분대 정도의 위 사진까지 진도를 나가고 http://localhost:8080/articles/에서 새 아티클을 생성하면 위 페이지가 나옵니다에러문구는 아래와 같습니다2023-07-21 16:32:25.979 INFO 18712 --- [nio-8080-exec-2] c.e.f.controller.ArticleController : ArticleForm(id=null, title=DDDD, content=4444) 2023-07-21 16:32:25.980 INFO 18712 --- [nio-8080-exec-2] c.e.f.controller.ArticleController : Article(id=null, title=DDDD, content=4444) 2023-07-21 16:32:26.032 DEBUG 18712 --- [nio-8080-exec-2] org.hibernate.SQL : insert into article (id, content, title) values (default, ?, ?) 2023-07-21 16:32:26.034 TRACE 18712 --- [nio-8080-exec-2] o.h.type.descriptor.sql.BasicBinder : binding parameter [1] as [VARCHAR] - [4444] 2023-07-21 16:32:26.034 TRACE 18712 --- [nio-8080-exec-2] o.h.type.descriptor.sql.BasicBinder : binding parameter [2] as [VARCHAR] - [DDDD] 2023-07-21 16:32:26.037 WARN 18712 --- [nio-8080-exec-2] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 23505, SQLState: 23505 2023-07-21 16:32:26.038 ERROR 18712 --- [nio-8080-exec-2] o.h.engine.jdbc.spi.SqlExceptionHelper : Unique index or primary key violation: "PRIMARY KEY ON PUBLIC.ARTICLE(ID) ( /* key:1 */ CAST(1 AS BIGINT), '1111', 'dummy1')"; SQL statement: insert into article (id, content, title) values (default, ?, ?) [23505-214] 2023-07-21 16:32:26.056 ERROR 18712 --- [nio-8080-exec-2] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.dao.DataIntegrityViolationException: could not execute statement; SQL [n/a]; constraint ["PRIMARY KEY ON PUBLIC.ARTICLE(ID) ( /* key:1 */ CAST(1 AS BIGINT), '1111', 'dummy1')"; SQL statement: insert into article (id, content, title) values (default, ?, ?) [23505-214]]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statement] with root cause org.h2.jdbc.JdbcSQLIntegrityConstraintViolationException: Unique index or primary key violation: "PRIMARY KEY ON PUBLIC.ARTICLE(ID) ( /* key:1 */ CAST(1 AS BIGINT), '1111', 'dummy1')"; SQL statement: insert into article (id, content, title) values (default, ?, ?) [23505-214]아티클을 전부 다 지우고 몇개를 새로 생성하면 id값이 2번부터 생성돼요.1, 2번 아티클을 지우고 새 아티클을 만들면 4번이 생성됩니다.도와주십셔 스프링부트 버전 data.sqlbuild.gradleplugins { id 'java' id 'org.springframework.boot' version '2.7.13' id 'io.spring.dependency-management' version '1.0.15.RELEASE' } group = 'com.example' version = '0.0.1-SNAPSHOT' java { sourceCompatibility = '11.0.19.7' } repositories { mavenCentral() } dependencies { // add lombok compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-mustache' implementation 'org.springframework.boot:spring-boot-starter-web' runtimeOnly 'com.h2database:h2' testImplementation 'org.springframework.boot:spring-boot-starter-test' implementation fileTree(dir: 'lib', include: ['*.jar']) } tasks.named('test') { useJUnitPlatform() } application.property
- 미해결[개념은 호옹~, 실습 빡] 스프링 부트, 입문!
8강 에러 질문있습니다.
전부 정상적으로 입력했는데 논리적이지않다고 에러가뜨네요 ㅜㅜ repository 입니다.
- 해결됨[개념은 호옹~, 실습 빡] 스프링 부트, 입문!
15강 DB연결
안녕하세요 홍팍님강의 다시 듣고 있습니다 ㅎㅎ우선 교재 출간 축하드립니다.본론으로 들어가면,DB연결에서 resources 아래 data.sql을 만들고 insert문을 통해 더미들을 생성하는 부분에서 에러가 발생합니다.Caused by: org.springframework.jdbc.datasource.init.ScriptStatementFailedException: Failed to execute SQL script statement #1 of URL [file:/C:/Users/tttzk/Desktop/firstproject/firstproject/out/production/resources/data.sql]: INSERT INTO article(id, title, content) values (1, 'dummy1', '1111'); nested exception is org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "ARTICLE" not found (this database is empty); SQL statement: INSERT INTO article(id, title, content) values (1, 'dummy1', '1111') [42104-214]data.sql 파일 삭제 후 h2를 보면 article테이블은 생성되는데,data.sql파일 작성 후 서버를 작동하면 Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "ARTICLE" not found (this database is empty); SQL statement: INSERT INTO article(id, title, content) values (1, 'dummy1', '1111') [42104-214]위와 같이 에러가 발생하면서 Process finished with exit code 1이렇게 띡 하고 끝납니다.구글링 했을 때는 저와 다른 사례가 나오는 게 많아서 해결이 안됩니다.도와주십셔
- 미해결[개념은 호옹~, 실습 빡] 스프링 부트, 입문!
추상클래스를 사용 할 수있을까요?
지금 강의에서는 Firstcontroller에 username, nickname 두가지를 선언해서 각각 사용하셧는데, username 을 출력하고자 하니 추상클래스로 username 구문을 선언해두고, controller 페이지에서 오버라이드해서 사용하면서 model 페이지에 값만 보내줄 수 있다면 controller가 조금더 깔끔해지고 최적화가 되지않을까 라는 생각이 들었습니다.가능할까요??
- 해결됨[개념은 호옹~, 실습 빡] 스프링 부트, 입문!
22강 과제 질문
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.findByNickname() Test에서 Case 5: "i"의 모든 댓글을 조회하라고 과제를 주셨는데, 이름에 i가 들어가있는 댓글을 조회하라는 건가요?? 이 부분을 어떻게 해야할지 모르겠네요 ㅠㅠ
- 해결됨[개념은 호옹~, 실습 빡] 스프링 부트, 입문!
22강 질문입니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.CommentRepositoryTest에서 findByNickname를 실행할때 아래와 같은 오류가 나타납니다. org.springframework.dao.InvalidDataAccessApiUsageException: Could not locate ordinal parameter [1], expecting one of []; nested exception is java.lang.IllegalArgumentException: Could not locate ordinal parameter [1], expecting one of []가 나타나는데, 찾아보니 @Param을 하라고 하네요. 근데 @Param은 @Query를 사용할때에 대한 해결방안인데, xml로 쿼리를 작성한 findByNickname에서는 어떻게 해결해야하나요?
- 해결됨[개념은 호옹~, 실습 빡] 스프링 부트, 입문!
19강 create POST 500 에러
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.위를 실행하고 난 결과 콘솔창에서 아래 오류가 발생합니다. 구글링으로 오류를 찾아보니 ArticleForm에서 @Data나 @JsonAutoDetect(fieldVisibility = Visibility.ANY)를 작성하라고 하는데 둘다 적용해도 마찬가지로 위와 같은 오류가 발생합니다. 어떻게 해결해야하나요?