묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
static/index.html 은 Mapping을 안해줬는데도 되는 이유가 무엇인가요 ?
@GetMapping("/") public String index() { return "index"; } 이런 소스 없이 자동으로 localhost:8080 들어가면 Index.html로 연결되는 이유가 무엇일까요?
-
미해결실전! Querydsl
첫번째 querydsl테스트 코드 에서 nullpointexception이 터졌습니다
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.q타입을 생성하고 import를 해주었습니다. package study.querydsl; import com.querydsl.jpa.impl.JPAQueryFactory; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.transaction.annotation.Transactional; import study.querydsl.entity.Member; import study.querydsl.entity.Team; import javax.persistence.EntityManager; import static study.querydsl.entity.QMember.*; @SpringBootTest @Transactional public class QuerydslBasicTest { @Autowired EntityManager em; JPAQueryFactory queryFactory; @BeforeEach public void before() { Team teamA = new Team("teamA"); Team teamB = new Team("teamB"); em.persist(teamA); em.persist(teamB); Member member1 = new Member("member1", 10, teamA); Member member2 = new Member("member2", 20, teamA); Member member3 = new Member("member3", 30, teamA); Member member4 = new Member("member4", 40, teamA); em.persist(member1); em.persist(member2); em.persist(member3); em.persist(member4); } @Test public void startJPQL() { String qlString = "select m from Member m" + " where m.username = :username"; Member findMember = em.createQuery(qlString, Member.class) .setParameter("username", "member1") .getSingleResult(); Assertions.assertThat(findMember.getUsername()).isEqualTo("member1"); } @Test public void startQuerydsl() { Member findMember = queryFactory .select(member) .from(member) .where(member.username.eq("member1")) .fetchOne(); Assertions.assertThat(findMember.getUsername()).isEqualTo("member1"); } }
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
영속성 컨텍스트, DB접근,
안녕하세요.! JPA기본편을 복습하다가 궁굼한 점이 생겨서 질문 드립니다. 엔티티가 영속성 컨텍스트에 올라가도, commit이전에는 데이터 베이스에 반영이 안된다고 이해했습니다. commit전에 엔티티를 찾을 경우, 즉 em.find(클래스, id);를 할 경우에, 1차캐시(영속성 컨텍스트)에서 엔티티를 조회하는 것으로 알고 있습니다.이때 찾은 엔티티는, 디비에 아직 반영이 되어 있지 않지만, 영속성 컨텍스트에만 올라가있는 객체라고 이해해도 되나요 .? 그런데 이럴 경우, 디비에 반영되지 않았는데, 값을 return하는 것인데.. 서비스 개발을 할 때에 디비에 저장 되어 있는 것으로 개발자에게 오해의 소지가 있지 않나요?궁굼합니다.! 관련코드 첨부 합니다. package hellojpa; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.EntityTransaction; import javax.persistence.Persistence; import java.util.List; public class JpaMain { public static void main(String[] args) { // persistence.xml파일에서 찾을 수 있다. // <persistence-unit name="hello"> EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); //고객의 요청이 와서 디비 작업을 하게 되면 엔티티 매니져를 꼭 사용해야한다. EntityManager em = emf.createEntityManager(); //jpa의 모든 작업 변경은 transaction안에서 해야한다. EntityTransaction tx = em.getTransaction(); tx.begin(); try { Member member = new Member(); member.setId(10L); member.setName("회원1"); //1차 캐시에 저장됨 em.persist(member); //1차 캐시에서 조회 Member findMember = em.find(Member.class,10L); System.out.println(findMember.getId()); System.out.println(findMember.getName()); } catch (Exception e ){ tx.rollback(); }finally { em.close(); } emf.close(); } }
-
미해결자바 기초부터 마스터하기 with 은종쌤 (Do it 자바 프로그래밍 입문) - Part 1(기초편)
안녕하십니까 선생님
저는 혼자 자바를 공부중에 선생님 강의를 들의면서 공부중인 학생입니다다름이 아니라 객체지향의 예제 문제들을 풀 때는 이해가 가지만 혼자 공부하면 생성자에 기본값으로 무엇을 할당 해야 하는지 아니면 클래스를 참조 하는 변수들을 언제 메소드의 매게변수 값에 넣어야 하는지 잘모르겠는데 어떻게 공부해야지 잘 이해가 될까요 .. 분명 강의를 듣고 수업을 할땐 이해가 되는데 제가 혼자 공부할땐 힘드네요 .. 선생님 디자인 패턴 강의가 도움이 될까요 ??객체 지향 문제라도 많이 풀면서 익숙해지고 싶은데 생각보다 문제가 많이 없어서 그런데 방법이 없을까요 ??
-
해결됨자바 코딩테스트 - it 대기업 유제
잃어버린 강아지 코드 질문
Thing이라는 클래스를 생성하여 멤버 변수로 x, y, d를 가지게 했습니다.처음 for문을 돌면서, dog과 person이라는 객체를 생성해서 각자의 x,y,d값을 가지도록 생성자를 구현했습니다.그 외의 로직은 강의와 거의 유사한데, 첫번째 테스트 케이스는 51이 나오지만 두번째 테스트케이스가 0으로 나오고 있습니다.코드 첨부하겠습니다.class Thing { int x; //x 좌표 int y; //y 좌표 int d; //바라보는 위치 public Thing(int x, int y, int d) { this.x = x; this.y = y; this.d = d; } } public class Code04 { public int solution(int[][] board){ int[] dx = {-1, 0, 1, 0}; int[] dy = {0, 1, 0, -1}; Thing person = null; Thing dog = null; int time = 0; //사람과 강아지의 위치 좌표를 찾는다. for(int i=0; i<board.length; i++) { for(int j=0; j<board[i].length; j++) { if(board[i][j] == 2) { person = new Thing(i, j, 0); } if(board[i][j] == 3) { dog = new Thing(i, j, 0); } } } if(person == null || dog == null) { // 2 혹은 3이 존재하지 않는 경우 return 0; } while(time < 10000) { time++; int px = person.x + dx[person.d]; int py = person.y + dy[person.d]; int dogX = dog.x + dx[dog.d]; int dogY = dog.y + dy[dog.d]; boolean flagP = true; boolean flagD = true; if(px == dogX && py == dogY) { return time; } if(!isValidXY(px, py, board)) { person.d = (person.d + 1) % 4; flagP = false; } if(!isValidXY(dogX, dogY, board)) { dog.d = (dog.d + 1) % 4; flagD = false; } if(flagP) { person.x = px; person.y = py; } if(flagD) { dog.x = dogX; dog.y = dogY; } } return 0; } private boolean isValidXY(int x, int y, int[][] board) { return x >= 0 && y >= 0 && x < board.length && y < board.length && board[x][y] != 1; } public static void main(String[] args){ Code04 T = new Code04(); int[][] arr1 = { {0, 0, 0, 0, 0, 0, 1, 0, 0, 0}, {0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 1, 0, 0, 0, 1, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 1, 0, 0, 0, 2, 0, 0}, {1, 0, 0, 0, 0, 0, 1, 0, 0, 0}, {0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 3, 0, 0, 0, 1}, {0, 0, 0, 1, 0, 1, 0, 0, 0, 0}, {0, 1, 0, 1, 0, 0, 0, 0, 0, 0} }; System.out.println(T.solution(arr1)); int[][] arr2 = { {1, 0, 0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 1, 0, 0, 0}, {0, 0, 1, 1, 0, 0, 0, 1, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 1, 0, 1, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 1, 0, 1, 0}, {0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, {0, 0, 1, 0, 0, 0, 0, 0, 2, 1}, {0, 0, 0, 1, 0, 1, 0, 0, 0, 1}, {0, 1, 0, 1, 0, 0, 0, 0, 0, 3} }; System.out.println(T.solution(arr2)); } }
-
미해결실전! Querydsl
BooleanExpression을 이용해서 쿼리 검색
안녕하세요! BooleanExpression으로 메소드를 만들어 필터링 기능을 구현중입니다.Repository에서 이런식으로 BooleanExpression 메소드를 and으로 엮었습니다.return queryFactory.selectFrom(member) .innerJoin(member.activities, activities) .where(checkActivityContainsPart(part), checkMemberBelongToTeam(team)) private BooleanExpression checkActivityContainsPart(String part) { if (part == null) return null; return QMemberSoptActivity.memberActivity.part.contains(part); } private BooleanExpression checkMemberBelongToTeam(String team) { if (team == null) return null; switch (team) { case "임원진" -> { return QMemberSoptActivity.memberActivity.part.contains("회장") .or(QMemberSoptActivity.memberActivity.part.contains("부회장")); // 회장, 부회장, ~파트장, 운영 팀장, 미디어 팀장 } case "운영팀" -> { return QMemberSoptActivity.memberActivity.part.contains("총무"); // 회장, 부회장, ~파트장, 운영 팀장, 미디어 팀장 } default -> { return null; } } } memberActivity에는 파트원인지, 회장인지에 대한 활동 정보가 들어있습니다.어떤 기수에서는 회장을, 어떤 기수에서는 파트원을 했을 경우가 있습니다.이 모든 경우에 맞는 회원을 찾는 것이목표인데, 조건이 and( ) and( )으로 엮어지면서, 메소드checkActivityContainsPart()와 checkMeberBelongToTeam() 조건을 모두 포함하는 경우를 찾지 못합니다. (하나하나 조건을 줄때는 구해지지만, 둘다 모두 필터링 걸었을때는 찾아지지 않아요..)이를 가독성 있게 분리하면서 해결할 수 잇는 방법이 있을까요?원하는 쿼리는 (activities.part like ? and activities.part like ? or activities.part like ? or activities.part like ?) 이렇게 다 엮이는 것입니다!
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
영속성 컨텍스트 질문입니다.
3:58초 경에 findMember.setAge(20)으로 결과가 바뀌면 영속성 컨텍스트에 관리가 되는 거고, 안바뀌면 관리가 되지 않는다라는데 이유가 뭔가요 ?JPA가 DB의 데이터에 접근하고 수정하고 작성,삭제 할 수 있다 = 영속성 컨텍스트가 관리한다 같은 말일까요 ?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
AOP 의존성 추가
두가지 궁금사항이 있습니다.1.첫번째@Aspect 애노테이션 을 사용한다면의존성 추가해야된다고 인터넷에 나와있는데,꼭 안해도 되는건가요???implementation 'org.springframework.boot:spring-boot-starter-aop' 2.두번째TimeTraceAop class에 @Component 애노테이션을 추가하면 에러가 안나는데,SpringConfig class에 @bean 으로 등록시 에러가 납니다.콘피그에 빈으로 등록코드를 적을경우 또다른 코드를 주입해야되나요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
상품주문 질문
한명의 회원이 하나의 상품을 여러개 주문하는 것은 가능하지만, 여러개의 상품을 주문하지는 못하나요?
-
미해결실전! Querydsl
프로퍼티 접근, 필드 직접 접근, 생성자 사용 중에 어떤 방법이 제일 좋나요 ?
프로퍼티 접근, 필드 직접 접근, 생성자 사용 중에 어떤 방법이 제일 좋나요 ?? @Autowired보다 생성자 주입이 더 좋은 거처럼 더 좋은 방법이 따로 있는건지 궁금합니다 !
-
미해결실전! Querydsl
distinct 테스트코드 관련 질문 드립니다.
@Test public void distinct() { em.persist(new Member("member1")); em.persist(new Member("member2")); em.persist(new Member("member2")); em.persist(new Member("member5")); List<String> usernames = queryFactory .select(member.username).distinct() .from(member) .fetch(); assertThat(usernames) .containsExactly("member1", "member2", "member3", "member4", "member5"); } 테스트코드 직접 짜본 경험이 별로 없어서 그런데이렇게 짜면 되는걸까요 ...?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
라이브러리 살펴보기 3:45 질문
저는 왜 강사님처럼 오른쪽 창에 gradle이랑 database가 안보이는 걸까요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
일대다 관계에서의 값타입 질문입니다.
@OneToMany @JoinColumn(name = "MEMBER_ID") private Order order; @OneToMany @JoinColumn(name = "MEMBER_ID") private List<Order> orders; 두개가 무슨 차이가 있는지 궁금합니다.일대다 관계라면 컬렉션을 안써도 되지 않나요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
템플릿엔진이 없을경우 뷰리졸버는 작동을 못하나요??
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]안녕하세요 처음에 타임리프 의존성 추가 없이 해서 계속 페이지가 없다고 404오류가 나왔습니다.다른분이 타임리프 없이 할 경우 어떻게 해야하는지 질문주신것에 restapi방식을 많이 사용한다고 답해주신것은 보았는데템플릿엔진이 없으면 아예 뷰리졸버가 동작하지 않는 것인지 궁금합니다.application.properties 파일에 spring.mvc.view.prefix=/resources/templates/ spring.mvc.view.suffix=.html이 코드도 추가해보고, static, templates 폴더에 모두 보여주고싶은 html파일도 넣어보았는데 controller는 동작하고 뷰가 없다고 합니다감사합니다 :)
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
Hello JPA-프로젝트 생성 초기 세팅을 도와주세요
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요 강의 영상을 보면서 따라 해보려는 중 인대 실제 프로젝트 생성부터 의존성 파일 작성 시 버전이 완전히 다른 것 같아 도움 글 올립니다.강의 자료에는 version: 1.0.0을 사용하라고 나와 있지만 해당 버전으로 생성이 불가능 하여 최신 버전으로 프로젝트를 생성했습니다.그에 따라서 강의자료를 복붙 할 때도 혹시 몰라 현재 설치한 h2 데이터베이스 버전과 Hibernate 최신 버전으로 맞추었습니다.이후 강의 자료에서 /META-INF/persistence.xml를 생성 하라고 하여 따라 하였습니다.하지만 프로젝트 버전도 다르고 하여서 인지 이후 따라하기 실습 중 진행이 되지 않아 질문 글 올리게 되었습니다.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
Integer 타입 질문입니다
public static void main(String[] args) { Integer a = Integer.valueOf(10); Integer b = a; a = 20; System.out.println("a = " + a); System.out.println("b = " + b); }=======출력값 ========a = 20b = 10이렇게 하면 값이 변경되는데 PPT에서 변경X라는 말이 무슨 말일까요 ?
-
해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
OrderRepository를 JpaRepository를 사용하여 작성하고 싶습니다.
MemberReposiotry처럼 OrderRepository도 JpaRepository를 사용하여 변경해봤습니다.근데 여기서 기존의 검색 기능을 담당하던 findAllByString의 메서드를 구현함에 있어서 오류가 발생하여 질문드립니다.기존과 같이 OrderSearch를 이용하여 작성하고 싶어서 findALlByMemberName으로 OrderSearch의 필드인 MemberName을 가져오고 싶었으나 타입 불일치로 오류가 발생합니다.기존의 Service와 Controller의 변경 없이 Repository만으로 해결하고 싶은데 어떻게 작성해야 할까요?findAllByString은 동적쿼리라서 JpaRepsitory의 기능으로 해결하기엔 한계가 있나요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
즉시로딩과 지연로딩의 성능 차이에 대해 궁금합니다.
Member와 Team을 예로 생각했을 때즉시로딩 -> Member만 필요해도 Team과 쿼리문이 같이 나감지연로딩 -> Member만 불러오고, Team은 프록시 객체로 불러와서, Team이 필요할 때 영속성 컨텍스트에 연결을 요청하고 요청 쿼리문이 나가는 것이 맞나요 ? Member.getTeam().getName()을 1번 수행한다고 했을 때 즉시로딩(Member + Team 쿼리문 같이)의 성능이 지연로딩( Member 쿼리문 따로, Team 쿼리문 따로)보다는 좋지만 강의에서 나온 여러가지 문제로 웬만해서는 지연로딩을 사용하는 것이 더 좋다. 이것이 맞나요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
gradle build후 dir에서 jar파일이 안보여요..!
gradle build는 됐는데, 그 뒤에 dir에서 snapshot.jar파일이 안보입니다.이건 왜그럴까요..?ㅠㅠ?
-
해결됨자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
바둑이 승차 문제 강의 코드랑 비슷한데 오류가 나는 이유가 뭘까요?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.public class Main { static int m, n; static int max = 0; public static void DFS(int k, int sum, int[] arr) { if(sum > m) return; if(k == n - 1) { max = Math.max(sum, max); return; } DFS(k + 1, sum + arr[k + 1], arr); DFS(k + 1, sum, arr); } public static void main(String[] args) { Scanner sc = new Scanner(System.in); m = sc.nextInt(); n = sc.nextInt(); int[] arr = new int[n]; IntStream.range(0, n).forEach(i ->{ arr[i] = sc.nextInt(); }); DFS(0, arr[0], arr); System.out.println(max); } }강의 코드랑 다른 점은 sum이 0에서 출발하고 저는 arr[0]부터 출발했다는 것 같습니다.코드 채점에서는 대부분의 경우가 맞지만 딱 마지막 경우의 수에서 오류가 나더라고요.제 코드에서 틀린 점이 무엇일까요?