묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
OrderItem 엔티티에 대해
엔티티의 기본생성자는 public 아니면 protected 만 허용한다 하셨는데 OrderItem 엔티티에서 protected의 기본생성자를 만든 이유가 생성메서드로만 만들 수 있게 하기 위함에 더해 프록시 객체를 생성하기 위한 이유도 있나요?
-
미해결재고시스템으로 알아보는 동시성이슈 해결방법
네임드락을 활용할 때 데이터소스를 분리해야하는 이유가 궁금해요!
안녕하세요 최상용 엔지니어님~~ 강의 너무 잘 보고 있어요! 다음강의도 기대기대됩니당 답변 부탁드립니다~~~
-
미해결스프링과 JPA 기반 웹 애플리케이션 개발
태그를 입력할때 insertBefore 에러
저런 에러가 발생하고, 하단에 단어가 추가되지 않습니다. 원인이 무엇인지 모르겠습니다.. (tags.html의 구성은 강사님과 똑같이 하였습니다.) 단어를 추가하려고 할때마다 박스 아래에 단어는 추가되지않고, 같은 에러가 계속 추가됩니다.
-
미해결스프링부트 시큐리티 & JWT 강의
주의! WebSecurityConfigurerAdapter deprecated
안녕하세요 저같은 초보자분들이 계실까봐 여기 적어놓습니다ㅎㅎ 강의에서 나온 WebSecurityConfigurerAdapter가 현재 2022년에는 deprecated되었네요...ㅜ 그래서 저도 약간 해매었는데요.. 처음 공부할 때는 그래도 데이터쌓는개념이고, 각자의 인내심을 해당 프레임워크에 익숙하게 하는데도 바쁠 것같아 코드 올려 놓습니다ㅎㅎ 참고하세요! @Configuration @EnableWebSecurity //스프링 시큐리티 필터가 스프링 필터체인에 등록 (스프링 필터 사용해봣쥬?) public class SecurityConfig{ @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http.csrf().disable(); http.authorizeRequests() .antMatchers("/user/**").authenticated() .antMatchers("/manager/**").access("hasAnyRole('ROLE_MANAGER','ROLE_ADMIN')") .antMatchers("/admin/**").access("hasRole('ROLE_ADMIN')") .anyRequest().permitAll(); return http.build(); } /* 기존: WebSecurityConfigurerAdapter를 상속하고 configure매소드를 오버라이딩하여 설정하는 방법 => 현재: SecurityFilterChain을 리턴하는 메소드를 빈에 등록하는 방식(컴포넌트 방식으로 컨테이너가 관리) //https://spring.io/blog/2022/02/21/spring-security-without-the-websecurityconfigureradapter @Override protected void configure(HttpSecurity http) throws Exception{ http.csrf().disable(); http.authorizeRequests() .antMatchers("/user/**").authenticated() .antMatchers("/manager/**").access("hasRole('ROLE_ADMIN') or hasRole('ROLE_MANAGER')") .antMatchers("/admin").access("\"hasRole('ROLE_ADMIN')") .anyRequest().permitAll(); } */ }
-
미해결스프링부트 시큐리티 & JWT 강의
순환 의존관계오류나신 분들 보세욥!
@Component public class CustomBCryptPasswordEncoder extends BCryptPasswordEncoder { } 위 처럼 따로 BcryptPasswordEncoder를 만들어주고 컨테이너에 등록합니다! //해당 메서드의 리턴되는 오브젝트를 IoC로 등록해준다. /* @Bean() public BCryptPasswordEncoder encoder(){ return new BCryptPasswordEncoder(); } */ 그리고 위의 코드(SecurityConfig)를 저처럼 주석으로 처리해주세요! 순환 참조가 나는 이유: 1. SpringContainer에서 처음 빈으로 등록하기 위해 객체를 생성 하여 줍니다(싱클톤) 2. 그래서 SecurityConfig 객체를 생성하던 중 PrincipalOauth2UserService객체를 의존하고있네요?그래서 PrincipalOauth2UserService를 만들어 주는데.. 3. 어라? PrincipalOauth2UserService에서도 SecurityConfig에서빈으로 등록한 BCryptPasswordEncoder를 참조하고있네?? 4. 오잉? 스프링:참조가 순환되넹?아아아아아악! => 오류 즉, SecurityConfig -> PrincipalOauth2UserService, 다시 PrincipalOauth2UserService->SecurityConfig 그래서 저는 SecuritiConfig -> PrincipalOauth2UserService-> CustomBCryptPasswordEncoder 로 구조를 변경하였습니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
양방향 연관관계에서 양쪽 값.
양방향 연관관계에서는 양쪽에 값을 설정해주어야 합니다. 1. OrderItem의 경우 Item을 생성 메서드의 orderItem.setItem(item)을 통해 값을 설정해 준 것인가요? 2. 일대다 에서 일에서 다로 가는 단방향 연관관계에서는 '다' 쪽이 외래키를 가지므로 '다' 쪽에서 '일'쪽의 값을 설정해 주어야하나요?
-
미해결스프링 핵심 원리 - 기본편
memoryRepository 3개가 다릅니다
-
미해결실전! 스프링 데이터 JPA
findMemberDto에서 setTeam하는 방법에 대해
안녕하세요 수업을 듣다 의문이 들어 질문 남깁니다. findMemberDTO() 작성시 team을 set하는 부분에서 아래와 같이 하셨는데 (테스트코드 크게 신경쓰시지않고 하신걸로 생각되는데..) Member m1 = new Member("AAA", 10);m1.setTeam(team);아래와 같이 연관관계편의 메소드(changeTeam)를 통해 작성된 생성자 (3rd param이 team 주입)를 사용하는게 양방향 정합성 측면에서 나은게 아닌지 생각되어 질문드립니다. Member m1 = new Member("AAA", 10,team); 연관관계편의메소드 사용과 setter 사용이 항상 좀 헷갈리네요. 의견부탁드립니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
생성메서드에서요 ~!
order(주문)을 넣을떄 생성메소드를 만들어 줬는데 1)주문 엔티티에서 왜 생성자를 쓰지 않고 생성메소드를 써서 만드나요 이것도 도메인 설계로 엔티티에 다 넣어주려고 그런건가요?? 2) 생성메소드를 static으로 만든 이유가 있을까요?
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
추가질문
만약 상품명에 영문포함, 숫자포함, 특수기호 포함등 자세한 검증을 하고 싶다면 bean validation이 아닌 컨트롤러에 직접 자바코드를 삽입하는 방식으로 해야하나요?? bean validation으로도 저런 상세한 조건을 만들 수가 잇나요??
-
미해결스프링 핵심 원리 - 기본편
6:10초에 객체를 생성할 떄 앞에 private final 해주는 이유가 무엇인가요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]6:10초에 MemberRepository memberRepository = new MemoryMemberRepository(); 객체와 할인 객체를 생성할 떄 앞에 private final 해주는 이유가 무엇인가요? private final 안 쳐도 잘 되는데 저걸 쳐 주는 이유가 있나요? 앞 강의에서 MemberServiceImpl에서는 해 주고 뒷 강의에서 MemberApp과 OrderApp에서는 private final을 안 해주던데 하는 것과 안하는 것이 무슨 차이인지, 왜 필요한지 궁금합니다.
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
외부 내부 모두 신규 트랜잭션인데, 외부커넥션을 먼저 반납하는경우
안녕하세요. 강의 잘 듣고 있습니다. 문득 궁금한점이 생겨서... @Testvoid inner_rollback_requires_new() { log.info("외부 트랜잭션 시작"); TransactionStatus outer = txManager.getTransaction(new DefaultTransactionAttribute()); log.info("outer.isNewTransaction()={}", outer.isNewTransaction()); log.info("내부 트랜잭션 시작"); DefaultTransactionAttribute definition = new DefaultTransactionAttribute(); definition.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW); TransactionStatus inner = txManager.getTransaction(definition); log.info("inner.isNewTransaction()={}", inner.isNewTransaction()); log.info("외부 먼저 트랜잭션 커밋"); txManager.commit(outer); log.info("그다음 내부 트랜잭션 커밋"); txManager.commit(inner);} 위와같이 외부 트랜잭션이 먼저 시작되고, 내부보다 먼저 커밋이나 롤백한 이후에 나중에 시작한 트랜잭션인 내부 트랜잭션의 커밋이라 롤백을 호출하면 IllegalStateException을 던지더라구요. (사실 @Transactional을 이용하면 이런일이 발생하지 않게되어서 이상한 코드 인것같습니다만.., 내부트랜잭션에서 커밋이나 롤백을 누락하거나 / 멀티쓰레드 환경인데 커넥션을 파라미터로 받아서 사용한다거나 하면 겪게 될 수도 있을듯 해서요...) 사실 두 커넥션 간의 연관관계가 없다 생각했는데, 어떠한 이유로 연관이 있나보네요. 일단은 아직 고급편강의를 듣지 않았지만.. 고급편도 곧 들을 예정입니다. 고급편에서 확인할 수 있는 내용일까욤?? 일단, 트랜잭션 동기화 매니저는 내부적으로 커넥션을 생성한 쓰레드로 그룹핑을 하여 관리한다고 생각하고.. 같은 쓰레드로컬 내에서 커넥션이 여러개 있을때, 먼저 생성된 커넥션이 먼저 반납되는 것 자체가 이상상태로 스프링은 취급한다 라고 생각하면 맞을까요..? 질문을 다시요약해보면, 1. 트랜잭션 전파옵션을 PROPAGATION_REQUIRES_NEW로 하여 2개의 별도의 커넥션이 생성됨. 2. 한 쓰레드로 부터 생성된 커넥션은 2개인 상태. 3. 먼저생성된 커넥션의 커밋이 먼저 수행됨. 4. 나중에 생성된 커넥션의 커밋을 수행할때 illegalStateException 예외 발생. -> 두개의 커넥션간의 연관관계는 사실 없다고 생각드는데, 예외가 발생한것에 대해 의문점이 생깁니다! 5. 스프링은 동일한 쓰레드로 부터 여러 커넥션이 생성되었을때, 나중생성된 커넥션부터 순차적으로 커밋되지 않으면 이것 자체를 이상상태로 취급? 하는것인지 궁금합니다!
-
미해결
mybatis 스프링 데이터 업데이트 foreach문 관련 질문입니다.
는지 검dservice 문에서 for 문을 돌려 받은 map list 를 Dao로 보내 어 이런 데이터 값을 받았습니다. [{orderProductQty=3, productCd=4}, {orderProductQty=2, productCd=1}] . 여기서 이 데이터 값이 mybatis에서 update가 되지 않고 있습니다. foreach 문을 다양한 방법으로 변경 해 보았으나 1, <foreach collection="list" item="productMap" separator=";"> 2,<foreach collection="list" item="productMap" separator=";" open="" close=""> 3. <foreach collection="list" item="productMap" separator=";" close=";"> 4, <foreach collection="list" item="productMap" separator=","> 5. <foreach collection="list" item="productMap" separator=";" open=";" close=";"> 모두 같은 에러의 연속이네요. 이거 어떻게 해결 할 수 있을까요? 도와 주시면 너무너무 감사드립니다.
-
미해결실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)
repository mocking 문의
안녕하세요~ 최태현님 테스트 코드 작성에 있어서 고민이 있어 문의남깁니다. 이전까지 다른 강의 영상에서는 repository를 mocking해서 서비스를 테스트하는 영상을 많이 봤습니다. 그래서 서비스 테스트시에는 repository 를 mocking 하는것이 실무에서 흔한 방식이고 best practice라고 생각했습니다 그런데 실무에서 적용해보니 mocking을 하게되면 테스트 코드가 서비스 메소드의 내부 구현에 대해 너무 잘 알게되더라구요, 그러다보니 실제 코드의 내부 구현이 바뀌면 테스트 코드도 바뀌게 될 여지가 많더라구요.. 반면 스프링부트 테스트로 h2에 연결해서 하는 테스트는 상대적으로 느려 피드백이 늦는것이 단점일것같습니다. 개인적으로는 강의에 나온것처럼 스프링 부트 테스트로 h2에 연결해서 테스트하는 후자가 더 마음에 드는데요. 실제로 현업에서는 서비스 테스트시 둘중 어떤걸로 사용하시나요? 실제 강의하신것처럼 후자로 테스트를 많이 하시나요? 좋은 강의 감사합니다~
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
상품을 삭제하려면 어떻게 하면 좋을까요?
혹시 상품 상세페이지에서 상품 삭제를 하려면 어떻게 하면 좋을까요??,,,계속해서 하는데 모르겠어서요ㅠㅠ!
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
질문 아님.^^
주니어 개발자 분들이 지금 이 말을 잘 듣고 느끼시길 바래봅니다. 세상이 편해져도 노력없이 얻는건 없습니다. 오히려 4차 산업 5차 산업으로 발전할 수록 기본 지식을 더 많이 필요할 뿐이지 편하다고 생각하시지 마시고기술이 편해진다는 건 더 많은 지식을 요구한다는 것으로 받아 드리시고 루틴 처럼 자기 개발 잘 하셔서 고액 연봉자또는 훌륭한 사업자로의 길로 가시길 기원해 봅니다.대한민국 개발자 화이링!! ^^
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
1인 개발 데스크탑과 노트북에서 DB는 어떻게 처리하나요??
1인 개발을 할때 데스크탑에서 DB관련 작업을 진행하다 노트북으로 진행을하게 되면 이 부분은 어떻게 진행이 되는걸까요!??!?! DB 관련 수업을 들으며 진행하다 문득 궁금해져 QnA 남깁니당 ~
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
Transaction 적용구간에 대한 질문
안녕하세요? 강사님.덕분에 Springboot 수월하게 학습하고 있습니다.좋은 강의 항상 감사드립니다.다름이 아니라Transaction 적용구간에 대한 문의 드립니다.아래 가상 소스를 예를 들면방안1, 방안2 모두 문제점들이 있는데 실제 현업에서는 주로 어떠한 방법으로 해결하시는지 고견을 듣고 싶습니다. 물론, Controller 외부에서 별도 호출하는 방식으로아래 문제를 피해갈 수 있을것 같지만, 서비스 관리 특성성 하나의 메서드로 관리하고 싶다는 전제 입니다. 방안1) 경우 메소드에 Transaction을 적용하면순수 DB처리 이외도 처리도 포함되어 트랜잭션 처리이 짧을 수록 좋은데 길어질 수 있는 문제가 있습니다.방안2) 경우메소드를 쪼개어 순수DB 처리 메소드에만 Transaction을 적용할 수 있겠지만, external 메소드, 등록(), 의 경우 프록시 특성상외부에서 내부 메서드 호출시 트랜잭션이 적용되지 않습니다. 방안1)BasicService{ @Transactional public void 등록() { 1. 이미지 파일 저장 2. 이미지 파일 리사이징 3. ----트랜잭션 구간--- 3-1) 내용 등록 3-2) 업로드 파일 등록 }} 방안2) BasicService{ public void 등록() { 파일업로드(); DB저장(); } public void 파일업로드() { 1. 이미지 파일 저장 2. 이미지 파일 리사이징 } @Transactional public void DB저장() { 3. ----트랜잭션 구간--- 3-1) 내용 등록 3-2) 업로드 파일 등록 }} 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
필터사용
(인터셉터 대신) 특별히 필터를 사용해야 하는 경우는 어떤경우가 있을까요?
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
중복체크기능 관련 질문올립니다!
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 안녕하세요. 강사님 강의 잘 듣고있습니다. 강사님 제가 강의에서 들은 내용을 토대로과거 만들었던 프로젝트를 리팩토링하려고 하는데 어려움이 있어 질문올립니다. 강사님 위와같은 형식으로 회원가입을 진행하려고 하는데 과거에는 ajax를 사용해서 아래와 같이 <input type="text" id="signup-form-nickname" placeholder="닉네임을 입력해주세요." check_result="fail" required> <button type="button" id="check-nickname-btn" style="margin-left: 14px;" value="N">중복확인</button> check_result="fail"를 활용해 중복체크를 하면 check_result="success"값으로 바꿔 회원가입을 진행하는 방법을 사용했었습니다. 그런데 Thymeleaf에 와서는 어떤식으로 중복체크를 해야할지 감이 안잡혀 질문을 남깁니다. 타임리프는 ajax를 사용하지도 않고 중복체크 div도 form안에 있어 이것만 따로 보내는 방법도 알지 못하겠어 찾아보았으나 답이 나오지 않아 질문드립니다. 좋은 강의 만들어주셔서 감사합니다. 후기는 취업하고 올리려고 벼르고 있습니다. ㅇㅁㅇ