묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결Java/Spring 테스트를 추가하고 싶은 개발자들의 오답노트
서비스 레이어 끼리의 의존
안녕하세요. 강의가 너무 재미있어 시간가는 줄 모르고 1편, 2편 강의 완강 하고있습니다. 2편, 테스트 관련해서 실습을 하던 중 고민이 생겨서 질문을 올리게 되었습니다.자바/스프링으로 코딩을 하다가 A Service와 B Service가 의존관계를 갖게 된다면 어떻게 해야할지가 너무 고민이여서요.만약 2편에 있던 도메인 User, Post에 User의 프로필 이미지 업로드기능, Post의 이미지 업로드기능이 있다고 할 때, File의 정보를 저장할 수 있는 File 도메인이 있어야 한다고 생각합니다.File에 대응하는 FileService를 만든다고 가정 하였을 때 DB 등에 파일의 정보 데이터를 저장하는 FileRepository, 파일을 업로드 하는 FileUploader를 만든 후 의존관계가 이런형태로 구성 되어야 한다고 생각합니다. FileService에 saveAndUpload() 라는 메서드가 있고 이 메서드를 공통으로 사용하고 싶을 때 UserServiceFacade, PostServiceFacade와 같은 형태로 퍼사드를 써야할지, UserService, PostService 에 각각 업로드 메서드를 구현을 해야할지 고민이 됩니다. Facade와 같은 형태로 코드를 작성하게 된다면 User, Post가 아닌 파일이 필요로 하는 도메인이 추가 될 때 마다 Facade를 작성해줘야하는 번거로움이 있을 것 같고,Service 각각에 업로드 메서드를 구현하자니 반복적인 코드가 들어가는 것이 마음에 조금 걸려서 질문드립니다.
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
제대로 한게 맞는건가요?
@Transactional @Override public void updatePassword(String UUID, PasswordUpdateDto passwordUpdateDto) { User user = userRepository.findByUuid(UUID).orElseThrow(() -> new IllegalArgumentException("UUID정보 없음 = " + UUID)); user.hashPassword(passwordUpdateDto.getPassword()); }이게 서비스 코드인데 여기서 예외가 터지면 컨트롤러로 넘어가서 catch (IllegalArgumentException ex) { throw ex } 을 해서 처리하는게 맞게 하는건가요? @PutMapping("/user/update-password/{UUID}") public ResponseEntity<String> updatePassword(@PathVariable String UUID, @RequestBody PasswordUpdateInfo passwordUpdateInfo) { try { ModelMapper modelMapper = new ModelMapper(); PasswordUpdateDto passwordUpdateDto = modelMapper.map(passwordUpdateInfo,PasswordUpdateDto.class); userService.updatePassword(UUID,passwordUpdateDto); return ResponseEntity.ok("Password updated successfully"); } catch (IllegalArgumentException ex) { throw ex; } } @Slf4j @RestControllerAdvice(annotations = RestController.class) public class ExceptionController { @ExceptionHandler public ResponseEntity<ErrorResult> userExHandle(IllegalArgumentException e) { ErrorResult errorResult = new ErrorResult("USER-NOT-FIND", e.getMessage()); return new ResponseEntity<>(errorResult, HttpStatus.BAD_REQUEST); } } 포스트맨 쓰니까 일단 뜨긴뜨닙다
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
인터셉터 내에서 다른 계층 빈을 주입받아 사용해도 될까요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]스프링 부트를 사용해서 게시판을 만들고 있습니다. 회원의 인증과 인가에 대한 부분을 인터셉터로 처리하려고 합니다. 이때 단순 로그인 부분은 servletRequest.session을 사용해서 확인할 수 있는데, 로그인 사용자의 자세한 정보를 인터셉터에서 열람하여 사용하는 것이 좋은 방식인지 궁금합니다.예를 들어, 자신의 게시물을 삭제하는 api 요청이 왔을 때, 인터셉터에서 session을 통해 요청 사용자의 로그인 여부를 판별하고 (1), service 계층을 주입받아 해당 사용자가 삭제 요청한 게시물을 해당 사용자가 작성하였는지 확인하는 작업(2)이 있을 경우 모두 인터셉터에서 처리하면 인터셉터가 비즈니스 로직의 책임을 부여받는 구조이므로 지양하는 것이 좋은지 궁금합니다. 그와 별개로, 로그를 DB에 저장하기 위해 관련 repository를 주입받는 등 공통 관심사에 집중된 사용의 경우 다른 계층을 주입받는 것은 괜찮은지 궁금합니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
강의 관련질
안녕하세요 현재 Java 기본문법을 완료하고 Spring 강의를 들어보려고 합니다.관계형 데이터베이스 기초도 사전 지식에 필요하다는데 해당 지식은 아직 접한게 없어 어떤 강의를 봐야하는지 감이 잡히지 않는데 ..어떤 강의를 봐야할까요..?SQL강의를 보면 될까요?혹시 관계형 데이터베이스 기초 강의를 안봐도 자바 기본문법알면 Spring 강의를 따라갈수 있을까요
-
미해결토비의 스프링 부트 - 이해와 원리
의존성 주입과 NullPointerException
안녕하세요, 토비님.강의를 수강하다가 문득 의문이 들어서 토비님 말씀을 듣고 싶어서 질문을 드립니다.의존성 주입을 생성자가 아닌 Setter나 필드 인젝션(변수 위에 @Autowired 붙이기)으로 하면, 1) 빈이 생성되는 시점이 아닌 런타임에 의존성 주입이 이루어지고, 2) 따라서 NullPointerException이 발생하는 경우가 생길 수 있을까요?예를 들어서 @RestControllerclass UserController { @Autowired UserService service;} 같은 코드가 있으면, 빌드할 때 UserController 빈이 만들어지고, service의 메소드를 사용하려는 시점에 의존성 주입이 이루어지게 되는 것일까요?따라서 이런 경우 NullPointerException이 발생할 수 있을까요?검색을 통해 찾아보아도, 어떤 내용이 정확한지도 불분명해서 질문을 드리게 되었습니다.혹시 추천해 주실 글이 있으신지요?읽어주셔서 감사드립니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
cascade 사용에 대한 질문이 있습니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)네2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)네3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)네[질문 내용]현재 비즈니스상 Delivery 를 사용하는 곳이 Order 한 곳이라 cascade 를 사용하였는데, 추후에 기능확장으로 인해 다른 곳엔티티에서도 Delivery 를 관리하게 되는 경우 기존의 cascade 를 제거하고 orderService 의 order 비즈니스 로직을 변경해야하는 것일까요?
-
미해결스프링 핵심 원리 - 기본편
assertThat() 입력 시 actual 의 종류가 너무 많이 추천(?) 됩니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]assertThat() 을 타이핑 하는 순간 3초 정도 IDE 가 멈추고 이렇게 actual 타입이 추천(?) 됩니다. 강사님께서는 이런 과정 없이 바로 진행이 되던데 이 설정을 어디서 조절하면 좋을까요..?
-
미해결스프링 핵심 원리 - 기본편
강의에서 rate,fix 둘다 component
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]강의 내에서fix,rateDiscount 부분 둘다 Component 지정 하여 AllBeanTest 시에 에러가 나는데강사님은 어떻게 에러가 안나는건가요 ?RateDiscount에 MainDiscountPolicy 어노테이션 삭제하셔서 거기서는 같이 삭제하고넘어갔습니다DiscountService위에 Autowired 지정한것도 빨간선으로 뜨더군요
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
member테이블은 생성됐는데 데이터가 안 들어옵니다...
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.강사님 말씀대로 @Rollback(false)을 했음에도 불구하고 H2 데이터베이스에 member테이블은 생겼지만 데이터(행)는 생기지 않았습니다... 애초에 콘솔창에 Rollback 되었다는 구문도 뜨지 않고요... 어떻게 해야 할까요? <실행후 콘솔창> <실행 후 H2>
-
미해결스프링 핵심 원리 - 고급편
LogTrace 주입
안녕하세요.원래 위의 상태에서, 아래에서 ConcreteProxyConfig.class 를 @Bean 으로 등록을 하면 LogTrace 주입이 잘 되는 이유가 궁금하네요.ConcreteProxyConfig를 @Bean 으로 등록이 되어야만, ConcreteProxyConfig 내에 @Bean 으로 설정한 것들도 @Bean 으로 등록이 되는지는 알겠는데, 그렇다고 LogTrace 이 어떻게 @Bean으로 등록이 되어 주입이 될 수 있는지 궁금합니다. 감사합니다.
-
미해결스프링 핵심 원리 - 기본편
스프링으로 전환하기 강의 질문
5분 17초쯤 강사님이 실행하셨을땐 'appConfig', 'memberService'등 태그가 뜨는데저는 이렇게만 뜨는데 뭐가 잘못된걸까요?
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
디렉토리와 패키지의 차이점
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]안녕하세요, 스프링 강의를 보다가 궁금한 게 생겨서 글 남겨요.강의 중간 중간에 하위 폴더를 만들 때 패키지와 디렉토리를 사용해서 만드는데 이때, resource 폴더 안에서는 디렉토리만 뜨고 java 폴더 안에서는 패키지만 뜨던데 혹시 패키지와 디렉토리의 차이점을 알 수 있을까요?
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
서버 재실행시 db데이터 리셋에 대해 궁금한점이있습니다.
웹 계층 개발챕터 강의를 진행하고 있는 수강생입니다.문득 궁금한점이 생겨 질문 남기게되었습니다.코드를 작성하고 서버를 재실행하면 기존에 db에 넣어둔 데이터가 다 날아가고 없어지는게 서비스로직에 달려있는 @Transactional 어노테이션 때문인가요?테스트코드에서의 @Trasactional 어노테이션의 경우 테스트데이터의 경우 테스트만 진행하고 테스트된 데이터는 db에 반영을 하지 않기위해서(Rollback) 사용한다고 알고있습니다.그래서 원래 코드에서도 반영이 되지않는 이유가 서비스로직에 포함된 트랜잭션 어노테이션 때문인지 궁금하여 질문드립니다.
-
미해결스프링 핵심 원리 - 기본편
AppConfig와 같이 조립 역할을 하는 컴포넌트는 OCP와 DIP를 따르지 않아도 되나요?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]AppConfig와 같이 조립 역할을 하는 컴포넌트는 OCP와 DIP를 따르지 않아도 되는지 궁금합니다. OCP와 DIP 개념을 접했을 때 스프링을 사용하더라도 궁긍적으로는 확장에 따라 변경되는 부분과 구현체에 의존해야하는 영역이 생성된다고 생각합니다. (AppConfig와 같이) AppConfig를 사용할 경우 각각의 서비스들은 SOLID 원칙을 지킬 수 있는데 AppConfig는 SOLID 원칙을 지키지 못하게 되더라구요. 그럼 객체지향 프로그래밍에서 AppConfig는 객체지향 프로그램 대상을 벗어나는 것인지 혹은 프레임워크 헬퍼로서의 역할을 하는것인지... 강사님께서는 어떻게 생각하시는지 궁금합니다!
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
회원 가입 model.addAttribute
junit5 사용해서 회원 가입 작성하는데 코드 똑같이 작성했는데 오류가 나고 실행이 되지 않습니다.
-
해결됨스프링 부트 - 핵심 원리와 활용
데이터소스 매핑방식에도 Environment 를 사용하는 걸까요?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)예[질문 내용]스프링에서 datasource 빈을 생성할 때 application.yml 파일의 url, username .. 속성들을 매핑해 사용하는데, 이런 매핑역시 Environment 를 활용해서 내부적으로 매핑되는걸까요? 만약 그렇다면 우선순위가 높은 자바시스템속성으로 url 정보를 주면 yml 파일보다 자바시스템속성이 먼저 읽히게 되는게 맞을까요?
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
MyBatis 강의 올려주셔서 너무 감사드립니다ㅠㅠ (질문x)
안녕하세요 공부하는 개발자 최태현님!너무너무 오랜만에 돌아와서 글 남겨보네요 ㅎㅎ질문은 아니고 감사의 인사 드리고자 찾아왔어요 🌟올해 초 쯔음 문의 드렸던 MyBatis 였는데, 이렇게 잊지 않으시고 강의에 업데이트 해주셨네요 ㅠㅠㅠ.. 역시 최고 👍👍바쁘실텐데 좋은 내용 준비해주셔서 이번에도 많은 도움 되었어요!!코린이 응애 시절, 태현님의 이 강의를 시작으로 개발 흐름을 이해하기 시작하며 재미붙이던때가 어제같은데,,, 지금은 어느덧 서비스 개발팀에 와서 인턴 생활 중이네요 :)강의로 다시 뵐 수 있어 영광이었고, 항상 행복하시길 바라겠습니다 감사합니다 :)
-
해결됨Only Javascript만으로 배우는 하이브리드앱 패키징
코르도바와 다른 프로젝트 연동 질문입니다.
안녕하세요.공부하다가 궁금한점이 있어서 질문을 드릴려고 합니다.제가 기존의 jsp + spring + tomcat으로 웹을 배포하여 서버를 굴리고 있는데 코르도바에서 inappbrowser로 배포된 서버의 특정 URL로 열고 코르도바에서 모바일의 네이티브 기능을 사용할 수 있는것인지 궁금합니다.예를 들면 기존 웹프로젝트(코르도바로 생성된 프로젝트가 아닌)에서 코르도바 inappbrowser로 열고 푸시 알림같은것을 사용할 수 있는지 궁급합니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
테스트용 데이터 추가하기 질문
테스트용 데이터를 추가하기 위해 아래와 같은코드를 만들었습니다.@Component @RequiredArgsConstructor public class TestDataInit { private final ItemService itemService; private final ItemRepository itemRepository; /** * 테스트용 데이터 추가 */ @PostConstruct public void init() { itemService.saveItem(new Book("김영한","츨핀시한빛")); itemService.saveItem(new Book("호날두","출판사멩구")); //오류 발생// itemRepository.save(new Book("a","출판사a")); itemRepository.save(new Book("b","출판사b")); } }한번은 itemService를 이용하여 값을 넣었고 다른 한번은 itemRepository를 이용하여 값을 넣었습니다.제 단순한 생각으로는 '어차피 itemService는 itemRepository에 바로 위임을하니 바로 itemRepository로 저장하자' 여서 실행했더니localhost에서 연결을 거부했습니다. 오류가 나왔습니다.<질문>왜 itemRepository로 저장하면 안되고 itemService로만 저장해야 데이터가 추가되는 지 궁금합니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
Unable to load class 'org.slf4j.LoggerFactory'.
이렇게 뜹니다.. 구글로 찾아봤는데도 어떻게 해야 할지 모르겠네요..스프링 입문 강의에도 동일 질문이 하나 있는데 답변대로 해봐도 전혀 해결이 되지 않았습니다.어떻게 해야 저 오류를 해결할 수 있을까요..?