묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
실패 - 3가지 오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)예 예 예[질문 내용]여기에 질문 내용을 남겨주세요.3가지 오류가 있다는데 하란대로 했는데 왜 안되는지 모르겠어요. 시작부터 난관이라 너무 스트레스받네요..C:\Program Files\spirngboot\pulsar-spring\.gradle\7.6.1\fileChanges\last-build.bin (지정된 경로를 찾을 수 없습니다)Failed to create parent directory 'C:\Program Files\spirngboot\pulsar-spring\.gradle' when creating directory 'C:\Program Files\spirngboot\pulsar-spring\.gradle\vcs-1' Could not update C:\Program Files\spirngboot\pulsar-spring\.gradle\7.6.1\fileChanges\last-build.bin 이렇게 세가지가 나옵니다. 어떻게 해야할까요.
-
해결됨실전! 스프링 데이터 JPA
단건 조회 처리 방식에 대해
단건 조회는 결과가 없을 경우 예외 발생 대신 null을 반환한다고 하였는데이 null을 어떤 방식으로 처리하는게 좋은 방법인가 싶어 질문 드립니다.질문 드리고 싶은 방법은 아래와 같이 2가지입니다.둘 중 어느 방식을 사용하는게 더 좋을까요? if문을 통해 null일 시에 런타임 예외 터트리기Member member = memberRepository.findById(10L) if (member == null) { throw new CustomException("찾고자 하는 멤버가 없습니다."); } 반환 타입을 Optional로 감싸 반환하기.Optional<Member> member = memberRepository.findById(10L).orElseThrow(() -> new CustomException("찾고자 하는 멤버가 없습니다."));
-
미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
아스키코드 질문 있습니당
String[][] seats3 = new String[10][15]; char ch = 'A'; // 아스키코드 넣기 for (int i = 0; i < seats3.length; i++) { for (int j = 0; j < seats3[i].length; j++) { seats3[i][j] = String.valueOf(ch) + (i + 1); // 아스키 코드를 문자열로 바꿔서 } ch++; } 여기서 ch라는 변수에 넣은 아스키 코드는 기본적으로 문자열로 넣은걸로 알고있는데 반복문 안에 들어가면 정수형으로 자동 형변환 되는건가용? 왜 에러가 뜨고 메소드를 써야하는지 더 자세한 설명이 궁금합니다 원리가 따로 있는건지....seats[i][j] 여기는 각각 index번호가 들어가야 하지 않나용
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
team이 존재하지않는 member가 존재할때 nullpointerExc
Team team = new Team(); team.setName("TeamA"); em.persist(team); Team team2 = new Team(); team2.setName("TeamB"); em.persist(team2); Member member1 = new Member(); member1.setUsername("회원1"); member1.setTeam(team); em.persist(member1); Member member2 = new Member(); member2.setUsername("회원2"); member2.setTeam(team); em.persist(member2); Member member3 = new Member(); member3.setUsername("회원3"); member3.setTeam(team2); em.persist(member3); Member member4 = new Member(); member4.setUsername("회원4"); member3.setTeam(null); em.persist(member4); em.flush(); em.clear(); List<Member> lazyLoadingResult = em.createQuery("select m from Member m ", Member.class).getResultList(); for (Member member : lazyLoadingResult) { System.out.println("member = " + member.getUsername() + ", " + ((member.getTeam().getName() == null) ? "null" : member.getTeam().getName())); }위와 같이 team이 존재하지 않는 Member 데이터를 추가한 뒤에 inner join을 하게될 경우nullpointerException이 발생합니다.객체 탐색을 활용하면 발생하게 되는 문제로 이해는 했지만 JPQL을 사용하였을 때 이에 대한 해결책으로는 어떤 게 있을까요?3항연산자로 사용 처리를 해보려고 하였으나 객체 탐색이기 때문에 처리가 되지 않고 있습니다.case문을 활용할 수 밖에 없을까요?
-
미해결재고시스템으로 알아보는 동시성이슈 해결방법
수행 시간 비교 관련 질문
안녕하세요 좋은 강의 해주셔서 감사합니다.강의를 전부 듣고 각 방식의 성능이 궁금하여 이를 찍어보았는데 조금 의아한 결과가 나와서 질문 드립니다.동시성 처리 안한 버전 256 mssynchronized 버전 962 ms비관적락 468 ms낙관적락 1441 msNamedLock 807 msLettuceLock 4184 msRedissonLock 1137 ms 몇번씩 테스트해본 결과 대략 위와 같은 정도의 성능이 나옵니다. 처음 생각하기로는 Redis 사용 방식이 비교적 빠를것이고, DB에 락을 거는 방식이 Redis에 비해 느리지 않을까 했는데 오히려 반대로 DB에 락을 거는게 빠르고 Redis를 사용하는 방식이 느린것을 확인할 수 있었습니다. 혹시 이러한 결과가 나오게 된 이유를 여쭤볼 수 있을까요? 감사합니다.
-
해결됨Java/Spring 주니어 개발자를 위한 오답노트
테스트 하기 쉬운 코드에서 테스트의 범위?
영상에서 종종 "테스트 하기 좋은 코드는 잘 설계된 코드일 것이다." 라는 말을 해주셨습니다. 어떤 테스트를 기준으로 테스트 하기 좋은 코드가 잘 설계된 코드일까요?- 예를 들어 단위 테스트, 통합 테스트, 인수 테스트가 존재한다 하면, 세가지 테스트 중 어떤 테스트를 테스트하기 편한 코드를 기준으로 잡는게 좋을까요?
-
해결됨Java/Spring 주니어 개발자를 위한 오답노트
스프링에서 서비스 레이어(Apllication Layer) 테스트에 대한 질문입니다.
제 개인 프로젝트를 진행하면서, 서비스 레이어에서는 단순히, 도메인 레이어에 존재하는 다른 객체들을 호출해서 비즈니스 로직을 처리하는 책임만을 담당하다보니, 서비스 레이어에 존재하는 객체를 테스트하는 코드를 작성하게 되면 대부분 테스트할 내용이, 메소드의 실행순서를 올바르게 실행해줬는가? 와 같은 부분만 테스트할게 없었는데 이 부분이 제가 잘못 설계한 부분이 아닌 오히려, 객체간의 책임을 잘 나누고 서비스 레이어의 책임에 맞게 코드를 작성한것 같다는 확신을 강의를 보고나서 알수 있었습니다 좋은 강의 감사합니다😊
-
미해결윤재성의 만들면서 배우는 Spring MVC 5
Java 설정 방식에서
안녕하세요.JAVA 설정 방식에서 아래와 같이 의존성을 주가하거나<dependency> <groupId>com.oracle.database.jdbc</groupId> <artifactId>ojdbc6</artifactId> <version>11.2.0.4</version></dependency>WEB-INF/lib/폴더에 ojdbc6.jkar 파일을 직접 넣어서build path 에서 설정하고 해도모두 아래와 같은 오류가 발생합니다.SEVERE: 경로 [/MyBatisJava]의 컨텍스트 내의 서블릿 [dispatcher]을(를) 위한 Servlet.service() 호출이, 근본 원인(root cause)과 함께, 예외 [Request processing failed; nested exception is org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException:### Error updating database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLException: Cannot load JDBC driver class '${db.classname}xml 방식의 설정에서는 똑같이 설정했는대도 (설정과 소스 파일 모두 Java 설정 방식에서와 똑같이 작성했습니다.) 잘 됩니다.어떻게 하면 JAVA 설정 방식에서도 정상적으로 DB 연결이 이루어질 수 있는지요?
-
해결됨스프링 시큐리티
invalidSessionUrl, expiredUrl
아래와 같이 최대 허용 가능 세션 수를 설정하고,테스트 해보려고 했는데 /invalid 나 /expired 페이지로 이동하지 않고 /login 페이지로 이동하는데 뭐가 문제인지 모르겠습니다.http .sessionManagement() .invalidSessionUrl("/invalid") .maximumSessions(1) .maxSessionsPreventsLogin(true) // false도 테스트 해봄 .expiredUrl("/expired");
-
미해결스프링 시큐리티
파라미터 userId, passwd도 디폴트인가요??
파라미터 userId, passwd도 디폴트인가요??
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
안녕하세요 강사님 인텔리제이 run을 하면 뜨는 오류때문에 문의드립니다.
이렇게 경고창이 뜨는데요 제가 며칠 쉬다가 강의를 들어서 어디 부분에서 오류가 잡히는지 전혀 감이안와서요 ㅠㅠ딱히 경고창 뜨는 부분도 없고.. 부탁드리겠습니다!
-
미해결자바 코딩테스트 - it 대기업 유제
미로의 최단거리 탐색(L)질문 드립니다.
아래와 같이 작성했는데, 답이 0이 나옵니다.잘못된 부분이 있을까요?? import java.util.*; import java.io.*; class Main { public static int n,m,L; public static int[][] map ,dist; public static boolean[][] visit; public static int[] dx = {0,0,1,-1}; public static int[] dy = {1,-1,0,0}; public int solution(int[][] board){ int answer = 0; n=board.length; m=board[0].length; map = new int[n][m]; dist = new int[n][m]; visit = new boolean[n][m]; L=0; for(int i=0; i<n;i++) { for(int j=0; j<m; j++) { map[i][j] = board[i][j]; } } bfs(0,0); return answer; } public static int bfs(int r,int c) { Queue<int[]> q =new LinkedList<>(); q.offer(new int[] {r,c}); //0,0대입 visit[r][c] = true; while(!q.isEmpty()) { L++; int len = q.size(); for(int i=0; i<len; i++) { int[] tmp = q.poll(); int nowx = tmp[0]; int nowy = tmp[1]; for(int j=0;j<4;j++) { //상하좌우 탐색 int nx = nowx+dx[j]; int ny = nowy+dy[j]; if(nx>=0 && ny>=0 && nx<n && ny<m) { //맵 범위안이고 if(!visit[nx][ny] && map[nx][ny]==0) { //다음 노드가 방문안햇고, 방문할 수 있다 dist[nx][ny]=L; q.offer(new int[] {nx,ny}); visit[nx][ny] = true; } } } } } return dist[n-1][m-1]; } public static void main(String[] args){ Main T = new Main(); int[][] arr={{0, 0, 0, 0, 0, 0, 0}, {0, 1, 1, 1, 1, 1, 0}, {0, 0, 0, 1, 0, 0, 0}, {1, 1, 0, 1, 0, 1, 1}, {1, 1, 0, 1, 0, 0, 0}, {1, 0, 0, 0, 1, 0, 0}, {1, 0, 1, 0, 0, 0, 0}}; System.out.println(T.solution(arr)); } }
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
교재 구매 문의
안녕하세요. jpa 강의 듣고있는데요 jpa교재도 있더라구요. 근데 그 책이 좀 오래된것 같은데 지금 구매해도 상관없을까요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
프로젝션 임베디드 타입(Address) 쿼리호출 안되는 문제
아래와 같이 쿼리를 구성했는데select쿼리가 나가지 않습니다.어디가 잘못되었는지 궁금합니다..//임베디드 타입 프로젝션(Address) Address address = new Address(); address.setCity("경기도 땡땡"); address.setStreet("땡땡동"); address.setZipcode("00000"); Product product = new Product(); product.setName("제발되라"); em.persist(product); Order order = new Order(); order.setOrderAmount(0); order.setAddress(address); order.setProduct(product); em.persist(order); em.flush(); em.clear(); em.createQuery("select o.address from Order o", Address.class) .getResultList(); 아래와 같이 mapped가 안됬다고 오류가 뜹니다..
-
미해결실전 JSP (renew ver.) - 신입 프로그래머를 위한 강좌
프로젝트 생성시 javascript resources가 생성안됨
해당 폴더가 없어서 여기저기 뒤져봤는데https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=nateen7248&logNo=220684958878이 방법으로도 안되더라구요2번에 javascript 보면 자동으로 체크되어있어서 체크 해제하고 적용하고체크 한다음에 다시 적용하고 이클립스 껐다 켜봐도 안나타나요이클립스는 2020-06버전이고 eclipse IDE for enterprise hava developers 로 받았는데뭐가 문제인걸까요
-
해결됨재고시스템으로 알아보는 동시성이슈 해결방법
프록시 객체가 생성될 때 synchronized 없이 메서드가 생성되는 것이 맞을까요?
먼저 좋은 강의 감사드립니다. 프록시 객체에서 이해가 안 가는 부분이 있어 질문드립니다.@Transactional을 사용하면 프록시 방식의 AOP로 동작하는 것은 이해하고 있습니다. 스프링 부트는 CGLIB 방식으로 프록시 객체를 생성하므로, StockService를 상속하는 StockServiceProxy가 만들어질 때 StockServiceProxy.decrease()에도 synchronized 키워드가 붙어있을 것이라고 생각했습니다. 그런데 강사님께서 TransactionStockService 를 예로 드실 때 synchronized 를 안 붙이신 걸 보니 프록시 객체가 생성될 때는 synchronized 가 안 붙는 건가? 라고 생각들었습니다.Q. 프록시 객체가 생성될 때 synchronized 없이 메서드가 생성되는 것이 맞을까요?읽어주셔서 감사합니다 :)
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
JPA 특징 중 자동 업데이트 관련
주문 서비스 개발 부분 강의를 듣다가 궁금한 점이 있어 질문드립니다. 주문 취소(OrderService.cancelOrder) 부분에서order.cancel() 만 작성하면 JPA 특징으로 인해, 데이터 업데이트 관련 쿼리 로직 없이 자동으로 업데이트 된다고 하셨는데요. 주문 생성(OrderService.order)의 EntityManager 가 사용된 orderRepository.save(order); 와 혼동이 와서 질문 남깁니다. 주문 취소 order.cancel() 메서드를 타면서 엔티티의 값(status, count 등) 변경 내역이 자동으로 업데이트 되는 것이라고 하면, 주문 생성도 Order.createOrder(member, delivery, orderItem); 를 타면서 엔티티의 값들을 설정하기 때문에 orderRepository.save(order); 를 사용하지 않아도 되는게 아닌가 라는 생각이 듭니다. 제가 JPA 를 잘 몰라서 혼란이 오는 것 같은데.. 쿼리는 직접 작성하지 않아도 업데이트/저장/삭제 등 DB 조작이 일어나려면 EntityManager 를 통해야 된다고 생각하고 있었습니다. 주문 취소는 EntityManager 없이 업데이트 되고, 주문 생성은 EntityManager의 persist() 를 사용해서 저장하는 것 이 2가지 차이점에 대해서 설명 부탁드립니다! 감사합니다 :)
-
미해결Java/Spring 주니어 개발자를 위한 오답노트
Repository 대신 Reader / Writer 사용 질문있습니다!!
안녕하세요.회사내에서 Reader, Writer 개념을 도입하여 사용하고 있습니다. 흐름은 아래와 같습니다controller -> service -> reader or writer -> repository제가 궁금한것은 JPA를 사용하고 있어 단건데이터 수정시 더티체킹을 하고 있는데요.writer내에서 더티체킹을 위한 엔티티를 조회하는거 조차 하면 안되는지 궁금합니다!안된다면 reader에서 엔티티를 조회하고 서비스로 반환한 다음 해당 엔티티를 writer로 넘겨줘야 하는지요..!!아 그리고 해당 강의가 지식공유자 답변 미제공 강의더라구요 ㅠㅠ 답변이 의무는 아니시지만 선생님의 지구 내핵 같은 깊은 배려심으로 답변을 해주시는거신지요.. 한줄기 빛 같은 강의(강의보다 시력 0.2 감소됨) 감사드립니다.
-
미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
instanceof의 의미
안녕하세요 선생님.다형성 수업 중if (factoryCam instanceof FactoryCam){ } ;부분의 필요성이 궁금합니다.어짜피((FactoryCam)speedcam).detecFire();와 같은 코드는 실행이 불가능한데다형성 수업 중 적어주신 if 문 내용과instanceof 의 쓰임이 왜 필요한지, 어떤 의미를가지는지 궁금합니다.감사합니다.
-
미해결실전! 스프링 데이터 JPA
NoSuchElementException: No value present 오류가 납니다ㅠㅠ
@RequiredArgsConstructor @RestControllerpublic class MemberController { private final MemberRepository memberRepository; @GetMapping("/members/{id}") public String findMember(@PathVariable("id") Long id) { Member member = memberRepository.findById(id).get(); return member.getUsername(); } public void init() { memberRepository.save(new Member("userA")); } 2023-06-17T14:29:55.066+09:00 DEBUG 6856 --- [nio-8080-exec-1] org.hibernate.SQL :selectm1_0.member_id,m1_0.age,m1_0.created_by,m1_0.created_date,m1_0.last_modified_by,m1_0.last_modified_date,m1_0.team_id,m1_0.usernamefrommember m1_0wherem1_0.member_id=?2023-06-17T14:29:55.068+09:00 INFO 6856 --- [nio-8080-exec-1] p6spy : #1686979795068 | took 0ms | statement | connection 4| url jdbc:h2:tcp://localhost/~/datajpaselect m1_0.member_id,m1_0.age,m1_0.created_by,m1_0.created_date,m1_0.last_modified_by,m1_0.last_modified_date,m1_0.team_id,m1_0.username from member m1_0 where m1_0.member_id=?select m1_0.member_id,m1_0.age,m1_0.created_by,m1_0.created_date,m1_0.last_modified_by,m1_0.last_modified_date,m1_0.team_id,m1_0.username from member m1_0 where m1_0.member_id=1;2023-06-17T14:29:55.071+09:00 INFO 6856 --- [nio-8080-exec-1] p6spy : #1686979795071 | took 0ms | commit | connection 4| url jdbc:h2:tcp://localhost/~/datajpa;2023-06-17T14:29:55.074+09:00 ERROR 6856 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: java.util.NoSuchElementException: No value present] with root causejava.util.NoSuchElementException: No value presentat java.base/java.util.Optional.get(Optional.java:143) ~[na:na]at study.datajpa.constoller.MemberController.findMember(MemberController.java:18) ~[classes/:na]at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na]at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:207) ~[spring-web-6.0.9.jar:6.0.9]at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:152) ~[spring-web-6.0.9.jar:6.0.9]at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118) ~[spring-webmvc-6.0.9.jar:6.0.9]at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:884) ~[spring-webmvc-6.0.9.jar:6.0.9] http://localhost:8080/members/1에 userA가 나와야 하는데 Whitelabel Error Page가 뜨고 위와 같은 오류가 나옵니다.