묻고 답해요
138만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 부트 - 핵심 원리와 활용
한 레포에서 여러 프로젝트를 구성 할때, DB 엔티티(entity) 공유 방법이 궁금합니다.
안녕하세요, 프로젝트 폴더&파일 구조에 대해 문의드리고자 글을 남기게 되었습니다.1개 레포지토리에2개(A, B) 프로젝트가 있습니다각각 스프링부트 프로젝트 입니다A 는 API Rest 서버 이고B 는 크론 서비스로 구성된 서버 입니다A와 B 간 통신은 없습니다A 에서 요청을 받으면, DB 에 요청을 저장하고B 가 주기적으로 DB 를 탐색하여 미 처리된 요청을 실제 수행하고자 합니다예를 들어, 메일 발송 또는 영수증 (pdf) 생성 요청을 A 서버가 받아서 DB 에 저장하면,해당 테이블을 B 가 주기적으로 확인하여 작업을 실제 수행하고자 합니다.B 서비스에서 db 엔티티를 어떻게 이용하는게 좋은 구성인지 궁금합니다.제가 생각해본 바는 3가지 입니다1. entity 만 독립된 레포로 구성하고, submodule 로 각각 참조하도록한다.- 1개 레포 쓰려고 구성했는데 entity 만 독립 레포로 분리한다는 점이 불편하게 다가옵니다, 그리고 submodule 구성 자체도 거부감이 들었습니다2. A 에 주로 entity 를 작성하고, 필요한 부분만 B 에 일부 복사하여 사용한다.- 구성하기는 편하지만 관리가 잘 될까, 변경점을 잘 따라갈 수 있을까 걱정됩니다3. 프로젝트 A 와 B 를 합치고, 실행을 각각한다.Repo|___ A|___ src / main / kotlin / com / test / api / entity|___ src / main / kotlin / com / test / api / service|___ src / main / kotlin / com / test / cron / service- api 서버와 cron 서버 jar 자체를 분리하고 싶엇는데, 제가 찾아본 바로는 gradle 관련 포럼에서 이렇게 구성하는 것을 비추천 한다는 글들을 보았습니다, 구체적으로 찾아보진 못한 상태입니다*현재구성)Repo|___ A|___ src / main / kotlin / com / test / api / entity|___ src / main / kotlin / com / test / api / service| ...|___ B|___ src / main / kotlin / com / test / cron / service위와 같은 환경에서 권장되는 방법이 어떤 것인지 궁금합니다.읽어주셔서 감사합니다!
-
해결됨실전! Querydsl
order by 에 대한 궁금증이 있습니당
안녕하세용 예를 들어 [1, 3, 7, 2, 5] 이렇게 member id에 대한 list가 주어졌을떄 1, 3, 7, 2, 5 이 순서대로 member 엔티티리스트가 조회되도록 할수 있는 방법은 없는 건가요?
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
15강 질문
안녕하세요 선생님.jdbcTemplate.query(readSql, (rs, rowNum) -> 0, request.getId())에서 (rs, rowNum) -> 0과 request.getId()의 자리가 바뀌면 안 되나요? 왜 위치가 저런 건가요?그리고 왜 수정은 id 기준이고 삭제는 이름 기준인가요?
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
MVC 1편까지만 완강 후 수강해도 될까요?
안녕하세요! 강의를 통해 매일 백엔드 개발자에 한 걸음 더 가까워지는 느낌을 받고 있는 취준생입니다. 김영한 강사님의 강의로 프론트엔드에서 백엔드 개발자로의 전향을 준비하고 있습니다!다름이 아니라, 현재 저는 우아한형제들 최연소 기술이사 김영한의 스프링 완전 정복 로드맵의 스프링 MVC 1편까지 완강한 상태인데요! 강사님께서 올려주신 로드맵 영상과 Q&A 게시판에서 답변주신 내용에 따르면 MVC 2편을 계속 수강하는 게 맞습니다. 그런데 제가 조금 더 빠르게 토이 프로젝트(정확히 말하면 상용 웹 서비스 출시 - 같이 하는 동료가 있습니다!)에 투입되고 싶은 마음이 큰 상태여서 이후 커리큘럼에 대해 고민이 생겼습니다..!우선은 실무적인 웹 애플리케이션 개발을 다루는 현재 강의(실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발)를 먼저 들음으로써 - 시간도 MVC 2편 대비 7시간 정도로 짧은 편이기에...! - 전체적인 개발 플로우를 접한 후, MVC 2편부터 DB 2편까지 남은 스프링 완전 정복 로드맵 강의를 수강하면서, 부족한 부분을 채워나가는 건 어떨까 생각이 들었습니다! 이와 관련해서 김영한 강사님의 고견을 듣고 싶어서, 질문글을 작성합니다 :-)
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
EntityManager , JpaReopsitory
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]안녕하세요 spring 강의를 듣고 혼자 구글링을 통해 연습을하다가 다시 인강으로 돌아온 수강생입니다! 혼자 연습할 때 리포지토리를 작성할 경우 JpaRepository를 extends 하여 사용하였습니다. 이때 em의 역할까지 자동으로 해주는것같아 엔티티 메니저는 사용하지않았습니다. 구글링을 더 해보니 CrudRepository등도 존재하는 것을 알게 되었습니다.여기서 질문은 보통 어느 방식을 선택하는지 궁금합니다. 상황에 맞는 방법이 있는 것인지 아니면 추세가 변하여 요즘은 어떤 것을 주로 쓴다는 흐름이 있는 것인지 궁금합니다!
-
미해결실전! 스프링 데이터 JPA
@Query의 트랜잭션에 대해 질문있습니다.
스프링 데이터 jpa에 정의된 save나 findById같은 메서드들은 기본적으로 @Transactional이 포함돼있어서 비지니스 로직 영역에서 @Transactional을 포함하지 않아도 트랜잭션이 걸리면서 잘 실행되는 것을 확인하였는데 @Query로 선언한 네임드 query같은 경우에도 비지니스 로직 영역에서 @Transactional을 포함하지 않아도 트랜잭션이 걸리면서 실행이 되는 것을 확인했습니다. 왜 그런건가요??
-
미해결실전! Querydsl
@OneToMany 에서 Cascade 되어있는데 foreign key로 연결되어 있는 테이블 삭제가 안됩니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]영상에서 12분 40초 부분에 bulkDelete와 관련된 내용입니다. 저는 일단 예제와는 조금 다르게 진행을 하였는데요. delete 하려는 User entity에는 OneToMany 관계로 되어있는 테이블이 하나 있습니다. 그래서 User entity에 Cascade All을 추가했는데 querydsl에서는 에러가 뜨면서 실행이 안되더라구요.제가알기로는 cascade를 설정해주면 entity가 삭제될 때 관련된 foreign key를 삭제해주는걸로 알고 있는데 아무리 찾아봐도 답이 안보여서 이렇게 질문남깁니다.
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
properties와 yaml 질문
application.properties로 하면 오류가 뜨고 application.yaml로 하면 문제가 해결이 됩니다.. 뭐가 문제인지 모르겠습니다. spring.output.ansi.enabled=always # DB 설정 spring.datasource.url=jdbc:h2:tcp://localhost/~/capstone spring.datasource.username=sa spring.datasource.password= spring.datasource.driver-class-name=org.h2.Driver # JPA 관련 spring.jpa.hibernate.ddl-auto=create-drop #애플리케이션을 시작할 때 데이터베이스를 초기화하고 다시 테이블 생성 # ddl-auto=none로 하면 데이터 보존 spring.jpa.properties.hibernate.format_sql=true #실행되는 query를 보여준다. # JPA Log -> SQL 로거를 통해 출력, 바인딩 되는 파라미터 확인 2가지 가능하도록 logging.level.org.hibernate.SQL=DEBUG logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE # JPA Log #spring.jpa.show-sql=true system.out은 안되야 하므로 이건 X 위가 application.properties이고 logging: level: org: hibernate: SQL: DEBUG type: descriptor: sql: BasicBinder: TRACE spring: datasource: driver-class-name: org.h2.Driver password: url: jdbc:h2:tcp://localhost/~/capstone username: sa jpa: hibernate: ddl-auto: create-drop #??????? ??? ? ??????? ????? ?? ??? ??' properties: hibernate: format_sql: true #???? query? ????.' output: ansi: enabled: always위가 application.yaml로 실행했을 때 입니다. 어째서 yaml로 해야만 실행되는지 모르겠습니다. 모든 설정은 같은거 같은데 혹시 부트 3.0이라 그런 것인지 궁금합니다.
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
Could not find or load main class 에러 해결
Error: Could not find or load main class jpabook.jpashop.JpashopApplicationCaused by: java.lang.ClassNotFoundException: jpabook.jpashop.JpashopApplication위에 처럼 뜹니다.혼자서 검색도 해보았고 환경변수도 바꿔보았는데 무엇이 문제 인가요? 예전에 학습한다고 해봤을떄는 잘되었는데 지금은 안되네요...지금 파일은 영한님 '강의 소스 코드' 파일 입니다 -> 자바 버전 수정 하니 해결완료됨
-
미해결실전! 스프링 데이터 JPA
Springboot 3.0 Projection 최적화되었나요?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]안녕하세요. Projections 강의 15:36 에 실행된 쿼리와 제 로컬에서 실행된 쿼리가 달라 질문드립니다.중첩구조의 경우 Team 에 대한 정보는 전체 다 퍼올리는 것으로 강의가 진행되고 있는데, 실행된 쿼리는 Dto 에 맞게 퍼올리는 것으로 보입니다.혹시 해당 내용에 대한 수정사항 알 수 있을까요? 공식문서를 읽는 게 아직 익숙치 않습니다 ㅠ공식 문서에도 해당 내용에 대한 언급이 딱히 없는 것 같아서 질문드립니다!
-
해결됨Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
H2 console 에서의 문제
안녕하세요.먼저 좋은 수업을 강의 해주셔서 감사합니다!다름이 아니라 제가 해당 수업 진행 중 오류가 있어서 문의드립니다!mysql 콘솔에서는 오류가 발생 하지 않았으나,H2 Console 에서 테이블을 조회시 SELECT * FROM ORDERS;(conn=42) Table 'mydb.ORDERS' doesn't exist 42S02/1146 이러한 에러가 발생하는데 원인이 무엇일까요??order-service 에서 조회시에는 문제가 없습니다..
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
toString() 만 사용해도 프록시객체가 초기화되는 것이 맞나요?
일전에, 지연로딩 을 사용하면 객체의 참조를 얻을 때가 아닌, 실제 필드(메서드 포함) 에 접근할 때 프록시 객체가 진짜 객체로 초기화 되는 것으로 이해했습니다.그런데 아래와 같이 코드를 짜고 실행해보니, 객체의 참조를 얻을 때 쿼리가 나가는 것 처럼 보이더라고요.// 팀 Team teamA = new Team(); teamA.setName("팀A"); em.persist(teamA); Team teamB = new Team(); teamB.setName("팀B"); em.persist(teamB); // 회원: member1, 2 는 팀A 소속. member3은 팀B 소속 Member member1 = new Member(); member1.setUsername("회원1"); member1.setTeam(teamA); em.persist(member1); Member member2 = new Member(); member2.setUsername("회원2"); member2.setTeam(teamA); em.persist(member2); Member member3 = new Member(); member3.setUsername("회원3"); member3.setTeam(teamB); em.persist(member3); em.flush(); em.clear(); // Query String query = "select m from Member m"; List<Member> findMembers = em.createQuery(query, Member.class) .getResultList(); for (Member member : findMembers) { System.out.println("member = " + member.getUsername() + ", " + member.getTeam()); } tx.commit(); (나간 쿼리)Hibernate: /* select m from Member m */ select member0_.MEMBER_ID as MEMBER_I1_7_, member0_.createdBy as createdB2_7_, member0_.createdDate as createdD3_7_, member0_.lastModifiedBy as lastModi4_7_, member0_.lastModifiedDate as lastModi5_7_, member0_.COMPANY_CITY as COMPANY_6_7_, member0_.COMPANY_STREET as COMPANY_7_7_, member0_.COMPANY_ZIPCODE as COMPANY_8_7_, member0_.city as city9_7_, member0_.street as street10_7_, member0_.zipcode as zipcode11_7_, member0_.LOCKER_ID as LOCKER_15_7_, member0_.TEAM_ID as TEAM_ID16_7_, member0_.USERNAME as USERNAM12_7_, member0_.endDate as endDate13_7_, member0_.startDate as startDa14_7_ from Member member0_ Hibernate: select team0_.TEAM_ID as TEAM_ID1_10_0_, team0_.createdBy as createdB2_10_0_, team0_.createdDate as createdD3_10_0_, team0_.lastModifiedBy as lastModi4_10_0_, team0_.lastModifiedDate as lastModi5_10_0_, team0_.name as name6_10_0_ from Team team0_ where team0_.TEAM_ID=? member = 회원1, hellojpa.domain.Team@26ae880a member = 회원2, hellojpa.domain.Team@26ae880a Hibernate: select team0_.TEAM_ID as TEAM_ID1_10_0_, team0_.createdBy as createdB2_10_0_, team0_.createdDate as createdD3_10_0_, team0_.lastModifiedBy as lastModi4_10_0_, team0_.lastModifiedDate as lastModi5_10_0_, team0_.name as name6_10_0_ from Team team0_ where team0_.TEAM_ID=? member = 회원3, hellojpa.domain.Team@6bd16207 저는 위 코드 중 System.out.println 과정 중 프록시 객체가 초기화가 되어서 위같은 쿼리가 나왔다고 생각하는데 제 판단의 근거가 맞는지 궁금합니다.System.out.println("member = " + member.getUsername() + ", " + member.getTeam());System.out.println 을 사용하면 자동으로 객체.toString() 이 호출되고, 따라서 필드(메서드)에 접근 했으므로 이 시점에 프록시 객체가 엔티티로 초기화 되었다. 위 처럼 이해하는게 맞을까요? 항상 애써주시는 영한님과 서포터님들께 감사드립니다!!
-
미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
@ModelAttribute 사용시 @Valid
@RequestBody @Valid 사용시에 오류가 발생하면ControllerAdvice @ExceptionHandler(MethodArgumentNotValidException.class)로 잡을 수 있었습니다.하지만 @ModelAttribute를 사용하면ControllerAdvice @ExceptionHandler(MethodArgumentNotValidException.class)로 잡히지가 않습니다..제가 잘못한 부분이 있을까요?/author/presentation/AuthorControllergetAuthorListByNickname에서 오류가 잡을 수가 없습니다.ControllerAdvice는/global/error/ControllerAdvice에 있습니다.감사합니다~https://github.com/320Hwany/Webtoon
-
해결됨Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
GATEWAY-SERVICE 를 통하여 호출하지 않는 이유가 있을까요?
마이크로 서비스 사용간 (RestTemplate 혹은 Feign) 에서 Eureka 의 서비스 명으로 USER-SERVICE 같은 마이크로 서비스명을 통하여 직접 호출하면 결론적으로는 GATEWAY-SERVICE 를 통하여 사용했을때의 장점을 잃어버리는 것 같은데, 섹션 10 에서는 게이트웨이를 통하지 않고 직접 서비스를 호출하는 이유가 있을까요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
left join 시 on 부분 질문있습니다
JPQL:SELECT m FROM Member m LEFT JOIN m.team t on t.name = 'A'SQL:SELECT m.* FROM Member m LEFT JOIN Team t ON m.TEAM_ID=t.id and t.name='A' 이와 같은 부분에서 left outer join 시 SQL에ON m.TEAM_ID=t.id이 부분은 왜 자동으로 추가가 되는 것인지 궁금합니다. inner join의 경우에는 조인 조건에 동일한 값을 가진 행을 결과에 표기하는 것이니 해당 부분이 추가되는 것이 이해가 가는데left outer join의 경우 m.TEAM_ID=t.id 이 성립하지 않는, m에만 값이 존재하는 부분까지 포함해서 왼쪽 테이블의 전부가 결과에 표기되는 방식이 아닌가요? 그냥 단순히 'm의 TEAM_ID 와 t의 id가 연관관계를 이룬다' 는 의미라고 이해하면 되는 부분일까요? 그리고 left outer join 시 on 절에 필터링 조건을 추가해도 left outer join 특성상 필터링으로 걸러진 행까지 다시 포함되서 결과가 반환되는데 무슨 의미가 있는지 잘 이해가 가지 않습니다. 제 생각으로는 select의 주체가 되는 값만 영속성 컨텍스트에 저장하는 일반 join에서는 의미가 없고 fetch join 같은 경우에 의미를 가진다고 생각되는데 제 생각이 맞는 걸까요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
테이블 연관관계 질문
예를들어, 하나의 주문에 짜장면2개, 짬뽕2개를 했다고 가정하면Order테이블에서는 1개의 데이터가 생성,OrderItem테이블에서는 2개의 데이터가 생성 되는게 맞을까요?그렇다고 한다면 Order에 대한 총액이 궁금할 때에는 Order에서 OrderItems를 구한 뒤, 각각의 orderPrice를 더하면 될까요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
디비에 물리적 FK를 설정 하지 않고도 JPA 연관관계 사용이 가능한가요?
안녕하세요.좋은 강의 덕분에 학습 잘하여 정말 감사하다는 말씀 부터 드립니다.다름아니라, 디비에 물리적 fk를 설정하지 않고 테이블 연관관계 매핑을 하였을시 별다른 문제없이 JPA 연관관계를 사용할 수 있는지 궁금하여 질문드립니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
내용 관련 질문
정확히 개발에서 domain이란게 어떤 뜻인가요 ?개발 대상의 범위? 정도로 이해하고 있는데 정확히 어떤 뜻으로 사용되는 건가요 궁금합니다..!
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
동적쿼리
안녕하세요! 아직 강의를 다 듣지는 않았지만, 궁금한게 있어 질문드립니다! 제가 현재 진행해야 하는 프로젝트는 동적으로 쿼리를 생성하는 게 중요합니다. 테이블에 10개의 컬럼이 있다면, 2개를 선택해서 보여줄 수도, 3개를 선택해서 보여줄 수도 다양한 조합으로 보여줘야 합니다. 저는 node.js와 flask로 웹을 개발한 경험이 있는데요, 컬럼을 리스트(또는 배열)로 받고 for문을 돌려가면서 컬럼 and 컬럼 and ... 이런 식으로 문자열을 만든 다음 select문 문자열에 for문 돌리면서 만든 문자열을 넣어서 예를 들면 select {컬럼조합} from 테이블 이런 식으로 만든 뒤 실행시켰거든요. 문자열만 잘 작성하면 그 문자열대로 바로 실행이 되니 오히려 쉽다고 느꼈습니다. 근데 스프링부트는 쿼리 수행이 굉장히 정적이라는 느낌인데요....제가 아직 공부 중이라 잘은 모르겠으나 어디서는 조회하고자 하는 컬럼에 대한 인터페이스를 만들라고 하는데, 그 조합이 한두개가 아닌지라.....그걸 하나하나 만들 수도 없고요...이건 where조건도 마찬가지고 join도 마찬가지고요...다른 프레임워크에서는 쉽게 가능하던걸 springboot가 바보 프레임워크가 아닌 이상 지원 안해주는 건 말이 안될 거 같고 이런 걸 어떻게 해야 하는 걸까요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
P6spy의 가독성(?)이 이상합니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]사진이 잘 보이시는지 모르겠지만 쿼리문이 가로로 길게만 나타납니다.참고로 스프링부트는 3.x 버전이고 콘솔창 좌측에 소프트 랩 버튼또한 설정이되어있습니다.