묻고 답해요
167만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
h2 db 생성 에러
안녕하세요! [프로젝트 환경설정 - H2 데이터베이스 설치] 강의를 듣다가 질문이 생겨서 문의드립니다. 환경은 windows이고 강의 내용에 따라서 H2를 설치한 후 h2.bat을 실행해서 h2 콘솔을 열고 localhost로 바꾸고 jdbc:h2:tcp://localhost/~/jpashop가 아닌 jdbc:h2:~/jpashop 를 jdbc url에 입력하고 연결을 눌렀는데 db 설치 및 연결이 되지 않고 아래 첨부 사진과 같이 "Database "C:/Users/LG/jpashop" not found, either pre-create it or allow remote database creation (not recommended in secure environments) [90149-200] 90149/90149"라는 에러가 뜹니다. 혹시 몰라서 Generic H2 Server, Embedded 둘 다 해보고, h2를 여러번 껐다 켰다도 반복하며 계속 jdbc:h2:~/jpashop으로 생성을 하려는데 db가 존재하지 않다는 에러가 계속해서 뜹니다. 이런 경우에는 어떻게 해결해야하는지 구글링해도 jdbc:h2:~/test 이 방법밖에 나오지 않아 여쭙니다ㅠㅠ 감사합니다! Database "C:/Users/LG/jpashop" not found, either pre-create it or allow remote database creation (not recommended in secure environments) [90149-200] 90149/90149 (도움말)org.h2.jdbc.JdbcSQLNonTransientConnectionException: Database "C:/Users/LG/jpashop" not found, either pre-create it or allow remote database creation (not recommended in secure environments) [90149-200] at org.h2.message.DbException.getJdbcSQLException(DbException.java:622) at org.h2.message.DbException.getJdbcSQLException(DbException.java:429) at org.h2.message.DbException.get(DbException.java:205) at org.h2.message.DbException.get(DbException.java:181) at org.h2.engine.Engine.openSession(Engine.java:71) at org.h2.engine.Engine.openSession(Engine.java:192) at org.h2.engine.Engine.createSessionAndValidate(Engine.java:171) at org.h2.engine.Engine.createSession(Engine.java:166) at org.h2.engine.Engine.createSession(Engine.java:29) at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:340) at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:173) at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:152) at org.h2.Driver.connect(Driver.java:69) at org.h2.util.JdbcUtils.getConnection(JdbcUtils.java:309) at org.h2.util.JdbcUtils.getConnection(JdbcUtils.java:289) at org.h2.server.web.WebServer.getConnection(WebServer.java:785) at org.h2.server.web.WebApp.login(WebApp.java:1008) at org.h2.server.web.WebApp.process(WebApp.java:223) at org.h2.server.web.WebApp.processRequest(WebApp.java:173) at org.h2.server.web.WebThread.process(WebThread.java:139) at org.h2.server.web.WebThread.run(WebThread.java:94) at java.base/java.lang.Thread.run(Thread.java:832)
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
findByName의 result를 List로 받는 이유가 있나요?
service 코드를 개발 할 때 중복 되는 member_name이 있는지 validate를 해줘서 결국 member_name이 unique 값이 될텐데 , getSingleResult를 이용하여 아래와 같이 작성하지 않는 이유가 있나요? public Member findByName(String name){ return em.createQuery("select m from Member m where m.name = :name",Member.class) .setParameter("name",name) .getSingleResult();}
-
해결됨따라하며 배우는 노드, 리액트 시리즈 - 쇼핑몰 사이트 만들기[전체 리뉴얼]
ORM에 대해 질문드립니다.
이전 질문은 보니 관계형 데이터 베이스로도 강의를 제작할 계획이 있다고 하셨는데요 1. 존안님께서 실무에서 쓰는 DB는 MySQL 인가요?? 2. 그럼 ORM 종류는 무엇으로 하시나요? 시퀼라이즈, 프리즈마.. 등등 어떤것으로 사용하시나요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
Controller에서 Repository 접근
DDD 자료를 찾아보면 강의 자료와 같이 Domain이 전체 레이어를 아우르고, Controller에서 Repository를 접근 하도록 설계되어 있습니다.기초 강의에서는 Entity를 Controller에 넘기지 말라고 말씀 하셨고 그 이유도 충분히 이해 했었습니다. 지금 예제에서는 Controller가 Repository를 호출하게 된다면 Entity가 넘어가게 될텐데... 강의상 편의를 위해서 하신건가요? 실무에서도 빈번하게 사용하는 구조인가요? 추가적으로 DTO를 사용한다면, 아래 예제 계층에서 오고가는 DTO에 대한 표현(naming rule, suffix, package 등등)을 어떻게 하시는지 궁금합니다.- web <-> controller- service <-> repository
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
단위테스트가 어떤 것인지 좀 더 구체적으로 설명 부탁드려도 될까요?
안녕하세요. 좋은 강의 항상 감사드립니다. 단위 테스트의 중요성을 강조해주셨는데 제가 아직 초보라서 잘 이해가 가지 않습니다. 제 수준으로 테스트를 이해한 것을 말씀드리자면, 만약 수량이 2개가 추가되면, 그것이 데이타베이스에 2개가 추가 됐는지를 확인하고, 그것이 화면으로 제대로 출력되는 것을 확인하는 것이 가장 최소한의 테스트라고 생각하기 때문입니다. 그런데 DB를 거치지 않고 한다는 것이 어떤 의미인지 사실 잘 모르겠습니다. 지금 in memory를 DB로서 사용하고 있는데, 이것조차 사용하지 않게 되는건가요? 혹시 가능하시다면 지금의 예제에서 단위테스트를 한다면 예시를 짧게라도 한 줄 부탁드려도 될까요? 그런 측면에서 제가 테스트에 대하여 이해도가 너무 낮은 것이 아닌가 싶습니다. junit이란 것도 선생님 수업 들으면서 이번에 처음 알게 됐거든요. 그래서 혹시 가능하다면 테스트와 관련하여 참고할만한 책이나 자료가 있으면 추천 부탁드려도 될까요? 감사합니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
비지니스 로직구현 Entity VS Service
안녕하세요 강사님! 이번 강의에서는 Item.class에 다음과 같이 해당 변수에 대한 접근은 해당 entity에서 작성하여 주셨는데요, /* * 재고 수량 증가 */public void addStock(int quantity){ this.stockQuantity += quantity;}/*재고 수량 감소 */public void removeStock(int quantity){ int restStock = this.stockQuantity - quantity; if(restStock < 0){ throw new NotEnoughStockException("need more stock"); } this.stockQuantity = restStock;} 1. 그렇다면 만약 회원의 주소를 변경하는 로직을 만든다고 하면 이 또한 memberRepository.class가 아닌 member.class에서 변경하여 주는 것이 맞을까요?? 2. 또 비슷한 맥락으로 service 구현과 entity에서의 로직 구현의 차이는 객체의 맴버변수에 접근하는지/ 맴버 자체에 접근하는지의 차이로 이해하면 될까요?? 감사합니다^^!
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
Book이 준영속 엔티티
updateItem 메소드에서 Book이 DB에 저장된적이 있어서 식별자가 존재하여 영속성 컨텍스트에서 관리하지 않는다고 하셨는데요. 1. 그러면 Book을 new Book()으로 생성하고 setId에서 임의로 현재 DB에 존재하지 않는 id를 입력하면 어떻게 될까요?? 2. 준영속 엔티티가 된 이유가 id가 존재해서 라기 보다는 Book 객체의 생성시 영속성컨텍스트를 거치지 않고 생성자를 거쳤기 때문에 준영속 엔티티가 된건 아닌가요??
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
주문 수량이 재고를 넘어섰을 때
주문 수량이 재고를 넘어섰을 때,현재는 Error가 발생해서 whitelabel ErrorPage가 뜨는데요, 이 대신 MemberForm처럼 BindingResult를 걸어 hasError() -> 폼에 message를 표시해주는 것과 같은 기능을 넣고 싶은데, 혹시 어떻게 할 수 있을 지 힌트를 주실 수 있으실까요..?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
인텔리J tdd 라이브템플릿 생성하는 방법 입니다.
안녕하세요 강사님 강의를 보다가 tdd라는 명령어로 테스트 메서드를 생성하는 방법이 궁금해서 관련 가이드를 만들어 보았습니다. https://blog.naver.com/nateen7248/222184184776 혹시 궁금하신 분은 참고해 보시면 될 것 같아요 감사합니다.
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
동일한 레코드의 참조 값을 가지고 있는 영속성 컨텍스트의 동일 객체를, 동시에 서로 다른 값으로 업데이트하여 커밋할 때의 작동 방식
안녕하세요. 추천해주신 야생형 스타일에 따라 활용 1편부터 듣고 있는 수강 중인 학생입니다. 매번 강의 너무 잘 듣고 있습니다. 제가 스프링에 대한 이해도가 아직 낮기도 하고, 다른 강의를 이어서 듣다보면 해결될 문제일진 모르겠지만, 이해가 잘 안되는 부분이 자꾸 생각나서 질문 남깁니다. @GetMapping("/test1") @ResponseBody public String test1() { log.info("test1 controller"); try { Thread.sleep(5000); } catch(Exception e) { } log.info("test1 controller finished"); return "test1 finished"; } @GetMapping("/test2") @ResponseBody public String test2() { log.info("test2 controller"); try { Thread.sleep(5000); } catch(Exception e) { } log.info("test2 controller finished"); return "test2 finished"; } 위와 같은 컨트롤러 메서드 코드가 있다고 가정할 때, 각 컨트롤러 메서드가 다른 메서드라면, 각각의 메서드 별로 스레드를 가진 채 실행한다고 이해가 되었습니다. 즉, test1이 실행하는 도중에 test2가 실행될 수는 있지만, test1이 실행하는 도중에 test1은 중복해서 실행될 수 없는 것처럼 보였습니다. 일단 스프링의 작동 방식은 이처럼 이해되었습니다. 그런데 만약 아래와 같이 test1과 test2에서, 동일한 Item객체를 JPA에서 동시에 꺼내온 상황에 업데이트가 일어나면 어떻게 되는지 궁금합니다. 아래의 실행 과정은 제가 개인적으로 생각해본 과정인데, 어떠한 부분이 잘못되었는지 지적해주시면 감사하겠습니다. 1. test1에서 서비스 로직을 실행하는 도중 JPA를 이용하여 Item 객체를 findOne해서 꺼내온다(동시에 영속성 컨텍스트에 등록이 된다는 것처럼 이해되었습니다.) 2. test1가 아직 실행되고 있는 와중에, test2에서 서비스 로직을 실행하는 도중 JPA를 이용하여 Item객체를 findOne해서 꺼내온다(이 객체 또한 영속성 컨텍스트에 등록이 된다는 것처럼 이해되었습니다.) 3. 현재 test1과 test2에서 각각 동일한 Item 객체를 가져와서 영속성 컨텍스트에 등록이 된 상황이라고 보겠습니다. 앞으로 실행 될 test1의 서비스에서는 count를 10올릴 것이고, test2에서는 count를 10내린다고 가정해보겠습니다. 현재 Item 객체에는 100이라는 값이 저장되어있습니다. 4. test1에서 item.addCount(10)을 하면, count는 110이 될 것입니다. 바로 이어서 test2에서 item.removeCount(10)을 하면, count는 90이 될 것입니다. 5. test1의 서비스 로직이 끝나면, @Transactional 어노테이션을 통해 commit이 일어나고, dirty checking을 하며 item 객체의 count를 110으로 업데이트하는 쿼리문을 날릴 것입니다. 6. test2의 서비스 로직이 끝나면, @Transactional 어노테이션을 통해 commit이 일어나고, dirty checking을 하며 item 객체의 count를 90으로 업데이트하는 쿼리문을 날릴 것입니다. 7. 따라서 최종적으로 item 객체의 count값은 90으로 업데이트 될 것입니다. 하지만 실제로는 test1에서 10을 더하고, test2에서 10을 차감하였으니, 동일한 item 객체에 대한 count값은 DBMS 상에서 100으로 유지되어야 맞을 것입니다. 제가 생각한 실행 과정은 90으로 값이 업데이트되며 DBMS의 값의 일관성을 깨뜨리는 상황입니다(물론 제가 짧은 생각대로 실행한 과정의 결과가 90이란 것이지, 코드의 실행 결과가 90이라고 단언한 것은 아닙니다. 결과도 궁금하지만, 100이라는 결과가 나오는 과정에서 어떻게 실행되는지가 궁금한 것입니다!). 어떠한 부분이 잘못되었고, 그 부분은 어떻게 해결되어지는 것인지 궁금합니다. 개인적으로 생각해본 가정은 다음과 같습니다. 가정1 : 동일한 레코드를 조회한 객체에 대해서는 영속성 컨텍스트에 동일한 객체로 기억되기때문에 test1과 test2에서는 동일한 참조 값을 가진 item 객체를 가지고 있다. 따라서 addCount를 할 때 110으로 바뀌고, removeCount를 할 때 100으로 다시 바뀌기 때문에, test1과 test2의 커밋 각각에서는 count 값을 100으로 바꾸는 동일한 update문이 두 번 일어난다. 가정 2 : 동일한 레코드에 대해서 이미 commit 또는 업데이트 된 내역이 있으면, 지금 일어나는 commit은 그냥 ROLLBACK을 시켜버린다. 하지만 이렇게 할 경우, 자바 코드 상에서 DBMS에 저장된 아이템에 대해 동일한 것을 접근했는지 어떻게 기억할 것이며, rollback으로 인한 오버헤드는 감수하는 것인지 의문점이 남습니다. 가정 3 : 동일한 레코드로 조회된 객체에 대해서는 업데이트가 일어나는 전 과정에, 해당 객체에 lock을 걸어둔다. 그러면, 업데이트가 끝나서 commit이 되고, lock을 해제할 때까지 해당 객체에는 접근하지 못한다. 처음에는 이러한 과정이 @Transactional 어노테이션이 붙어있으면, 이 어노테이션이 달려있는 메서드 중에 1개씩만 실행되면서 수행되는 줄 알았는데 제가 아직 개념이 부족한 탓인지 딱히 그렇게 실행되는 것 같지는 않았습니다. 가정 4 : 애초에 이러한 설계가 잘못된 것이다. test1과 test2에서 동시에 item 객체를 수정하는 과정의 코드는 없어야한다. test1 또는 test2, 둘 중에 하나의 메서드에서만 item 객체를 수정할 수 있어야한다. 가정 5 : 그냥 DBMS에서의 트랜잭션처럼 관리된다. 자바 상에서 동시에 실행되는것처럼 보여도 JPA를 통해 serializable한 실행 결과를 보장해준다. 일단 DBMS에서 트랜잭션 간에 동시성을 관리하는 체계를 생각하면, 위와 같은 가정들이 나온다고 생각했습니다. 하지만 그건 DBMS에서의 동시성 관리 체계이지, JPA 상에서도 @Transactional 어노테이션 하나로 그것처럼 동일하게 관리되는지는 잘 모르겠어서 의문이 남습니다. 질문이 미흡해서 제가 의문점을 제대로 남긴 것인지 모르겠네요. 바쁘신 와중에 시간 내 주셔서 감사합니다. +++ @Test@Transactional@Rollback(false)public void 동시업데이트() { // given Book book = new Book(); book.setName("희재의 책"); book.setIsbn("1234"); book.setStockQuantity(100); book.setPrice(30000); em.persist(book); Book book1 = em.find(Book.class, 1L); Book book2 = em.find(Book.class, 1L); // when book1.addStock(10); book2.removeStock(20); Book book3 = em.find(Book.class, 1L); // then assertThat(book1).isSameAs(book2); assertThat(book2).isSameAs(book3); assertThat(book3.getStockQuantity()).isEqualTo(90);} 일단 위와 같은 테스트 코드로 DBMS 상에서 같은 레코드를 조회한 아이템에 대해서는 동일한 객체를 반환하는 것을 확인했습니다. (같은 트랜잭션 상에서만?) 그런데 처음 적은 예시처럼 영속성 컨텍스트에 등록된 동일한 객체에 대해 동시에 커밋이 여러 개 일어나면 어떻게 되는지, 또 이것을 확인해보고 검증하는 테스트 코드는 어떤 식으로 작성해야하는지 잘 모르겠네요.. ㅠㅠ
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
static create 메소드
setter를 쓰기보다, static create로 메소드를 만들어 주는게 좋다고 하셨는데, 생성자 메소드로 만들지 않고, 왜 일반 정적 메소드로 만드시는지 궁금합니다..
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
Ctrl + Alt + M 단축키가 안되는 분들 보세요!
Geforce Experience가 설치된 분들에 한해서 Ctrl + Alt + M(Extract Method) 단축키가 작동하지 않는 오류를 발견했습니다. Geforce Experience를 켜고 설정에서 빨간색 네모 친 게임 내 오버레이 기능을 OFF하시면 단축키가 잘 작동할 것입니다!
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
src/test/resources/application.yml 인식 문제입니다.
안녕하세요 강사님! 테스트 수행 중 application.yml 파일을 test 밑에 두고 따라하는중에 application.yml 파일을 찾지 못하고 자꾸 main 밑에있는 파일을 불러왔습니다. 찾아보니 test/resources/config/application.yml 로 두어야 인식한다고 되어있고 저도 config 디렉토리를 생성해 그 밑에 두었더니 별도의 application.yml 파일로 읽어오더라구요. https://stackoverflow.com/a/53134737 인텔리제이로 학습중인데 이부분 한번 확인 부탁드리겠습니다!
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
상품 등록시에 데이터 받는 로직
안녕하세요따로 공부하다가 궁금한 점이 생겨서 질문 남깁니다. item에서 InheritanceType.JOINED 를 사용하게 되면 화면에서 컨트롤러로 Form data를 받아와서 처리하는 로직은 어떤식으로 구현을 하는게 효과적인가요? 예를들면 formData에 타입을 넣어줘서 if else문으로 각각에 맞는 Controller(formData){if(formData.getType equals "B") persist( new B(formData.a formData.b , formData.c)) else if ("A") persist( new A(formData.dd formData.gg ) else if ~~~~} 이런식으로 전부 빼야 하나요?? 만약 위와 같은 상황이라면 타입이 엄청나게 많아지는 경우 무한if else을 쓰기는 좀 비효율적인 코드가 될 거 같아서 질문드립니다.
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
질문있습니다.
안녕하세요 영한님. 강의를 참고하여 프로젝트를 진행 했는데 문제가 발생해서 질문드립니다. 관리자(admin)가 item 테이블의 데이터 하나를 삭제하려고 할 때 해당 item을 주문한 orderItem이 존재하여 외래키 제약 조건 위반이 발생하여 삭제를 하지 못하는 경우,(제가 의도한 설계는 아닙니다) 어떤 식으로 해결 해나가야 할지 감이 잘 잡히지 않네요. JPA에 외래키 제약 조건이 발생하더라도 강제로 삭제를 진행하는 옵션이 있다면 해당 옵션을 걸어줘야 하는지, 아니면 애초에 설계를 orderItem이 있다면 해당 item은 삭제가 안되게 설계를 해야하는건지 영한님이라면 어떻게 해결하실지 궁금합니다..ㅠㅠ
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
cascade 관련 질문입니다!
안녕하세요 김영한 강사님! 먼저 좋은 강의 만들어주셔서 감사합니다! 강의를 듣다가 cascade 관련하여 질문이 생겨서 질문 작성을 하게 되었습니다. 먼저 밑에 분이 먼저 해주신 질문과 강사님의 답변을 보고 cascade 옵션 자체는 연관관계 주인, 양방향등 관계 없이 1. 동일한 라이프 사이클, 2. 참조하는 주인이 private owner 일 때 라고 2가지 조건을 충족할 때 쓴다고 이해하게 되었는데, 그럼 order, orderItem, delivery에서 orderItem과 delivery가 각각 order만 참조하는, 다른 것이 참조할 수 없는 private owner인 건가요? private owner 라는 말에 대한 이해가 정확하게 되지 않아서 질문을 드립니다. 제가 이해한 것이 맞는 건가요? 감사합니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
도메인 모델 패턴식의 코딩관련 질문
안녕하세요 영한님~, 궁금한 것이 있습니다.영한님이 말씀하신 것처럼 아직은 도메인 모델 패턴이 생소하더군요. (실무에선 트랜잭션 스크립트 방식의 프로젝트들만 접해봐서요) [도움 받고 싶은 것] ddd가 어떤 식으로 구성되고, 어떻게 메시지를 주고 받는구나 하고 이해할 수 있는 샘플 프로젝트 알고 계신게 있을까요? 저는 깃허브에서 java ddd sample 검색해서 프로젝트들 다운받아서 기웃기웃 하고 있긴 한데, 아무래도 영한님이 ddd는 제가 아는 사람들 중에선 제일 잘 아는 것 같아서 여쭤봐요. 아니면 ddd 강좌나 책도 괜찮은거 추천 주시면 감사하겠습니다! ps] 실무에서 사이드성 프로젝트로(작은 서비스) 영한님 강좌에서 한 것처럼 도메인에 좀 더 많은 로직을 넣는걸로 시작을 했는데 점점 이게 커지면서, 어느순간 이 역할을 서비스 계층에 넣는게 맞나, 아니면 도메인이 처리를 하게끔 하는게 맞나 조금, 고민이 되는 순간이 오더라고요 엉엉. 그래도 영한님 강좌 덕분에 테스트 케이스도 많이 작성하면서 코딩하고, 재밌게 실무 하고 있습니다 :)
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
안녕하세요 영한님 질문있습니다.
안녕하세요 영한님. 바보같은 질문일 수 있는데, 상품주문() 단위테스트 작성하실 때 em.persist(member); em.persist(item); 엔티티를 영속성 컨텍스트에 저장, 을 해주는게 이득이라고 하셨는데, 어떤 이득이 있나요?? 1] 해당 코드 없어도 단위테스트는 통과해서요. 2] flush() 하는건 insert 쿼리문을 눈으로 할 수 있으니, 유용하겠구나 생각이 들었는데, persist()는 잘 와 닿질 않아서요 :)
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
Entity의 Embedded타입 쿼리 질문드립니다!
안녕하세요 김영한선생님! 좋은 강의 잘 듣고 있습니다. 우선 강의는 완강하였고 다음 강의도 수강 예정입니다^^ 그전에 몇가지만 질문 드려요! 1. 현재 Member Entity에 Embedded타입으로 Email을 넣었습니다. @Embeddable class Email{ private String eHead; // '@'전까지 private String eBody; // 첫 '.'전까지 private String eTail; // 나머지 } 이때 email을 통해 멤버를 찾는 쿼리를 EntityManager를 통해 생성하려고 하는데요! 이메일을 통해 멤버를 찾는 쿼리는 어떻게 생성해야 할까요?? 단순히 public List<Member> findByEmail(Email email){ return entityManager.createQuery("select m from Member m where m.email =: email", Member.class) .setParameter("email", email) .getResultList();} 이런 방식으로는 같은 이메일임을 쿼리가 못 안다고 생각합니다 ㅠㅠ 그렇다고 email의 각 필드를 get해서 and로 처리하는 방법은 뭔가 비효율적인 것 같습니다! 더 좋은 방법이 있을까요? 2. 보통 실무에서 멤버의 썸네일과 같은 이미지 데이터는 어떻게 관리하나요?? 이또한 벡엔드 서버에 넣나요? 아니면 프런트엔드 서버에 따로 관리하나요?? 강의와는 좀 무관하지만 간략하게 답변해주시면 너무너무 감사하겠습니다!!
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
변경감지에 대해 질문 있습니다.
jpa를 이용해 게시판을 만들고 있는 중 입니다. 저는 repository 계층을 인터페이스에 JpaRepository를 상속해서 사용하고 있는데 수정 작업 시 영속이나 준영속 신경 안 쓰고 무조건 save로 데이터를 처리하는건 좋지않은 방법인가요?