자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
안녕하세요, 조교님 30강 강의를 들으면서 문제가 발생해 질문을 남기게 되었습니다. 이 전까지는 정상적으로 작동하였는데 "책 등록" 기능이 제대로 동작하지 않습니다. 코드에는 문제가 없어 보이고, 서버는 정상 동작합니다. 책 등록에서 저장 버튼을 누르면 위와 같은 메시지가 뜨는 상황인데, 혹시 해결방법을 아실까요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 안녕하십니까 선생님! 질문 제목을 보고 얘는 왜 이 질문을 여기에 올렸을까라고 의아해하실 수도 있는데, 사실 제가 영한님 스프링 관련 강의는 다 사서 열심히 보고 있는데(정말 도움 많이 받고 있습니다. 항상 정말 잘 듣고 있습니다!!) JPA는 영한님이 쓰신 JPA 책을 사서 보고 있습니다! 그런데 프록시 객체 파트를 읽어보던 도중 이해가 되지 않는 부분이 있어 질문을 쓰고 싶은데 JPA 쪽에 질문으로 쓰려고 해도 강의를 산 사람만 작성할 수 있어 부득이하게 여기에서 질문하게 되었습니다 죄송합니다 ㅜㅜㅜ 다름이 아니라 지금 JPA의 프록시 객체 파트를 공부하고 있습니다. 그런데 294P 의 8.1.2 프록시와 식별자 부분에서 엔티티를 em.getReference, 즉 프록시로 조회할 때 엔티티 접근 방식을 AccessType.PROPERTY 로 설정한 경우 getId를 호출해도 프록시를 초기화하지 않는다고 하셨습니다. 그래서 직접 한번 코드를 작성해보았습니다. 우선 AccessType.PROPERTY 방식부터 적용해보았습니다. PROPERTY와 FIELD 두 방식 모두 실험 전 create 옵션으로 Parent 객체 하나를 만들어두고 후에 none으로 바꾸어 진행했습니다. Parent 객체 생성 코드 Parent parent = new Parent(); parent.setId(1L); parent.setName("parent1"); em.persist(parent); Parent.java @Entity @Setter @Getter @Access(AccessType.PROPERTY) public class Parent { private Long id; private String name; @Id public Long getId() { return id; } } JpaMain.java public static void main(String[] args) { EntityManager em = emf.createEntityManager(); EntityTransaction tx = em.getTransaction(); tx.begin(); Parent foundParent = em.getReference(Parent.class, 1L); System.out.println(foundParent.getClass()); System.out.println(foundParent.getId()); System.out.println(foundParent.getName()); tx.commit(); em.close(); emf.close(); } 해당 코드를 실행시켰을 때 이렇게 나온걸 보니 확실히 getId 후에 getName 조회시 프록시 객체를 초기화(select 구문 실행)을 했다는 것을 알 수 있었습니다. 그런데 AccessType.FIELD로 조회하면 getId 를 할때에도 프록시 객체를 초기화한다고 하여 아래와 같이 Parent.java의 코드를 다시 작성하여 JpaMain.java를 실행해보았습니다. Parent.java @Entity @Setter @Getter @Access(AccessType.FIELD) public class Parent { @Id private Long id; private String name; } 제 예상으로는 getId 실행시 프록시 객체를 초기화 한다고 하셨으니 실제 출력에는 Parent의 getId()가 실행되기 전에 select 문이 실행되어야 할 것이라고 예상하였습니다. 하지만 위와 같이 getId()에는 프록시 객체를 초기화하지 않는 것처럼 보여지는 출력이 나왔습니다. 책에서는 AccessType.FIELD 사용시 getId()를 호출하면 JPA는 getId()가 id만 조회하는 메소드인지 다른 필드까지 활용해서 어떤 일을 하는 메소드인지 알지 못하므로 프록시 객체를 초기화한다 고 나와있는데 왜 이런 결과가 나온 것일까요? 제가 잘못 이해하고 있는 것이 있을까요?
recovery() 를 스케줄로 구현한 부분에 있어서 궁금증이 있습니다. 설명에도 언급 되었듯이 k8s 환경과 같이 scale-out 형태로 서비스를 제공하면 동시성 이슈가 발생될 것으로 예상되는데요. 단순하게 하나의 unknown order 만 생성해서 테스트로 갈음하기에는 검증이 부족하다고 느껴지는데, 동시성 검증은 어떻게 진행하셨을까요?
문제 Zipkin Dependencies 화면만 안나옴... (Chrome 에서만 안됨... Firefox 에서는 됨...) 1) 개발자도구 확인 - Network You need to enable JavaScript to run this app 확인 https://support.google.com/adsense/answer/12654?hl=en 위 링크를 확인해서 크롬에서 JavaScript 가 활성화 되어있는지 확인 → 이미 되어있었음... 2) 개발자 도구 확인 - Console Error creating WebGL context. 확인 chrome://flags ANGLE graphics backend 옵션 확인 > OpenGL 설정 → 그래도 안됨… 3) 마지막.. chrome://settings 시스템 탭 클릭 "가능한 경우 그래픽 가속 사용" 설정 켜기... → 성공… 같은 문제가 발생하시는 분들에게 도움이 되면 좋겠습니다. 참고 사이트입니다. https://help.lucid.co/hc/ko/articles/17480912789908-문제-해결-WebGL https://support.google.com/chrome/thread/25018979/status-could-not-create-a-webgl-context?hl=en
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] HomeController.java 와 home.html을 다 작성하고 localhost:8080으로 실행하려고 하니 HomeController.java가 실행이 안됩니다. 인터넷에는 src를 리소스 루트로 지정하고 하면 된다고 해서 리소스 루트로 src를 지정하고 첫 번째 사진과 같이 파일 위치를 지정하는 부분에서 계속 없다고 뜨는데 어떻게 해야하나요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 콘솔창에 warn이 뜨지 않습니다. 스프링을 먼저 실행한 후에 http://localhost:8080/hello-mvc 에 들어가서 오류가 나와도 콘솔창에 warn이 나오지 않습니다. 어떻게 해야할까요?
학습중 궁금한 것은 언제든 문의 하세요. 질문을 최대한 자세히 남겨주시면 반드시 답변 드리도록 하겠습니다. 추가로 알고 싶은 내용도 요청해주시면 강의 자료를 업데이트 해서 제공할 예정입니다. 안녕하세요~! 10.Pub -Sub모델을 이용한 실시간 알림 (WebSocket, STOMP 이용) part 1 해당 자료가 다운이 되지 않습니다!
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 강의 내용에서 계속해서 쿼리 횟수를 줄이는 방향으로 확장시키시는데 일반적으로 db에 sql문 날리는 횟수를 줄이는 것이 가장 중요한 것이 맞을까요? 극적으로, db에 간단한 sql문 2번 날리기 vs 조인 많은 sql문 1번 날리기 하면 후자가 더 성능이 좋은지 여쭙니다. 물론 상황에 따라 다르겠지만 일반적인 상황을 가정하여 답해주시면 감사할 것 같습니다. 일반적으로 db 네트워크 비용때문에 후자가 더 좋은게 맞을까요?
강의 잘 듣고 있습니다! 현재 Event에서 다대일로 study를 단방향으로 참조하고있는데 스터디 모집시에 event쪽이 삭제되지 않아 버그가 생깁니다. 해결법으로는 2가지 생각해봤는데요. 양방향관계로 변경 후 Cascade사용 단방향으로 유지하지만 스터디종료 메서드에서 event를 수동으로 remove처리 1번 방법으로는 엔티티 설계 구조가 깨지니까 2번방법이 나으려나요. 고민이됩니다. 이런 참조 문제가 더 생길것을 방지해 양방향 관계로가는게 더 유연할지가 고민입니다. 아니면 초기설계목표상 모임이 하나라도 존재하면 스터디가 삭제되면안되는것인가요?
===================================== [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 회원가입 테스트 시 Rollback(false)를 설정하고 실행은 정상적으로 되고 log에서도 insert 된 것을 확인할 수 있는데, h2 db 에서는 데이터가 들어와있지 않습니다. 왜 그런걸까요?
SecurityFilterChain 의 순서를 보면 AnonymousAuthenticationFilter 가 먼저이고 AuthorizationFilter 가 맨 마지막에 실행되는 것을 확인했습니다. Anonymous 강의에서 AnonymousAuthenticaionFilter는 authentication이 null 인 경우 AnonymousAuthenticaionToken을 생성하여 익명 사용자로 처리한고 Authentication이 null이 아닌 경우 doFilter()로 다음필터로 넘어간다고 하셨는데. 오늘 강의를 보니 anonymousAuthenticationFilter 에는 authenticaion 이 있는지 확인을 하지 않고 authorizationFilter 에서 getContext().getAuthentication() 을 통해 유무를 확인후 없다면 다시 AnonymousAuthenticationFilter 를 통해 AnonymousAuthenticationToken을 생성시켜 할당하는 것 처럼 보이는데 맞을까요? 즉 anonymousAuthenticationFilter doFilter() --> AuthorizationFilter getAuthentication() --> anonymousAuthenticationFilter에서 생성
해당 강의 1:51에서 갑자기 데이터베이스 익스플로러용 데이터그립 툴이 나오는데 이에 대한 설정은 어느 강의에서 확인할 수 있는 거죠? 느닷없이 나와서 혼동스럽기만 하네요. 섹션 1의 MariaDB와 부트 프로젝트생성에서도 하이디sql 툴 설정만 하셔서 데이터그립 툴은 어디에서 나온 건지 모르겠습니다.
안녕하세요. 강의 잘 듣고 있습니다. 강의에서 spring filter를 이용해서 controller 에서 들어온 요청정보들에 대한 log를 찍는걸 보여주셨는데요. 혹시 url 들어온 파라미터는 로그에 찍지않는지 궁금합니다. 그리고 요청마다 body가 안들어오는 경우가 있고, 파라미터만 들어온다던지 경우의 수가 다양할거같은데.. 이럴 때는 필터를 어떤식으로 구성해야하는지 궁금합니다.