묻고 답해요
169만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
강사님 다대다 설정과 개인프로젝트 적용에 대해 질문있습니다
강좌에는 카테고리-상품에 N:M 다대다 관계로 해놓으셨는데요! 제가 30살인데 29살에 퇴사하고 혼자 JPA공부해서 학교다니던 친구와 백1프론트1을 맡아서 프로젝트를 만들고있는데.. 1:N, N:1은 좀 해결했는데 N:M에서 막히고있어요ㅠㅠ 약간 힌트라도 주실 수 있으신지 해서 여쭤봅니다. 질문이 너무 많아서 힘드시면 직접적으로 말씀하셔도괜찮습니다..! 만약에 이런 경우는 어떻게 하나요? (1) ~한다,~되다의 V 중간테이블 1.여러명의 회원은 여러개의 게시글을 찜목록에 추가할 수 있다. 1-1. 여러명의 회원은 여러개의 공고를 찜목록에 추가할 수 있다. 1-2. 여러명의 회원은 여러개의 기업을 찜목록에 추가할수있다. USER(회원)과 기업/공고/게시글 엔티티 사이에 중간테이블을 놓고 유저ID랑, 각각 필요한 기업/공고/게시글 아이디로 매핑해놓은 상태인데요 - 검은색 이렇게 하는게 맞는지 궁금합니다. (2) ~한다,~되다의 V 중간테이블 [회원]은 여러개의 [이력서]로 [공고]에 [지원]할 수 있다라고 해서 이력서와 공고의 N:M관계를 해소하고자 중간테이블을 만들고 지원한다라는 APPLY 엔티티를 따로 만들었는데, JPA에서도 이렇게 하면 되는건가요..? (3) 중간테이블 질문 DB상으로는 외래키가 PK가 되면서 한 테이블안에 PK가 없어도 된다는 식으로 들었는데, 검색을해보니 JPK는 PK가 있어야된다하더라구요!? 만약에 N:M관계 중간에 중간테이블을 만들면 보통은 외래키 2개가 들어가는데, JPA식으로 만들면 PK, FK, FK해서 총 3개가 만들어지는게 맞나요? (4) intelliJ에서 DB연결을 하고 data Diagram Visualization으로 매핑관계를 살펴보니 이렇게 나오는데.. intelliJ나 datagrip에서는 흔히 까마귀발이라고 하는 1:N, N:1 관계는 안보여주더라구요..! 그리고 mysql workbench reverse engineer모드로 erd를 그려봤는데..여기에서는 1:1관계도 1:N으로 나오는데...(분명히 유저와 멤버는 @OneToOne으로 양방향 매핑했는데도 이렇게 나옵니다. 혹시 DB를 설계하면서 잘 되었는지 erd로 뽑아보고싶은데, 아직 완벽하게 보여주는 건 없는건가요..?
-
해결됨실전! 스프링 데이터 JPA
@Modifying에 관한 질문
안녕하세요 영한님!이번 강의로 Modifying 어노테이션의 clearAutomatically 옵션이 왜 필요한건지 잘 이해했습니다. 그런데 다른 옵션인 flushAutomatically는 제가 아는 상식과 충돌이 되서 질문드립니다.기본적으로 createQuery를 날리면 db에 직접 접근하여 처리하기 때문에 현재 영속성 컨텍스트의 1차 캐시에 있는 것들을 강제로 flush하고 작성한 쿼리를 날리는 것으로 이해를 하고 있습니다.벌크연산 역시 createQuery의 일종이라고 생각하기 때문에 flushAutomatically 옵션의 기본값은 true일 거라고 예상했는데 false로 되어있어서 헷갈립니다.1. Modifying에서 제공하는 자동 flush 옵션과 벌크 연산전에 자동으로 일어나는 flush는 의미가 서로 다른건가요?//추가: 구글링을 해본 결과, 두 flush는 같은 의미가 맞고 @Modifying 옵션 값과 상관없이 hibernate에서 강제로 flush를 해준다고 합니다.그리고 이건 질문은 아니고 제가 정리한게 맞는지 여쭤봅니다.강의 영상처럼 테스트 클래스의 한 @Transaction 안에서 멤버를 생성하고 벌크연산으로 변경하고 조회하는 것이 아니라서비스 레이어에서 각각의 @Transaction가 있는 메서드로 분리해서 테스트를 해봤는데, 여전히 동일한 현상이 일어나더라구요.2. 이것은 OSIV에 의해서 영속성 컨텍스트의 생명주기가 트랜잭션의 종료시점이 아닌 최종적으로 response를 뱉을때까지 유지되고, 1차 캐시 역시 유지되기 때문에 각각의 트랜잭션에서 실행되는 서비스 메서드 간에서도 1차 캐시가 공유된다는 뜻으로 이해하면 될까요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
테스트 오류 질문드립니다
안녕하세요 14:57초 쯤에서 진행하는 테스트에서 에러가 나는데 확인해주실 수 있을까요? 에러메시지는 아래와 같이 나옵니다. Could not write standard input to Gradle Test Executor 3. java.io.IOException: 파이프가 닫히는 중입니다 at java.base/java.io.FileOutputStream.writeBytes(Native Method) at java.base/java.io.FileOutputStream.write(FileOutputStream.java:354) at java.base/java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:81) at java.base/java.io.BufferedOutputStream.flush(BufferedOutputStream.java:142) at org.gradle.process.internal.streams.ExecOutputHandleRunner.forwardContent(ExecOutputHandleRunner.java:68) at org.gradle.process.internal.streams.ExecOutputHandleRunner.run(ExecOutputHandleRunner.java:53) at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64) at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56) at java.base/java.lang.Thread.run(Thread.java:834) > Task :test FAILED Error: Could not find or load main class worker.org.gradle.process.internal.worker.GradleWorkerMain Caused by: java.lang.ClassNotFoundException: worker.org.gradle.process.internal.worker.GradleWorkerMain FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':test'. > Process 'Gradle Test Executor 3' finished with non-zero exit value 1 * Try: Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights. * Get more help at https://help.gradle.org BUILD FAILED in 3s 4 actionable tasks: 1 executed, 3 up-to-date
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
주문 상품 생성 시 질문입니다.
createOrderItem 함수에서 item을 파라미터로 넘기고 있는데 굳이 상품가를 item.getPrice()로 따로 넘기는 이유는 편의상 그렇게 코딩 하신거라고 보면 될까요. 예를 들어 상품가가 장바구니에 담았던 가격이랑 실제 가격 상품이 주문 시점에 따라 달라질 수도 있을 듯 해서 현업에서는 주문 가격을 item에서 가져오지 않고 따로 가져갈 듯 해서요. 배송정보도 마찬가지일 것 같구요.
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
gropingBy 에 관하여입니다.
Set<Map.Entry<OrderQueryDto, List<OrderItemQueryDto>>> entries = flats.stream() .collect(groupingBy(o -> new OrderQueryDto(o.getOrderId(), o.getName(), o.getOrderDate(), o.getOrderStatus(), o.getAddress()), mapping(o -> new OrderItemQueryDto(o.getOrderId(), o.getItemName(), o.getOrderPrice(), o.getCount()), toList()))) .entrySet(); 여기서 OrderQueryDto 와 Map 의 키(groupingby 의 classifier)가 되는 것 같은데 아무리 구글링해봐도 객체인경우에는 @EqualsAndHashCode를 통해 여러 필드중 특정 필드를 지정해줘야한다? 이런말을 못 찾겠습니다... 질문도 좀 이상한것 같은데 제가 궁금한것은 어떤 키워드나 사이트를 참조해서 공부해야하는지 입니다... 찾아본 예시들도 다 그냥 일반적인 경우라 어떻게 equalshashcode를 알려줘야하는지 원천? 을 알고싶습니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
id 관련해서 질문드립니다!
id가 자동으로 증가하는 게 repository에서 save할 때 member.setId(++sequence)에서 증가하는 것 같은데요 sequence에 대해서 찾아보는데 db의 내용이 나와 알기가 쉽지 않습니다. 혹시 간단한 설명 부탁드려도 괜찮을까요?그리고 제가 너무 기초적인 것을 몰라서 그런지 int i = 0; member.setId(++i); 위 코드로 바꿔도 가능할지 궁금해져서 확인해보았는데요. ++i에 에러표시가 뜨기에 자료형 문제인 것 같아서 long i = 0; member.setId(++i); 로 다시 바꿔 run 해보았는데 작동은 되지만 멤버가 하나밖에 저장되지 않더라고요. (예: spring1, spring2 등록 -> id=1인 spring2 만 저장됨)그냥 숫자형과 sequence와 다른 점이 있나요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
response객체
안녕하세요 선생님 좋은강의 잘듣고있습니다! 웹브라우저가 http요청메시지를 보내면 이것을 기반으로 request/response객체가 생성된다고 하셨는데 이때 처음 생성된 response객체는 정보가 없는 비어있는 객체 상태이고 helloServlet객체가 실행이 되면서 response객체에 정보가 채워진다고 볼 수 있나요? 그리고 Servlet을 그냥 service()로직을 수행하는 싱글톤 객체라고 이해하면 될까요?
-
미해결스프링 핵심 원리 - 기본편
취준생의 고민입니다..
우선 강의 정말 정말 잘 들었어요 ! 개발자로 지내는 동안 계속 뵙고싶어요!! 제가 드릴 질문은 강의 자체에 대한 질문이 아니여서 죄송합니다 ㅠㅠ 제가 취준생으로써 고민이 있는데, 영한쌤의 조언이 듣고 싶습니다.. 제가 국비수료1달 남은 시점에서 취직을 하려하는데, 학원수업이 힘들진 않았으나, 코딩테스트 1단계도 어렵더군요.. 하여 SI 회사가서 실무경력을 먼저 쌓으려고 합니다. 그런데 주위에서 지금 SI를 가면 안좋을 회사일 확률이 높고, 처음 일을 잘못배운다면 노답이라고.. 저에게 겁을 줍니다.. 처음 일을 잘못배우면 정말 답이 없는 수준이 되는 건가요..? (노답이라는 단어에 전 너무 충격을 받았습니다..ㅠㅠ) 긴 글 읽어주셔서 감사합니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
강의 내용 정리
선생님 안녕하세요. BE 개발자의 꿈을 이루기 위해 선생님의 강의를 몇가지 구매하였습니다. 현재 질문드리는 강의 외에도 구매한 강의에 대해 학습 내용 정리 및 학습을 했다는 나름의 증명으로 git과 blog에 내용을 정리하고자 합니다. 코드랑 내용을 같이 올릴 예정인데 허락해주실 수 있나요? 출처는 반드시 밝히겠습니다!
-
미해결스프링 핵심 원리 - 기본편
@Configuration 질문 드립니다!
안녕하세요 좋은강의 내주셔서 항상 감사드리고 있습니다. 이번강의에서 ComponentFilterAppConfig 클래스에서 @Configuration 어노테이션이 선언되어 있는데요 @ComponentScan을 사용시에도 해당클래스에 @Configuration을 꼭 사용해야 하는건가요 ? 이런의문이 생긴이유는 저번강의들에서 @Configuration을 사용하면 기대되는 효과는 Bean에 생성된 클래스내에서 사용된 객체들의 싱글톤을 보장해주는 것이라고 이해했는데 테스트 해보니 @ComponentScan사용시에는 Bean내에서 사용된 객체들을 Autowired를 사용하여 주입해줌으로써 싱글톤이 보장되는것 같아서 입니다. 질문은 여기까지 입니다. 바쁘신 와중에 좋은강의 내주셔서 항상 감사드립니다! 좋은하루 보내세요
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
gradle build할 때 이런 오류가 뜨는데 구글링해도 안 나와서요!
새로 뭐가 생성되긴 한 것 같은데 lib 폴더를 포함한 몇몇 파일은 같이 생성되지 않았더라고요 무슨 오류인가요?ㅠㅠ
-
미해결스프링 핵심 원리 - 기본편
AppConfig뒤에 .class붙이는 의미는 먼가요?ㅇ
검색해도 잘 안나오네요
-
해결됨스프링 부트 개념과 활용
mvn package 오류가 뜨는데 원인을 모르겠습니다.
C:\Users\kjs50\IdeaProjects\SpringBootStart>mvn package C:\Users\kjs50\IdeaProjects\SpringBootStart>set JAVA_HOME=D:\01.app\java\jdk1.6.0_31 [INFO] Scanning for projects... Downloading: http://repo.maven.apache.org/maven2/org/springframework/boot/spring-boot-st arter-parent/2.0.3.RELEASE/spring-boot-starter-parent-2.0.3.RELEASE.pom [ERROR] The build could not read 1 project -> [Help 1] [ERROR] [ERROR] The project org.example:SpringBootStart:1.0-SNAPSHOT (C:\Users\kjs50\IdeaProje cts\SpringBootStart\pom.xml) has 1 error [ERROR] Non-resolvable parent POM: Could not transfer artifact org.springframework.b oot:spring-boot-starter-parent:pom:2.0.3.RELEASE from/to central (http://repo.maven.apac he.org/maven2): Failed to transfer file: http://repo.maven.apache.org/maven2/org/springf ramework/boot/spring-boot-starter-parent/2.0.3.RELEASE/spring-boot-starter-parent-2.0.3. RELEASE.pom. Return code is: 501 , ReasonPhrase:HTTPS Required. and 'parent.relativePath ' points at wrong local POM @ line 17, column 13 -> [Help 2] [ERROR] [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch. [ERROR] Re-run Maven using the -X switch to enable full debug logging. [ERROR] [ERROR] For more information about the errors and possible solutions, please read the following articles: [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/ProjectBuildingException [ERROR] [Help 2] http://cwiki.apache.org/confluence/display/MAVEN/UnresolvableModelException
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
SQL where 문 vs Java stream filter 성능차이에 관한 질문입니다
안녕하세요! 항상 강의 잘 듣고있습니다:) 스프링 관련해서 프로젝트를 하다가 두 지점사이의 거리를 계산하는 쿼리를 짤 일이 생겼습니다. (예: 내 위치에서 반경 5km이내에 있는 장소들을 가져오기 등) 그래서 QueryDsl 이나 Jdbc Template 으로 SQL 내장 함수를 호출하여 만들려고 했는데 제 경우에는 각 장소의 위경도가 암호화 되어있고 이걸 복호화 해서 거리계산 해야하는데 쉽지않더라고요ㅠㅠ 그래서 문득 생각해보니 이 기능은 전체 데이터를 가져온 다음 차라리 자바 코드로 필터링 하면 더 코드짜기 쉽지 않을까 하는 생각이 들었습니다. [질문] DB SQL where 로 필터링 해서 가져오는 것과 자바코드로 필터링 하는 것 두 방법간에 성능차이가 얼마나 나는지 궁금합니다 (물론 일반적으로는 RDBS 가 더 최적화 되어있을 것 같긴 하지만 실무에서 자바로 필터링하는 경우가 있는지도 궁금합니다) 좀 두서없이 쓴것 같은데 읽어주셔서 감사합니다ㅠ
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
동적으로 작용할 때
만약에 실전1같은 사이트가 있는데, 이제 여기서 이미지정보가 추가되어서 상품 이미지가 보여지는 사이트가 있다고 가정하면, 그 이미지는 DB에 넣어서 상품정보와 같이 가져와야하는건가요 아니면 웹서버에 폴더를 따로 만들어서 거기에서 가져와야 하는 건가요?? 만약에 둘다 가능하다면, 최신 트렌드또는 이쪽으로 공부할수 있는 구글링 키워드 부탁드려도 될까요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
getter와 setter를 만드는 이유가 뭔가요?
값을 수정하고 받아들인 다는 의미는 알겠는데 언제 어떻게 사용하는지에 대해서 궁금합니다. 안만들면 안되는건가요?
-
미해결실전! 스프링 데이터 JPA
insert에 대해서 문의드립니다.
안녕하세요 김영한님:) 실무 적용 중에 궁금한게 있어서 문의 드리는데요. 보통 entity내에 joinColumn이든 mappedBy든 연관관계를 성립 시켜주는데요 그냥 단순히(?) 주문생성(주문관련된 테이블들에 insert이 이루어짐)만 이루어진다면 굳이 연관관계 맵핑을 하지 않고 각 주문관련 테이블들에 하나씩 컨트롤 하면서 insert 하는게 편리할 것 같다는 생각이 들어서.. 이런 접근 방법이 맞을까요? 물론 테이블 간 FK로 묶여 있는 테이블들도 있긴 한데 이런 경우는 위 처럼 하면 JPA의 객제관점으로 테이블에 접근 하는 관점에서는 어긋나는것 같기도 하고...영한님의 의견은 어떠실까요? 참고로 이 서비스는 사실상 주문관련 테이블은 insert만 이루어지고 select는 상태값 정도 조회하는 신규 api 입니다. 쿼리가 아닌 JPA 관점에서 접근하는 게 생각보다 딱 이거다 이런게 명확하지 않으닌까 생각이 진짜 많아지는것 같아요 ㅠㅠ 감사합나다.
-
미해결스프링 핵심 원리 - 기본편
사용자 정의 Qualifer 작성시 질문입니다!
안녕하세요, 강의를 듣다가 궁굼한 점이 생겨서 질문 드려요. 이 강의 1분 40초 쯤에서, MainDiscountPolicy를 만든 뒤 어노테이션들을 추가하는 부분에서 궁굼증이 생겼습니다. @Qualifier("mainDiscountPolicy")를 써주면 @Qualifier파일 안에 있는 @Target부터 @Documented 가 포함되어 있을 거 같다고 생각했습니다. 강의 1분 40초의 7줄부터 10줄까지를 쓰는 이유가 있나요?
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
엔티티가 아닌 DTO로 변환을 할 때 컬렉션 조회를 할 경우 @JsonIgnore가 필요로 하는상태가 생겼습니다.
API 개발 고급 - 컬렉션 조회 최적화에서 주문 조회 V2: 엔티티를 DTO를 변환 수업에서 4:30 에 No properties문제가 발생하여 저도 getter를 넣었으나 다음과 같은 에러가 발생했습니다. 구글링 한 결과 해당 컬렉션이 지연 로딩으로 인해 프록시 객체를 serialize하기 때문에 나는 에러라고 합니다. 그래서 제가 조치한 것은 해당 에러가 발생하는 @OneToMany필드를 @JsonIgnore를 했습니다. 다행히 정상 작동은 했으나 김영한님의 강의에서도 그렇고 제가 개인적으로 하는 프로젝트에서도 단 한번도 Entity에 @JsonIgnore를 사용하지 않았습니다. 단순히 DTO에 getter를 사용했는데 작동이 잘 되었습니다. 어떻게 하면 Entity에 @JsonIgnore를 사용하지 않고 문제를 해결할 수 있을까요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
h2실행오류
Exception opening port "8082" (port may be in use), cause: "java.net.BindException: Address already in use: NET_Bind" [90061-200] 포트 pid 찾아서 taskkill 돌리고 다시 h2.bat 실행해도 계속 뜹니다.... 사용자폴더에 .h2.~~.properties파일도 없어서 포트도 못바꾸고 있는데 무엇을 잘못했을까요 ㅠㅜ "8082" (port may be in use), cause: "java.net.BindException: Address already in use: NET_Bind" [90061-200] 포트 pid 찾아서 taskkill 돌리고 다시 h2.bat 실행해도 계속 뜹니다.... 사용자폴더에 .h2.~~.properties파일도 없어서 포트도 못바꾸고 있는데 무엇을 잘못했을까요 ㅠㅜ 윈도우OS고, java SE 1.8과 java SE 11 둘다 설치돼있으며 환경변수는 11로 바꿨습니다 혹시 해결하기가 어렵다면 H2를 건너뛰거나 다른 DB로 대체할 수 있을까요?