inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

172만명의 커뮤니티!! 함께 토론해봐요.

리소스 동기화 == 트랜젝션 동기화 인가요?

미해결

스프링 DB 1편 - 데이터 접근 핵심 원리

트랜젝션 매니저 설명해주시는 부분의 PDF 내용을 보다보니 리소스 동기화와 트랜젝션 동기화라는 용어가 같은 내용(같은 트랜젝션 내에서 커넥션을 동일하게 유지)을 지칭하는 것 같아서 질문드립니다.

  • spring
  • mvc
  • spring-jdbc
Jaesang Yoon 댓글 1 좋아요 0 조회수 320

세션 관련 질문입니다.

미해결

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 세션을 직접 만들고 적용하는 과정에서는 UUID 값을 세션 스토어의 키 값, 그리고 정보를 value 값에 담았었습니다. 그런데 HTTPsession에서는 session.setAttribute로 키값으로 "loginMember"을 담고 있는데, 왜 이렇게 되는건지 잘 모르겠습니다. 무슨 차이인지 알 수 있을까요?

  • spring
  • mvc
anten 댓글 1 좋아요 0 조회수 330

Querydsl 일대다 관계에서 빈객체 반환에 대한 질문이있습니다.

미해결

실전! Querydsl

List<ContentsDtoRes> contents = queryFactory .selectFrom(ParentEntity) .leftJoin(ParentEntity.childList, childEntity) .leftJoin(childEntity.childChildEntity, childchildEntity) .where( systemDelYnEq(condition.getDelYn()), autoDelYnEq(condition.getDelYn()) ) .offset(pageable.getOffset()) .limit(pageable.getPageSize()) .transform( groupBy(systemEntity.sysId).list( new QContentsDtoRes( parentEntity.a, parentEntity.b, parentEntity.c, parentEntity.d, parentEntity.e, list( new QChildDto( childEntity.a, childEntity.b ) ), list( new QchildChildDto( childChild.a, childChild.b, childChild.c, childChild.d ) ) ) ) ); 안녕하세요 강사님. ㅎ Querydsl 의 일대다 관계에 대해서 질문이있어 올리게되었습니다. 예를들어 위와 같이 부모엔티티와 자식엔티티의 일대 다 관계가 될 경우 ParentEntity 는 존재하고 childEntity 가 없을 경우 querydsl 에서는 NPE 가 아닌 빈객체를 반환하게 되는데 아래와 같이 @QueryProject 생성자 하위에서 이렇게 빈객체를 체크하고 비워주는 작업을 할 수 밖에 없는건가요.? this.childList.addAll(childList.stream() .filter(child -> child.getId() != null).collect(Collectors.toList())); this.childChildList.addAll(childChildList.stream() .filter(childchild -> childchild.getId() != null).collect(Collectors.toList())); } 혹시 다른 방법이 있다면 어떤 방법이 있을지 궁금합니다. 항상 좋은강의 감사합니다.! 좋은하루되세요

  • java
  • jpa
댓글 1 좋아요 0 조회수 276

스프링 cascade 활용도 측면에서 궁금한 것이 있습니다. 영한님

미해결

자바 ORM 표준 JPA 프로그래밍 - 기본편

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 여기에 질문 내용을 남겨주세요. cascadeType.all! 일단 저장할때 자식 객체를 다 담은 후 이후 부모 를 repository.save (부모) 하면 자식도 함께 저장되는 것을 강의 내용을 통해서 확인했습니다. 그러면 혹시 이 과정에 대해서는 어떻게 생각하시나요 Program program = programRepository.findById(reviewSaveDto.getProgramId()) .orElseThrow(() -> new NotFoundException(ErrorCode.PROGRAM_NOT_FOUND)); Review review = Review.builder() .content(reviewSaveDto.getContents()) .user(user) .program(program) .rating(reviewSaveDto.getRating()) .genre(usersFirstGenre.getName()) .build(); program.addReview(review); 보시면 program 을 리포지토리에서 찾아와서 Review 를 직접 생성한 후 addReview(review) 를 통해서 저장합니다. @OneToMany(mappedBy = "program", cascade = CascadeType.ALL, orphanRemoval = true) private List<Review> reviewList = new ArrayList<>(); public void addReview(Review review) { this.reviewList.add(review); 당연히 cascade가 발라져있고요!. 이러면 코드는 정상동작합니다. 저는 뭔가 ReviewRepository에서 program 세팅하고 이러는 것 보다 위 방법이 더 뭐랄까 직관적이다?(프로그램.addReview가 직관적이라는 느낌) 이라서 이 것을 애용했는데 성능 상의 문제점이라던가 이런게 있을지 궁금합니다. addReview 를 한다고 바로 저장되지 않고 트랜잭션이 끝날때 변경 감지를 통해서 실행되는것 같은데(뇌피셜입니다) . 이렇게 해도 괜찮을지 궁금해요!!! 영한님!!!

  • java
  • jpa
dionisos198 댓글 1 좋아요 0 조회수 270

아마존 리눅스 2023 el9 버전 mysql 설치 중 KEY 오류

해결됨

자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]

아마존 리눅스 2023으로 인스턴스를 사용했을 때 지면님과 강사님께서 알려준 el9 버전 레포지토리를 사용하는 명령어 sudo dnf install <https://dev.mysql.com/get/mysql80-community-release-el9-1.noarch.rpm> sudo dnf install mysql-community-server 이렇게 하여도 저는 계속 sudo dnf install mysql-community-server 해당 명령어를 통해 설치하려고 하면 The GPG keys listed for the "MySQL 8.0 Community Server" repository are already installed but they are not correct for this package. 이런 오류가 발생하였습니다. 계속 키가 옳지 않다는 오류가 생겼고 챗지피티랑 구글링을 통해 이것저것 해보다가 sudo rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022 sudo yum update 위의 두 명령어를 실행하고 sudo dnf install mysql-community-server 해당 명령어로 재설치 해주니 제대로 설치가 되었습니다! 제 추측으로는 KEY를 다시 받아오고 yum update 하는 과정이 필요했던 것 같습니다! 저와 같은 오류를 가지는 분들에게 도움이 되었으면 좋겠네요...!!!

  • java
  • spring
  • aws
  • mysql
  • spring-boot
  • jpa
gang01 댓글 3 좋아요 8 조회수 1822

fetchResults(), fetchCount() deprecated

해결됨

실전! Querydsl

fetchResults(), fetchCount()가 deprecated됐는데 강의에서 fetchResults()가 사용되는 QueryResults<Member> queryResults = queryFactory .selectFrom(member) .orderBy(member.username.desc()) .offset(1) .limit(2) .fetchResults(); 이런 코드들은 어떻게 바꿔야 하나요? 강의자료에 나와있지 않은 것 같습니다.

  • java
  • jpa
spacebar 댓글 1 좋아요 1 조회수 620

콘솔 한글 깨짐

미해결

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 현재 인프런에 나와있는 글깨짐 커뮤니티 글들과 인터넷을 찾아봐도 해결이 안되네요...ㅠㅠ 위 과정을 모두 해보았는데.....ㅜㅜ 또 다른 방법이 없을까요.....

  • spring
  • mvc
새싹 댓글 3 좋아요 0 조회수 668

무엇을 jar 해야하나요?

미해결

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 필자는 2분 57초까지 했을 때, 여기서 사진 마지막 부분에 ls로 무엇이 있는지 확인을 했는데 jar 파일이 두개가 떠서 저 경우에는 무엇을 jar 해야하는지 여쭙고 싶어요 + 강의에서 보면 ll 명령어를 사용하는데 저 명령어가 저는 없는 명령어라고 뜨는 것 같아서요, 뭐라쳐야하나요? 저 또한 MAC OS 입니다.

  • java
  • spring
  • mvc
  • spring-boot
yenn_l0 댓글 1 좋아요 0 조회수 407

실무에서 주로 사용하는 DB툴이 궁금합니다.

해결됨

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 강의에서는 주로 H2 데이터베이스를 활용해 강의를 진행해주시는데, 실무에서는 데이터베이스를 다룰 때 보통 어떤 툴을 사용하는 지 궁금합니다.

  • java
  • spring
  • 웹앱
  • spring-boot
  • jpa
이도현 댓글 1 좋아요 0 조회수 697

Cannot resolve regions

미해결

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. [add-form.html] 그대로 따라했는데 th:field=*{regions}에 에러가 생겼습니다. 원인이랑 해결 방법이 무엇일까요?

  • spring
  • mvc
아가미 댓글 1 좋아요 0 조회수 270

jdk , 인텔리제이의 버전을 맞췄는데도 오류가 뜹니다

미해결

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

https://www.inflearn.com/course/lecture?courseSlug=%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1&unitId=71216&tab=community&category=questionDetail&q=1133756 ㄴ 위의 질문 올린 분과 같은 오류가 떠서 Gradle Projects를 Gradle로 바꿨더니 아래와 같은 오류가 뜨네요 ,, 구글링 했더니 Build and Run을 인텔리제이로 바꾸라는 내용이 나오는데, 그렇게 하면 강의를 따라갈 수가 없어서요 ㅠㅠ 자바 버전을 맞추라는 내용도 있었지만 이미 다 맞춘 상태입니다 ,, 어디가 문제일까요 ?? 아래는 저의 환경설정 입니다

  • spring
  • mvc
dmsgpfhdns 댓글 2 좋아요 0 조회수 393

섹션7의 PRG Post/Redirect/Get 질문입니다.

해결됨

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

섹션 7의 PRG Post/Redirect/Get에서요, 7:30에 retrun "basic/item"; 이 부분을 리다이렉트로 수정하시는데요, 혹시 basic/item 뷰페이지로 이동되지 않고 그대로 남는 이유가, 포스트요청이라서 리턴값을 뷰페이지로 취급하지 않는 것 아닌가해서요. 겟요청이였으면 저렇게 리턴을 했어도 뷰페이지로 자동 리다이렉트까지 되었지 않았을까요...? 그대로 남는 이유를 새로고침으로 인한 중복 오류를 중심으로 말씀해주시지만 리턴값과 연결해서 설명해주시지 않으셔서 헷갈리네요.

  • spring
  • mvc
오르골 댓글 1 좋아요 1 조회수 257

@Transactional 롤백,,?

해결됨

스프링 DB 2편 - 데이터 접근 활용 기술

안녕하세요 강사님. 프로젝트 진행중에 간단한 테스트 작업 중 이상한 결과가 나와서 질문드립니다..! @Transactional @SpringBootTest @ActiveProfiles("test") class ProductListResponseDtoTest { @Autowired ProductRepository productRepository; @Test @DisplayName("주문 상세가 주어졌을 때 ProductListResponseDto 변환") public void ofWithOrderDetail() { Product product = Product.builder() .price(1000L) .name("빵빵이") .productNo("123") .build(); productRepository.save(product); OrderDetail orderDetail = OrderDetail.builder() .product(product) .price(product.getPrice()) .quantity(2L) .build(); // when ProductListResponseDto result = ProductListResponseDto.of(orderDetail); // then assertThat(result).extracting("productId", "productNo", "name", "price", "quantity") .contains(1L, "123", "빵빵이", 1000L, 2L); } @Test @DisplayName("상품과 수량이 주어졌을 때 ProductListResponseDto 변환") public void ofWithProductAndQuantity() { Long quantity = 2L; Product product = Product.builder() .price(1000L) .name("빵빵이") .productNo("123") .build(); productRepository.save(product); // when ProductListResponseDto result = ProductListResponseDto.of(product, quantity); // then assertThat(result).extracting("productId", "productNo", "name", "price", "quantity") .contains(1L, "123", "빵빵이", 1000L, 2L); } } @Transactional를 통해 각 테스트가 롤백되어 productId가 모두 1L 될 것으로 예상하였습니다. 그런데 기대와 달리 실패를 하였는데요. 첫번째 테스트(ofWithOrderDetail)의 productId의 값이 2L 되었습니다. insert문과 에러 메세지입니다. Hibernate: insert into product (category_id, created_at, deleted_at, discount_rate, is_own, is_subs, name, price, product_no, stock, thumb_img, updated_at, product_id) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, default) 2024-01-29T22:28:07.219+09:00 INFO 3636 --- [ main] p6spy : #1706534887219 | took 4ms | statement | connection 3| url jdbc:h2:mem:~/Marketbridge insert into product (category_id,created_at,deleted_at,discount_rate,is_own,is_subs,name,price,product_no,stock,thumb_img,updated_at,product_id) values (?,?,?,?,?,?,?,?,?,?,?,?,default) insert into product (category_id,created_at,deleted_at,discount_rate,is_own,is_subs,name,price,product_no,stock,thumb_img,updated_at,product_id) values (NULL,NULL,NULL,NULL,NULL,NULL,'빵빵이',1000,'123',NULL,NULL,NULL,default); 2024-01-29T22:28:07.299+09:00 INFO 3636 --- [ main] p6spy : #1706534887299 | took 0ms | rollback | connection 3| url jdbc:h2:mem:~/Marketbridge ; Hibernate: insert into product (category_id, created_at, deleted_at, discount_rate, is_own, is_subs, name, price, product_no, stock, thumb_img, updated_at, product_id) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, default) 2024-01-29T22:28:07.309+09:00 INFO 3636 --- [ main] p6spy : #1706534887309 | took 0ms | statement | connection 4| url jdbc:h2:mem:~/Marketbridge insert into product (category_id,created_at,deleted_at,discount_rate,is_own,is_subs,name,price,product_no,stock,thumb_img,updated_at,product_id) values (?,?,?,?,?,?,?,?,?,?,?,?,default) insert into product (category_id,created_at,deleted_at,discount_rate,is_own,is_subs,name,price,product_no,stock,thumb_img,updated_at,product_id) values (NULL,NULL,NULL,NULL,NULL,NULL,'빵빵이',1000,'123',NULL,NULL,NULL,default); 2024-01-29T22:28:07.317+09:00 INFO 3636 --- [ main] p6spy : #1706534887317 | took 0ms | rollback | connection 4| url jdbc:h2:mem:~/Marketbridge ; java.lang.AssertionError: [Extracted: productId, productNo, name, price, quantity] Expecting ArrayList: [2L, "123", "빵빵이", 1000L, 2L] to contain: [1L, "123", "빵빵이", 1000L, 2L] but could not find the following element(s): [1L] at com.objects.marketbridge.order.service.dto.ProductListResponseDtoTest.ofWithOrderDetail(ProductListResponseDtoTest.java:44) at java.base/java.lang.reflect.Method.invoke(Method.java:568) at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) of 메서드 입니다. @Getter public class ProductListResponseDto { private Long productId; private String productNo; private String name; private Long price; private Long quantity; @Builder private ProductListResponseDto(Long productId, String productNo, String name, Long price,Long quantity) { this.productId = productId; this.productNo = productNo; this.name = name; this.price = price; this.quantity = quantity; } public static ProductListResponseDto of(Product product, Long quantity) { return ProductListResponseDto.builder() .productId(product.getId()) .productNo(product.getProductNo()) .name(product.getName()) .price(product.getPrice()) .quantity(quantity) .build(); } public static ProductListResponseDto of(OrderDetail orderDetail) { return ProductListResponseDto.builder() .productId(orderDetail.getProduct().getId()) .productNo(orderDetail.getProduct().getProductNo()) .name(orderDetail.getProduct().getName()) .price(orderDetail.getProduct().getPrice()) .quantity(orderDetail.getQuantity()) .build(); } } 현재 Product 엔티티의 Id는 @GeneratedValue(strategy = GenerationType.IDENTITY) 로 이루어져 있습니다. 추가적으로 @ActiveProfiles("test")에 해당하는 yml의 일부는 아래와 같습니다. datasource: url: jdbc:h2:mem:~/Marketbridge driver-class-name: org.h2.Driver username: sa password: jpa: hibernate: ddl-auto: none show-sql: true properties: hibernate: format_sql: true default_batch_fetch_size: 100 defer-datasource-initialization: true h2: console: enabled: true 이런 경우는 처음이라 어디가 잘못됐는지 찾지 못하겠네요 ㅠㅠ

  • spring
  • mvc
  • jpa
  • querydsl
  • spring-data-mybatis
  • spring-jpa
모깅 댓글 1 좋아요 0 조회수 437

한글 파일명 첨부파일 다운

미해결

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요.안녕하세요영어로된 첨부파일 다운받는 과정까지 잘됩니다. 그런데 첨부파일명이 한글인 것을 다운클릭하면 안되고 화면에 다깨진 글씨만 보여줘서 마치 content_disposition추가하기 전처럼 뜨네요.... 방법이 없나요

  • spring
  • mvc
댓글 1 좋아요 0 조회수 428

섹션7. 상품상세

미해결

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

<div class="col"> <button class="w-100 btn btn-primary btn-lg" onclick="location.href='editForm.html'" th:onclick="|location.href='@{/basic/items/{itemId}/edit(itemId=${item.id})}'|" type="button">상품 수정</button> </div> 여기서 타임리프 문법에서 th:|location.href='@{/basic/itesm/${ item.id }/edit 로 하면 http://localhost:8080/basic/items/$%7Bitem.id%7D/edit 이런식으로 url이 생기는데, 왜 그런건가요? 이전에 상품목록-타임리프 강의에서는 <td><a href="item.html" th:href="@{/basic/items/{itemId}(itemId=${item.id})}" th:text="${item.id}">회원 아이디</a></td> <td><a href="item.html" th:href="@{|/basic/items/${item.id}|}" th:text="${item.itemName}">상품명</a></td> 이렇게 URL 표현식으로 쓸 수 있다고 배웠어서요! 감사합니다!

  • spring
  • mvc
euneun 댓글 2 좋아요 0 조회수 288

세션 질문

미해결

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 이전 강의에서 세션을 직접 만들 때는 세션저장소에는(sessionId, Member 객체) 쿠키에는 (session_cookie_name, sessionId) 이런 식으로 mapping이 되었는데, 이번 강의에서 보면 session.setAttribute에서 (session_name, Member객체)와 같이 mapping이 되는 것을 볼 수 있습니다. 세션 id를 별도로 저장을 하는 과정이 없는데 자동으로 (session_name, sessionID)를 세션저장소에 저장해준다 라고 이해해도 괜찮을까요?

  • spring
  • mvc
sde101573 댓글 1 좋아요 1 조회수 278

jsp를 사용하면 왜 war 파일을 사용하나요?

미해결

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 안녕하세요! 김영한 선생님의 스프링 mvc 1편 - 6강을 듣다가 궁금한 점이 있어서 질문 올립니다. jsp를 사용하면 왜 war 파일을 사용해야하나요? 서블릿 컨테이너가 필요한거면 springboot안에 내장 서버가 있으니깐 그것을 이용하면 되는 거 아닌가요? jar와 war 배포 차이점에 대한 자세한 설명 부탁드립니다

  • spring
  • mvc
올빼미 댓글 1 좋아요 1 조회수 800

Spring boot 3 gradle에 jstl 수정해도 에러 발생하네요

해결됨

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

members.jsp <%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <html> <head> <title>member list</title> <meta charset="UTF-8"> </head> <body> <a href="/index.html">메인</a> <table> <thead> <tr> <th>id</th> <th>username</th> <th>age</th> </tr> </thead> <tbody> <c:forEach var="item" items="${members}"> <tr> <td>${item.id}</td> <td>${item.username}</td> <td>${item.age}</td> </tr> </c:forEach> </tbody> </table> </body> </head> </html> build.gradle plugins { id 'org.springframework.boot' version '2.4.3' id 'io.spring.dependency-management' version '1.0.11.RELEASE' id 'java' id 'war' } configurations { compileOnly { extendsFrom annotationProcessor } } group = 'org.example' version = '1.0-SNAPSHOT' repositories { mavenCentral() } dependencies { testImplementation platform('org.junit:junit-bom:5.9.1') testImplementation 'org.junit.jupiter:junit-jupiter' implementation 'org.springframework.boot:spring-boot-starter-web' compileOnly 'org.projectlombok:lombok:1.18.28' annotationProcessor 'org.projectlombok:lombok:1.18.28' //providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat' testImplementation 'org.springframework.boot:spring-boot-starter-test' //JSP 추가 implementation 'org.apache.tomcat.embed:tomcat-embed-jasper' implementation 'jakarta.servlet:jakarta.servlet-api:6.0.0' //스프링부트 3.0 이상 implementation 'jakarta.servlet.jsp.jstl:jakarta.servlet.jsp.jstl-api:3.0.0' //스프링부트 3.0 이상 implementation 'org.glassfish.web:jakarta.servlet.jsp.jstl:3.0.1' //Error 스프링부트 3.0 이상 } test { useJUnitPlatform() } 안녕하세요. spring boot 3 에서 jstl 사용을 위해 gradle에 위 내용처럼 추가하였는데 NoClassDef Err 발생합니다. 2024-01-29 15:07:48.054 ERROR 9200 --- [nio-8080-exec-4] a.c.c.C.[.[.[.[frontControllerServletV1] : Servlet.service() for servlet [frontControllerServletV1] in context with path [] threw exception [java.lang.NoClassDefFoundError: jakarta/servlet/jsp/tagext/TagLibraryValidator] with root cause java.lang.ClassNotFoundException: jakarta.servlet.jsp.tagext.TagLibraryValidator at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) ~[na:na] at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) ~[na:na] at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520) ~[na:na] at java.base/java.lang.ClassLoader.defineClass1(Native Method) ~[na:na] at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1012) ~[na:na] at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:150) ~[na:na] 프로젝트 클린, gradle refresh 다해봤는데 안되네요

  • spring
  • mvc
developer_BackEnd 댓글 4 좋아요 2 조회수 1930

에러 발생

미해결

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 조건에 맞지 않게 입력해도 상품에 등록되는 에러가 발생하였습니다. 해결시도 1.에러 프로퍼티의 문제였나 2.맵핑의 문제였나 3.validate의 오류인가 3가지를 시도하였는데 해결하지 못하였습니다. https://drive.google.com/file/d/1bMqOTrLsq7HF0NjU8I6er9jHgW9NvEBW/view?usp=drive_link 코드입니다

  • spring
  • mvc
봉준 댓글 1 좋아요 0 조회수 498

FrontControllerServletV5 null 오류

미해결

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] java.lang.NullPointerException: Cannot invoke "hello.servlet.web.frontcontroller.ModelView.getViewName()" because "mv" is null at hello.servlet.web.frontcontroller.v5.FrontControllerServletV5.service (FrontControllerServletV5.java:5 7) ~[classes/:na] at jakarta.servlet.http.HttpServlet.service (HttpServlet.java:61 4) ~[jakarta.servlet-api-6.0.0.jar:6.0.0] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:20 5) ~[tomcat-embed-core-10.1.16.jar:10.1.16] at org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:14 9) ~[tomcat-embed-core-10.1.16.jar:10.1.16] at org.apache.tomcat.websocket.server.WsFilter.doFilter (WsFilter.java:5 1) ~[tomcat-embed-websocket-10.1.16.jar:10.1.16] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:17 4) ~[tomcat-embed-core-10.1.16.jar:10.1.16] at org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:14 9) ~[tomcat-embed-core-10.1.16.jar:10.1.16] at org.springframework.web.filter.RequestContextFilter.doFilterInternal (RequestContextFilter.java:10 0) ~[spring-web-6.1.1.jar:6.1.1] at org.springframework.web.filter.OncePerRequestFilter.doFilter (OncePerRequestFilter.java:11 6) ~[spring-web-6.1.1.jar:6.1.1] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:17 4) ~[tomcat-embed-core-10.1.16.jar:10.1.16] at org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:14 9) ~[tomcat-embed-core-10.1.16.jar:10.1.16] at org.springframework.web.filter.FormContentFilter.doFilterInternal (FormContentFilter.java:9 3) ~[spring-web-6.1.1.jar:6.1.1] at org.springframework.web.filter.OncePerRequestFilter.doFilter (OncePerRequestFilter.java:11 6) ~[spring-web-6.1.1.jar:6.1.1] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:17 4) ~[tomcat-embed-core-10.1.16.jar:10.1.16] at org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:14 9) ~[tomcat-embed-core-10.1.16.jar:10.1.16] at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal (CharacterEncodingFilter.java:20 1) ~[spring-web-6.1.1.jar:6.1.1] at org.springframework.web.filter.OncePerRequestFilter.doFilter (OncePerRequestFilter.java:11 6) ~[spring-web-6.1.1.jar:6.1.1] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:17 4) ~[tomcat-embed-core-10.1.16.jar:10.1.16] at org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:14 9) ~[tomcat-embed-core-10.1.16.jar:10.1.16] at org.apache.catalina.core.StandardWrapperValve.invoke (StandardWrapperValve.java:16 7) ~[tomcat-embed-core-10.1.16.jar:10.1.16] at org.apache.catalina.core.StandardContextValve.invoke (StandardContextValve.java:9 0) ~[tomcat-embed-core-10.1.16.jar:10.1.16] at org.apache.catalina.authenticator.AuthenticatorBase.invoke (AuthenticatorBase.java:48 2) ~[tomcat-embed-core-10.1.16.jar:10.1.16] at org.apache.catalina.core.StandardHostValve.invoke (StandardHostValve.java:11 5) ~[tomcat-embed-core-10.1.16.jar:10.1.16] at org.apache.catalina.valves.ErrorReportValve.invoke (ErrorReportValve.java:9 3) ~[tomcat-embed-core-10.1.16.jar:10.1.16] at org.apache.catalina.core.StandardEngineValve.invoke (StandardEngineValve.java:7 4) ~[tomcat-embed-core-10.1.16.jar:10.1.16] at org.apache.catalina.connector.CoyoteAdapter.service (CoyoteAdapter.java:34 0) ~[tomcat-embed-core-10.1.16.jar:10.1.16] at org.apache.coyote.http11.Http11Processor.service (Http11Processor.java:39 1) ~[tomcat-embed-core-10.1.16.jar:10.1.16] at org.apache.coyote.AbstractProcessorLight.process (AbstractProcessorLight.java:6 3) ~[tomcat-embed-core-10.1.16.jar:10.1.16] at org.apache.coyote.AbstractProtocol$ConnectionHandler.process (AbstractProtocol.java:89 6) ~[tomcat-embed-core-10.1.16.jar:10.1.16] at org.apache.tomcat.util.ne t.NioEndpoint$SocketProcessor.doRun (NioEndpoint.java:174 4) ~[tomcat-embed-core-10.1.16.jar:10.1.16] at org.apache.tomcat.util.net.SocketProcessorBase.ru n (SocketProcessorBase.java:5 2) ~[tomcat-embed-core-10.1.16.jar:10.1.16] at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:119 1) ~[tomcat-embed-core-10.1.16.jar:10.1.16] at org.apache.tomcat.util.threads.ThreadPoolExecutor $Worker.ru n (ThreadPoolExecutor.java:65 9) ~[tomcat-embed-core-10.1.16.jar:10.1.16] at org.apache.tomcat.util.threads.TaskThread $WrappingRunnable.ru n (TaskThread.java:6 1) ~[tomcat-embed-core-10.1.16.jar:10.1.16] at java.base /java.lang.Thread.ru n (Thread.java:83 3) ~[na:na] --- package hello.servlet.web.frontcontroller.v5; import hello.servlet.web.frontcontroller.ModelView; import hello.servlet.web.frontcontroller.MyView; import hello.servlet.web.frontcontroller.v3.ControllerV3; import hello.servlet.web.frontcontroller.v3.controller.MemberFormControllerV3; import hello.servlet.web.frontcontroller.v3.controller.MemberListControllerV3; import hello.servlet.web.frontcontroller.v3.controller.MemberSaveControllerV3; import hello.servlet.web.frontcontroller.v5.adapter.ControllerV3HandlerAdapter; import jakarta.servlet.ServletException; import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @WebServlet(name = "frontControllerServletV5" , urlPatterns = "/front-controller/v5/*") public class FrontControllerServletV5 extends HttpServlet { private final Map<String,Object> handlerMappingMap = new HashMap<>(); private final List<MyHandlerAdapter> handlerAdapters = new ArrayList<>(); public FrontControllerServletV5() { initHandlerMappingMap(); initHandlerAdapters(); } private void initHandlerMappingMap() { handlerMappingMap.put("/front-controller/v5/v3/members/new-form", new MemberFormControllerV3()); handlerMappingMap.put("/front-controller/v5/v3/members/save", new MemberSaveControllerV3()); handlerMappingMap.put("/front-controller/v5/v3/members", new MemberListControllerV3()); } private void initHandlerAdapters() { handlerAdapters.add(new ControllerV3HandlerAdapter()); } @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Object handler = getHandler(request); if (handler == null) { response.setStatus(HttpServletResponse.SC_NOT_FOUND); return; } MyHandlerAdapter adapter = getHandlerAdapter(handler); ModelView mv = adapter.handle(request, response, handler); MyView view = viewResolver(mv.getViewName()); view.render(mv.getModel(),request,response); } private Object getHandler(HttpServletRequest request) { String requestURI = request.getRequestURI(); return handlerMappingMap.get(requestURI); } private MyHandlerAdapter getHandlerAdapter(Object handler) { MyHandlerAdapter a; for (MyHandlerAdapter adapter : handlerAdapters) { if(adapter.supports(handler)){ return adapter; } } throw new IllegalArgumentException("handler adapter를 찾을 수 없습니다. handler = "+handler); } private static MyView viewResolver(String viewName) { return new MyView("/WEB-INF/views/" + viewName + ".jsp"); } } --- 이런 오류가 발생하는데 어디가 문제인제 잘 모르겠습니다..왜 이런걸까요?ㅠㅠㅠ

  • spring
  • mvc
김나무 댓글 1 좋아요 0 조회수 376

인기 태그

인프런 TOP Writers

주간 인기글