app.host 관련 질문이 있습니다
미해결
스프링과 JPA 기반 웹 애플리케이션 개발
dev 프로퍼티 파일에 app.host 를 정의하지 않고 dev 환경으로 실행후, 메일을 보낼시 host 값이 http:// localhost:8080 으로 어떻게 넣어지는건가요? dev 프로퍼티 파일에 정의가 안되어 있으면 local 프로퍼티 파일을 참조하게 되는것인가요...?
- java
- spring
- spring-boot
- jpa
- thymeleaf
176만명의 커뮤니티!! 함께 토론해봐요.
미해결
스프링과 JPA 기반 웹 애플리케이션 개발
dev 프로퍼티 파일에 app.host 를 정의하지 않고 dev 환경으로 실행후, 메일을 보낼시 host 값이 http:// localhost:8080 으로 어떻게 넣어지는건가요? dev 프로퍼티 파일에 정의가 안되어 있으면 local 프로퍼티 파일을 참조하게 되는것인가요...?
미해결
자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
태현님 안녕하세요 좋은 강의 잘 듣고 있습니다. 수강하면서 실습 진행하면서 3번 정도 mysql 연결 오류가 발생해서 gpt를 통해 해결해보려고도 하고 구글링도 해보았지만 근본적인 해결이 안되어 고민 끝에 질문 남깁니다. 우선, 문제 상황을 말씀드리면 mysql 설치 후 인텔리제이에서 연결도 잘되어 실습을 진행하다 [S1009] !AuthenticationProvider. BadAuthenticationPlugin! 라는 메시지가 뜹니다. mysql 8.0 CLI-Unicode 에 들어가서 초기에 설정한 비밀번호를 입력하면 바로 unicode가 종료되어 진입 조차 불가능합니다. cmd 실행하여 mysql -u root -p 명령을 입력해서 정확한 비밀번호를 입력하면 ERROR 2059 (HY000): Authentication plugin 'auth_gssapi_client' cannot be loaded: ÁöÁ¤µÈ ¸ðµâÀ» ãÀ» ¼ö ¾ø½À´Ï´Ù. 에러 메시지가 뜹니다. 최후의 수단으로 mysql 관련 모든 파일 및 프로그램 삭제 후 재설치하여 인텔리제이 연동해서 실습이 정상적으로 진행이 되다가 랩탑을 몇 번 껐다 키면 위의 문제가 반복됩니다. 왜 저런 문제가 발생하고, 어떻게 해야 해결이 가능할까요..? 지금까지는 완전 삭제 및 재설치하여 db 테이블 구성을 처음부터 다 다시 하면서 실습을 어떻게든 따라했지만 근본적인 해결책을 찾고 싶어 질문 드립니다.
미해결
실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
주문취소 부분에 cancel()을 실행하면 왜 db업데이트가 되는지 이해가잘안갑니다 . 주문을 저장할때처럼 엔티티매니저에서 persist를 해주어야 commit되는게 아닌가요 ?
미해결
Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
혹시 강의에 멀티모듈구조 설정하는 방법이 있을까요 ? 하나의 프로젝트에서 무듈별로 나누는 방법은 제공하지 않겠죠 ?
해결됨
코드로 배우는 React 19 with 스프링부트 API서버
위 사진들과 같이 각 페이지에 항목이 10개씩 표시되어야 하는데 페이지 버튼의 숫자대로 표시되고 있습니다. ListConponent.js쪽이 이상한가 싶어서 찾아봐도 뭐가 문제인지 모르겠습니다. 혹시 참고 자료 필요하신 게 있으시다면 말씀 부탁드리겠습니다.
미해결
자바 ORM 표준 JPA 프로그래밍 - 기본편
안녕하세요. 단어의 의미가 조금 모호한거같아서 질문드립니다. 엔티티타입 은 @Entity가 붙은 클래스의 타입을 의미하는것인가요? 아니면 @Entity가 붙은 클래스로 만든 객체를 의미하는것인가요?
해결됨
Spring Boot를 활용하여 채팅 플랫폼 만들어보기
서비스 구동하며 테스트와 디버깅하기 - 1에서 기동하는 방법을 알려주실 수 있을까요?? 강의에서 갑자기 포트번호가 왜 3000으로 설정되어 나오는지도 모르겠고, start.sh로 실행시켜서 localhost:7002로 하면 이렇게 나옵니다... /register 이건 어디서 설정하는 건가요?? 대체 뭐가 문제인걸까요..ㅠㅠ
미해결
자바 ORM 표준 JPA 프로그래밍 - 기본편
========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 네 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 네 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 네 [질문 내용] 이해가 잘 되었는 지 확인하고 싶어서 질문 드립니다 팀마다 100개의 맴버가 있고 팀이 400개가 있다고 가정하고 다음 명령을 실행 한다면 String jpql = "select t from Team t"; List<Team> result = em.createQuery(jpql, Team.class) .setFirstResult(0) .setMaxResults(3) .getResultList(); result.forEach(team -> { System.out.println("teamname = " + team.getName() + ", team = " + team); team.getMembers().forEach(member -> { //페치 조인으로 팀과 회원을 함께 조회해서 지연 로딩 발생 안함 System.out.println("-> username = " + member.getName() + ", member = " + member); }); }); 1.배치 사이즈를 적용하지 않은 경우 em.createQuery 실행으로 400개의 팀이 영속성 컨텍스트에 로딩된다 스트림에서 팀 내부의 맴버에 접근시 멤버를 영속성 컨텍스트에 로딩 하기위한 쿼리가 날아간다. 이 쿼리는 한 팀당 팀에 소속된 멤버를 로딩한다 따라서 1+400개의 쿼리가 날아간다 2. 배치 사이즈(100)을 적용한 경우 em.createQuery 실행으로 400개의 팀이 영속성 컨텍스트에 로딩된다 스트림에서 팀 내부의 멤버에 접근 하면 해당 팀의 멤버가 로딩되지 않은 것을 확인한다 영속성 컨텍스에 존재하는, 멤버가 로딩되지 않은 팀들의 id를 배치 사이즈 즉 100개 만큼 수집한다. 수집된 팀 ID들을 사용하여 하나의 IN 쿼리 를 날려 해당 팀들의 멤버들을 한 번에 로딩한다 이후 다른 팀의 getMembers() 가 호출되면, 아직 멤버가 로딩되지 않은 팀들의 ID를 다시 수집하여 IN 쿼리를 날리는 과정을 반복한다 총 1+4 만큼 쿼리가 날아간다 이 시나리오가 정확한지 알고 싶습니다!
해결됨
자바 ORM 표준 JPA 프로그래밍 - 기본편
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 안녕하세요! 매번 좋은 강의 감사드립니다! 영속성 컨텍스트는 메모리 구조인데, 캐시와 버퍼 역할을 모두 한다고 이해해도 될까요? 캐시 는 자주 사용하는 데이터에 빠르게 접근할 수 있는 속도 향상이 목적이고, 버퍼 는 입출력을 잠깐 모아두는 임시 저장소 개념입니다. 영속성 컨텍스트가 둘 다의 역할을 한다고 볼 수 있을까요?
미해결
코드로 배우는 React 19 with 스프링부트 API서버
위 그림은 교재 195페이지 내용입니다. localhost:8080으로는 교재의 내용대로 잘 실행이 되었습니다. 그래서, 지금은 aws beanstalk에서(localhost:8080이 아니 aws 서버)에서 윗 부분을 실행 시켜볼려고 하니, 3가지에 부딪혔는데... 당장 내 서버(aws서버)의 upload폴더는 어디에서 볼 수 있으며, 어떻게 upload 폴더에 aaa.jpg를 올리며, 'localhost:8080/api/products/view/aaa.jpg 대신에 "beanstalk도메인/api/products/view/내파일이름"으로 위의 사진 처럼 실행시킬 수 있는지 위 3가지에 대해서 정중히 질문드립니다. (수정 추가) 지금 aws RDS 의 CRUD는 원활히 이루어지고 있습니다.
미해결
코드로 배우는 React 19 with 스프링부트 API서버
안녕하세요. 강의를 듣다가 QTodo 사용하는 시점에서 문제가 발생하여 문의드립니다. gradle 빌드시점에 QTodo 클래스를 생성하는 것 까진 확인을 하였는데 search1 메소드에서 QTodo를 사용하려고 하니 클래스 인식 자체를 못하고 있습니다.(import도 안됨) 강의 내용상으로 봤을 때 build 디렉토리에서 인위적으로 복사한 것 같진 않은데 해당 클래스를 어떻게 import해서 사용해야 할지 몰라서 문의드립니다. springboot 버전은 3.3.10입니다.
해결됨
코드로 배우는 React 19 with 스프링부트 API서버
todo list 에서 검색어를 입력하여 검색된 결과를 화면에 출력하려면 어떻게 구현해야 하는지요? 예제에는 이런 것이 없는 거 같은데 제가 대충봐서 잘못 이해하고 있는 건가요? 전체적인 흐름으로 설명해주시면 감사하겠습니다.
미해결
자바 ORM 표준 JPA 프로그래밍 - 기본편
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 영한님 안녕하세요! 비슷한 질문이 있긴했는데.. AI 인턴 및 다른 답변들과 영한님이 이전 질문글 에서 남겨주신 부분이랑 조금 맞지 않는 부분이 있는 것 같아서 한 번 더 여쭤봅니다.. application.yml에서 설정하는 spring.jpa.properties .hibernate.jdbc.batch_size 속성 값과 쓰기지연저장소의 DB 쿼리 요청 방식이 조금 헷갈리는데요..! 쓰기지연저장소의 경우, 트랜잭션 커밋 시까지 SQL 을 모아두었다가, 트랜잭션이 커밋되는 시점에 flush()를 통해 DB에 쿼리를 하는 개념으로 알고 있습니다. 그러면 쿼리가 4개가 쓰기 지연저장소 버퍼에 있다고 할 때, 네트워크 전송은 1번만 이루어지나요? 아니면 4번 이루어지고, 네트워크 전송에서 이점을 얻는게 아닌, 커넥션을 맺는 행위를 1번만 함으로써 성능상 이점을 챙기는 걸까요? spring.jpa.properties .hibernate.jdbc.batch_size의 경우는, 한 번의 네트워크 전송마다 해당 size의 값만큼 쿼리를 보냄으로써, 네트워크 전송 횟수를 줄이는 데 그 목적이 있는 것으로 아는데, 쓰기 지연 저장소가 네트워크 전송을 커밋 시점에 1번으로 줄인다면 굳이 batch_size라는 속성이 필요한가 싶습니다..! 각각의 경우에 네트워크 전송이 어떻게 이루어지는 지 알 수 있을까요?
미해결
Practical Testing: 실용적인 테스트 가이드
안녕하세요 선생님 강의 잘들었습니다.! 강의 이후 복습 하며 사이드 프로젝트를 하며 성장 하고 있습니다. 프로젝트를 하던중 궁금증이 생겨서 블로그 글을 찾아 보았지만 관련된 글을 찾지 못하여 질문을 드립니다. 회원 관련된 API = UserController -> UserService의 흐름으로 사용 하였습니다. 하지만 User API가 너무 많아져 특정 API를 수정할 때 찾기 어려워졌습니다. 그레서 이걸 분리 할수 없을까에 대한 고민이 생겼고 행위에 따라 분리 했습니다. [ Controller 분리 ] 검증 관련한 API를 VerficationController으로 모았습니다. VerficationController에서 필요한 자원에 따라 UserService, EventService를 사용 하였습니다. [ 질문 ] 1. Controller를 행위에 따라 부분적으로 분리 하여도 괜찮나요? UserController / EventController / VerificationController 분리 했을때 통일성이 없다는 느낌이 들어서 고민 입니다. Controller / Service 책임을 어떻게 설정 하시나요? 회원 관련된 요청이면 UserController 회원 로직이면 UserService를 사용 했습니다. 하지만 API가 너무 많아 분리를 할때 어떤 기준으로 분리를 해야 할지 모르겠습니다.
미해결
자바 ORM 표준 JPA 프로그래밍 - 기본편
안녕하세요. 강의와 강의 자료를 보는 도중, 강의 자료에 있는 고아객체 - 주의 부분에서, @OneToOne, @OneToMany만 가능한 이유 에 대해서는 특별히 설명을 안해주신거 같아서요.. 혹시 @OneToOne, @OneToMany만 가능한 이유가 무엇인지 알 수 있을까요? 감사합니다.
미해결
스프링 DB 2편 - 데이터 접근 활용 기술
src/main/resources/application.properties ``` groovy spring.profiles.active=local spring.datasource.url=jdbc:h2:tcp://localhost/~/test spring.datasource.username = sa ``` 이렇게 설정만 하면 스프링 부트가 해당 설정을 사용해서 커넥션 풀과 DataSource , 트랜잭션 매니저를 스프링 빈으로 자동 등록한다. (앞에서 학습한 스프링 부트의 자동 리소스 등록 내용을 떠올려보자.) 이 부분에서 자동 리로스 등록내용이 어디 강의에 있나요..?
미해결
코드로 배우는 React 19 with 스프링부트 API서버
동영상 강의에 있는 내용대로 ProductController에서 @GetMapping("/list")에 @PreAuthorize("hasAnyRole('ROLE_USER','ROLE_ADMIN')")를 작성하고나서 postman에 login 후 accessToken을 가져와서 get방식으로 토큰을 넣어서 입력하면 status : 500, "error": Interner Server Error가 뜹니다.. @PreAuthorize부분을 주석처리하고 실행해보면 list값이 잘 나오네요.. 어디부분이 잘못 된걸까요?? 참고로 CustomSecurityConfig클래스에 @EnableMethodSecurity추가도 했습니다. @PreAuthorize("hasAnyRole('ROLE_USER','ROLE_ADMIN')") @GetMapping("/list") public PageResponseDTO<ProductDTO> list(PageRequestDTO pageRequestDTO){ return productService.getList(pageRequestDTO); } 여기가 ProductController 클래스 package org.zerock.apiserver.security.filter; import com.google.gson.Gson; import jakarta.servlet.FilterChain; import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import lombok.extern.log4j.Log4j2; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.web.filter.OncePerRequestFilter; import org.zerock.apiserver.dto.MemberDTO; import org.zerock.apiserver.util.JWTUtil; import java.io.IOException; import java.io.PrintWriter; import java.util.List; import java.util.Map; @Log4j2 public class JWTCheckFilter extends OncePerRequestFilter { @Override protected boolean shouldNotFilter(HttpServletRequest request) throws ServletException { //true == not check String path = request.getRequestURI(); log.info("------check uri---------"+path); if(path.startsWith("/api/member/")){ return true; } //false == check return false; } @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { log.info("----------------------"); log.info("----------------------"); log.info("----------------------"); String autoHeaderStr = request.getHeader("Authorization"); //bearer // 7개 후 JWT 문자열 try { String accessToken = autoHeaderStr.substring(7); Map<String, Object> claims = JWTUtil.validateToken(accessToken); log.info("JWT claims: " + claims); // filterChain.doFilter(request, response); String email = (String) claims.get("email"); String pw = (String) claims.get("pw"); String nickname = (String) claims.get("nickname"); Boolean social = (Boolean) claims.get("social"); List<String> roleNames = (List<String>) claims.get("roleNames"); MemberDTO memberDTO = new MemberDTO(email, pw, nickname, social.booleanValue(), roleNames); log.info("---------------------------------"); log.info(memberDTO); log.info(memberDTO.getAuthorities()); UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(memberDTO, pw, memberDTO.getAuthorities()); SecurityContextHolder.getContext().setAuthentication(authenticationToken); filterChain.doFilter(request, response); }catch(Exception e){ log.error("JWT Check Error --------------------"); log.error(e.getMessage()); Gson gson = new Gson(); String msg = gson.toJson(Map.of("error", "ERROR_ACCESS_TOKEN")); response.setContentType("application/json"); PrintWriter printWriter = response.getWriter(); printWriter.println(msg); printWriter.close(); } //destination filterChain.doFilter(request, response); } } 여기가 JWTCheckFilter부분입니다.
미해결
스프링 DB 2편 - 데이터 접근 활용 기술
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] Requires_new를 통해 내부 트랜잭션이 시작되고 내부 트랜잭션은 커밋, 외부 트랜잭션은 롤백이라고 했을 때 그대로 동작한다고 이해하면 될까요?
미해결
실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] OrderServiceTest에서 id to load is required for loading org.springframework.dao.InvalidDataAccessApiUsageException: id to load is required for loading 에러가 발생합니다. ID값이 왜 NULL인지 찾고 있는데 잘 모르겠네요.. 도움요청합니다. package jpabook.jpashop.service; import jakarta.persistence.EntityManager; import jpabook.jpashop.domain.Address; import jpabook.jpashop.domain.Member; import jpabook.jpashop.domain.Order; import jpabook.jpashop.domain.OrderStatus; import jpabook.jpashop.domain.item.Book; import jpabook.jpashop.domain.item.Item; import jpabook.jpashop.repository.OrderRepository; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.transaction.annotation.Transactional; import static org.junit.jupiter.api.Assertions.*; @SpringBootTest @Transactional class OrderServiceTest { @Autowired EntityManager em; @Autowired OrderService orderService; @Autowired OrderRepository orderRepository; @Test public void 상품주문() throws Exception { //given Member member = new Member(); member.setName("회원1"); member.setAddress(new Address("서울", "강가", "123-123")); em.persist(member); Book book = new Book(); book.setName("시골 JPA"); book.setPrice(10000); book.setStockQuantity(10); //when int orderCount = 2; Long orderId = orderService.order(member.getId(), book.getId(), orderCount); //then Order getOrder = orderRepository.findOne(orderId); assertEquals(OrderStatus.ORDER, getOrder.getStatus(), "상품 주문시 상태는 ORDER"); } @Test public void 주문취소() throws Exception { //given //when //then } @Test public void 상품주문_재고수량초과() throws Exception { //given //when //then } }
미해결
Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
섹션1의 ' Cloud Native Architecture ', 'Cloud Native Application' 강의에서 영상이 나오지 않는데 원래 그런건가요? 아래처럼 까맣게 아무것도 안나오고 소리만 납니다.