묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
환경 세팅 질문입니다.
안녕하세요. 강의에서 보여주셨던 것과는 start.spring.io 의 화면이 달라서, 강의를 따라가기 위해서는 어떻게 선택해야 하는지 여쭙고자 합니다.Project에서는 Gradle-Groovy를 사용하면 되는건가요?Spring Boot는 3.0.5로 해야할까요 2.7.10으로 해야 할까요java버전은 17이 좋을까요 11이 좋을까요? 버전에 따라 dependencies가 먹히거나 안먹히거나 하는거 같습니다.답변에 미리 감사합니다.
-
해결됨자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
정답오류가 있는것 같습니다.
안녕하세요 선생님다름이 아니라 제가 작성한 코드가 정답처리가 되었는데 이 코드는 정답이 되면 안되는 코드가 아닌가 해서 여쭤보고 싶어서 질문글 남깁니다.예를들면 첫번째 문제에서는 CBA 순서로 무조건 짜야하지만제 코드에서 str1 은 꼭 순서를 지켜야 하는 값이고str2는 C의 순서를 알 수 없는데 정답처리가 되어서 제가 작성한 코드가 제대로 정답이 맞는건지 궁금해서 질문글을 남깁니다!
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
HelloController 밒 hello.html 실행 오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)예{[질문 내용]여기에 질문 내용을 남겨주세요. 제 hello.html에는 강사님과 다르게 ${data}" 부분에 주황색 글씨로 표기가 안되고 HelloControlle에서 string hello 부분에도 주황색 글씨로 표기가 안되는데 어떤 오류가 있을까요..?
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
쿼리 최적화 관련 (직접 쿼리날리기, 엔티티를 통한 접근)
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]여기에 질문 내용을 남겨주세요.특정 엔티티에 접근을 하려고 할 때 1)직접 쿼리를 통해 접근 하는 방법, 2) 엔티티와 자바 메소드를 통해 접근하는 방법 중 어떤 것을 선택해야할까요?예를 들어 User엔티티와 Follow엔티티가 1대N으로 설정되어있다고 가정한다면. user.getFollows()를 한다면 Select 쿼리가 한 번 더 나가게됩니다. 이것도 user를 repository에서 가져올때 follows를 join fetch 해온다면 괜찮지만insert또는 delete할 때가 고민입니다Insert일 때1) cascade타입을 persist또는 all로 설정해둔다면user.getFollows.add(follow) 쿼리로 할 수 있습니다하지만 이렇다면 Select문, Insert문 쿼리가 두번이 추가가 됩니다2)하지만 followRepository.save(follow)를 한다면 insert문 한 번의 쿼리만 나가게 됩니다.delete일 떄1)user.getFollows.delete(follow)또한 Select문, delete문 두번의 쿼리가 나가지만2)followRepository.delete(follow)는 한 번의 쿼리가 나갑니다. 하지만 이마저도 이전에 follow를 검색하는 과정에서 쿼리가 더 나갈 수 있습니다ex) User user = userRepository.findByUserId(userId);Follow follow = user.get~~; // 삭제할 follow를 구별해내는 메소드user.getFollows.delete(follow)-> 쿼리가 총 4번이 나갈 수 있습니다하지만 이걸 followRepository에서@Query("delete ~~");void deleteByUserId(@Param("userId"))이 메소드를 한 번 실행시키는 걸로 축소한다면 단 한 번의 쿼리로 축소할 수 있습니다.이렇다면 웬만한 데이터에 접근할 때 직접 쿼리를 날리는게 좋지 않나요? 왜 엔티티상으로 데이터에 접근하는지 궁금합니다.그리고 만약에 특유의 이유가 있다고 하여도 (객체 지향의 이유 등등) 쿼리를 4번에서 1번으로 줄일 수 있는 것을 포기할 정도의 이유인지도 궁금합니다!
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
백준 17141 추가문제 입니다. 8-15번 피자문제
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 교수님교수님께서 알려주신 8-15번 풀이를 적용하여추가문제 백준 17141 연구소 2를 풀고 있습니다그런데 어떻게 풀어도 계속 메모리 초과가 나서 뭐가 문젠지 모르겠습니다...import java.util.*;class Pointo{ int y; int x; Pointo(int y, int x){ this.y=y; this.x=x; } }public class Main { static int n; static int m; static int[][] arr; static int[] pm; static int[] dx= {0,0,+1,-1}; static int[] dy= {+1,-1,0,0}; static ArrayList<Pointo> list=new ArrayList<>(); static int answer=Integer.MIN_VALUE; public static void main(String[] args) { Scanner scanner=new Scanner(System.in); n=scanner.nextInt(); m=scanner.nextInt(); arr=new int[n][n]; pm=new int[m]; for(int i=0; i<n; i++) { for(int j=0; j<n; j++) { arr[i][j]=scanner.nextInt(); if(arr[i][j]==2) { list.add(new Pointo(i,j)); } } } dfs(0,0); if(answer!=0)System.out.println(answer); else System.out.println("-1"); } public static void dfs(int val, int next) { if(val==m) { bfs(0); return; } else { for(int i=next; i<list.size(); i++) { //list에서 m개뽑자 pm[val]=i; dfs(val+1,i+1); } } } public static void bfs(int val) { int[][] copyarr=new int[n][n]; int[][] dis=new int[n][n]; Queue<Pointo> q=new LinkedList<>(); for(int i=0; i<pm.length; i++) { int l=pm[i]; int qx=list.get(l).x; int qy=list.get(l).y; q.add(new Pointo(qy,qx)); copyarr[qy][qx]=2; } //copyarr 벽 만들기 for(int i=0; i<n; i++) { for(int j=0; j<n; j++) { if(arr[i][j]==1) { copyarr[i][j]=1; } } } while(!q.isEmpty()) { Pointo p=q.poll(); for(int i=0; i<4; i++) { int nx=p.x+dx[i]; int ny=p.y+dy[i]; if(nx>=0 && ny>=0 && nx<n && ny<n) { if(copyarr[ny][nx]!=1) { copyarr[ny][nx]=2; dis[ny][nx]=dis[p.y][p.x]+1; q.add(new Pointo(ny,nx)); } } } } count(copyarr,dis); } public static void count(int[][] arr, int[][] dis) { int maxy=0; for(int i=0; i<n; i++) { for(int j=0; j<n; j++) { if(dis[i][j]>maxy) maxy=dis[i][j]; } } answer=Math.max(maxy,answer); }}
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
굳이 DTO를 join하지 않고 Member 객체를 만들어서 저장 후 넣는 이유
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]제목처럼 form이 DTO의 역할을 하는 것인데 굳이 도메인인 멤버 객체를 생성해서 setName하고 join에 넣는 이유가 궁금합니다. 사실 form에서 넘어온 데이터를 바로 join에 넣으면 새로운 객체를 만들지 않아도 되서 큰 자원은 아니지만 낭비하지 않을 수 있지 않나요?..! 저렇게 사용하는 이유에 대해서 고민해보았는데 DTO의 역할은 단순하게 데이터의 전달 역할만 하는 것이기 때문에 그 역할을 지키기 위해 영상에 나온 것과 같이 사용하는 것일까요?!
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
@NotNull과 nullable의 차이 및 EnumType 질문
둘 다 null을 허가하지 않는 다는 의미로 쓰이는 것 같은데어떤 차이가 있는 건가요 ? @EnumType 애노테이션을 제거하고 멤버를 추가해도 @EnumType.Ordinal 옵션을 적용 한 것처럼 Integer로 컬럼을 만들고 user = 0, admin=1 으로 잘 저장하던데 @EnumType은 어떤 역할을 하는 것인가요? EnumType.String이 필수로 써야할만큼 EnuType.Ordinal은 안좋은 옵션같은데 Default가 String이 아니라 Ordinal인 거는 따로 무슨 이유가 있는 건가요 ?
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
인텔리제이 mysql 콘솔창 질문
11강에서 부터 진행하시는 것을 보면 인테릴제이에서 mysql 콘솔창을 사용하시는 것으로 보입니다. 구글링 해보니까 커뮤니티 에디션에서는 사용이 불가한 것 같아서 위의 사진과 같이 비슷한 plug-in 사용해서 현재 작업중인데 강사님처럼 sql문 실행했을 때 결과값을 볼 수가 없습니다 ㅠㅠㅠ 해결 할 수 있는 방법이 없을까요??
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
영속성 컨텍스트의 성능적 이점이 있나요 ?
1차 캐시, 쓰기지연, 더티체킹(스냅샷), 지연로딩영속성 컨텍스트의 특징이 이정도인 거 같은데 더티체킹은 엔티티(객체)를 컬렉션에서 관리하듯이 도와줘서 수정측면에서 도움이 많이 되는 것 같긴 한데 1차캐시나 쓰기지연 로딩은 디비에 데이터 몇 번 덜 접근한다고 해서 큰 차이 없을 것 같은데 성능적인 측면에서 많이 도움 되나요?실무를 해본 적이 없어서 제가 잘 모르는 것일까요 ?
-
해결됨재고시스템으로 알아보는 동시성이슈 해결방법
RedissonLockStockFacade 트랜잭션시 실패 케이스
@Component class RedissonLockStockFacade( private val redissonClient: RedissonClient, private val stockService: StockService ) { @Transactional fun decrease(key: Long, quantity: Long) { val lock = redissonClient.getLock(key.toString()) try { val available = lock.tryLock(10, 1, TimeUnit.SECONDS) if (!available) { println("lock 획득 실패") return } stockService.decrease(key, quantity) } catch (e: Exception) { throw RuntimeException(e) } finally { lock.unlock() } } }RedissonLcokStockFacade 클래스의 decrease 메서드에 트랜잭션을 걸면 동일한 테스트 케이스가 실패하는데 이유를 알 수 있을까요?
-
미해결실전! 스프링 데이터 JPA
MemberRepositoryImpl 네이밍 관련 질문
강의에서 사용자 정의 리포지토리 인터페이스로 만들고, 이걸 구현한 클래스 이름은 리포지토리+Impl 이여야 된다고 하셨는데(강의에서는 MemberRepositoryImpl), 처음에 모르고 MemberRepositoryCustomImpl 로 구현 클래스 이름을 정했는데 테스트 코드도 잘 돌아가고 Query도 동일하게 나왔습니다 ...MemberRepositoryImpl 가 아니면 오류나야 되는 게 아닌가요 ? MemberRepositoryCustomImpl 로 했는데도 잘 작동한 이유가 궁금합니다 ... 네이밍이 틀려도 상관 없는건가요 ..?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
Maven을 많이 사용하나요 ?
DB 접근 2편이나 활용1편에서는 Gradle을 사용해서application.properties를 통해 h2를 설정하고 build.gradle을 통해서 라이브러리를 받아왔던 것 같은데 이번 강의에서는 xml파일들을 사용해서 상당히 어색한데요.최근에 Gradle을 많이 사용한다면 xml로 설정하는 방법을 따로 공부할 필요는 없을까요?
-
미해결스프링과 JPA 기반 웹 애플리케이션 개발
Authentication should not be null 오류 질문
안녕하세요. 백기선님. 좋은 강의 감사합니다. 강의를 따라가다 Authentication 오류 해결에 어려움을 겪고 있어 질문드립니다. test소스 authenticated()에서는 Authentication should not be null 에러가 발생하고 뷰단에서도 isAuthenticated() 체크되지 않습니다. 디버깅을 해보면 UsernamePasswordAuthenticationToken 생성 이후 Authentication 객체가 만들어진 것은 확인을 했는데, 어느 시점에서 객체를 못가져오고 null이 찍힙니다.스프링시큐리티에 대한 지식이 없어 그런지 난감합니다. 도움주시면 감사하겠습니다.Spring-Security6 사용중입니다.
-
해결됨나도코딩의 자바 기본편 - 풀코스 (20시간)
선생님 Final에서 2분 17초 질문 있습니다.
public void makeVideo(){} 에서 this.name 이라구 하는데 Camera 클래스에서의 name과 연결되는건가요? 메소드 오버라이딩인지 궁금합니다! showMainFeature()와는 다른건지 질문남깁니다.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
데이터 베이스가 자꾸 오류나요
해당 오류가 생기면서 데이터베이스 로그인이 되지 않습니다. 뭘 어떻게 해야하나요....
-
미해결스프링과 JPA 기반 웹 애플리케이션 개발
패키지 이동시 import 깨짐
강좌대로 패키지에 모두 이동시켯더니 기존 refactor로import경로가 바뀌었지만 모두 비활성화 상태가 되어서오류가 나버립니다. 무슨이유일까요?
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
생성자 사용하여 memberService와 memberRepository를 new 할때
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]안녕하세요, 고생이 많으십니다. 질문이 있어 글 남깁니다.스프링 입문 강의의 회원 서비스 테스트 강의 16:30 지점에서, memberService와 memberRepository 객체를 생성하기 위해 new를 할 때,MemoryMemberRepository memberRepository = new MemoryMemberRepository(); MemberService memberService = new MemberService(memberRepository);위와 같이 해 주지 않고,MemoryMemberRepository memberRepository; MemberService memberService; @BeforeEach public void beforeEach() { memberRepository = new MemoryMemberRepository(); memberService = new MemberService(memberRepository); }이렇게 해 주는 이유가, 각각의 테스트가 새로운 각각의 객체를 가지고 독립적으로 실행되어야 하기 때문인지 궁금합니다. 만약 그렇다면, AfterEach() 메서드를 사용하여 memberRepository를 계속 clear 해주고 있기 때문에 beforeEach()로 각 테스트마다 새로운 객체를 사용해 줄 필요가 없을텐데, 왜 beforeEach()를 사용하여 새로운 객체를 각 테스트 메서드 실행때마다 만들어 주도록 하는지도 궁금합니다.
-
미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
강의랑 똑같이 따라했는데요 도저히 해결이 안돼서 질문드립니다.
9번 16번째줄 phoneNumber가 중복된다고해서 커밋이 안되고 있습니다. 강의처럼 똑같이 따라했는데 어떤 것이 문제인건가요? 제 눈에는 도저히 안보여서 질문드립니다...
-
해결됨실전! 스프링 데이터 JPA
username 카멜케이스 질문
[질문 내용]별건아니고 그냥 궁금해서 그런건데,username에선 카멜케이스를 적용하지 않으시고,teamName에선 카멜케이스를 적용하시는데 이게 관례상 username은 한단어로 취급하고 그런게 있는건가요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
@ManyToOne이 외래키를 생성해준다고 이해해도 괜찮을까요??
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 김영한님 설명을 들어보면 @ManyToOne어노테이션이 다대일 관계에서 객체와 테이블을 매핑해준다고 하셧는데 , @ManyToOne이 사용되면 객체와 테이블을 매핑해줌과 동시에 테이블에서도 외래키를 생성해준다고 생각하면 맞을까요??