게시글 작성자인지 검증하는 과정은 Validation으로 검증해줘야 하나요?
해결됨
스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
게시글 작성자인지 검증하는 과정은 비즈니스 로직에 속하는지, 아니면 입력값 유효성 검사에 속하는지 궁금합니다. 레이어별로 어떤 검증 책임을 분산하는 게 맞는지 정리하다 보니 애매해서 질문글 올려봅니다.
- spring
- mvc
173만명의 커뮤니티!! 함께 토론해봐요.
해결됨
스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
게시글 작성자인지 검증하는 과정은 비즈니스 로직에 속하는지, 아니면 입력값 유효성 검사에 속하는지 궁금합니다. 레이어별로 어떤 검증 책임을 분산하는 게 맞는지 정리하다 보니 애매해서 질문글 올려봅니다.
미해결
토비의 클린 스프링 - 도메인 모델 패턴과 헥사고날 아키텍처 Part 1
record + 클래스 레벨 @Transactional에서 에러가 발생합니다.! 질문은 record 예약어는 final 클래스라서 상속이나 프록시 생성이 불가능한거 같은데 @Transactional 어노테이션은 Spring AOP기반이라 프록시 객체 생성이 안되서 에러가 발생하는거 같은데... 강의에서는 통과가 되더라구요 제가 어떤 부분이 놓쳤을까요?
해결됨
죽음의 Spring Batch: 새벽 3시의 처절한 공포는 이제 끝이다.
킬구형 안녕, 강의를 보다가 궁금한 점이 생겨서 문의를 남겨. "정리하자면, allowStartIfComplete 은 식별 파라미터 없이 Job을 재시작한 경우에만 적용되는 옵션이다." 이 문장을 보고 궁금증이 생겼는데, identifying JobParameters 가 없어서 Job 그리고 그 하위 Step 들이 다시 수행될수도 있겠지만, Job => Step A (성공) / Step B (실패) 여서 잡을 재시작하는 케이스에서, Step A 가 allowStartIfComplete true 면 A부터 스텝을 수행할텐데, 이 케이스에서도 allowStartIfComplete 를 쓰는게 아닌가 싶어서 문의를 남겨! 이러면 Spring Batch 6 에서도 의미있는 파라미터가 아닌가 싶어서! (강의 잘보고 있습니다, 감사합니다!!)
미해결
실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
강의 23:03분에서 setMember(Member member) 라는 setter 메서드를 작성하는데요. 제가 기억하기로는 @Setter를 설정하면 자동으로 필드 이름을 딴 setXXX() 인 setter가 만들어지는 것으로 알고 있습니다. 그러니까 현재 Member 필드가 있으니까 롬복인 @Setter 에 의해 setMember(Member member) 가 자동으로 생성되지 않을까 생각하는데요. 제가 생각한게 맞다면 이때 강의에서 만든 setMember(Member member)와 충돌? 이런 문제는 없나요? 시그니처까지 똑같은 것 아닌가요? 아니면 이런경우 사용자가 직접 만든 것이 더 우선시 되는건가요?
미해결
죽음의 Spring Batch: 새벽 3시의 처절한 공포는 이제 끝이다.
,로분리된 csv파일로 하고 public FlatFileItemReader<SystemFailure> systemFailureItemReader( @Value("#{jobParameters['inputFile']}") String inputFile) { return new FlatFileItemReaderBuilder<SystemFailure>() .name("systemFailureItemReader") .resource(new FileSystemResource(inputFile)) .delimited() .delimiter(",") .names("errorId", "errorDateTime", "severity", "processId", "errorMessage") .targetType(SystemFailure.class) .linesToSkip(1) .strict(true) .build(); } ---------- 실행하면, 오류가 발생합니다. PS D:\Test\springboot\kill-batch-system> ./gradlew bootRun --args='-- spring.batch.job.name =systemFailureJob inputFile=d:/Test/springboot/kill-batch-system/system-failures.csv' ..... Caused by: org.springframework.batch.item.file.transform.IncorrectTokenCountException: Incorrect number of tokens found in record: expected 5 actual 1 ..... PS D:\Test\springboot\kill-batch-system> 그런데, \t으로 구분하고, .delimiter("\t") 로 하면 정상작동합니다. 이유가 뭘까요? 윈도우 환경입니다. 그리고, 실행시 파일의 위치를 절대경로로 주어야 하나요? 상대경로일경우, 파일의 위치를 어디에 두어야 하나요?
해결됨
토비의 클린 스프링 - 도메인 모델 패턴과 헥사고날 아키텍처 Part 1
안녕하세요! 이번 강의 수강 중 서비스 인터페이스에 대해 궁금하여 글을 남기게 되었습니다. 흔히 스프링 프로젝트에서 보통 Service 인터페이스와 ServiceImpl 구현체로 나누어 개발하며 제가 참여하게 된 프로젝트 또한 이러한 구조였습니다. 이미 이전 개발자 분께서 Service 인터페이스와 ServiceImpl 구현체로 나눠놓은 상태였고, 제가 A 기능의 AServiceImpl 안에 특정 서비스 로직이 비대해짐에 따라 해당 코드가 명확하지 않다고 생각되어 메서드로 분리하게 되었습니다. A 엔티티의 상태, 계산 등의 로직으로 private 메서드를 두었습니다. 여기서 동료와 의견이 갈렸습니다: 동료 입장: 1. ServiceImpl 안의 모든 메서드는 반드시 인터페이스에 있어야 한다. 2. 인터페이스는 외부·내부 구분이 아니라, 구현체가 제공하는 기능을 보장하는 것이므로 전부 담아야 한다. 3. 내부 메서드를 둘 거라면 굳이 인터페이스로 추상화할 필요가 없고 그냥 클래스로 쓰면 된다. 제 입장: 1. 인터페이스에는 “외부 계약(=공개 API)”만 있어야 한다. 2. 구현체 내부에서만 쓰이는 로직은 private으로 감추는 게 맞고, 외부에서 호출할 필요가 전혀 없다. 3. 인터페이스를 구현체 내부 헬퍼까지 다 포함하면, 오히려 계약이 불필요하게 비대해지고 역할이 모호해진다. 핵심 쟁점 저는 public 메서드는 모두 인터페이스에 있어야 한다는 데에는 동의합니다. 또한, 단순 public, private 만 있다면, 인터페이스의 역할이 모호하다는 것또한 이해하지만, 이전 코드와의 일관성과 운영 중인 시스템에 대한 변경이 필요할정도의 중대사항이라고 생각하지 않습니다. 궁금한 점은 private/내부 헬퍼 메서드까지 인터페이스에 강제로 올리는 게 맞는지, 인터페이스를 사용하는 의의가 궁금합니다. 긴글 읽어주셔서 감사합니다.
미해결
스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] fail을 썻는데 전 빨간 밑줄이 떠요 gpt한테 무르니까 import 써야 한다는데 import쓰고 실행 돌리니까 또 틀렸다고 하고..
미해결
자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
ManyToOne 이 N : 1이라는관계를 표현한다는건 이해가 가는데 그게 어떻게 User 객체와 user_id bigint 컬럼과 매핑이 되는지 잘 모르겠습니다. 대출기록이 여러개고 User 가 1개 라는 것과 저것이 무슨 연관인지 이해가 안갑니다ㅜ
미해결
죽음의 Spring Batch: 새벽 3시의 처절한 공포는 이제 끝이다.
중간중간 소스만으로 실행가능한 소스를 만들고, 이해하는게 어렵습니다. 큰 챕터별로 실행가능한 소스가 없는지 궁금합니다. 즐거운 하루보내세요.
미해결
스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 안녕하세요. Index.html 설정 후 localhost:8080 하여도 welcome page가 뜨지 않습니다. 1:36 확인 부탁드립니다. 감사합니다.
미해결
스프링 시큐리티 OAuth2
FormLoginConfigure에서 생성하는 필터가 UsernamePasswordAuthenticationFilter라고 말씀해주셨는데(8:37) ㅎ initDefaultLoginFilter 메서드에서 생성되는 필터 클래스가 DefaultLoginPageGenerationgFilter인거같은데 맞을까요?
미해결
자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
안녕하세요 BookCreateRequest 객체에 name 을받는 생성자를 만들었더니 아무것도 안받는 생성자도 만들어야 정상 작동하더라구요 근데 아예 생성자를 안만드니까 바로 정상 작동하던데 무슨 차이가 있는건가요?
미해결
스프링 시큐리티 OAuth2
httpSecurity 클래스의 메서드 authorizeHttpRequests, formLogin, apply 메서드들의 인자값이 다 바뀌었네요 혹시 3.xx 버전으로 작성된 코드가 있을까요?
미해결
스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
파일을 오픈할 때 build.gradle 을 선택해야 하는 이유가 따로 있을까요?
미해결
스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] gradle-groovy와 gradle - kotlin중에 뭘로 해야하나요?
해결됨
토비의 클린 스프링 - 도메인 모델 패턴과 헥사고날 아키텍처 Part 1
안녕하세요. 강의 정말 잘 들었습니다. 도움이 많이 되어서 수강평은 나중에 꼼꼼히 작성해볼 생각입니다~! ====================== 바쁘시면 이 부분만 읽으셔도 됩니다. ============= 배포 시 jenkins server에서 실제 서버에 배포할때 테스트가 돌아갈텐데 jenkins server에 compose를 통해 작동 하게 될 mysql에 DB schema insert 작업을 해서 동일하게 구조를 맞추고 테스트가 돌아가게 하는 게 좋은 생각일 까요? =========================================================== [세부 사항] 일단 테스트 코드가 local mysql에서 돌아가는 걸로 이해 했습니다. 배포 시 jenkins server에서 실제 서버에 배포할때 테스트가 돌아갈텐데 jenkins server에 compose를 통해 작동 하게 될 mysql에 DB schema insert 작업을 해서 동일하게 구조를 맞추고 테스트가 돌아가게 하는 게 좋은 생각일 까요? 현재 아직 jenkins 배포를 하고 있지는 않고 소스코드 개발중이라 머리속으로만 생각하는 상태입니다. 토비님 의견은 어떠신가요.....?
해결됨
스프링 핵심 원리 - 기본편
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 맥락] 영상: 06:35 ~ pdf: 4. 스프링 컨테이너와 스프링 빈.pdf - p.7 제일 윗부분 - void findBeanByNameX() [질문 내용] 안녕하세요, 영한님. 이전에 isEqualTo() 와 isInstanceOf() 에서는 AssertJ 메서드를 사용하셨는데요. 예외 테스트시에는 JUnit5의 메서드를 사용하시더라고요. AssertJ에도 assertThatThrownBy() 등의 예외 검증 메서드가 있는데, 왜 예외 테스트시에만 JUnit5를 사용하셨는지 궁금합니다! (둘 중 하나만 사용한다면 취향차이라고 할 수도 있겠으나, 둘을 병행해서 사용하는 경우 assert를 위한 라이브러리가 두 종류로 나뉘게 되어 혼란스러울 수도 있지 않을까? 하는 생각이 들어서요. 그럼에도 불구하고 '예외 검증시에는 JUnit5의 메서드가 좋다'는 이유 등으로 선택된 것인지 궁금합니다.) 대부분의 검증의 경우에는 AssertJ의 메서드가 더 직관적이지만, 예외 검증의 경우에는 JUnit5가 더 직관적이기 때문일까요? 아니면 성능적으로 더 우수한 측면이 있나요?
미해결
스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 영한님 안녕하세요. 테스트 코드 작성하실때 메서드명을 한글로 기재하시던데 실제 실무에서 테스트 코드 작성하실때도 한글로 작성하셨었나요?
미해결
자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
이렇게 3단분리를 할때 처음부터 코드를 작성할때 이렇게 3가지 역할을 분리해서 각각 구현해야지! 라고 다 미리 설정해두고 코드를 짜는건가요 아니면 controller 에 일단 다 구현해놓고 그다음 분리해서 구현하는건가요?? 전자면 미리 생각하게 많아 뭔가 복잡해보여서요 ㅜ
해결됨
스프링 핵심 원리 - 기본편
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 안녕하세요, 영한님. 아래에 상황 - 의문 - 추측 - 결론 순으로 질문드리겠습니다! 상황: 이번 시간에 AppConfig 를 사용하도록 수정한 OrderServiceTest 와 MemberServiceTest 코드에서 새롭게 다음 메서드를 만들었습니다. @BeforeEach public void beforeEach() { // ... } 의문1: 그런데 이전에 만들었던 다른 메서드들의 경우 package-private로 접근을 제어하고 있습니다. 그래서 왜 두 경우에 다른 접근 제어자가 사용되었는지 의문이 들었습니다. @Test void createOrder() { // ... } 추측1: 스택오버플로우 1 을 보니 과거에는 리플렉션 기술을 통해 테스트 메서드를 식별해야 했기 때문에 public 으로 열어두는 것이 필요했다. 또한 이에 대한 JUnit5 탑 컨트리뷰터 Sam Brannen의 답변 에서는 "less is more라는 원칙에 따라 더이상 public 이 필요하지 않기 때문에 JUnit5부터는 작성하지 않아도 된다."고 하더군요. JUnit5 공식 문서 에서도 " public 접근 제어자로 선언될 필요는 없다. 다만, private 이면 안 된다. " 는 안내를 확인했습니다(아래 사진 참고). 결과적으로, 위 내용들을 근거로 "과거 관례로 인해 영한님이 public 을 사용하셨겠구나." 라는 추측을 했습니다. 결론: 결국 'JUnit5 이후부터는 테스트 메서드에 대해 public을 붙이지 않는 것을 권장한다(붙여도 문제는 없다).'는 것인데, (물론 개발팀 컨벤션에 따라 다르겠지만) 현업에서는 다음 두 경우 중 어떤 방식이 채택되는 경우가 더 빈번한지 여쭤봅니다! 과거 관례에 이어 public 을 여전히 작성한다. 이제 public 을 안 붙여도 되고, 이 방식을 JUnit5에서도 권장하기 때문에 더 이상 붙이지 않는다. 감사합니다.