묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결토비의 스프링 부트 - 이해와 원리
안녕하세요.
안녕하세요. 토비님덕분에 좋은 강의를 잘 보고 있습니다!강의와는 다른 내용인데.토비님은 REST API를 개발하실때다양한 쿼리스트링 요청이 들어올때 값의 유무 체크를 어떻게 하시는지 궁금합니다.if문으로 null을 각각 확인하고 있긴 한데..코드도 길어지고 가독성도 안좋아 질문드립니다 ㅠㅠpublic class User { private String name; private String phone; private String email; } @GetMapping("/v1") public void list(@ModelAttribute User user) { } :8080/v1?name=apple :8080/v1?name=apple&phone=01012345678 :8080/v1?phone=01012345678
-
해결됨스프링 핵심 원리 - 기본편
강의 자료 오타 수정 요청입니다.
안녕하세요, 김영한 님 덕분에 좋은 강의 잘 보고 있습니다.7장 수업자료의 19페이지 첫 문단애노테이션에는 상속이라는 개념이 없다. 이렇게 여러 애노테이션을 모아서 사용하는 기능은 스프링이 지원해주는 기능이다. @Qulifier 뿐만 아니라 다른 애노테이션들도 함께 조합해서 사용할 수 있다. 단적으로 @Autowired도 재정의 할 수 있다. 물론 스프링이 제공하는 기능을 뚜렷한 목적 없이 무분별하게 재정의 하는 것은 유지보수에 더 혼란만 가중할 수 있다.@Qulifier를 @Qualifier로 수정 요청드립니다.
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
member와 login의 분리
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.강의에서 member와 login을 분리해주었는데요, 로그인할 때 member 도메인의 loginId, password가 필요하잖아요. 그럼 login할때 meber의 정보가 필요하니까 login을 member에 포함시켜주는건 부적절한가요?
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
setter와 생성자 사용에 대한 질문.
안녕하세요.스프링 MVC 2편의 섹션5 : Form 전송 객체 분리 개발 강의에서 5:45 쯤에강사님께서 "setter 보단 생성자를 사용하는 것이 더 낫다"고 말씀하셨습니다.따라서 위 코드를 Item item = new Item(form);처럼 생성자를 통해서 사용할 수 있도록 Item 클래스에 ItemSaveForm을 파라미터로 갖는 생성자를 만들면 되겠구나 라고 생각했습니다. 하지만 강의를 듣다보니 섹션 6 : 프로젝트 생성 강의에서강사님께서 도메인이 가장 중요하므로 도메인이 다른 패키지, 클래스에 의존하는 설계는 좋지 않다고 말씀하셨습니다. 따라서 제가 생각했던Item item = new Item(form);위 코드는 Item 도메인 객체가 ItemSaveForm에 의존하고 있으므로 좋은 코드는 아니라는 생각이 들었습니다.그렇다면 어떻게 생성자를 이용하여 ItemSaveForm를 Item 객체로 변환할 수 있을까요? ** 추가Item item = form.transToItem();처럼 ItemSaveForm 내부에서 Item 객체로 변환하는 메서드를 작성하는 것은 데이터를 전달만 하는 용도로 사용되는 객체의 역할에 벗어나는 것일까요?
-
해결됨스프링 핵심 원리 - 기본편
nullPointerException
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]강의내용을 보고 하고있는데 강사님처럼 테스트를 해보려하니 NullPointerException 오류가 발생합니다..원인을 찾아보려했는데 잘모르겠어서 질문올립니다..ㅠㅠorder부분도 여기의 에러때문에 못하고있는데 도와주세요ㅠㅠㅠ
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
환경 세팅 질문입니다.
안녕하세요. 강의에서 보여주셨던 것과는 start.spring.io 의 화면이 달라서, 강의를 따라가기 위해서는 어떻게 선택해야 하는지 여쭙고자 합니다.Project에서는 Gradle-Groovy를 사용하면 되는건가요?Spring Boot는 3.0.5로 해야할까요 2.7.10으로 해야 할까요java버전은 17이 좋을까요 11이 좋을까요? 버전에 따라 dependencies가 먹히거나 안먹히거나 하는거 같습니다.답변에 미리 감사합니다.
-
미해결스프링부트 시큐리티 & JWT 강의
필터 동작 순서에 따라 login결과가 달라지는 이유
안녕하세요. 선생님 좋은 강의 제공해주셔서 감사합니다.선생님 덕분에 거의 마지막 강의까지 진행하고 있습니다. 그러다가 25강에서 '/login'요청에서 response헤더에 토큰이 포함되었음에도 불구하고 자꾸 404에러가 뜨는 것을 확인하였습니다. 확인 결과 SecurityConfig에서 아래의 코드를 넣느냐 빼느냐에 따라서 결과가 달라지는데요. 여기서 2가지 이해가 가지 않는 점이 생겼습니다.필터 동작 순서를 바꾼다고 해도 결국 그 뒤에 FiterChain이 동작하기 때문에 MyFilter3에서 정상적으로 처리하고 FilterChain으로 넘어갔다면 '/login' 요청도 제대로 처리되어야 하는거 아닌가요?@Bean SecurityFilterChain filterChain(HttpSecurity http) throws Exception { // http.addFilterBefore(new MyFilter3(), SecurityContextPersistenceFilter.class);선생님께서 포스트맨으로 로그인 시도하신 것을 보면 password가 일치하지 않을 경우 401 에러가 뜨던데 저 같은 경우에는 password가 일치하든 불일치 하든 상관없이 http body에는 공백이 뜨고 헤더에 토큰이 반환되느냐 마느냐의 차이만 있고 콘솔에 아래처럼 인증에 실패했다는 로그만 뜨는데 왜 저는 결과가 다르게 뜰까요?
-
미해결3. 웹개발 코스 [스프링 프레임워크+전자정부 표준프레임워크]
쿠폰 발급 요청방법
모든 (기존,신규)수강생에 한해 https://www.inflearn.com/course/%EC%9B%B9%EA%B0%9C%EB%B0%9C-%EC%BD%94%EC%8A%A4-ea-%EC%A0%84%EC%9E%90%EC%A0%95%EB%B6%80-%ED%94%84%EB%A0%88%EC%9E%84%EC%9B%8C%ED%81%AC무료쿠폰드리고 있습니다.자신의 인프런 닉네임을 적어서 쿠폰요청으로 메일 주시면 감사하겠습니다.vmproductor@gmail.com
-
미해결3. 웹개발 코스 [스프링 프레임워크+전자정부 표준프레임워크]
EA + egovframe 쿠폰
EA + egovframe 신규 강의를 보고 어?! 설마 하고 찾아봤는데 기존에 전자정부 수강생에게는 쿠폰을 준다하여 문의 남깁니다~
-
미해결3. 웹개발 코스 [스프링 프레임워크+전자정부 표준프레임워크]
EA + egovefrm 수강 관련 쿠폰 요청합니다.
EA + egovefrm 수강 관련 쿠폰 요청합니다.
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
[Error] Member cannot be resolved to a type
save.jsp를 요청할 때, Member cannot be resolved to a type라는 에러가 나옵니다.패키지의 문제인가 싶어서 아래와 같이 확인했습니다.스프링부터 2.6.3버전이고, implementation group: 'org.apache.tomcat.embed', name: 'tomcat-embed-jasper', version: '9.0.44' implementation 'javax.servlet:jstl' //스프링부트 3.0 미만위 코드를 gradle에 추가했습니다. 프로젝트창에 jstl과 tomcat을 검색하면 외부 라이브러리로 설치됨을 알 수 있습니다. 경로의 문제일 수 있을까요? 내 파일경로는 위와 같고, save.jsp의 코드는 아래와 같습니다.<%@ page contentType="text/html;charset=UTF-8" language="java"%> <%@ page import="hello.servlet.domain.member.Member" %> <%@ page import="hello.servlet.domain.member.MemberRepository" %> <% MemberRepository memberRepository = MemberRepository.getInstance(); String username = request.getParameter("username"); int age = Integer.parseInt(request.getParameter("age")); Member member = new Member(username, age); memberRepository.save(member); %> <html>...</html>경로의 문제일까요? jsp파일이 Member클래스를 참조못하는듯보입니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
HelloController 밒 hello.html 실행 오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)예{[질문 내용]여기에 질문 내용을 남겨주세요. 제 hello.html에는 강사님과 다르게 ${data}" 부분에 주황색 글씨로 표기가 안되고 HelloControlle에서 string hello 부분에도 주황색 글씨로 표기가 안되는데 어떤 오류가 있을까요..?
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
쿼리 최적화 관련 (직접 쿼리날리기, 엔티티를 통한 접근)
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]여기에 질문 내용을 남겨주세요.특정 엔티티에 접근을 하려고 할 때 1)직접 쿼리를 통해 접근 하는 방법, 2) 엔티티와 자바 메소드를 통해 접근하는 방법 중 어떤 것을 선택해야할까요?예를 들어 User엔티티와 Follow엔티티가 1대N으로 설정되어있다고 가정한다면. user.getFollows()를 한다면 Select 쿼리가 한 번 더 나가게됩니다. 이것도 user를 repository에서 가져올때 follows를 join fetch 해온다면 괜찮지만insert또는 delete할 때가 고민입니다Insert일 때1) cascade타입을 persist또는 all로 설정해둔다면user.getFollows.add(follow) 쿼리로 할 수 있습니다하지만 이렇다면 Select문, Insert문 쿼리가 두번이 추가가 됩니다2)하지만 followRepository.save(follow)를 한다면 insert문 한 번의 쿼리만 나가게 됩니다.delete일 떄1)user.getFollows.delete(follow)또한 Select문, delete문 두번의 쿼리가 나가지만2)followRepository.delete(follow)는 한 번의 쿼리가 나갑니다. 하지만 이마저도 이전에 follow를 검색하는 과정에서 쿼리가 더 나갈 수 있습니다ex) User user = userRepository.findByUserId(userId);Follow follow = user.get~~; // 삭제할 follow를 구별해내는 메소드user.getFollows.delete(follow)-> 쿼리가 총 4번이 나갈 수 있습니다하지만 이걸 followRepository에서@Query("delete ~~");void deleteByUserId(@Param("userId"))이 메소드를 한 번 실행시키는 걸로 축소한다면 단 한 번의 쿼리로 축소할 수 있습니다.이렇다면 웬만한 데이터에 접근할 때 직접 쿼리를 날리는게 좋지 않나요? 왜 엔티티상으로 데이터에 접근하는지 궁금합니다.그리고 만약에 특유의 이유가 있다고 하여도 (객체 지향의 이유 등등) 쿼리를 4번에서 1번으로 줄일 수 있는 것을 포기할 정도의 이유인지도 궁금합니다!
-
미해결스프링 부트 웹 개발 입문 - 따라하며 배우기
글쓰기화면에서리스트로갈떄 파라미터값을 못가지고오는 오류가 발생하네요 이유가 뭘까요?
서비스부분 컨트롤부분 매퍼부분 xml부분 오류코드부분
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
굳이 DTO를 join하지 않고 Member 객체를 만들어서 저장 후 넣는 이유
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]제목처럼 form이 DTO의 역할을 하는 것인데 굳이 도메인인 멤버 객체를 생성해서 setName하고 join에 넣는 이유가 궁금합니다. 사실 form에서 넘어온 데이터를 바로 join에 넣으면 새로운 객체를 만들지 않아도 되서 큰 자원은 아니지만 낭비하지 않을 수 있지 않나요?..! 저렇게 사용하는 이유에 대해서 고민해보았는데 DTO의 역할은 단순하게 데이터의 전달 역할만 하는 것이기 때문에 그 역할을 지키기 위해 영상에 나온 것과 같이 사용하는 것일까요?!
-
해결됨3. 웹개발 코스 [스프링 프레임워크+전자정부 표준프레임워크]
안녕하세요~ 신규 강의 수강 쿠폰 부탁드립니다.
안녕하세요EA + egovframe 수강 관련 쿠폰 요청합니다.감사합니다
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
인텔리제이 mysql 콘솔창 질문
11강에서 부터 진행하시는 것을 보면 인테릴제이에서 mysql 콘솔창을 사용하시는 것으로 보입니다. 구글링 해보니까 커뮤니티 에디션에서는 사용이 불가한 것 같아서 위의 사진과 같이 비슷한 plug-in 사용해서 현재 작업중인데 강사님처럼 sql문 실행했을 때 결과값을 볼 수가 없습니다 ㅠㅠㅠ 해결 할 수 있는 방법이 없을까요??
-
해결됨재고시스템으로 알아보는 동시성이슈 해결방법
RedissonLockStockFacade 트랜잭션시 실패 케이스
@Component class RedissonLockStockFacade( private val redissonClient: RedissonClient, private val stockService: StockService ) { @Transactional fun decrease(key: Long, quantity: Long) { val lock = redissonClient.getLock(key.toString()) try { val available = lock.tryLock(10, 1, TimeUnit.SECONDS) if (!available) { println("lock 획득 실패") return } stockService.decrease(key, quantity) } catch (e: Exception) { throw RuntimeException(e) } finally { lock.unlock() } } }RedissonLcokStockFacade 클래스의 decrease 메서드에 트랜잭션을 걸면 동일한 테스트 케이스가 실패하는데 이유를 알 수 있을까요?
-
미해결3. 웹개발 코스 [스프링 프레임워크+전자정부 표준프레임워크]
EA + Egovfrm 수강 관련 쿠폰 요청합니다.
안녕하세요 EA + egovefrm 수강 관련 쿠폰 요청합니다.
-
미해결실전! 스프링 데이터 JPA
MemberRepositoryImpl 네이밍 관련 질문
강의에서 사용자 정의 리포지토리 인터페이스로 만들고, 이걸 구현한 클래스 이름은 리포지토리+Impl 이여야 된다고 하셨는데(강의에서는 MemberRepositoryImpl), 처음에 모르고 MemberRepositoryCustomImpl 로 구현 클래스 이름을 정했는데 테스트 코드도 잘 돌아가고 Query도 동일하게 나왔습니다 ...MemberRepositoryImpl 가 아니면 오류나야 되는 게 아닌가요 ? MemberRepositoryCustomImpl 로 했는데도 잘 작동한 이유가 궁금합니다 ... 네이밍이 틀려도 상관 없는건가요 ..?