[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] ModelAttribute로 regions,itemTypes,deliveryCodes를 FormItemController가 처리가는 모든 view에 넘겨줬습니다. 그러면, item도 거의 모든 함수에서 사용되니까, item도 Modelattribute의 이런 사용법을 사용해도 되나요? 안된다면 왜 그런가요?
디버그가 왜 안되나요? 바로 톰캣 실행되는데요. 예를들어 디버그 모드면 watch부분이랑 뷰네임이 뭐가 들어가는지 보여야 하는거 아닌가요? 해당 코드는 view모델3부분입니다. 추가질문입니다. 제가 아래 2번째 사진(빨간색 박스)를 클릭했을 때 디버깅이 시작됩니다. (그전까지는 안되요.) 보통 파이참같은 경우 코드에서 중단점 설정 후 디버그를 누르면 바로 디버깅 모드 전환이 되는데요. 인텔리제이는 코드 중단점을 설정해놓아도 톰캣 스타트 시켜놓고(첫번째사진처럼) html에서 화면을 클릭해야 해당 디버깅이 들어가지나요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 전체 코드입니다. package com.example.hellospring.repository; import com.example.hellospring.domain.Member; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.Test; import java.util.List; import java.util.Optional; class MemoryMemberRepositoryTest { MemberRepository repository = new MemoryMemberRepository(); @Test public void save(){ Member member = new Member(); member.setName("spring"); repository.save(member); Member result = repository.findById(member.getId()).get(); // Assertions.assertEquals(member, result); Assertions.assertThat(member).isEqualTo(result); } @Test public void findByName(){ Member member1 = new Member(); member1.setName("spring1"); repository.save(member1); Member member2 = new Member(); member2.setName("spring2"); repository.save(member2); Member result = repository.findByName("spring1").get(); Assertions.assertThat(result).isEqualTo(member1); } @Test public void findAll(){ Member member1 = new Member(); member1.setName("spring1"); repository.save(member1); Member member2 = new Member(); member2.setName("spring2"); repository.save(member2); List<Member> result = repository.findAll(); Assertions.assertThat(result.size()).isEqualTo(2); } } 참고로 save 테스트에서 에러가 발생해서 findById 를 String -> Long 으로 바꾼 상태입니다. package com.example.hellospring.repository; import com.example.hellospring.domain.Member; import java.util.List; import java.util.Optional; public interface MemberRepository { Member save(Member member); Optional<Member> findById(Long id); Optional<Member> findByName(String name); List<Member> findAll(); } package com.example.hellospring.repository; import com.example.hellospring.domain.Member; import java.util.*; public class MemoryMemberRepository implements MemberRepository { private static Map<Long, Member> store = new HashMap<>(); private static long sequence = 0L; @Override public Member save(Member member) { member.setId(++sequence); store.put(member.getId(), member); return member; } @Override public Optional<Member> findById(Long id) { return Optional.ofNullable(store.get(id)); } @Override public Optional<Member> findByName(String name) { return store.values().stream() .filter(member -> member.getName().equals(name)) .findAny(); } @Override public List<Member> findAll() { return new ArrayList<>(store.values()); } }
처음 http://localhost:8080/request-header?username=hello 로 URL 입력 후 콘솔을 확인하면 아래와 같이 Header 편의 조회가 출력되었습니다. 이후에 Postman을 통해서 다음과 같이 hello! 라는 메시지를 POST 방식으로 전송을 한 후 콘솔을 확인해 보니 아래와 같이 출력되었습니다. 이때 Postman을 통해 보낸 방식에서 cookie가 조회되지 않는 이유는 Postman을 사용해서 POST 요청을 할 때 쿠키 설정을 따로 해주지 않아서 그런거고 크롬에서 URL을 검색해서 GET 방식으로 조회할 때는 크롬이 자동으로 쿠키를 할당해준건거요...??
window command에서 h2.bat하고 db띄운 후 그냥 창x눌러서 껐는데요 그다음 다시 커맨드 열어서 h2.bat하고 insert 쿼리 날렸는데 insert가 반영이 안돼요 jsessionid 처음 나왔던걸로 해도 안되고 새로 나오는 것으로 해도 안되는데 창을 새로 띄워도 원래 jsessionid로 해야 하는건가요? test.mv .db 파일도 새로 생성해야 하나요? 파일을 올리고 싶은데 첨부파일 넣는 곳이 없네요 어떻게 해야 하나요?
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 질문이 있습니다 제가 회사에서 부트를 사용해서 타임리프 관련해서 학습하고 사용 할려고 하는데 form을 사용해서 action 을 하는게 아닌 거의다 js를 통해 ajax를 사용하는 등 거의 js를 통해 서버와 통신하는 방법을 사용하고 있습니다. 이럴 때 타임리프에서 th:object 옵션을 사용할 방법이 따로 없을까요? html에서 form을 사용하지 않는 이상?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요.영학님이 주신 걸로 하면 버전이 안맞아서 커뮤니티 글에 있는 17버전을 새로 만들어서 영학님이 주신 form에 내용을 main하고 resources를 바꿔서 실행 하는데 서버도 열리고 잘 되는데 이상하게 이런 현상이 떠서 질문을 드립니다 이렇게 뜨고 상품관리 를 누루면 이렇게 뜨는데 위에 basic을 form으로 바꾸면 잘 뜨고 다른 기능도 잘 됩니다.그런데 할때 마다 계속 바꿔야 하니 문제를 찾아 보고 있는데 resources에 index.html도 확인 했는데 basic이 쓰인 곳도 없고 FormController 부분에도 basic을 반환 하는 부분도 없는데 프로그램 코드안 에서도 basic을 반환 하는 부분이 어디에도 없는데 뭐 때문에 그런지 잘 모르겠습니다. 재가 미숙해서 잘 못 찾는것도 있지만.. 배운다는 생각으로 충고 주시면 잘 배우겠습니다
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 이렇게 RequestMapping으로 /template으로 시작하는 url을 mapping하고, /fragment로 오는 get을 template()에서 처리합니다. 그런데 이런 컨트롤러 클래스 내부의 메소드를 public으로 하는 이유가 있을까요? 예외없이 private으로 해야하는 것 아닌가요? 다른곳에서 TemplateController 인스턴스를 만들어서 template() 함수를 쓰려고 해도, templateController가 @Controller니까 의미 없지 않나요? 즉,spring 차원에서 public을 막고 private으로만 메소드를 만들게 할 수 도 있는데, 그렇게 않한 이유가 알고 싶습니다.
실행하면 아래와 같은 메세지가 뜹니다. 실행 자체가 안되는거 같은데요? spring.messages.basename=messages 설정 여부와 상관없이 오류가 납니다. @SpringBootTest public class MessageSourceTest { @Autowired MessageSource ms; @Test void helloMessage() { String result = ms.getMessage("hello", null, null); assertThat(result).isEqualTo("안녕"); } } Execution failed for task ':test'. > There were failing tests. See the report at: file:///C:/CodingStudy/스프링/message/build/reports/tests/test/index.html * Try: Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] user.username 이 어떻게 가능한가요? private 이어서 user.getUsername() 해야하는 것 아닌가요? 아니면, 서버 사이드에서 user.username 을 user.getUsername으로 바꿔주나요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 안녕하세요 강의를 따라하고 있는데 http://localhost:8080/ 를 치면 home.html 파일이 안열리고 index.html이 열립니다. 캐시를 삭제해보고 시크릿모드로 다시해봐도 index.html 파일이 열립니다! 해결 방법을 모르겠어요... 구글 드라이브 파일입니다 https://drive.google.com/file/d/18dkvdMVN4ivRebUFHNF3IXZRCPjDbS91/view?usp=drive_link
안녕하세요. 이번 수업에서 사소한? 궁금증이 생겨서 질문 남깁니다! handleReset() { this.setState(() => { return { searchKeyword: "", // searchResult: [], submitted: false, } }, () => { // console.log("TODO: handleReset", this.state.searchKeyword); console.log("TODO: handleReset", this.state.searchResult); // 이전 검색 결과가 그대로 저장되어있음. }); } 위의 handleReset 메서드 실행시, 저 같은 경우엔 주석 친 부분처럼 this.state.searchResult를 빈배열로 무조건 갱신해줘야 한다고 생각 했습니다. 이유는, reset의 동작이 검색 결과 부분에 아무것도 노출하지 않는다는 점 때문에, 검색 결과를 저장하고 있는 searchResult 역시 같이 비워줘야 하지 않나 라는 생각이 들었기 때문입니다. 물론 현재로서는 this.state.submitted으로 노출 제어를 하고 있는 상황이기 때문에 동작에는 전혀 문제가 없긴 하지만요...! 사소한 부분이긴 하지만.. 혹시 강사 님께서는 이 부분에 대해서 어떻게 생각하시는지 여쭤보고 싶습니다!
안녕하세요 강의 보면서 게시판 성격의 서비스를 만들던 중에 궁금증이 생겼습니다. 두 가지 방법이 있는데, 제가 취준생이라 실제 서비스 코드들을 본 적이 없어서 어떤 방법이 조금 더 현명한 방법인지 궁금합니다! Jpa 사용법처럼 게시글과 댓글을 맵핑하는 방법입니다. 댓글에 게시글의 키만 가지는 방법입니다. 1번 코드는 대략적으로 이런 형태일 것 같습니다. @Entity public class Article{ @Id @GeneratedValue(strategy = Identity) long id; String content; } @Entity public class Comment{ @Id @GeneratedValue(strategy = Identity) long id; String comment; @ManyToOne(fetch = FetchType.LAZY) Article article; } 1번 코드의 경우에는 배울 때는 맵핑도 깔끔하게 잘 되고 좋았는데, 실제 개발을 하다 보니 댓글만 사용하는 경우에 있어서 Article의 내용은 전혀 필요가 없는 경우도 많을 것 같습니다. 또한 게시글의 댓글들을 조회 할 때, 같은 Article 내용들이 반복해서 들어 있다는 점이 마음에 걸립니다.(Lazy 하게 가져와서 문제가 없을것 같기도 하고 이 부분은 확실하지 않습니다.) 2번 코드는 게시글의 키만 가지는 경우입니다. @Entity public class Article{ @Id @GeneratedValue(strategy = Identity) long id; String content; } @Entity public class Comment{ @Id @GeneratedValue(strategy = Identity) long id; String comment; long articleId; } 2번의 경우에는 불필요한 정보를 담지 않고 필요한 경우에는 Id값으로 찾아서 가져올 수 있습니다. 하지만 article 과 Comment를 각각 따로 관리하는 형태가 됩니다.(사실 1번 코드도 따로 관리는 가능할 것 같습니다) 간단한 경우에는 1번이 좋은 것 같은데 컴포지션 되는 객체들이 많은 경우에는 그 자체로 정말 생각해야 되는 경우가 많아 지는 것 같습니다.(Comment 안에 Article, User, 첨부 파일 Entity 등등이 복잡하게 들어갈 수 있을 것 같습니다 ) 네이버 카페와 같은 사이트들의 경우에서는 게시글과 댓글을 따로 관리하는 것 같기도 하고(작성 글 보기를 누르면 삭제된 게시글 이지만 댓글 내용은 볼 수 있는 경우입니다) 실제로는 어떤 방식으로 풀어 가는지 궁금합니다!
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] jsp 버전별로 뭐가 문제일까요? https://drive.google.com/drive/folders/15jLgIsX62wpySXl_Zw3PWlFiqCv-EMVx?usp=sharing
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] v4 버전까지는 정상적으로 작동됐습니다 이 챕터에서 강의 그대로 진행은 했지만, 아래의 오류가 발생합니다 인텔리제이로 스프링을 띄울 때 8080포트로 정상적으로 띄워집니다. localhost:8080 으로 접근했을 때, index.html에서 404이 뜹니다. 강의 pdf를 보면서 계속 코드의 다른 점을 비교해봤지만, 저로서는 도저히 v5 관련 링크가 아닌, index 조차도 안 나오는 이유를 모르겠습니다. 아래에 코드 파일 링크 첨부하였습니다. 혹시 도움 요청 받을 수 있을까요? https://drive.google.com/file/d/1MXjKaQ51IdZzdTDeyJTamflrzokbES-_/view?usp=sharing
안녕하세요 API 예외 처리 - '시작' 강의 후반부에 members/ex에 원래대로면 json 객체가 포스트맨에 출력되어야 하는데 서버가 에러와 함께 중단되는 현상이 발생합니다. https://drive.google.com/file/d/17UCDKzluOgLwtSn82gMD2zaTYZ4JzxHi/view?usp=sharing