묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨스프링 DB 1편 - 데이터 접근 핵심 원리
SQLException 질문
Service코드가 JDBC에 의존적이라 스프링이 제공하는 PlatformTransactionManager 인터페이스에 의존하게 바꿨는데 그러면 SQLException 예외도 없어도 되나요 ?
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
connection total 개수에 대한 질문
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. @Testvoid dataSourceConnectionPool() throws SQLException, InterruptedException {//커넥션 풀링 : 히카리 풀 사용 HikariDataSource dataSource = new HikariDataSource(); dataSource.setJdbcUrl(URL); dataSource.setUsername(USERNAME); dataSource.setPassword(PASSWORD); dataSource.setMaximumPoolSize(10); //pool사이즈 최대 지정 dataSource.setPoolName("MyPool"); //pool이름 설정 useDataSource(dataSource); Thread.sleep(1000); //pool에 추가하는 것까지 log로 확인하기 위해서 지연시간 추가} 다음과 같이 코드를 작성하였는데 My Pool의 개수가 강의에서와 다르게 설정됩니다.setMaximumPoolSize을 10으로 맞췄는데도 다른 이유가 무엇인가요? Thread.sleep(1000);을 1000 -> 10000으로 늘리니 활성화되는 커넥션이 늘어나던데 이 시간과 관련있는건가요?
-
해결됨스프링 프레임워크는 내 손에 [스프1탄]
스프링 시큐리티 로그인 후 모달창 질문드립니다
(선생님 아래 댓글에 나름대로 해결책 적어놓았습니다!) 선생님 안녕하세요.기존 로그인 방식을 session에서 security로 바꾸면서 로그인에 성공하면 RedirectAttribute를 이용한 모달창 띄워주기는 어떻게 해야 하는지 고민됩니다.시큐리티 내부에서 /login.do 요청을 처리해주니 왠지 시큐리티 내부 필터에 설정을 해줘야 하나? 라는 생각이 듭니다.로그인에 실패하면 시큐리티에서 error를 파라미터를 넘겨주니, 로그인 성공 시 특정 파라미터를 1회성으로 넘겨주는 것이 있을까? 라는 생각도 듭니다.아니면.. 시큐리티로 로그인에 성공하는 순간 url경로를 설정하여 특정 컨트롤러에서 받아줘서 그곳에서 redirect를 해줘야 할까요? 아래의 사진은 기존 로그인 방식에서 RedirectAttributes의 addFlash를 이용한 참고사진입니다.감사합니다!
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
8분에 실행 테스트 하는데 뭐가 문제인지 모르겠어요
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 실행되다가 중간에 오류가 발생하는데 이게 어떤 오류인건지 잘 모르겠습니다.아시는 분 계실까요?
-
미해결Practical Testing: 실용적인 테스트 가이드
환경변수 관련되서 여쭤볼게 있습니다~
mock 테스트 중에환경변수(@Value)를 가져와야하는데,@SpringBootTest가 아니라서 환경변수를 못가져오고 있습니다.그래서 환경변수를 담은 변수가 null이 나오기 때문에 테스트를 못하고 있는데, 이럴 경우 어떻게 하시나요??일단 환경변수 대신, 생성자를 통해 해당 변수들을 받는 형태로 리펙토링했는데, 프로덕션 코드들을 테스트에 맞추는 거 같아서 약간 딜레마가 오고있어요.선생님께서는 이런 경우 어떻게 하시나요?1. 환경변수 이슈2. 프로덕션 코드를 테스트코드에 맞추는 리펙토링(2번은 수업에 있네요 ㅎㅎ)
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
gradle build 실패, intelij 빌드 성공 왜그런걸까요?
안녕하세요 스프링부트 3.0 이상 버전을 사용하고 있는 사람입니다.원래는 gradle로 잘 빌드하다가 오늘 갑자기 gradle빌드가 실패하네요그래서 혹시나 해서 build를 intelij로 바꿔보니깐 실행이 잘됩니다. 3.0이상버전부터는 gradle빌드로 해야한다고 하시는데 이렇게 하면 문제가 생길까요?왜그런걸까요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
AOP 시간 추출 실시간 반영
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요 강의 잘 듣고 있는 수강생입니다.AOP 적용 강의 6분30초 쯤 이나 그 이전에도 보면, 강사님이 localhost:8080 에서 회원목록 같은 곳 들어가실 때나 뭔가 접속할 때마다 실시간으로 인텔리제이에 START시간과 END시간이 반영이 되어서 나오는데 저는 그냥 이미지 처럼 처음 실행했을 때만 실행시간이 나올 뿐 그 이후부터는 아무것도 변화하지 않습니다.. 실시간으로 반영이 안되는 것 같아요 이유가 뭘까요? (TimeTraceAop부분은 강의노트와 똑같습니다. 혹시 몰라서 복붙했습니다)
-
미해결[NarP Series] MVC 프레임워크는 내 손에 [나프2탄]
마프시리즈가뭐에요??
새소식을 통해 오랜만에 새로운강좌가 출시된다는이야기를 알게되었습니다. 그중에 마프시리즈가 3월에 오픈한다고 들었는데 자바 스프링관련 강좌인지요?? 제가 알기론 강사님께서 스프링부트로 여러가지 기능구현을 가르치는 포토폴리오 강의 출시한다고 1년전에 말씀하신기억이있는데 그건가요??
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
중복회원, 회원가입 오류
[질문 내용]https://drive.google.com/file/d/1UqI2_8bN8k4yq1Zww3OVkDLQ_yS_tsPS/view?usp=sharing 오류를 gpt 와 함께 찾아보니.. Autowired 주입하려는 필드가 빈으로 정의되어 있지 않다고 하는것 같더군요.ㅠ 그래서 의존성 주입이 되지 않는다고 합니다. 더하여서 JdbcTemplateMemberRepository 에 Autowired 어노테이션이 되지 않는 이유도 알고싶습니다. + 스프링 오류 코드를 gpt에 돌려보고 어떤 코드인지 보는 저인데.. WARNING 뒤에 있는 것을 확인하고 오류를 찾으시는 걸까요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
엔티티 객체의 setter사용
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요?예[질문 내용]여기에 질문 내용을 남겨주세요.강의 12분에서 Member 객체를 만들고 setter를 사용하셨는데 엔티티의 setter는 지양해야되는 것으로 알고있습니다.createMember 와같은 정적팩토리 메서드 로 객체생성하는게 더 낫지않나요?
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
process()의 매개변수
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]비슷해 보이는 질문들을 보긴 했는데 아직 잘 이해가 안 돼서 질문드립니다. SpringMemberListControllerV1에선 리턴 타입은 ModelAndView이고, 매개변수는 아예 없는데SpringMemberSaveControllerV1에선 리턴 타입은 ModelAndView로 똑같지만 매개변수 request와 response가 있어서 SpringMemberListControllerV1와 다릅니다. 스프링 MVC - 실용적인 방식 강의를 들어 보니 인터페이스로 고정되어 있지 않고 유연하게 설계되어 있기 때문이라는 것은 알겠습니다. 그러면 메서드의 오버로딩처럼 많은 매개변수 케이스들을 일일이 등록해져 있는 것이 아니라,매개변수로 들어올 수 있는 값들이 정해져 있고, 그것들을 개발자가 자유롭게 조합해서 매개변수로 지정하면 스프링이 알아서 판단할 수 있는 건가요? +) 하나 더 궁금한 건, 리턴 타입도 ModelAndView나 String이 아닌 다른 거로 자유롭게 바꿀 수 있을까요? 아니면 이건 정해져 있나요?
-
미해결스프링 핵심 원리 - 기본편
빈 생명주기 콜백 시작 질문
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]빈 생명주기 콜백 시작 강의 17:38 설명을 보면객체와 생성과 초기화를 분리해서 생성자에 파라미터로 받는 것은 되도록이면 지양하라고 설명해주셨고예시로 setXXXX( 파라미터), setter를 사용하셨습니다. 바로 전 강의에서 의존관계 자동주입 @Autowired를 사용할 땐 생성자 초기화를 주로 하고수정자(setter)는 생성자 초기화를 사용하지 않을때 가끔 사용하라고 하셔서 두 내용이 머릿속에서 충돌하고 헷갈립니다!어떤 부분이 다른건가요? 제가 이해를 잘못한건지 궁금합니다. 답변 기다리겠습니다 감사합니다
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
@Transactional 업데이트 쿼리
엔티티 컬럼의 값을 수정할 때 save()를 안써도 JPA의 더티체킹 때문에 트랜잭션 커밋 시점에 업데이트 쿼리가 나간다고 알고 있습니다. @Transactional public void updateDeleteFlag(Long fileId) { File file = fileRepository.findById(fileId) .orElseThrow(() -> new EntityNotFoundException("해당 파일을 찾을 수 없습니다.")); file.changeDeleted(true); }위 코드에서 @Transactional 어노테이션을 제거하면 update 쿼리가 나가지 않아서 수정이 안되더라고요. 이건 트랜잭션 커밋 시점에 업데이트 쿼리가 나가는데 @Transcational 어노테이션을 달지 않으면 트랜잭션을 시작하지 않아 커밋도 없기 때문에 그런건가요? 1번의 내용이 맞을 때, @Transactional 어노테이션이 업데이트 메서드에 없다면, update 쿼리가 언제 나가는지 궁금합니다. update 쿼리가 나가지 않고 있다가 (JPA SQL저장소에 계속 머물다가) 다른 트랜잭션 (가령, 게시물 조회) 이 실행되고 커밋되는 시점. 이때 update 쿼리가 나가게 되는건가요?
-
해결됨Practical Testing: 실용적인 테스트 가이드
TestFixture에 질문이 있습니다.
테스트에서 사용하는 빌더 매서드를 한 곳에 모아놓으면 오히려 유지보수가 어렵고 매번 새롭게 만들게 된다고 하셨습니다. 그리고 매서드를 만들때 테스트 검증이나 테스트에 필요한 인수만 외부로 들어내서 테스트의 목적을 명확하게 들어내는게 좋다고 하셨는데 만약 테스트 케이스마다 외부로 들어내는게 제각각 다른 경우에 하나의 테스트 클래스에 다양한 빌더 매서드들이 생기게 된다면 그것도 관리하는데 어려움이 발생할 거라 생각합니다. 이런 경우에는 하나의 빌더 매서드만 생성해서 사용하시나요 ?아니면 그렇게 많이 발생할 일이 없기 때문에 매번 테스트에 필요한 빌더 매서드들을 만드시나요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
변경감지 관련 질문
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]변경 감지 코드로 수정 메서드를 작성하던 중 setter를 없애고 ItemService의 updateItem() 안의 setter들을 대체하기 위해public void updateItem(String name, int price, int stockQuantity){ this.name = name; this.price = price; this.stockQuantity = stockQuantity; }이 코드로 Item클래스 안에 작성했습니다.@Transactional public void updateItem(Long id, String name, int price, int stockQuantity) { Item item = itemRepository.findOne(id); item.updateItem(name, price, stockQuantity); // item.setName(name); // item.setPrice(price); // item.setStockQuantity(stockQuantity); }이렇게 사용하기 위해서 입니다.하지만 이것도 결국은 setter인데 이렇게 작성하는 게 올바른 방법일까요? 더 좋은 코딩 방법이 있는 지 궁금합니다.
-
미해결스프링 부트 - 핵심 원리와 활용
스프링 적용부터 오류가 납니다.
스프링 부트 섹션2 수업 듣고 있었는데 스프링을 적용하면서 부터 이런 오류가 납니다. 21-Jan-2024 15:54:59.610 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent 프로덕션 환경들에서 최적의 성능을 제공하는, APR 기반 Apache Tomcat Native 라이브러리가, 다음 java.library.path에서 발견되지 않습니다: [C:\Program Files\Java\jdk-17\bin;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\Program Files (x86)\NAT Service;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Program Files\NVIDIA Corporation\NVIDIA NvDLISR;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;C:\Program Files\nodejs\;C:\Program Files\Git\cmd;C:\Program Files\Java\jdk-17\bin;C:\Users\LNH\AppData\Local\Microsoft\WindowsApps;C:\Users\LNH\AppData\Local\Programs\Microsoft VS Code\bin;C:\Users\LNH\AppData\Roaming\npm;C:\Program Files\nodejs;C:\Program Files\JetBrains\IntelliJ IDEA 2023.2.2\bin;;C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2023.2.2\bin;;C:\Users\LNH;C:\Program Files\Java\jdk-17\bin;;C:\Program Files (x86)\ESTsoft\ALSee\x64;.]21-Jan-2024 15:54:59.864 INFO [main] org.apache.coyote.AbstractProtocol.init 프로토콜 핸들러 ["http-nio-8080"]을(를) 초기화합니다.21-Jan-2024 15:54:59.883 INFO [main] org.apache.catalina.startup.Catalina.load [507] 밀리초 내에 서버가 초기화되었습니다.21-Jan-2024 15:54:59.925 INFO [main] org.apache.catalina.core.StandardService.startInternal 서비스 [Catalina]을(를) 시작합니다.21-Jan-2024 15:54:59.926 INFO [main] org.apache.catalina.core.StandardEngine.startInternal 서버 엔진을 시작합니다: [Apache Tomcat/10.1.18]21-Jan-2024 15:54:59.940 INFO [main] org.apache.catalina.startup.HostConfig.deployDescriptor 배치 descriptor [C:\Users\LNH\.SmartTomcat\server\server\conf\Catalina\localhost\ROOT.xml]을(를) 배치합니다.21-Jan-2024 15:55:00.118 SEVERE [main] org.apache.catalina.startup.HostConfig.deployDescriptor 배치 descriptor [C:\Users\LNH\.SmartTomcat\server\server\conf\Catalina\localhost\ROOT.xml]을(를) 배치하는 중 오류 발생java.lang.IllegalStateException: 자식 컨테이너를 시작하는 중 오류 발생at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:686)at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:658)at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:712)at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:643)at org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:1939)at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:123)at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:536)at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:426)at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1661)at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:309)at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:114)at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:402)at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:345)at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:893)at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:845)at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171)at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1332)at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1322)at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:145)at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:866)at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:240)at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171)at org.apache.catalina.core.StandardService.startInternal(StandardService.java:433)at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171)at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:917)at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171)at org.apache.catalina.startup.Catalina.start(Catalina.java:795)at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)... 이런 오류가 나고 404에러가 뜹니다. 이것저것 시도해봤지만 혼자서는 해결이 안 돼서요 ㅠㅠㅠㅠ
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
TransactionContext 관련 문의
[질문 내용]안녕하세요.@Rollback(false) 어노테이션을 달기 전에도 TransactionContext 로그가 뜨지 않는 것은 어떤 문제인가요?? 어노테이션 대신에 autowired한 엔티티매니저 flush를 해도 로그는 나타나지 않습니다.감사합니다.
-
해결됨스프링 DB 2편 - 데이터 접근 활용 기술
15:45 쯤에 "%"사용하는 이유
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]findByItemNameLike("%"+itemName +"%")여기에서 "%"를 넣어서 오류를 해결했는데 이게 잘 이해가 안됩니다.어디 부분에서 다시 공부할 수 있을까요??
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
name = "", mappedby ="" 등에서 자동완성
강의영상을 보다 보면 제목에 적어 놓은 name = "" 의 " " 영역에 ctrl+space로 자동완성을 띄우셔서 클래스 같은 걸 바로 작성하도록 하시는데 혹시 어떻게 세팅을 해야 가능할까요? 다른 건 자동완성이 뜨는데 해당 " " 부분들은 자동완성이 되지 않아서요. JPA FACET 설정도 해놨습니다.
-
해결됨스프링 DB 2편 - 데이터 접근 활용 기술
@Transactional의 유무에 따른 프록시 생성이 궁금합니다
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]7:20 쯤에 @Repository 제거 시에도 프록시가 적용되는데영한님께서는 @Transactional때문에 프록시가 동일하다고 하셨는데 트랙잭션 커밋이 된 상황이라서 그렇게 말씀하신 건가요?@Transactional의 유무와 프록시 생성에 연관관계가 궁금해요