묻고 답해요
156만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
정적화면 제공하는 상황
좋은 강의 감사합니다 !매번 똑같은 화면(안내문구나 안바뀌는 정보들?)을 제공할 땐 서버측에서 타임리프 사용하여 랜더링해주면 편한거고, 그 외에 정보가 매번 바뀌는 등 동적인 상황에선 클라이언트 측에서 랜더링하는게 좋다 이게 맞는거죵?? 현업에서도 이런게 어느정도 나뉘어있나요? A는 서버에서 타임리프로 내려주세요~ B는 클라이언트에서 CSR하세요~ 이런게 ??현업에서도 백엔드측에서 타임리프를 사용하여 SSR한다면 백엔드 개발자도 타임리프 관련 문법(html 등)을 어느정도 알아야 하나요?
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
자바와 스프링 버전 변경 방법
수업에 사용되는 파일의 스프링 버전을 변경하려면 어떻게 해야하나요?버전이 17일 때는 한글이 나오는데 그 외의 버전은 한글이 깨져서 나옵니다ㅠㅠ수업에 사용되는 파일의 버전은 자바 11, 스프링 2.4.4입니다.
-
미해결스프링 프레임워크는 내 손에 [스프1탄]
Lomkob API 관련
혹시 지금은 pom.xml에 lombok 의존성만 추가해도 쓸 수 있는 거 같은데 맞나요?? eGovFrame-4.2.0 버전 입니다.
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
세션에 보관하면 안되는 정보
세션 하이재킹이란 게 세션 id가 담긴 쿠키를 탈취하는 것인데, 이때 세션에 민감한 정보가 보관된 상태라면 사용자에게 노출할 가능성이 있어서 보관하면 안되는 것인가요?member_id와 같은 pk 값은 세션에 보관해도 되나요? (현재 레디스 세션을 사용 중입니다)
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
afterCompletion()은 완전히 응답이 나가고 난 이후에 호출된다는 의미
[질문 내용]강의에서 afterCompletion()은 완전히 응답이 나가고 난 이후에 호출된다고 하신 의미가 궁금합니다.아래 그림으로 생각하면, 클라이언트에게 원래 보내고자 하는 응답이 WAS를 통해 클라이언트 쪽으로 보내진 다음, 그다음에 또 afterCompletion()이 호출되면서 예외가 WAS 쪽으로 보내진다는 의미인 건가요? 만약 afterCompletion() 코드 내에서 response에 뭔가를 넣어서 보내려고 하면, 클라이언트 쪽으로 원래 응답 + afterCompletion()으로 생긴 응답 2개가 보내지는 건가요? 제가 잘못 이해한 것 같아서 질문드립니다! +) 그림에서 X 그림이 총 4개인데 postHandle()에 있는 X는 그냥 postHandle()이 호출 안 된다는 의미로의 X이고, 나머지는 예외를 그냥 X라는 그림으로 표현했다고 생각하면 되는 거죠? X를 예외라고 생각하면 될 것 같았는데 postHandle()에도 있으니깐 postHandle()에도 예외가 전달되는 거처럼 보여서, 혹시 몰라서 질문드립니다!
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
잘 실행되다가 갑자기 빌드 오류가 발생했습니다
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]Execution failed for task ':ServletApplication.main()'.> Process 'command 'C:\Program Files\Java\jdk-17\bin\java.exe'' finished with non-zero exit value 1* Try:> Run with --stacktrace option to get the stack trace.> Run with --info or --debug option to get more log output.> Run with --scan to get full insights.> Get more help at https://help.gradle.org.Deprecated Gradle features were used in this build, making it incompatible with Gradle 9.0.You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.For more on this, please refer to https://docs.gradle.org/8.8/userguide/command_line_interface.html#sec:command_line_warnings in the Gradle documentation.BUILD FAILED in 2s3 actionable tasks: 2 executed, 1 up-to-date 어플리케이션 실행 하면 이런 오류가 발생하면서 실행이 안됩니다.어떻게 해결할 수 있을까요
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
model.addAttribure 에러 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.스프링 입문 2번째 강의 view 환경설정 수강중인데 다음과 같이 에러가 납니다.
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
데이터 접근 예외 직접만들기 코드 질문있습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. public void create(String memberId){ try{ repository.save(new Member(memberId,0)); log.info("saveId = {}",memberId); }catch(MyDuplicateKeyException e){ log.info("키 중복, 복구 시도"); String retryId = generateNewId(memberId); log.info("retryId = {}",retryId); repository.save(new Member(retryId,0)); }catch(MyDbException e){ log.info("데이터 접근 계층 예외",e); throw e; } } private String generateNewId(String memberId){ return memberId + new Random().nextInt(10000); }현재 이런식으로 중복된 Id가 있다면 그 뒤에 랜덤한 숫자를 덧붙여서 새로운 Id를 만들어서 재시도 하는것으로 이해했습니다.사실 완전 중복되는것을 막으려면 실제로는 UUID같은것을 생성하면 된다고 생각하지만..이 문제의 경우에서, 새롭게 만든 Id마저도 중복이 되면 오류가 나는것을 확인했습니다.만약 예외가 발생해서 해당 예외를 복구하기위해 재시도를 했으나 그것마저도 실패하는 경우에는 catch구문안에서 또 try~catch를 해야하는건가요?.. 어떤 방법이 있는지 궁금합니다.읽어 주셔서 감사합니다
-
해결됨스프링 DB 2편 - 데이터 접근 활용 기술
정상처리 예외반환
테스트코드에서 정상처리 되었을때 예외를 반환하는데이 예외는 service에있는 로직을 호출하면 잔고부족 때문에 메서드 자체에서 예외를 던진 것으로 알고있습니다.근데 만약 테스트에서 테스트 코드가 아니라 진짜 사용을 하는 사용자라면 이 던진 예외는 어떻게 처리가 되는것인가요 ??그리고 왜 정상로직에서는 예외를 던지고 잔고부족로직에서는 잡는지 궁금합니다. 정상로직에서는 잡으면 안되는 것인가요 ?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
if 구문에서 return 사용과 관련한 질문입니다.
강의 17:18 쯤에 나오는@Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("FrontControllerServletV1.service"); // / front-controller/v1/members String requestURI = request.getRequestURI(); ControllerV1 controller = controllerMap.get(requestURI); if (controller == null) { response.setStatus(HttpServletResponse.SC_NOT_FOUND); // 404 return; } controller.process(request, response); }이 코드에서 if 구문 내부에 return만 사용하셔서 탈출하도록 하신거같은데 return response.setStatus(HttpServletResponse.SC_NOT_FOUND); 라고 표현해도 상관없을까요?=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
뷰를 찾을때
@RequestMapping("/response-view-v2") public String responseViewV2(Model model) { model.addAttribute("data", "hello"); return "response/hello"; } response/hello 를 찾을 때, 정적 리소스에서 먼저 찾은다음 없으면, 동적에서 찾는걸로 순서가 정해져 있나요? 아니면 response/hello 가 정적인지 동적인지 판별하고 정적 또는 동적 리소스 폴더 아래에서만 찾는건가요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
소스코드 받을 수 있나요
자바강의처럼 소스코드 받아보고 싶은데 혹시 업데이트 해 주실 수 있으신가요? 만약 안된다면 이유가 뭘까요
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
db, jdbc, jpa 등 관계 정리 문의
현재 트랜잭션관하여 강의를 듣고있는 중입니다. jdbc 트랜잭션 코드랑 jpa 트랜잭션 코드랑 다르다고 하셨는데 이 부분에서 관계정리가 안되거 같아 질문드립니다.위의 사진처럼 이해하면 되나요?? jpa에서 자체적으로 데이터소스를 관리하는지 jdbc 트랜잭션 코드라고 설명을 해주셨는데 여기서 jdbc가 의미하는게 데이터소스 코드를 의미하는지 위의 두개의 질문도 궁금합니다.
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
핸들러 조회할 때
이전 강의까지 다수의 @Controller가 존재했는데, 요청된 url로 가장 먼저 RequestMappingHandlerMapping이 등록된 url을 찾는 방법이 어떻게 되나요? @RequestMapping(url)도 빈으로 등록되어서 찾는건가요? 아니면 모든 @Controller 빈 을 무작위로 조회하고 그 안의 요청과 맞는 @RequestMapping(url)을 찾으면 그 @Controller의 클래스를 handler로 매핑하는 방식인가요?
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
의존관계주입
공부를하다가 제대로 이해하고있는건지 확인하고싶어 질문드립니다!JDBC템플릿도 그렇고JPA에서 의존관계주입시, 리포지토리안에서 JPAQueryFactory를 생성해 엔티티매니저를 주입받아 사용합니다.지금은 config에서 의존관계설정을 다하는데 이걸 스프링부트가 해주게되면 스프링컨테이너에 올라가있는 리포지토리,서비스,컨트롤러를보고 적절하게 생성자 파라미터에있는 이 엔티티매니저를 생성해 주입해주는것인가요??
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
HashMap을 사용한 MemoryItemRepository에서 순서 보장 문제와 테스트 실패 가능성 질문
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요, "프로젝트 구조 설명3 - 테스트" 강의에서 ItemRepositoryTest 클래스안에 코드라인 88번 test(String itemName, Integer maxPrice, Item... items) 함수에서 사용되어진 containsExactly 함수는 참이기 위해서 모든 값이 같아하고 그리고 주어진 값들의 순서역시 같아야 한다고 이해를 하였습니다. 근데 여기에서 궁금한점이 MemoryItemRepository에서 HashMap을 사용한 경우 입력되어진 값들의 순서가 보장되어 지지 않아서 어떠한 경우에는 테스트 findItems이 값들의 순서가 일치하지 않아서 실패하는 것이 아닌가에 대해서 궁금증이 생기어서 질문을 남깁니다. 감사합니다 :)
-
해결됨스프링 DB 1편 - 데이터 접근 핵심 원리
JDBC 질문 드립니다.
안녕하세요. 현재 9강까지 강의를 들은 상태입니다.다름이아니라, 현재 9강까지는 JDBC를 사용하는 부분을 학습하고 있는데요. 여기서 JDBC를 사용한다는게 구체적으로 어떤것을 의미하는지 질문드립니다.JDBC를 사용한다는것이 DriverManager를 사용하는것을 말하는것일가요? 아니면 DriverManager뿐만아니라, Connection, PreparedStatement, ResultSet를 사용하는것을 말하는것일까요? 헷갈려서 질문드립니다..!
-
해결됨스프링 DB 1편 - 데이터 접근 핵심 원리
set autocommit 질문
set autocommit false; 인 상황에서delete from member; 를 수행한 뒤에 commit을 하지 않고, set autocommit true; 를 해보았습니다.그랬더니, db에 데이터가 없는 것을 확인했습니다. 혹시 set autocommit true; 명령어를 수행시키는 순간 commit이 한번 자동으로 실행되는 것일까요?
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
HTTP API
1.HTTP API 방식은 보통 CSR로 다 처리 하나요? 백엔드에서는 데이터 주는것 까지만 신경쓰면되나요? 그럼 실제로 프론트 없이 토이 프로젝트 할때는 아래 2번을 통해서만 진행하면되나요? 정적이거나 , html form형태로 할때는 CSR이 필요없는건가요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
스프링 데이터 jpa 통합테스트 오류
스프링 데이터 jpa의 통합테스트 - 회원가입 부분을 돌리는 부분에서 private final MemberRepository memberRepository;이 부분에서 자동 주입을 할 수 없습니다. 'MemberRepository' 타입의 bean이 두 개 이상 있습니다.라는 오류가 떠 memorymemberrepository에 쓰인 @Repository를 지워 private final MemberRepository memberRepository;이 부분의 빨간 줄은 없앴는데 테스트는 안 돌아가서 질문 남깁니다무슨 오류일까요? 해결방법도 알려주세요,,SpringConfig MemberServiceIntegrationTestSpringDataJpaMemberRepsitory아래는 테스트 실행시 나오는 에러 메시지입니다java.lang.NullPointerException: Cannot invoke "org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(java.sql.SQLException, String)" because the return value of "org.hibernate.resource.transaction.backend.jdbc.internal.JdbcIsolationDelegate.sqlExceptionHelper()" is null at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcIsolationDelegate.delegateWork(JdbcIsolationDelegate.java:116) ~[hibernate-core-6.5.2.Final.jar:6.5.2.Final] at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.getJdbcEnvironmentUsingJdbcMetadata(JdbcEnvironmentInitiator.java:290) ~[hibernate-core-6.5.2.Final.jar:6.5.2.Final] at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:123) ~[hibernate-core-6.5.2.Final.jar:6.5.2.Final] at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:77) ~[hibernate-core-6.5.2.Final.jar:6.5.2.Final] at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:130) ~[hibernate-core-6.5.2.Final.jar:6.5.2.Final] at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:263) ~[hibernate-core-6.5.2.Final.jar:6.5.2.Final] at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:238) ~[hibernate-core-6.5.2.Final.jar:6.5.2.Final] at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:215) ~[hibernate-core-6.5.2.Final.jar:6.5.2.Final] at org.hibernate.boot.model.relational.Database.<init>(Database.java:45) ~[hibernate-core-6.5.2.Final.jar:6.5.2.Final] at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:221) ~[hibernate-core-6.5.2.Final.jar:6.5.2.Final] at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.<init>(InFlightMetadataCollectorImpl.java:189) ~[hibernate-core-6.5.2.Final.jar:6.5.2.Final] at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:171) ~[hibernate-core-6.5.2.Final.jar:6.5.2.Final] at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1431) ~[hibernate-core-6.5.2.Final.jar:6.5.2.Final] at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1502) ~[hibernate-core-6.5.2.Final.jar:6.5.2.Final]2024-06-21T18:39:08.309+09:00 ERROR 43820 --- [hello-spring] [ Test worker] j.LocalContainerEntityManagerFactoryBean : Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] due to: Unable to determine Dialect without JDBC metadata (please set 'jakarta.persistence.jdbc.url' for common cases or 'hibernate.dialect' when a custom Dialect implementation must be provided)2024-06-21T18:39:08.310+09:00 WARN 43820 --- [hello-spring] [ Test worker] o.s.w.c.s.GenericWebApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] due to: Unable to determine Dialect without JDBC metadata (please set 'jakarta.persistence.jdbc.url' for common cases or 'hibernate.dialect' when a custom Dialect implementation must be provided)2024-06-21T18:39:08.324+09:00 INFO 43820 --- [hello-spring] [ Test worker] .s.b.a.l.ConditionEvaluationReportLogger : Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled.2024-06-21T18:39:08.339+09:00 ERROR 43820 --- [hello-spring] [ Test worker] o.s.boot.SpringApplication : Application run failed