묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 시큐리티 OAuth2
restfual api 개발할때
안녕하세요 선생님. 지금가지 선생님의 강의를 바탕으로 oauth 를 사용하는 프로젝트를 구축하는데 있어 궁금점이 생겨 질문드립니다.소셜로그인 인증 챕터 부분에서는 전형적인 session 인증 방식인데 restful api 서버 개발시에는 어떻게 설정해야할까요? 대안으로 찾아본바 successHandler 를 커스텀하게 설정하여 jwt 로 암호화해서 서버 api로 리다이렉트 시 쿼리파라미터에 jwt를 넣어 프론트에게 jwt 를 전달하는데 이 방식이 맞나요?또한 강의에서 restfual api 에 대해 다루신다면 어느 챕터에서 확인할 수 있을까요?
-
미해결스프링 핵심 원리 - 기본편
solid 면접에서 질문 받으면 어떻게 대답해야 하나요
solid 면접에서 질문 받으면 어떻게 대답해야 하나요?저의 언어로 정제하고 싶은데 알랑말랑 어렵네요 다른 분이 설명하신거 참고해서 나름대로 해석해 봤는데 이렇게 말해도 괜찮을까요? *SOLIDSRP: 단일 책임 원칙(single responsibility principle)한 클래스는 하나의 책임만 가져야 한다. 변경이 있을 때 파급 효과가 적으면 단일 책임 원칙을 잘 ᄄᆞ른 것SRP원리를 적용하면 책임 영역이 확실해지기 때문에 한 책임의변경에서 다른 책임의 변경으로의 연쇄작용에서 자유로울 수 있습니다. OCP: 개방-폐쇄 원칙(Open/closed principle)소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다. 새로운 변경사항이 발생했을 때 객체를 직접 수정하지 않고도변경사항을 적용할 수 있도록 설계해야함을 말합니다 DI, IoC가 필요합니다. LSP: 리스코프 치환 원칙(Liksov substitution principle)객체는 프로그램의 정확성을 깨지 않으면서 하위 타입의 인스턴스로 바꿀수 있어야 한다. 클라이언트는 인터페이스 구현객체의 내부를 모르기 때문에 믿고 쓰기 위해선 인터페이스를 구현한 객체가 인터페이스의 사용 의도에 맞게 구현해야 된다는 것을 의미합니다. ISP: 인터페이스 분리 원칙(Interface segregation principle)특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다 특정 클래스에서 다 쓰지 않는 다양한 추상메서드가 들어간 커다란 인터페이스 보 다는 인터페이스를 특정 클라이언트에 맞게 구체적이게 쪼개는 것을 의미합니다. DIP: 의존관계 역전 원칙(Dependency inversion principle) 프로그래머는 추상화에 의존해야지 구체화에 의존하면 안된다. 클라이언트가 구현객체에 의존하는 것이 아닌클라이언트와 구현객체 사이에 인터페이스를 두고 클라이언트와 구현객체가인터페이스에 의존하여 구현객체를 변경해도 클라이언트에 변경이 없음을 의미합 니다.
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
테스트 시 테이블 생성 방법
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]테스트시 테이블 초기 생성 질문드립니다.강의에서는 테스트 테이블 세팅을 위해 /test/resources/schema.sql 파일을 생성하고 내부에 DDL을 작성하여서 테이블을 생성해주었는데요.이 방법은 엔티티가 많아질 수록 DDL이 많아져서 관리하기에 어려움이 있을 것 같다는 생각이 듭니다.그래서 test의 application.properties 내부에 spring.jpa.hibernate.ddl-auto=create 설정을 주어 테이블 생성과 validation을 위임하는 것이 좋지 않을까 하는 생각이 있는데, 어떻게 생각하시는지 궁금합니다.
-
해결됨스프링 DB 2편 - 데이터 접근 활용 기술
구조 관련 질문 드립니다!
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]서비스가 스프링 데이터 JPA 와 Querydsl 둘 다 쓸때 repository 인터페이스에 의존하고 싶으면 앞에서 설명해주신 어뎁터를 하나 중간에 넣어서 그 어뎁터가 repository를 implements하면서 안에서 스프링 데이터 jpa와 querydsl을 쓰면 되는건가요??
-
해결됨스프링 핵심 원리 - 기본편
영한님 로드맵 jpa 강의 질문드립니다
현재 영한님의 스프링 완전 정복 로드맵을 따라 학습하고 있는데요.JPA 로드맵도 동시에 학습하려 하고 있습니다.JPA 로드맵 학습 전에 스프링 로드맵을 듣고 학습해야 좋을까요? 아니면 충분히 들을 수 있을만한 내용일까요?
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
변경 감지가 일어나는 시점에 대하여 궁금한 점이 있습니다.
안녕하세요, 언제나 질 좋은 강의 잘 듣고 있습니다. JPA 영속성 컨텍스트에서 변경 감지가 일어나는 시점에 대해서 궁금한 점이 있습니다.영한님께서 강의 10분 45초 즈음에, "트랜잭션이 커밋되는 시점에 JPA가 변경 감지를 실행한다." 라고 언급을 해주셨습니다. 제가 의문이 드는 지점은,영속성 컨텍스트 안에서의 변경 감지영속성 컨텍스트 flush트랜잭션 커밋이 3개가 발생하는 시점입니다. flush가 발생하면, 영속성 컨텍스트의 쓰기 지연 sql 저장소의 쿼리문들이 비워지고, db에 전송된다. 이 때 1차 캐시는 비워지지 않고, 트랜잭션이 커밋되는 시점에서 db에 전송된 쿼리문들이 커밋됨과 동시에 1차 캐시의 스냅샷과 현재 엔티티 상태와의 변경 감지가 일어난다. ---> 이것이 현재 제가 기본적으로 알고 있는 지식입니다. 제 질문은 다음과 같습니다.그런데, 변경 감지라는 것이 결국 update 쿼리문을 날리기 위함인데, 저는 flush 이전에 변경 감지가 발생하여 쓰기 지연 sql 저장소에 update 쿼리문이 저장되는 것이 순서에 맞지 않나? 라는 생각이 듭니다.또한 커밋되는 순간 변경 감지가 일어난다면, 트랜잭션 종료 바로 직전에 update 쿼리문이 날라가는 것이 맞을까요? 즉, (커밋으로 인한 flush가 아닌) 임의의 flush 호출 상황에서는 변경 감지로 인한 쿼리문이 전송되지 않는 것인가요? 질문 이외에도, 제 이해에 틀린 점이 있다면 알려주시면 감사하겠습니다!
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
컨트롤러 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]컨트롤러에 관한 내용인데요,어떠한 요청이 들어왔을때스프링빈에 등록되어있는 컨트롤러가 있다면, 거기에 맵핑이 된다고 하였는데요, 컨트롤러의 위치나 그런거 상관없이 같은 패키지 안에 있는 모든 컨트롤러를 확인하는건가요? 그럼 소스코드가 방대해질때, 해당 요청이 적절한 컨트롤러와 매핑이 되어있는지 확인하는데 내부적으로 시간이 오래 걸리는점은 없을까요? 알아서 해쉬가 되어있나..?
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
자바스크립트 인라인
혹시 자바스크립트에서 타임리프 쓸때 리스트의 몇번째요소를 꺼내오고 싶을때는 어떻게 해야하나요? 아래가 리스트라고 한다면/*[[${cartItemList}]]*/
-
미해결스프링 핵심 원리 - 고급편
클래스 기반 프록시에서
클래스 기반 프록시를 만들 때,프록시는 프록시 대상 클래스를 상속 받고, target을 주입 받아서 호출하는데어차피 프록시 대상 클래스를 상속 받아야한다면, 그냥 super.로직()을 호출하면 안되나요?그럼 target을 주입 받을 필요도 없어질텐데 혹시 이 방법은 왜 안되는지 궁금해서 질문 드립니다.
-
미해결스프링 핵심 원리 - 기본편
Test 코드에서 this.memberService 질문
Test Code 부분에서 궁금한점이 생겨 질문 남깁니다.Test Code에서는 this.memberService = appConfig.memberService();로 사용하는 것과 차이점이 있나요? this.memberService = appConfig.memberService();memberService = appConfig.memberService();둘다 실행해봤을 때는 정상적으로 테스트 통과하긴 합니다
-
미해결스프링 프레임워크는 내 손에 [스프1탄]
질문
git에 올라온 파일을 사용했는데 이렇게 오류가 나오고 있습니다. servlet-context.xml에 <resources mapping="/resources/**"location="/resources/" />이렇게 설정이 되어 있는데 혹시 이것 때문인지 궁금합니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
DTO사용에 대한 질문
강의 23분18초 부분updateItem을 DTO로 받는것에 대해 질문 2가지있습니다.1. 아래와 같이 서비스계층의 DTO를 만들어서 파라미터로 사용하는부분은 이해했는데, 애초에 그냥 form을 넘겨주는것은 잘못된 설계인가요?@PostMapping("/items/{itemId}/edit") public String updateItem(@ModelAttribute("form") BookForm form) { UpdateItemDto updateItemDto = new UpdateItemDto(form); itemService.updateItem(updateItemDto); //itemService.updateItem(form); return "redirect:/items"; }강의에선 생략하는 부분인것같은데 만약 엔티티에 change() 함수를 만든다했을때 Item을 상속받는 Book, Album,Movie 각각에 change함수를 만들어주어야하나요..? (Item이라는것을 상속받는 3개의 클래스에대해 어떻게 처리해줘야할지 모르겠어요.)Item (부모클래스)에 필드들을 private -> protected로 바꾸고, Book의 change함수를 아래와 같이 만들면되나요? (이경우 Album, Movie 사용한다고 가정하면 똑같이 만들어줘야하는지?)public void change(UpdateItemDto dto) { this.name = dto.getName(); this.price = dto.getPrice(); this.stockQuantity = dto.getStockQuantity(); this.author = dto.getAuthor(); this.isbn = dto.getAuthor(); }
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
java -jar 맥os 터미널에서 실행시킬 경우 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]1). 인텔리제이 상에서는 정상적으로 localhost:8080localhost:8080/hello 모두 다 실행이됩니다.터미널에서 할경우 localhost:8080/hello 를 입력할 경우 hello.html이 잘 나오는데, 그냥 localhost:8080 입력하면 웹 브라우저에서는 Whitelabel Error PageThis application has no explicit mapping for /error, so you are seeing this as a fallback....가 발생하고 터미널 창에는 2022-10-30 22:24:56.079 INFO 4861 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet'2022-10-30 22:24:56.080 INFO 4861 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'2022-10-30 22:24:56.083 INFO 4861 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 3 ms 로 로그가 나오는데 어떤 문제일까요 ?? 2). 그리고 build ~~ src 디렉토리 안에 스냅샷.jar 과 스냅샷-plain.jar 2개가 있는데 차이가 무엇일까요 ?
-
해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
Postman 기술 질문입니다,(스프링 시큐리티)
안녕하세요 강사님강의 감사하게 잘 듣고 있습니다.다름이 아니라 제가 연습 중인 프로젝트에 Spring-Security, Auditing, Envers를 적용해 보고 있습니다.당연히 데이터를 등록, 수정, 삭제 시 DB에 현재 로그인 중인 사용자 정보가 담기게 되는데 postman에서 그냥 테스트를 하게 되면 오류가 나더라고요,1) 이러한 부분을 해결하기 위해 postman에서 따로 설정을 해줄 수 있는 부분이 있는지도 궁금합니다.(이와 비슷한 관련 강의가 있는지도 궁금합니다!)2) 강의 내용을 보면 DTO 클래스를 ApiController에 작성하셨는데 실무에서는 domain 패키지에 따로 따로 생성해주나요? (그렇게 되면 Create, Update, Delete 너무 많아지는 것 같아서요)
-
해결됨재고시스템으로 알아보는 동시성이슈 해결방법
비관적 락과 update product set stock = stock -1 where id = 1의 차이
update product set stock = stock -1 where id = 1 이렇게 할 경우 읽는 작업과 쓰는 작업이 원자적으로 이루어지고, 이 쿼리가 커밋하기 전까지는 다른 update 쿼리는 블락되기 때문에 비관적 락과 다른 점이 없다고 생각되는데요.제가 잘못 생각한 부분이 있을까요?
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
리턴값
29:31 처럼 Exception을 터뜨리는게 아니라리턴값 String 으로 보내서 이것을 호출한 컨트롤러가 그 다음 분기처리를 하라는 말씀이신가요 ??
-
해결됨스프링 핵심 원리 - 기본편
Bean Type 이 아닌 이름이 중복시
안녕하세요 강사님. Bean 생성 관련해서 여러가지 Test 를 해보다가 의문점이 생긴 부분이 있습니다. 빈 생성 이름이 중복되는 경우는 어떠한 기준으로 bean 을 생성하는 건가요?? Type 이 중복될 때처럼 실행시에 오류를 발생시키지 않는 것 같아서요!@Bean(name = "discountPolicy") public DiscountPolicy discountPolicy(){ System.out.println("AppSpringConfig.discountPolicy : Rate"); return new RateDiscountPolicy(); } @Bean(name = "discountPolicy") public DiscountPolicy discountPolicy2(){ System.out.println("AppSpringConfig.discountPolicy : Fix"); return new FixDiscountPolicy(); }다음과 같이 시도를 해봤을 때, 실행 창에는 Rate 만 출력이 되고, 만약 단순히 코드 위치를 변경할 경우 Fix 가 출력됩니다. 어떤 것을 먼저 읽었냐에 따라서 먼저 등록된 bean 을 유지시킨다고 봐도 되는 걸까요? 또한, ComponentScan 방법을 사용하여FixDiscountPolicy 에 @Component, RateDiscountPolicy에 @Component 를 달 경우 Bean type 중복된다라는 에러를 호출시켰고, 이에 관련하여 강의해주셨습니다. 그래서 @Primary 를 통해 우선권을 가지는 Bean 을 알려줬습니다. 하지만 위와 같이 Bean 등록을 할 경우 왜 같은 에러가 발생하지 않는지 궁금합니다! 둘다 DiscountPolicy 라는 역할 객체에 대한 구현 객체 두개가 등록되고 있는데, 왜 같은 에러가 발생하지 않는 걸까요? 감사합니다!
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
윈도우 h2.bat실행시 아무 반응이 없습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)예[질문 내용]여기에 질문 내용을 남겨주세요. h2.bat실행시 아무창도 뜨질 않습니다. 아예 반응이 없습니다.열심히 구글링하여서 3시간가량 할 수 있는 방법을 동원해보았는데 해결이 되지 않아서 질문남깁니다 ㅜㅜh2 버전은 강의에서 말씀하신 1.4.200 버전으로 다운로드 받았습니다아래 해본 방법들을 남깁니다. 모두 결과는 실행하였을 때 반응이 없었습니다.[해본 방법들]cmd창에서 h2.bat 실행 , cmd창에서 "h2.bat" 실행cmd창에서 h2.sh 실행, cmd창에서 "h2.sh" 실행cmd창에서 h2w.bat 실행, cmd창에서 "h2w.bat" 실행다운로드받은 경로 들어가서 마우스로 h2.bat 실행cmd를 관리자권한으로 실행하여 1,2번 방법h2파일 재설치 후 1,2,3,4,5 방법노트북 재부팅 후 1,2,3,4,5 방법프로젝트 폴더 안에있는 application.properties 파일에서 h2데이터베이스 연동설정(이건 아닌것같지만 혹시나해서해봤습니다.)h2포트번호 확인 후 cmd에서 포트번호 전부 확인해봤지만 사용중인 포트번호가 없어서 h2포트번호를 그냥 바꿔본 후 실행환경변수 재설정 열심히 검색중에 하단 링크를 보았는데 해결방법을 못찾으신건가요 ㅠ 답변부탁드립니다!!만약 해결방법이 없다면 Oracle을 연동하여 사용해보겠습니다. 최대한 강의와 비슷하게 진행하고 싶어서 꼭 해결할 수 있었으면 좋겠네요https://www.inflearn.com/questions/175580
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
도메인이라는게 도대체 무엇인가요?
개발공부를 하다보면 도메인, 도메인지식, 도메인네임 등 똑같이 도메인이라는 단어이지만 뜻이 많이 다를 것이라고 유추되는 단어들이 많은데요.. 검색을 해봐도 잘 와닿지 않아서 참고할만한 글이나 답변을 주실 수 있으실까요?
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
질문드립니다. 갑자기 스프링 아무것도 안됨
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]몇 주 있다가 다시 해보려니까 갑자기 모든 스프링이 에러가 뜨고 안됩니다.. 혹시 이유아실까요