묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨스프링 DB 1편 - 데이터 접근 핵심 원리
h2 동작방식을 제가 이해하고있는지 확인해주세요
h2 애플리케이션은 jdbc:h2:tcp://localhost/~/test 즉, tcp통신을 통해 test.mv.db 파일에 데이터를 저장한다. h2.sh 애플리케이션을 실행하면 os에 org.h2.driver가 등록된다. jdbc가 제공하는 DriverManager는 os에 등록된 org.h2.driver를 관리하는 객체이다. 제가 이해한 내용이 맞을까요? 확인해주시면 감사합니다!
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
체크박스-단일2 3분 56초(체크박스 등록 폼 중에서 의문점).
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]상품등록폼 addForm.html 의 내용중 아래부분은 체크박스 관련부분인데.<!-- single checkbox --> <div>판매 여부</div> <div> <div class="form-check"> <input type="checkbox" id="open" th:field="*{open}" class="form-check-input"> <label for="open" class="form-check-label">판매 오픈</label> </div> </div>제가 궁금한건 등록폼에서 체크박스필드이름인 open까지 즉itemName, price, quantity,와 open 이 4가지값이 POST로 보내지는데 받는부분은 아래와같이@PostMapping("/add") public String addItem(@ModelAttribute Item item, RedirectAttributes redirectAttributes) { log.info("item.open={}",item.getOpen()); Item savedItem = itemRepository.save(item); redirectAttributes.addAttribute("itemId", savedItem.getId()); redirectAttributes.addAttribute("status", true); return "redirect:/form/items/{itemId}"; }받게되는데. 여기서 질문:item 객체로 받는데 이게 궁금합니다..이거 넘기는 값전부에 해당하는 생성자가 없어도 객체로 만들어서 받아지는건가요??분명 item 클래스를 봐보면 @Data public class Item { private Long id; private String itemName; private Integer price; private Integer quantity; private Boolean open; //판매 여부 private List<String> regions; //등록 지역 private ItemType itemType; //상품 종류 private String deliveryCode; //배송 방식 public Item() { } public Item(String itemName, Integer price, Integer quantity) { this.itemName = itemName; this.price = price; this.quantity = quantity; } }이와 같이 Item클래스는 기본생성자와 itemName,price,quantity 3가지값만 받는 생성자밖에없는데.이와같이 itemName, price, quantity,와 open 이 4가지값을 받는 생성자가 없는데 도 스프링에서 4가지를 받는 생성자를 만들어서 객체를 만들어서 넘겨주는건가요??아래부분처럼 post로 보낸걸 받을때 딱맞는 생성자가없어도 item객체로 만들어지는게 궁금합니다.. 그냥 스프링에서 맞는생성자가 없어도 알아서 만들어서 넣어주는건가요?? 딱맞는 생성자가 없으면 객체를 못만드는거 아닌가요?? 이걸 어떻게 이해해야 하나요????@PostMapping("/add") public String addItem(@ModelAttribute Item item, 질문 : 등록폼에서 4가지 필드값을 보내는데받을때 @PostMapping("/add") 매핑에서@ModelAttribute Item item, 로 받았는데 item클래스를 살펴보면 4가지를 받는 생성자는 없는데도 Item객체로 만들어질수있나요??
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
연관관계 메서드와 CASCADE의 관계
//==연관관계 메서드==// 가 주석으로 달린 메서드들이 연관관계에 있는 객체에 값을 넣어줄 때 반대편에도 자동으로 값을 넣어주는 역할을 하는 메서드가 맞나요? 이렇게 따로 메서드를 구현해주는 이유가 있나요? CASCADE 옵션을 사용하면 어차피 알아서 다 해주지 않나요 ?? 기본편에서 설명해주셨다고 했는데 어떤 강의를 다시 수강해보면 될까요 ? 지연로딩에서 ***ToMany의 디폴트는 Lazy고, ***ToOne의 디폴트는 Eager인 이유가 ***ToMany같은 경우 하나만 불러와도 기본적으로 수많은 값이 따라오기 때문에 스프링 측에서 Lazy로 해놓았고, (Member의 Order을 조회하면 수많은 Order이 자동으로 따라오기 때문에 디폴트가 Lazy) ***ToOne의 경우 객체 하나만 조회하면 쿼리문을 하나밖에 더 날리지 않기 때문에 Eager로 해놓았지만, 실무에서는 테이블 전체를 조회할 때가 있기 때문에 디폴트값인 Eager를 쓰지 않고 Lazy를 사용한다 이게 맞을까요? (Order하나만 조회하면 Member 1개만 따라오기때문에 디폴트가 Eager지만, select o from Order o 와 같은 쿼리문으로 Order를 전체 조회했을 때는 Order에 따른 멤버가 전부 따라오므로 그냥 Lazy 옵션을 준다) 이렇게 이해했는데 맞을까요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
엔티티와 테이블 설계 및 Category 클래스 질문입니다
기본편에서 관계에 따른 연관관계 설정하는 방법은 공부했는데, 위와 같은 기능 목록을 보고 기능목록을 보고 위와 같이 어떤 도메인을 써야 할지, 도메인끼리 1:N인지, N:N인지, 1:1인지 단방향인지, 양방향인지(실무에서는 N:N과 양방향은 지양하라고 하셨지만) 등 도메인 모델과 테이블 설계가 어렵다면 무엇을 참고하는 것이 좋을까요 ? ( 영한님이 분석해 놓은 회원 엔티티와 회원 테이블을 보고 코드를 작성할 순 있는데 스스로 회원 엔티티와 테이블을 분석하기가 너무 어렵습니다.) Category 클래스 안에서 스스로 일대다 관계를 맺고 있는데 이것은 무엇을 위해 만든건가요 ?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
multipart data 전송 관련 강의는 어디에 있나요?
multipart data 전송 관련 강의는 어디에 있나요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
Category - Item 관계
카테고리 : 과일, 빨강, 노랑 // 아이템 : 사과, 배, 체리이렇게 존재할 때==================과일 -> 사과 배 체리빨강 -> 사과 체리노랑 -> 배==================사과 -> 과일 빨강배 -> 과일 노랑체리 -> 과일 빨강==================사과(아이템)같은 경우 과일과 빨강이라는 카테고리에 속해있고,과일(카테고리)같은 경우 사과 배 체리라는 아이템이 속해있기 때문에다대다 관계가 맞나요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
static/index.html 은 Mapping을 안해줬는데도 되는 이유가 무엇인가요 ?
@GetMapping("/") public String index() { return "index"; } 이런 소스 없이 자동으로 localhost:8080 들어가면 Index.html로 연결되는 이유가 무엇일까요?
-
미해결스프링 핵심 원리 - 고급편
공통 코드를 추상 클래스로 올리라는 것의 해석
첫 번째 질문은 '섹션 4'에 '데코레이터 패턴 - 예제 코드3' 편에서 김영한님이 private Component component; TimeDecorator(Component component) { this.component = component; }를 드래그하며 MessageDecorator에서와의 중복 코드이기 때문에 추상 클래스를 만들어서 올릴 수 있다고 하셨는데 추상 클래스를 아래와 같이 만들어주고@Getter @Setter public abstract class AbstractDecorator implements Component { private Component component; AbstractDecorator(Component component) { this.component = component; } } MessageDecorator를 이렇게 수정해주면 되는걸까요?@Slf4j public class MessageDecorator extends AbstractDecorator{ public MessageDecorator(Component component) { super(component); } @Override public String operation() { log.info("MessageDecorator 실행"); String result = super.getComponent().operation(); String decoResult = "**" + result + "**"; log.info("MessageDecorator 꾸미기 적용 전={}, 적용 후={}",result, decoResult); return decoResult; } } 두 번째 질문은 추상클래스를 사용한다면 인터페이스의 장점을 활용하지 못할 것 같은데 이걸 의도하신 게 맞는지 궁금합니다. 감사합니다. 강의 잘 듣고 있습니다.
-
해결됨토비의 스프링 부트 - 이해와 원리
@Value에 대해서 질문있습니다.
@MyAutoConfiguration class SampleBeanConfigClass { @Value("${name}") String name; @Bean SampleBean sampleBean(){ System.out.println("sampleBean name = "+name); } }@Configuration class UserConfigClass { @Value("${name}") String name; public UserConfigClass(){ System.out.println("UserConfigClass name = "+name); } @Bean public UserConfigBean userConfigBean(){ System.out.println("UserConfigBean name = "+name); return new UserConfigBean(); } }//application.properties name = springsampleBean name = ${name} UserConfigClass name = null UserConfigBean name = spring아직 PropertySourcesPlaceholderConfigurer는 MyAutoConfiguration으로 등록하지 않은 상태입니다. 그런데 @Value의 위치에 따라null, spring, ${name} 이렇게 각각 나오더라구요이렇게 value의 위치마다 다르게 작동하는 이유가 있을까요..?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
AOP 의존성 추가
두가지 궁금사항이 있습니다.1.첫번째@Aspect 애노테이션 을 사용한다면의존성 추가해야된다고 인터넷에 나와있는데,꼭 안해도 되는건가요???implementation 'org.springframework.boot:spring-boot-starter-aop' 2.두번째TimeTraceAop class에 @Component 애노테이션을 추가하면 에러가 안나는데,SpringConfig class에 @bean 으로 등록시 에러가 납니다.콘피그에 빈으로 등록코드를 적을경우 또다른 코드를 주입해야되나요?
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
formatter에 pattern이 일어나는 시점
@GetMapping("/formatter/edit") public String formatterForm(Model model){ Form form = new Form(); form.setNumber(10000); form.setLocalDateTime(LocalDateTime.now()); log.info("form={}",form); model.addAttribute("form",form); return "formatter-form"; } @PostMapping("/formatter/edit") public String formatterEdit(@ModelAttribute Form form){ log.info("post form={}",form); return "formatter-view"; }로그를 통해 form, post form을 출력해보았습니다.저는 처음 form은 그냥 입력한 값이 나오고 그다음 post form은 ModelAttribute에 들어갈 때public String formatterEdit(@ModelAttribute Form form){포멧터가 form의 타입을 변경하고 입력한다고 예상했습니다.하지만 로그를 보니 form=FormatterController.Form(number=10000, localDateTime=2023-04-23T12:39:53.251212) post form=FormatterController.Form(number=10000, localDateTime=2023-04-23T12:39:53)값은 값이 나오는 것을 확인했습니다. 제가 생각했을 때는 Argument Resolver 안에 ConversionService 안에 Formatter 가 controller를 호출하기 전 @ModelAttribute에 입력할 때 실행되지만@Data static class Form{ @NumberFormat(pattern = "###,###") private Integer number; @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime localDateTime; }에서 @NumberFormat(pattern = "###,###") 패턴이 적용 되는 시점은 html에서"${{form.number}}"중괄호2개가 있을 때다. 그래서 로그는 값은 같은 값이 출력이 되지만 html에서는 다른 값이 출력된다. 라고 이해를 했는 데 맞게 생각한 것인지 궁금합니다. 답변주시면 정말 감사하겠습니다.
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
예제에서 사용하는 패키지구조와 실무에서 사용하는 패키지구조
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]안녕하세요.패키지 구조에 대해서 문의 드립니다.무료로 제공되는 Spring Introduction 강의에는 패키지 구조가 controller, domain, repository, service 이렇게 나누어 지는데요.Spring MVC1편, 2편으로 넘어오면서 controller, reposityory, service 패키지는 사라지고domain, web 패키지 밑에 비지니스 요구사항에 대해서 나온 업무, 예를 들어 item, login, member를 기준으로 서브 패키지를 만들어서 각각 domain, web 패키지의 하부 패키지를 두고 여기서 controller, repository, service에 필요한 내용을 섞어서 집어 넣었습니다.그리고 MVC 2편 강의로 가니까. web 패키지 밑에 argumentresolver, session 패키지 같이 비지니스 요구사항과 관련된 요구사항이라기 보다. 스프링 기능에 관련된 기능이 web 패키지 밑에 들어왔습니다.그러다 보니 패키지 구조가 Spring Introduction 강의에서 나누었던 패키지 구조보다 뭐랄까 중구난방으로 섞여있는 느낌이 듭니다.질문] 실무에서도 MVC 2편강의에 분리된 형태로 많이 하는지 아니면 Spring Introduction에서 제시한 controller, domain, repository, service 패키지를 기준으로 새로운 패키지가 추가 또는 세분화 되는지 궁금합니다.그럼 답변 부탁드립니다.감사합니다.
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
Hello 서블릿 에러
hello 서블릿 생성 후 웹페이지가 구현이 안되네요 어떻게 해야 하나요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
질문드립니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 컨트롤러에서 String 을 리턴하면 경로잖아요근데 그게 static에 있는 정적 리소스인지 templates에 있는 동적리소스인지도 구분가능한가요? 아니면 무조건 동적으로 가는건가요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
라이브러리 살펴보기 3:45 질문
저는 왜 강사님처럼 오른쪽 창에 gradle이랑 database가 안보이는 걸까요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
템플릿엔진이 없을경우 뷰리졸버는 작동을 못하나요??
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]안녕하세요 처음에 타임리프 의존성 추가 없이 해서 계속 페이지가 없다고 404오류가 나왔습니다.다른분이 타임리프 없이 할 경우 어떻게 해야하는지 질문주신것에 restapi방식을 많이 사용한다고 답해주신것은 보았는데템플릿엔진이 없으면 아예 뷰리졸버가 동작하지 않는 것인지 궁금합니다.application.properties 파일에 spring.mvc.view.prefix=/resources/templates/ spring.mvc.view.suffix=.html이 코드도 추가해보고, static, templates 폴더에 모두 보여주고싶은 html파일도 넣어보았는데 controller는 동작하고 뷰가 없다고 합니다감사합니다 :)
-
해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
OrderRepository를 JpaRepository를 사용하여 작성하고 싶습니다.
MemberReposiotry처럼 OrderRepository도 JpaRepository를 사용하여 변경해봤습니다.근데 여기서 기존의 검색 기능을 담당하던 findAllByString의 메서드를 구현함에 있어서 오류가 발생하여 질문드립니다.기존과 같이 OrderSearch를 이용하여 작성하고 싶어서 findALlByMemberName으로 OrderSearch의 필드인 MemberName을 가져오고 싶었으나 타입 불일치로 오류가 발생합니다.기존의 Service와 Controller의 변경 없이 Repository만으로 해결하고 싶은데 어떻게 작성해야 할까요?findAllByString은 동적쿼리라서 JpaRepsitory의 기능으로 해결하기엔 한계가 있나요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
gradle build후 dir에서 jar파일이 안보여요..!
gradle build는 됐는데, 그 뒤에 dir에서 snapshot.jar파일이 안보입니다.이건 왜그럴까요..?ㅠㅠ?
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
required 질문이요
String[] messageCodes = codesResolver.resolveMessageCodes("required", "item");안녕하세요 이 코드에서 errorCode의 required는 errors.properties에 있는 required인가요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
@Controller와 생성자에 @Autowired 중복할필요있나요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 클래스에 컨트롤러 붙여주면 스프링빈에 자동등록되서 생성자에 Autowired 붙여줄필요없는거 아닌가요?