묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
DTO 와 Form
Controller DTO SERVICE Book Entity 위와 같은 DTO를 만들어 넘겨주는 형태가 1.Controller->Service로 넘어가는 파라메터가 많을경우 최적화가 잘 되어있는 형태가 맞는지 궁금합니다! 2.BookForm 과 DTO의 분리 이 예제에서는 BookForm 과 ItemUpdateDTO 과 같지만, 실무에서는뷰에서 사용하는 객체와, DTO 객체는 필드가 다르거나 다른 로직이 들어가게 되므로 분리하는것으로 이해하였습니다. 만약 뷰와 서비스에서 필요로하는 필드가 같다면, 뷰에서 받는 파라메터를 BookForm이 아닌 UpdateItemDTO로 받아도 괜찮은지 궁금합니다
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
질문 드립니다!
안녕하세요. 강의 잘 듣고 있습니다. 페치조인 강의중, 일대다 상황에서의 페이징에서는 두가지 방법이 있는데, 일대다를 다대일 상황으로 바꾸어 쓰는것 과 배치사이즈를 선언해서 사용하는 방법이 있는데, 일대다 상황에서 다대일 상황으로 바꿀수 있다면 굳이 배치 사이즈를 이용해서 페이징을 하지않고, 다대일로 바꾸어 사용하는것이 성능 상 더 좋은걸까요 ? ?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
SpringConfig파일 dataSource 밑줄 오류
안녕하세요 강사님 강의 잘 듣고 있습니다. 아래 사진처럼 밑줄 오류가 뜨는데 실행해보니 별 이상은 없습니다. 정확인 무슨 이유인지 알 수 있을까요? 이것 뿐만 아니라 tymeleaf의 model 데이터 인식 오류로 인해 model 데이터에도 밑줄 오류가 뜨네요 인텔리제이가 약간 이런 오류가 많나봐요 ㅠㅠ
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
강사님 용어가 헷갈려서 질문드려요~
안녕하세요 강사님 늘 잘 보고 있습니다*^^* 용어가 좀 헷갈려서 질문드려요.ㅠㅠ 세타조인 == 연관관계가 없는 조인 인건가요? 앞부분에 세타조인 설명하실 때 카르테시안곱 얘기하셔서 세타조인 == 크로스조인이고 연관관계가 없는 조인을 하려면 세타조인을 해야한다. 라고 이해를 했는데.. 구글링해보니 세타조인 == 크로스조인은 아닌 거 같아서요.. 세타조인에서 '=' 연산자를 쓴것이 동등 조인이라는데.. 동등 조인은 또 내부 조인에 속하는 종류 중 하나라고 하고..?? ㅜㅜ 제 의문을 계속 정리해보니 세타조인의 개념이 정확히 뭔지 모르겠는게 문제인거 같습니다. 세타조인이란 무엇이며 <세타조인>과 <연관관계가 없는 조인>의 관계를 어떻게 이해하면 좋을까요?? 장황한 질문 죄송합니다. 읽어주셔 감사합니다...
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
UUID 질문 드립니다.
안녕하세요 강사님 실무에서 RDBMS를 사용하면서 시퀀스는 많이 사용을 해보았는데요 UUID 관련해서 궁금해서 질문을 하게 되었습니다. (제가 시퀀스라고 말한 부분은 mysql auto_increment, 오라클 시퀀스, mssql identity를 의미한다고 생각하시면 될 것 같아요) JPA 책을 찾아보았는데 책에 UUID 관련 설명은 없는 듯 보여서요 1. 실무에서 혹시 UUID를 적용해 보신 적이 있으신지 궁금해서요 1.1. 적용하였다면 어떠한 장점이 있어서 적용하였는지 궁금합니다.(시퀀스로 해도 되는데 왜 UUID를 적용하였을까?) 2.JPA에 UUID를 적용해서 사용하면 시퀀스로 적용하였을 때 보다 장점이 있을까요? (게시판을 예로 들면 id 값을 내려 줘야 하는데 UUID로 값을 내려 주게 되면 다음 게시글에 대한 추측이 어려워서 비정상적인 접근 같은 게 많이 줄 것 같기도 하고요 그리고 mysql로 보면 big integer보다 더 많은 시퀀스를 생성할 수 있을 것 같긴 하지만 big integer도 다 못쓰는 게 현실이라서요) 3. JPA는 결국 RDBMS에서 생성해 준 시퀀스 값을 통해서 제어하는 부분이기 때문에 결국 RDBMS에 성능? 또는 지원전략에 따라서 UUID의 쓰임새가 달라진다고 생각하면 될까요? 활용2 편을 보다가 갑자기 궁금해서 질문을 남기게 되었습니다. 감사합니다.
-
해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
junit으로 회원등록 API 테스트 코드를 만들어 보았습니다.
junit으로 회원 등록 API 테스트 코드를 만들어 보았습니다. @ExtendWith(SpringExtension.class)@SpringBootTest@AutoConfigureMockMvcclass MemberApiControllerTest { @Autowired MockMvc mockMvc; @Autowired ObjectMapper objectMapper;// @BeforeEach// void setUp(@Autowired MemberApiController memberApiController){// mockMvc = MockMvcBuilders.standaloneSetup(memberApiController).build();// } @Test @DisplayName("회원_등록API_V1") void 회원_등록ApiV1() throws Exception { //given MemberDto memberDto = new MemberDto("회원1"); final String jsonStr = objectMapper.writeValueAsString(memberDto); //when final ResultActions resultActions = mockMvc.perform(post("/api/v1/members") .contentType(MediaType.APPLICATION_JSON) .content(jsonStr) ).andDo(print()); //then resultActions.andExpect(status().isOk()) .andExpect(content().contentType(MediaType.APPLICATION_JSON)) .andExpect(jsonPath("$.id").value("1")); } @Data @AllArgsConstructor static class MemberDto { private String name; } @Test @DisplayName("회원_등록API_V2") void 회원_등록ApiV2() throws Exception { //given MemberDto memberDto = new MemberDto("회원2"); final String jsonStr = objectMapper.writeValueAsString(memberDto); //when final ResultActions resultActions = mockMvc.perform(post("/api/v2/members") .contentType(MediaType.APPLICATION_JSON) .content(jsonStr) ).andDo(print()); //then resultActions.andExpect(status().isOk()) .andExpect(content().contentType(MediaType.APPLICATION_JSON)) .andExpect(jsonPath("$.id").value("1")); } @Test @DisplayName("회원정보_업데이트V2") void 회원정보_업데이트V2() throws Exception { //given MemberDto memberDto = new MemberDto("회원3"); final String jsonStr = objectMapper.writeValueAsString(memberDto); //when final ResultActions resultActions = mockMvc.perform(post("/api/v2/members/1") .contentType(MediaType.APPLICATION_JSON) .content(jsonStr) ).andDo(print()); //then resultActions.andExpect(status().isOk()) .andExpect(content().contentType(MediaType.APPLICATION_JSON)) .andExpect(jsonPath("$.id").value("1")) .andExpect(jsonPath("$.name").value("회원3")); } } 감사합니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
Whitelabel Error Page
안녕하세요 강사님 강의보고 그대로 했는데 http://localhost:8080 에서 회원가입이나 회원목록을 누르면 Whitelabel Error Page 요런 에러가 나오는데 어디서 잘못된건지 찾아도 잘모르겠어서요.. 요 캡쳐화면으로 찾을수있는걸까요??
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
질문이있습니다..
강의를 듣다가 관계형 db와 기본적인 sql 지식이 부족하다고느껴 책들을 찾아봤습니다 http://www.yes24.com/Product/Goods/69775589 http://www.yes24.com/Product/Goods/67882661 두가지중에 어떤것이 나을까요? 그리고 여기 나와있는 목차들말고도 추가로 알아야 할부분이있을까요?? 서점에 직접 가서 봤는데도 어떤것이 필요할지 그림이 안그려져서 구입못하고 나왔습니다 ㅠㅠ
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
시퀀스 전략에서의 allocationSize에 대해
많은 분들이 비슷한 질문을 해주셨지만 개인적으로 아직 정확하게 이해가 잡히지 않아 저도 다시 한번 질문올려봅니다. 네트워크 성능을 고려하기위해 allocationSize 설정을 이용하는 것이고,'allocationSize = 50'으로 설정하면, (처음 시점에) 애플리케이션 시점 JPA가 메모리에 미리 1~50개를 확보하여 next_val이 51이 되기 전까지는 DB 서버 통신을 하지 않는다.라고 이해하면 되는 것인가요? 그리고, 올려주신 PDF 내용 내 allocationSize에 대한 설명에 '데이터베이스 시퀀스 값이 하나씩 증가하도록 설정되어 있으면 이 값 을 반드시 1로 설정해야 한다'라는 말은 DB 서버 시점의 시퀀스의 next_val 값이 1씩 증가해야하는 상황이라면 'allocationSize = 1'로 설정해야 한다는 이야기인 것 같은데, 어떠한 상황에 이를 설정해야하는지 그 예시 상황을 알고 싶습니다.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
@Column 속성 insertable, updatable에 대해서
어떤 컬럼을 수정했을 때란 것이 컬럼 명, 타입 등을 수정할 때를 의미하는 것 같은데, insertable=false 같은 경우에는 컬럼을 수정한 이후 들어오는 데이터를 막는 것이고,updatable=false 경우는 컬럼을 수정한 이후 기존에 저장되어 있던 데이터를 수정할 수 없게끔 막는다. 라고 이해하면 되는거죠? 추가적으로 insertable=false, updatable=false 설정 각각 언제 사용할 수 있는지 대표적인 예시가 궁금합니다!
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
~/test.mv.db 요파일 생성 여부는
안녕하세요 강사님 ~/test.mv.db 요파일 생성여부는 윈도우이용자는 어떻게 조회할수있는지 알수있을까요..??
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
findByName의 result를 List로 받는 이유가 있나요?
service 코드를 개발 할 때 중복 되는 member_name이 있는지 validate를 해줘서 결국 member_name이 unique 값이 될텐데 , getSingleResult를 이용하여 아래와 같이 작성하지 않는 이유가 있나요? public Member findByName(String name){ return em.createQuery("select m from Member m where m.name = :name",Member.class) .setParameter("name",name) .getSingleResult();}
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
질문 있습니다!!
안녕하십니까 강의 진짜 정말 유익하게 잘 듣고있는 졸업예정 취준생입니다. 컴퓨터공학이라는 전공의 수 많은 분야 앞에서 적성을 찾다가 최근에 웹개발로 마음을 굳혀서요.. 지금이라도 스프링을 배워보면서 포트폴리오용으로 CRUD 기능을 구현해보려고 하는데 바보같은 질문이지만 인정받으려면 html css javascript처럼 완전 기초의 언어가지고 만들어야 인정해주나요?.. 왜냐하면 지금 강의 앞부분만 들은 시점에서 스프링데이터 JPA가 CRUD기능도 다 제공을 해준다고 하더라구요... 그럼 구현 난이도도 그만큼 쉬워진다는건데 과연 스프링으로만 CRUD를 구현하는것과 프레임워크 없이 구현하는것과 회사 입장에서 많은 구분을 두는 편인가요?? 만약 그렇다면 JPA까지만 배운 상태로라도 CRUD를 구현해보려고 합니다.. 아예 이번 강의는 듣지 않은채로... (스프링 데이터 JPA를 귀에 담지 않은채로 라는 말입니다) 강의 정말 잘 듣고있습니다. 감사합니다.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
안녕하세요 영속 컨텍스트 관련 질문있습니다.
안녕하세요 영한님 질문있습니다! 1) 영속 컨텍스트 안에는 우선은 1차캐시와 쓰기 지연 SQL 저장소가 있다고 이해하면 되나요? 스프링 컨테이너가 스프링 빈을 관리하듯이 영속 컨텍스트가 1차 캐시와 SQL 저장소를 관리하고 있다고 이해하면 되나요? 2) 영속 컨텍스트안에 있는 1차캐시를 조회할 수 있는 방법이 있을까요? 실제로 1차캐시에 데이터가 잘 들어가고 DB로 넘어가는 과정을 보고싶네요 강의가 너무 재밌습니다 늘 감사드립니다 :)
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
데이터 베이스 파일 생성이 되지 않습니다.
안녕하세요? 강사님. 항상 강의 잘 듣고 있습니다. 다름이 아니라, 제가 window installer 로 다운받은후에 H2 콘솔을 열어서 , 여러방법을 사용해서 데이터 베이스 파일 생성을 해보려고 했는데 되지가 않습니다. 주소창에 localhost:8082 도 해보고 저장한 설정 에서 server 대신 embedded 도 해보고, JDBC URL 에서 ~/test로 변경도 해보고 다 해봤는데 계속 똑같이 아래와 같은 것만 뜨네요... Database "C:/Users/user/test" not found, either pre-create it or allow remote database creation (not recommended in secure environments) [90149-200] 90149/90149
-
해결됨스프링 웹 MVC
세션에서 넘어오는 데이터 바인딩
강의 3분 정도의 설명에 session 에 있는 데이터를 받아와 @ModelAttribute 의 객체에 바인딩이 가능하다고 하셔서, 테스트를 작성해봤지만 실패해 테스트를 어떻게 작성해야하는지 질문드립니다.. 제가 시도한 방법은 다음과 같습니다. <컨트롤러> @Controller public class TestController { @PostMapping("/session") @ResponseBody public Event sessionTest(@ModelAttribute Event event){ return event; } } <테스트 코드 > @WebMvcTest class TestControllerTest { @Autowired MockMvc mockMvc; @Test void sessionTest() throws Exception { MockHttpSession session = new MockHttpSession(); session.setAttribute("name", "jaden"); mockMvc.perform(post("/session") .session(session) .param("limit", "10")) .andDo(print()) .andExpect(status().isOk()); } } <실행결과> 세션을 목업해서 넘겨봤는데, 바인딩이 되지 않아 null 이 찍힙니다. 또한, 두번째로 시도한 방법은 mockMvc 에 .sessionAttr 을 넣을 수 있어서 사용해 봤습니다. <테스트코드> @Test void test2() throws Exception{ mockMvc.perform(post("/session") .sessionAttr("limit", "10") .param("name", "jaden")) .andDo(print()) .andExpect(status().isOk()); } <실행결과> 하지만 마찬가지로 바인딩이 잘 되지 않는 것 같더라구요.. 어떻게 테스트 코드를 작성해야 제대로 바인딩을 할 수 있을까요? --- 아니면 혹시, session 에서 값을 받아와 setter 를 통해 직접 바인딩 해줄 수 있기 때문에 그렇게 말씀하신걸까요? 좋은 강의 감사드립니다!
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
mybatis 와 jpa
영한님 mybatis 와 jpa 의 개념을 둘다 모르고있는데 어떤것을 먼저 공부하는것이 좋을까요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
8:00 getter/setter 윈도우 단축키는
alt+Insert 하면 getter and setter를 생성 할 수 있습니다,
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
질문이 있습니다!
조인중, 세타조인과 연관관계가 없는 엔티티 조인은 같다 라고 생각해도 되나요? 예) select m from Member m, Team t where m.name = t.name 이라는 세타 조인과, select m from Member m join Team t on m.name = t.name 의 연관관계가 없는 엔티티 조인은 같은 건가요 ? ?
-
미해결실전! Querydsl
계산성 결과물을 DB에 저장하는 것에 대해서 어떤 방법이 더 효율적인가요
안녕하세요, 강의 잘 보고있습니다. 평소에 가지고 있던 궁금증인데 age를 업데이트하는 부분을 보고 문득 떠올라 질문남깁니다. 기존 레거시 테이블들을 보면 이미 레코드에 포함하고 있는 계산성 데이터들을 많이 저장하고 있는 테이블들을 많이 보았습니다. 해당 강의 차수에서 말하는 age나 또는 팀-멤버간(fk) 조인되어 있는 테이블에서 팀 테이블의 전체 회원 수 같은 칼럼들이요. 저는 기본적으로 이런 데이터들을 테이블에 넣는것을 반대하고있습니다. 나이를 넣는 것 보다 생년월일을 넣어야되고 팀의 전체 회원수가 필요하면 필요 시 쿼리에서 count를 하거나 애플리케이션에서 항상 동적으로 구하는 방식을요. 제 경험상으로 이러한 계산성 데이터를 넣어버리면 변경점이 계속 생기는 것 같습니다. 예를들어 1년이 지날 경우 벌크로 나이를 +1씩 더해야 되는 상황들이요. 또한 팀 멤버가 추가될경우 실수로 팀 테이블의 총원 테이블을 업데이트 하지 않는 경우도 생길수도 있을 것 같습니다. 하지만 단점으로는 데이터 용량을 많이 조회할 경우에 계산을 해야하는 시간등도 있을 것 같습니다. 대용량 서비스 관점에서 위 의견에 대해 어떻게 생각하시는지, 어떤 방법을 선호하시는지, 제가 놓친 부분은 없는지 궁금합니다. 감사합니다.