묻고 답해요
130만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결따라하며 배우는 노드, 리액트 시리즈 - 쇼핑몰 사이트 만들기[전체 리뉴얼]
학습 로드맵
안녕하세요. 좋은 강의 만들어주셔서 감사합니다.이번에 강의 업데이트가 된 김에 미뤄왔던 공부를 하려고 하는데요.가지고 있는 강의는 이정도가 있고,리액트 훅 정도는 알고 사용할 수 있는 정도인데, 공부 순서를 어떻게 하면 좋을까요? [보유 강의]따라하며 배우는 노드, 리액트 시리즈 - 기본 강의따라하며 배우는 노드, 리액트 시리즈 - 영화 사이트 만들기따라하며 배우는 노드, 리액트 시리즈 - 유튜브 사이트 만들기따라하며 배우는 노드, 리액트 시리즈 - 챗봇 사이트 만들기따라하며 배우는 노드, 리액트 시리즈 - 쇼핑몰 사이트 만들기 (리뉴얼)따라하며 배우는 리액트, 파이어베이스 - 채팅 어플리케이션 만들기 (리뉴얼)따라하며 배우는 TDD 개발 (리뉴얼)따라하며배우는 도커와 CI환경 (리뉴얼)
-
미해결PWA 시작하기 - 웹 기술로 앱을 만들자
서비스워커 배경 > '문제' 링크 없는 문제
해당 '서비스 워커 배경' 강의 들어보면 '문제'에 대한 링크가 있다고 하시는데, 아래에 링크가 보이지 않습니다.링크가 어디 있는지 알려주시면 감사하겠습니다.감사합니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
jpa 내보내는 쿼리가 작동은 하나 이상함
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.상품목록 조회시 로그를 보면 아래와 같은 쿼리 로그가 나옵니다.Hibernate: select item0_.item_id as item_id2_3_, item0_.name as name3_3_, item0_.price as price4_3_, item0_.stock_quantity as stock_qu5_3_, item0_.artist as artist6_3_, item0_.etc as etc7_3_, item0_.author as author8_3_, item0_.isbn as isbn9_3_, item0_.actor as actor10_3_, item0_.director as directo11_3_, item0_.dtype as dtype1_3_ from item item0_ 정상적인 쿼리라면 아래와 같을것 같습니다.Hibernate: select item.item_id , item.name , item.price , item.stock_quantity , item.artist , item.etc , item.author , item.isbn , item.actor , item.director , item.dtype from item item 머 결과야 똑같이 나오지만 인서트 할때는 테이블 명이나 컬럼 명칭 변경없이 깔끔하게 아래와 같이 쿼리 로그가 나오는데Hibernate: insert into item (name, price, stock_quantity, author, isbn, dtype, item_id) values (?, ?, ?, ?, ?, 'B', ?) 왜 select에서 저렇게 하는지 궁금하고 혹시 이때문에 유의할점이 없는지도 궁금합니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
섹션 4 - 회원 기능 테스트 강의에서 중복_회원_예외()메서드를 실행할 때 INSERT 쿼리가 실행되는 이유
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]package jpabook.jpashop.service;import org.assertj.core.api.Assertions;import org.junit.jupiter.api.Test;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.context.SpringBootTest;import org.springframework.test.annotation.Rollback;import org.springframework.transaction.annotation.Transactional;import jpabook.jpashop.domain.Member;@SpringBootTest@Transactionalpublic class MemberServiceTest { @Autowired private jpabook.jpashop.repository.MemberRepository memberRepository; @Autowired private MemberService memberService;// @Test//// @Rollback(false)// public void 회원가입() throws Exception {// // given// Member member = new Member();// member.setName("kim");// // // when// Long savedId = memberService.join(member);// // // then// Assertions.assertThat(member).isEqualTo(memberRepository.findOne(savedId));// } @Test// @Rollback(false) public void 중복_회원_예외() throws Exception { // given Member member1 = new Member(); member1.setName("kim"); Member member2 = new Member(); member2.setName("kim"); // when memberService.join(member1); try { memberService.join(member2); } catch (IllegalStateException e) { return; } // then Assertions.fail("예외가 발생해야 한다."); }}저는 JUnit5를 사용헀기 때문에 위와 같이 코드를 작성했는데요주석 처리한 회원가입() 메서드를 실행할 때는 강사님처럼 INSERT 쿼리가 실행되지 않는 것을 확인했지만, 중복_회원_예외() 메서드를 실행할 때는 INSERT 쿼리가 실행되는 것을 확인했습니다.2024-04-02T00:01:22.883+09:00 DEBUG 26044 --- [jpashop] [ main] org.hibernate.SQL :insertintomember(city, street, zipcode, name, member_id)values(?, ?, ?, ?, ?)2024-04-02T00:01:22.885+09:00 TRACE 26044 --- [jpashop] [ main] org.hibernate.orm.jdbc.bind : binding parameter (1:VARCHAR) <- [null]2024-04-02T00:01:22.885+09:00 TRACE 26044 --- [jpashop] [ main] org.hibernate.orm.jdbc.bind : binding parameter (2:VARCHAR) <- [null]2024-04-02T00:01:22.885+09:00 TRACE 26044 --- [jpashop] [ main] org.hibernate.orm.jdbc.bind : binding parameter (3:VARCHAR) <- [null]2024-04-02T00:01:22.885+09:00 TRACE 26044 --- [jpashop] [ main] org.hibernate.orm.jdbc.bind : binding parameter (4:VARCHAR) <- [kim]2024-04-02T00:01:22.885+09:00 TRACE 26044 --- [jpashop] [ main] org.hibernate.orm.jdbc.bind : binding parameter (5:BIGINT) <- [1]2024-04-02T00:01:22.886+09:00 INFO 26044 --- [jpashop] [ main] p6spy : #1711983682886 | took 0ms | statement | connection 4| url jdbc:h2:tcp://localhost/~/jpashopinsert into member (city,street,zipcode,name,member_id) values (?,?,?,?,?)insert into member (city,street,zipcode,name,member_id) values (NULL,NULL,NULL,'kim',1);위 로그는 해당 로그인데 혹시 이유를 알 수 있을까요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
MemberService의 join관련 질문
MemberService.java @Transactional public Long join(Member member) { validationDuplicateMember(member); memberRepository.save(member); return member.getId(); }join이 호출되었을 때 insert into member (city, street, zipcode, name, member_id) values (?, ?, ?, ?, ?) 이렇게 로그가 남는데 h2는 IDENTITY를 사용하기 때문에 member_id는 null로 가는게 맞지 않나요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
EntityManager관련 질문
@Repository @RequiredArgsConstructor public class MemberRepository { private final EntityManager em; 안녕하세요 EntityManager을 위처럼 주입받을 때 주입시점이 MemberRepository에 @Repository가 있으므로 MemberRepository가 스프링 빈에 등록되고 의존관계 주입을 할 때인가요? 그렇기 때문에 더더욱 @Repository가 필요한가요?
-
미해결따라하며 배우는 노드, 리액트 시리즈 - 쇼핑몰 사이트 만들기[전체 리뉴얼]
toastify-css 적용안됨
ReactDOM.createRoot(document.getElementById('root')).render( <BrowserRouter> <Provider store={store}> <PersistGate loading={null} persistor={persistor}> <App /> </PersistGate> </Provider> </BrowserRouter>, )App /에서 실행할 거여서 설정하고, const userSlice = createSlice({ name: "user", initialState, reducers: {}, extraReducers: (builder) => { builder .addCase(registerUser.pending, (state) => { state.isLoading = true }) .addCase(registerUser.fulfilled, (state) => { state.isLoading = false toast.info('회원가입을 성공했습니다.') }) .addCase(registerUser.rejected, (state, action) => { state.isLoading = false state.error = action.payload toast.error(action.payload) }) } })toast.info, toast.error 등 toast 메세지 정확하게 넣었고, import { ToastContainer } from "react-toastify" import "react-toastify/dist/ReactToastify.css" function Layout() { return ( <div className='flex flex-col justify-between h-screen'> <ToastContainer position='bottom-right' theme='light' pauseOnHover autoClose={1500} /> <Navbar/> <main className='w-10/12 max-w-4xl mx-auto mb-auto'> <Outlet/> </main> <Footer/> </div> ) }toastify랑 css를 사용하려고 import했고, const RegisterPage = () => { const { register, handleSubmit, formState: { errors }, reset } = useForm({ mode: 'onChange' }) const dispatch = useDispatch() // const navigate = useNavigate() const onSubmit = ({ email, name, password }) => { const body = { email, name, password, image: `https://via.placeholder.com/600x400?text=no+user+image` } dispatch(registerUser(body)) reset() // navigate('/login') }실행 하니까, db에 데이터는 잘 담기는데, css가 적용이 안됩니다. 그리고, css가 적용되지 않고, 자꾸 login 페이지로 넘어가기만 합니다. 오류를 도저히 못찾겠어요 도와주세요!
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
배포 환경에서 db 분리 질문
안녕하세요 영한님! 항상 강의 정말 잘 듣고 있습니다!gradle build를 진행할 때 테스트 코드를 수행하는 걸로 알고 있습니다.테스트 코드는 운영 db가 아닌 테스트용 db를 통해 수행하도록 하는게 맞을까요? 생각하고 있는 방법은1. test/resources에 application.yml을 추가해서 테스트 코드는 인메모리 db (h2)를 통해 수행 2. ec2 안에 테스트용 mysql 컨테이너를 띄워두고 mysql을 통해 테스트 코드 수행이렇게 2가지 방식을 생각중인데 맞는 방법일까요??
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
회원가입 테스트 오류
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]강의내용과 동일하게 컨트롤+쉬프트+T 눌러서 JUnit4 선택하고 코드를 동일하게 쳤을때 이런 오류가 발생합니다 https://www.inflearn.com/questions/15495/%ED%85%8C%EC%8A%A4%ED%8A%B8-%EB%8F%84%EC%A4%91-%EC%97%90%EB%9F%AC-%EB%B0%9C%EC%83%9D링크에서 설정에서 run test를 intelliJ IDEA로 바꾸면 아래와 같은 오류입니다intellij IDEA로 변경 + 임포트를 jupiter.api.test 로 하면이런 오류입니다 run test를 default + 임포트를 jupiter.api.test로 하면이런 오류입니다....어떻게 해야 할까요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
create 시 반환 타입 질문
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예[질문 내용]create시에 반환 타입을 Long 을 주는 실무적인 관점에서 이유가 뭘까요?? 어떤 경우에 좋은지 예를 들어 주실 수 있을까요??https://woojin.tistory.com/115#google_vignette에서는 아예 void 를 사용하지 말라고하는데 그 이유가 공감이 전혀 안됩니다.예를 들어 뭐 이런 건가요?? 주문 완료하기 버튼을 딱 누르면 생성된 주문 ID 가 딱 반환이되고 생성된 주문 ID를 바탕으로 조회해서 어떤 주문이 완료되었는지 표시해주게? 그러면 만약에 상품에 대한 평가를 남긴다고 하면 상품 평가 ID 를 반환해봤자 차피 바로 조회할 필요가 없어 보이는데 이러면 void 써도 되는 것 아닌가요??
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
CRUD 미니플젝을 하는도중에 궁금합니다.
/* 등록 */ public void savePosts(Posts posts) { postsRepository.save(posts);/* 업데이트 */ public void doUpdate(Posts posts) { postsRepository.save(posts);구글링을 해보니 JPA의 save를 사용했을시 기존에 DB에 데이터가있을땐 바뀌는 부분만 업데이트 된다해서 이렇게 코딩을 했습니다. 하지만 수정기능을 동작해보니 기존 데이터가 수정되지 않고 새로운 데이터로 DB에 추가가 되고있습니다. 무언가 다른 방법이 있을까요?
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
병합이랑 변경감지를 왜쓰나요? 그냥 jpa에 있는 sql문 update를 쓰면 되지않나요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]예전에 프로젝트를 할때jpa에 있는 sql문을 통해서 update문으로 수정을 했는데병합이랑 변경감지를 구지 쓰는 이유가 있을까요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
JpashopApplication 실행 시
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 처음에 선생님이 환경설정 하신다고 JpashopApplication에아래와 같은 코드 만들어놓고 메인메서드 실행하셨는데 저는 그럴때마다 Process 'jpashop [:JpashopApplication.main()]' Is Running 'jpashop [:JpashopApplication.main()]' is not allowed to run in parallel. Would you like to stop the running one? 이런 메세지 뜨면서 새로 실행이 되는데 선생님께선 Do not show this dialog in the future 체크해놓고 매 실행시마다 새로 실행이 되는게 맞는걸까요?Hello hello = new Hello(); hello.setData("hello"); String data = hello.getData(); System.out.println("data = " + data);
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
h2대신 mysql로 했습니다
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]h2console에는 이전강의시간에 했던 test만 작동되고.. jpashop이 안만들어져서 그냥 mysql로 했습니다spring: datasource: url: jdbc:mysql://localhost:3306/jpashop username: user password: user1234 driver-class-name: com.mysql.cj.jdbc.Driver jpa: hibernate: ddl-auto: create properties: hibernate: dialect: org.hibernate.dialect.MySQL8Dialect format_sql: true logging: level: org.hibernate.SQL: debugddl-auto: create로 되어있는데 어플리케이션 실행후 workbench로 가보면ORM 표존 JPA 프로그래밍때 했던 DB가 그대로 있습니다..drop 된 후 새로 create 되는것이 아닌가요?스프링부트에서도 hibernate sql문 출력이 안됩니다,, 테스트에서도 @Rollback(false)를 안하면 통과이고@Rollback(false)를 하면 unknown column오류가 납니다..
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
뷰 코드 복사했는데 복사도 이상하게 되고 실행하면 오류가 뜨는데 뭐가 잘못된건가요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]pdf 파일에 있는 뷰 코드복붙했는데실행하면 오류가 뜹니다. pdf파일 복사가 제대로 안되는데 왜 구지 pdf로 올리는지 모르겠네요 일단 코드 보여드릴게요creatememberform.html<!DOCTYPE HTML> <html xmlns:th="http://www.thymeleaf.org"> <head th:replace="fragments/header :: header" /> <style> .fieldError { border-color: #bd2130; } </style> <body> <div class="container"> <div th:replace="fragments/bodyHeader :: bodyHeader"/> <form role="form" action="/members/new" th:object="${memberForm}" method="post"> <div class="form-group"> <label th:for="name">이름</label> <input type="text" th:field="*{name}" class="form-control" placeholder="이름을 입력하세요" th:class="${#fields.hasErrors('name')}? 'form-control fieldError' : 'form-control'"> <p th:if="${#fields.hasErrors('name')}" th:errors="*{name}">Incorrect date</p> </div> <div class="form-group"> <label th:for="city">도시</label> <input type="text" th:field="*{city}" class="form-control" placeholder="도시를 입력하세요"> </div> <div class="form-group"> <label th:for="street">거리</label> <input type="text" th:field="*{street}" class="form-control" placeholder="거리를 입력하세요"> </div> <div class="form-group"> <label th:for="zipcode">우편번호</label> <input type="text" th:field="*{zipcode}" class="form-control" placeholder="우편번호를 입력하세요"> </div> <button type="submit" class="btn btn-primary">Submit</button> </form> <br/> <div th:replace="fragments/footer :: footer" /> </div> <!-- /container --> </body> </html>itemlist.html<!DOCTYPE HTML> <html xmlns:th="http://www.thymeleaf.org"> <head th:replace="fragments/header :: header" /> <body> <div class="container"> <div th:replace="fragments/bodyHeader :: bodyHeader"/> <div> <table class="table table-striped"> <thead> <tr> <th>#</th> <th>상품명</th> <th>가격</th> <th>재고수량</th> <th></th> </tr> </thead> <tbody> <tr th:each="item : ${items}"> <td th:text="${item.id}"></td> <td th:text="${item.name}"></td> <td th:text="${item.price}"></td> <td th:text="${item.stockQuantity}"></td> <td> <a href="#" th:href="@{/items/{id}/edit (id=${item.id})}" class="btn btn-primary" role="button">수정</a> </td> </tr> </tbody> </table> </div> <div th:replace="fragments/footer :: footer"/> </div> <!-- /container --> </body> </html>이코드 실행하면Whitelabel Error Page라고 뜨네요뭐가문제인가요..pdf그대로 복사하면 복사가 제대로 안되서 붙여넣어지는데불편하네요
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
교육 끝났는데 진행률이 100%가 안되네요?????
"스프링부트와 jpa활용 1편"마지막 교육인 "다음으로"까지 다 수강했는데진행률이 100%가 되지 않습니다???
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
h2에 다른 별도의 프로젝트를 연결하려면 어떻게 해야할까요?
h2.properties에서 포트번호를 다른 번호로 바꾸고 해봐도 이전에 했던 h2 포트로 연결이 되더라구요... 별도 프로젝트를 다른 포트로 연결하고 싶을 땐 세팅을 어떻게 해야할까요? 찾아봐도 잘 안돼서 질문드립니다.(스프링 프로젝트이고 gradle 사용하여 application.properties에 해당 h2 db 연결하려고 하는 상황입니다)
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
Service에서 @transactional을 왜쓰는건가요? 안써도 되지않나요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]트랜젝션을 쓰지 않아도 크게 상관이없지않을까요?왜쓰는건지 궁금하고트랜젝션을 쓰지않을때는 도메일 모델 패턴으로쓰는데도메일 모델 패턴은 왜 트렌젝션을 어노테이션으로 달지않나요?야생형으로 듣다보니 의문형이 생기네요
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
생성 메서드 질문! Static을 왜 붙이는건가요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]생성메서드의 용도가 갑자기 까먹었는데그냥 생성자로 넣어주려는걸로 아는데Static으로 정적으로 왜쓰는건가요?Static 빼면 안되나요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
데이터 초기화하는 방법(@PostConstruct)
제 문제 해결 접근이 맞는것인지 질문드립니다! 테스트할 때마다 회원, 상품을 새로 등록해야하는 것이 번거로워서, 기본편에서 배운 초기화 콜백을 이용해 우선 Item을 초기화해보려고 했습니다. // ItemService.java @PostConstruct @Transactional public void initData() { Book book1 = new Book(); book1.setName("book1"); book1.setPrice(1000); book1.setStockQuantity(10); book1.setAuthor("Steven"); book1.setIsbn("10000"); itemRepository.save(book1); }위와 같이 ItemService에 초기화 메서드를 추가했는데 계속 해서 에러가 났습니다. 검색해보니 아무래도 초기화 콜백과 트랜젝션 처리를 initData()하나로 동시에 처리하려다보니 발생한 문제 같았습니다. 초기화 콜백을 확실히 완료하고나서 트랜젝션 처리를 해야 트랜젝션이 정상적으로 작동하는 것 아닌가 싶습니다. 단순히 코드상으로 이를 보장할 방법이 떠오르지 않았습니다. 이 때 떠오른게 DB2편의 @EventListener(ApplicationReadyEvent.class)인데, ApplicationReadyEvent가 스프링 컨테이너 초기화를 완전히 마치고 발생하는 이벤트라고 알고 있습니다. 이렇게 하니 초기화가 잘 됐습니다. 이처럼 선언적 트랜젝션을 적용하는 상황에서 초기화를 하기 위해서는 @EventListener(ApplicationReadyEvent.class)를 적용하는 것이 맞는 접근법일까요?@EventListener(ApplicationReadyEvent.class) @Transactional public void initData() { Book book1 = new Book(); book1.setName("book1"); book1.setPrice(1000); book1.setStockQuantity(10); book1.setAuthor("Steven"); book1.setIsbn("10000"); itemRepository.save(book1); }정상 작동한 최종 코드입니다.