묻고 답해요
160만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
인터셉터에서 HttpServletRequest 교체 방법
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]1. 우선 스프링 인터셉터에서 parameter 로 들어오는 request 를 변경 가능한지 궁금합니다.client 측에서 암호화된 데이터를 전송하고 암호화된 데이터를 복호화를 하고 싶은데, 모든 controller 에 하기 불편해서 interceptor 를 활용해 적용해보려고 합니다. 근데 request 자체를 교체하는건 어려운 것 같은데 이런 경우에는 어떤 방식을 채택하는 것이 좋을까요?
-
미해결스프링 시큐리티 OAuth2
loadUser 중 Missing attribute 'preferred_username' in attributes 에러 발생
55강 수강 중 client credentials 방식으로 변경 후 테스트 시 이런 에러가 발생합니다. 왜 그런걸까요 ㅜㅜ
-
미해결스프링 핵심 원리 - 고급편
final 키워드 사용 관련 질문
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]프록시 기술과 한계 - 스프링의 해결책 강의에서프레임워크 같은 개발이 아니라 일반적인 웹 애플리케이션을 개발할 때는 final 키워드를 잘 사용하지 않는다라고 하셨는데요, 다른 자료로 공부할 때 유틸 함수를 모아두는 유틸 클래스의 경우에는 상속이나 오버라이드를 막기 위해서 final 클래스와 static 메서드 등으로 사용하는 것도 좋다고 배웠습니다.영한님께서는 유틸 기능들도 순수 자바 클래스/메서드 보다는 스프링 컴포넌트로 관리하는게 좋다고 생각하시는 편인가요?
-
해결됨모든 웹 개발자가 봐야 할 단 한 장의 지도
추가 강의 요청
안녕하세요, 선생님.강의 잘 들었습니다. 많은 도움이 되었습니다. 감사합니다.현재 저는 IT 영업 직무로 근무하고 있습니다.회사에서 운영하는 프로그램을 SaaS형, API 연동형, SI 구축형의 세 가지 방식으로 판매하고 있습니다.SaaS형의 경우 프로그램 기능을 익히면 비교적 단순한 영업이 가능하지만,API 연동형이나 SI 구축형 영업의 경우 웹의 흐름과 인프라 구조에 대한 이해가 필요할 때가 많습니다.이런 이유로 IT 용어나 개념을 익히려 노력하고 있으나,내용이 생소하고 설명이 어렵게 느껴져서 어려움을 겪고 있습니다.다행히 개발 직군은 아니어서 깊은 기술 지식까지는 필요하지 않지만,고객사 IT 담당자와 원활하게 커뮤니케이션할 수 있을 정도의 이해도는 갖추고 싶습니다.혹시 선생님의 강의 중에서 이런 상황에 도움이 될 만한 강의가 있을까요?만약 없다면, 어떤 방식으로 공부를 시작하는 것이 좋을지도 조언 부탁드립니다.
-
해결됨모든 웹 개발자가 봐야 할 단 한 장의 지도
용어 질문드립니다.
강의 해주셔서 감사합니다!강의 내용중에 인스턴트 와 JOSN을 설명주셨는데,따로 찾아봤는데 어렵게 설명이 되어있어서쉽게 설명해주실 수 있나요?특히 인스턴트는 무슨말인지 도저히 모르겠습니다..
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
한꺼번에 선택해서 버튼을 누르는게 좋은 선택인지? 아니면 나눠서 버튼누르는게 좋은 선택인지??
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요. 궁금한점이 생겨서 질문을 드립니다.셀렉트, 싱글, 라디오 버튼을 만드는 예제에서, 상품을 한번에 등록하는것을 보았는데요. 오늘 생각해 보니까 나눠서 할때도 있다는 생각이 듭니다.(배송할때 페이지가 나누어져 있는게 생각이 났습니다) 그래서 궁금증은 만약에 어떤 것들을 등록할때 나눠서 페이지를 보여 줄수 있고, 페이지를 합쳐서 보여줄수 있다면 어떤게 좋은것인지?그리고 나눠서 보낸다면 어떤식으로 결과값을 저장해서 다음 페이지로 넘기는지 궁금합니다. 답변 부탁드립니다.
-
미해결토비의 클린 스프링 - 도메인 모델 패턴과 헥사고날 아키텍처 Part 1
핵사고날 아키텍처 책을 추천해주실 수 있으실까요??
안녕하세요 토비님언제나 헥사고날 아키텍처는 무엇이고 이걸 적용한다는 것이 왜 좋고 왜 필요하다는 것인지궁금했습니다. 이번 강의를 통해서 대략적인 흐름 어떻게 적용할 것인지 어떤 방향으로 작업 해야 하는지 살짝 이해할 수 있었습니다 조금 더 이해도를 높이고 싶은데.. 혹시 토비님께서 추천하시는 서적이 있으실까요??
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
@PostMapping("/members/new")가 동작하지 않습니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용] 올바르게 작성한 것 같은데 등록 버튼 클릭 시 홈으로 돌아오는 것도, sysout 내용이 콘솔에도 찍히지 않습니다 ㅜㅜ
-
미해결스프링 핵심 원리 - 고급편
안녕하세요
안녕하세요@Around가 포인트컷이고그밑에 메소드가 어드바이스가 맞을까요? 그렇다면 @Around가 포인트컷에 조건에 해당하는 곳에 프록시가 생성되고 비즈니스 로직이 실행이된다고 생각되는데 예전에는 프록시가 생성되는 지점 포인트컷 , 비즈니스 로직이 적용되는 포인트컷 조건이 있는 걸로 설명을 들었는데 @Around가 포인트컷이 프록시가 생성되는 포인트컷과 비즈니스 로직이 적용되는 포인트컷 두개의 의미가 모두 들어있는걸까요?감사합니다
-
미해결토비의 클린 스프링 - 도메인 모델 패턴과 헥사고날 아키텍처 Part 1
MemberRegister 질문드립니다.
domain 패키지 안에 activate메서드가 있는데 포트 역할을 하는 MemberRegister 인터페이스에 activate메서드가 또 필요한 이유가 어떤건가요??activate는 외부로 공개될 필요가 없는거 아닌가용??
-
미해결토비의 클린 스프링 - 도메인 모델 패턴과 헥사고날 아키텍처 Part 1
MemberService 코드 작성 중 질의
안녕하세요 실습 중 컴파일 오류가 왜 발생하는지 이해가 안되어 질문 남깁니다. private final MemberRepository memberRepository; private final EmailSender emailSender; private final PasswordEncoder passwordEncoder;해당 코드에서 EmailSender와 PasswordEncoder 부분에서 Could not autowire. No beans of 'EmailSender' type found. 컴파일 오류가 발생합니다. final을 제거하면 컴파일 오류가 발생하지는 않는데요 하지만 github 페이지에 올려주신 소스코드를 보면 현재 영상 시점과 코드 구조가 100% 일치하지는 않지만 스프링 빈 관련 설정을 따로 해준 것 같진 않아보입니다만.. 토비님 영상에서는 오류가 없고 제 코드에서는 컴파일 오류가 나네요. 어떤 시점에 따로 Spring Bean 관련 설정이 되어있는게 있다던가.. 아님 제가 빼먹은 부분이 있다면 알려주실 수 있으신가요? 문제가 되는 부분 전체 코드 첨부드립니다. 시간되실 때 확인 부탁드립니다. 감사합니다. package com.ggne.splearn.application.required; import com.ggne.splearn.domain.Email; /** * 이메일을 발송한다. */ public interface EmailSender { void send(Email email, String subject, String body); }package com.ggne.splearn.domain; public interface PasswordEncoder { String encode(String password); boolean matches(String password, String passwordHash); }
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
JPQL 대신 네이티브 쿼리를 사용해야 하는 경우
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]강의를 듣다가 JPQL을 생성해주는 JPA나 QueryDSL이 되게 편리하고 유용한 기술이라는 생각이 들었는데, 네이티브 쿼리를 활용해야 하는 상황에 대해서도 궁금해지더라구요.네이티브 쿼리를 활용해야만 하는 상황이나, JPQL 대신 네이티브쿼리를 사용하는 것이 효율적인 유스케이스를 알려 주실 수 있나요? 예를 들어, 대용량 배치 작업의 경우에는 ....과 같은 부분에서 오버헤드가 발생하는 JPQL 대신 네이티브 쿼리를 사용할 수 있는 JDBC 템플릿 등을 사용하는 것이 권장되서 많이 사용된다거나 하는 부분입니다.
-
미해결토비의 클린 스프링 - 도메인 모델 패턴과 헥사고날 아키텍처 Part 1
checkDuplicateEmail 메서드와 동시 요청에 관한 질문
안녕하세요 토비님! 좋은 강의 만들어주셔서 잘 듣고 있습니다.작은 질문이 하나 있는데요. checkDuplicateEmail 메서드와 동시 요청에 관한 질문이 있습니다.섹션 5. 28강 회원 애플리케이션 서비스 테스트(2) 20:47초 경에 email 중복 체크를 위하여 checkDuplicateEmail 메서드 코드를 작성하였고, 같은 email로 가입하려고 하면 DuplicateEmailException이 발생하는 것을 확인하였습니다. 그런데 여기서 다른 가정을 해보고 그런 상황에서 토비님이라면 어떻게 하셨을지 궁금합니다.만약 email이 아닌 id로 회원가입을 하는 상황을 가정한다면,email과 다르게 id는 여러 사람이 같은 id로 회원가입하려고 시도할 수 있습니다.따라서 동시에 2개의 요청이 들어오게 된다면 checkDuplicateEmail는 둘 다 통과하고 DataIntegrityViolationException이 발생하게 될 것입니다. (DB에서 유니크 제한을 걸었기 때문에)규칙인 id는 중복되지 않는다는 지켜지겠지만,사용자가 보게 될 예외는 우리가 의도했던 DuplicateEmailException가 아니게 되겠죠. 여기서 궁금한 점은 이런 상황까지 고려하여 코드를 작성하여야 하는 것인지아니면 그냥 넘어갈 것인지 궁금합니다. 저라면,드물게 발생할 것이라고 예상을 했다면 로깅만 잘 해놓고, 해당 예외가 많이 발생했거나 관련 cs문의가 많이 들어온다면 추가로 코드를 작성할 것 같습니다.처음부터 만약 많이 발생할 것이라고 예상했다면 try-catch를 통해 예외를 변경해줬을 것 같습니다.아마 다음과 같은 코드가 될 것 같습니다.@Override public Member register(MemberRegisterRequest registerRequest) { try { checkDuplicateEmail(registerRequest); Member member = Member.register(registerRequest, passwordEncoder); memberRepository.save(member); emailSender.send(member.getEmail(), "등록을 완료해주세요", "아래 링크를 클릭해서 등록을 완료해주세요"); return member; } catch (DataIntegrityViolationException e) { if (/*e를 통해 유니크 키 예외를 확인했다면*/) { throw new DuplicateEmailException(); } throw e; } }서비스의 코드가 현재보다는 보기 지저분해진다고 생각했습니다. (아니면 이 방법이 아닌 다른 방법이 있을까요?) 토비님은 어떻게 생각하시는지 궁금합니다.
-
해결됨토비의 스프링 6 - 이해와 원리
템플릿과 콜백의 역할 경계를 구분하는 기준
안녕하세요! 토비님ㅎㅎ 강의를 잘 듣고있는데, 궁금한게 있어 여쭤봅니다! 템플릿/콜백 구조에서 '고정된 틀(템플릿)'과 변하는 로직(콜백)의 경계를 어디까지 두는 게 좋을지 궁금합니다. 예를 들어 강의에서는 ApiTemplate 안에서 URI 생성, 응답 처리, 예외 변환까지 모두 포함되어 있는데, 이런 부분들도 콜백으로 분리하는게 맞을까요 아니면 템플릿 내부에 두는 게 더 적절할까요?
-
미해결토비의 스프링 6 - 이해와 원리
테스트를 작성하지않아도 되는 경우
안녕하세요 토비님명료한 설명, 가르침받고 있습니다!테스트 관련해서 모든 클래스마다 테스트가 있어야하나 생각해보다가 크게 두 가지 질문이 있어 이렇게 남겨봅니다~ 1.작성하는 모든 클래스에 대해 테스트를 해야하는지, 테스트를 만들지 않아도 괜찮은 경우가 있을까요?예를 들면 아래 경우에 테스트 의미가 있을까라고 생각이 들었네요 테스트 대상 클래스가 협력자(?)를 추가 로직없이 wrapping하는 경우, 즉 대상 클래스가 단순 wrapper인 경우 2.강의 중에서 PaymentService에 있던 valid 체크로직을 Payment로 이동하였고, 이에 따라 PaymentTest에 도메인 오브젝트에 대한 테스트를 작성하였습니다.헌데 PaymentServiceTest에서 valid에 대한 test suite가 있는 상황입니다. 이 경우 PaymentServiceTest만으로 PaymentTest는 커버가 되는 상황이기에 PaymentTest의 valid 테스트는 하지않아도 되는거 아닐까요?혹은 Payment에서 테스트하는게 더 적절하다면 PaymentService에서 valid 테스트는 하지않고 단순 Payment가 생성되었는지만 체크하도록 테스트를 수정해야할까요? 감사합니다!
-
미해결스프링 핵심 원리 - 기본편
생성자 직접 호출 vs 팩토리 메서드 패턴
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]해당 질문 자체가 질문 자체가 성립되지 않는 것일지 고민되어서 먼저 찾아봤지만 해당 질문에 대한 답변을 찾지 못하여서 질문을 남겨봅니다..애초에 질문거리가 되지 못하는 것이었다면, 제가 어느 부분에서 잘못 생각한 걸까요?🥲 public class AppConfig { public MemberService memberService() { return new MemberServiceImpl(new MemoryMemberRepository()); } public OrderService orderService() { return new OrderServiceImpl(new MemoryMemberRepository(), new FixDiscountPolicy()); } }위 AppConfig처럼 생성자를 직접 호출하여 객체를 생성하는 방식과 팩토리 메서드 패턴처럼 생성자를 간접적으로 호출하는 방식 중 어느 방식이 더 객체 지향적으로 좋은 방식일까요?
-
해결됨멀티 모듈 아키텍처로 구현하는 은행 서버 핵심 기능 [ Kotlin & Spring ]
Advice 패턴을 다시 분리할 수 있나요
aop의 단점을 보완하기 위해 advice 패턴을 사용하셨는데, 매번 코드에 advice가 들어가는게 좀 번거로울 수도 있을거 같다는 생각이 들어서 질문드립니다..! aop의 단점을 극복하기 위해 사용한거지만,, 혹시 Advice를 aop처럼 분리시켜서 적용시키는 방법이 따로 또 있을까요
-
미해결죽음의 Spring Batch: 새벽 3시의 처절한 공포는 이제 끝이다.
실무에서 배치 메타데이터 관리
$ kill-9.. 킬구형 추석 연휴는 잘 보냈는가.. 처음에 텍스트로만 구성된 강의인 걸 결제한 후 알게되어 당황했지만.. 걱정 마라.. 금방 킬며들었다.. 눈으로 읽고 생각하는 즐거움을 알게되었다.. 무엇보다 그동안 피로했을 내 귀를 지켜줘서 고맙다.. 아직 강의 초반이지만 궁금한 부분이 있어서 질문 올린다.. 대용량 트래픽을 다루는 회사에서는 배치 메타데이터의 양도 어마어마할 것 같은데 실무에서는 배치 메타데이터를 어떻게 관리하는 지가 궁금하다.. 혹시 배치 메타데이터를 활용할 일이 없을 것 같으면 안쌓는 것도 권장하는 방법인가..
-
해결됨6주 완성! 백엔드 이력서 차별화 전략 4가지 - 똑같은 이력서 속에서 돋보이는 법
트랜잭션 격리성 설계도 어필포인트로 가져갈 수 있을까요?
기존에는 @Transactional만으로 데이터 일관성이 보장된다고 생각했습니다. 하지만 강의를 들으며 동시에 재고를 조회·갱신하는 상황에서 격리성이 보장되지 않는 문제가 발생할 수 있다는 점을 뒤늦게 인식했습니다. 이런 흐름을 이력서에서 “단순 구현 → 시스템 안정성 중심의 설계로 성장한 과정”으로 기술적 사고 확장으로 어필해도 괜찮을까요? 아니면 너무 이론적으로 보일까요?(항상 서비스 내 로직만 고려해서 롤백 여부로 트랜잭션을 생각했는데, 큰일이네요ㅜㅜ )
-
미해결재고시스템으로 알아보는 동시성이슈 해결방법
낙관적락vs. 레디스락
충돌 빈도가 낮지만 피크 타임에 스파이크가 있는 서비스라면, “낙관적 락+재시도”와 “레디스 락” 중 어떤 구성이 유지보수/비용/성능 면에서 유리한지 궁금합니다