inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

173만명의 커뮤니티!! 함께 토론해봐요.

한가지 상품이 아닌 여러가지 상품 주문 시

미해결

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

안녕하세요 강사님 강의를 듣다가 여러가지 상품을 주문할 수 있게 구현해보고 싶은데 thymeleaf에서 여러 상품을 선택 했을 시 선택 데이터들을 리스트형태로 만들어서 postMapping에 보내야하는건가요...? 그렇다면 thymeleaf문법은 어떻게 들어가야하는지 궁금합니다... (추가적으로 상품을 고르게되면 고른 리스트가 보이면서 더 상품을 추가하거나 삭제하게 할려면 자바스크립트로 설정해두는건가요?!)

  • java
  • spring
  • spring-boot
  • 웹앱
  • JPA
해범 댓글 1 좋아요 0 조회수 296

@ModelAttribute가 있을 때, Model 객체 생성

미해결

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

안녕하세요. 강의 잘보고 있습니다. (질문을 많이 하는 거 같아서 좀 죄송스럽지만..) 영한님이 @ModelAttrubute가 파라미터에 있으면 파라미터에 Model 객체가 있지 않아도 자동으로 Model 객체가 생성되고 Model.addAttribute 까지 해준다고 하셨는데요.(파라미터에 @ModelAttribute가 선언돼 있으면 Model은 선언되지 않아도 무조건 생성된다고 생각해도 될까요?) 그럼 이 역할을 해주는 게 ArgumentResolver일까요?

  • MVC
  • spring
강성욱 댓글 1 좋아요 1 조회수 353

ReturnValueHandler의 반환

미해결

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

안녕하세요. 강의를 보다 궁금한 점이 생겨 질문 드립니다. ReturnValueHandler가 여러가지 controller들의 반환값을 처리해서 핸들러 어댑터로 값을 준다고 하셨는데, 이때 @ResponseBody나 HttpEntity를 반환하는 controller는 ReturnValueHandler에서 어떤 타입으로 반환되나요? 그리고 강의 앞부분에서 핸들러 어댑터는 ModelAndView를 dispathcerServlet에 반환해서 viewResolver를 실행시키는 것으로 배웠는데, @ResponseBody, HttpEntity 일때는 핸들러 어댑터가 무슨 타입을 반환하고, dispatcherSerlvet에서 어떻게 처리되는지도 궁금합니다. 좋은 강의 항상 잘 듣고 있습니다. 감사합니다.

  • spring
  • MVC
wooky9633 댓글 1 좋아요 2 조회수 354

totalPrice

미해결

실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화

안녕하세요 15:48 보시면 totalPrice 값이 나오는데 이 메소드는 언제 호출이 된건가요? 따로 호출해 준적이없는거 같습니다 ========== @GetMapping ( "/api/v1/simple-orders" ) public List<Order> ordersV1 (){ List<Order> all = orderRepository .findAllByString( new OrderSearch()) ; return all ; } =========== public int getTotalPrice (){ int totalPrice = 0 ; for (OrderItem orderItem : orderItems ){ totalPrice+=orderItem.getTotalPrice() ; } return totalPrice ; }

  • java
  • spring
  • spring-boot
  • JPA
adamku 댓글 2 좋아요 2 조회수 434

많이 어려워서 그런데 이정도 수준이면

미해결

자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비

기업코테에 자주 출제되는 난이도인가요?

  • java
  • 코테 준비 같이 해요!
댓글 1 좋아요 1 조회수 635

일대다 페치조인 메모리상에서 페이징

미해결

실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화

안녕하세요 영한님 강의 잘 듣고 있습니다!! 일대다 페치조인에서 페이징을 하게되면, 메모리 상에서 페이징을 한다고 이해했습니다. 만약 페치조인 쿼리가 DB로 가면, 뻥튀기된 로우들이 메모리에 올라오게 되고 distinct를 JPA가 하게됩니다. 이 상황에서 만약 페이징이 이루어진다면 뻥튀기된 로우에서 offset만큼 결과를 리턴하게 되다고 이해했습니다. 결론적으로 생각하면 뻥튀기된 로우를 페이징하기 위한 쿼리와 전체를 가져오는 쿼리가 같은 상황에서, 왜 메모리상에서 페이징하는 것이 위험한가요?

  • spring
  • JPA
  • spring-boot
  • java
ㅎㅇㅎㅇㅎㅇ 댓글 1 좋아요 0 조회수 369

Test class 위치

미해결

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

안녕하세요. 강의 너무 잘 듣고 있습니다. 상세히 설명해주셔서 감사합니다. 한 가지만 여쭤보겠습니다. 테스트 클래스를 test 디렉토리에 만들 때, 만드시 원래 소스코드와 패키지 이름과 위계 등을 맞춰서 대응되게 만들어줘야 하는 건가요?

  • spring
  • MVC
강성욱 댓글 1 좋아요 1 조회수 285

Thymeleaf + spring security + JWT 페이지 이동시 인증 구현방법 문의드립니다

미해결

스프링 시큐리티

안녕하세요 질문을 둘러보았는데 저랑 딱맞는 고민은 없는거 같아서 질문드립니다. 프론트/백서버를 나누지 않고 한 서버로 구현할 경우 JWT를 페이지 이동시 매번 어떻게 헤더로 보내줄까요?? fetch api나 ajax를 통한 api 호출시 헤더 보내는것은 문제없지만 아예 다른 매핑으로 페이지를 이동할 경우 인증이 필요한 페이지에 접근하려면 header에 bearer token이 필요한데 도대체 어떤 방법으로 구현할지 모르겠습니다. 프론트서버를 나눈경우 이게 어려운게 아닌일 같은데 리다이렉션을 헤더요청과 함께하려는 꼴이 되서 안되는거 같네요,.. 그래서 일단은 cookie에 토큰값을 넣어주고 쿠키값에서 찾아오도록하고 있습니다..... 쿠키는 헤더에 자동으로 계속 추가되니깐요.. 그냥 이렇게 해도 상관없을까요 쿠키에 토큰 자체를 넣어버려도 괜찮을지요 프론트와 백이 분리 되지 않고 spring security로 설계한 서비스의 경우 jwt인증을 매 페이지 마다 어떻게 수행할지가 고민입니다. 감사합니다.

  • jwt
  • oauth2
  • Spring Security
  • java
  • spring-boot
studio galleryplay 댓글 1 좋아요 1 조회수 1859

@Controller와 @RestController 동시 사용

미해결

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

안녕하세요! 강의 잘 듣고 있습니다! 질문1) 영한님께서 @Controller가 붙은 클래스의 메서드에서 return 하는 String 값은 논리적인 view를 찾아서 반환한다고 하셨던 걸로 기억합니다. 제가 시험삼아 @Controller와 @RestController를 동시에 붙이고 테스트해보니(templates에 ok.html을 따로 만들었습니다) ok.html이 아닌 ok라는 body 메시지가 리턴되었는데 우선순위가 있나요? @Controller와 @RestController 위치를 변경해도 마찬가지였습니다. 질문2) 질문이 좀 이상할 수도 있는데 @Controller와 @RestController를 동시에 붙여도 상관없나요? 서로 충돌나는 게 없을까요? 질문3) @Controller를 사용했을 때 반환할 뷰 파일의 위치는 무조건 resources/templates 에 두어야 하나요? 테스트 해보니 resources/static에 넣으니 불러오지를 못해서용

  • MVC
  • spring
강성욱 댓글 1 좋아요 1 조회수 1918

저는 m = 의 값이 나오지 않습니다 ㅠㅠ

미해결

자바 ORM 표준 JPA 프로그래밍 - 기본편

1. persistence.xml 2. Member.java package hellojpa ; import javax.persistence.* ; @Entity // JPA 의 관리 대상이 된다 . public class Member { @Id @GeneratedValue @Column (name = "MEMBER_ID" ) private Long id ; @Column (name = "USERNAME" ) private String username ; // // @Column(name = "TEAM_ID") // private Long teamId; @ManyToOne @JoinColumn (name = "TEAM_ID" ) private Team team ; public Long getId () { return id ; } public void setId (Long id) { this . id = id ; } public String getUsername () { return username ; } public void setUsername (String username) { this . username = username ; } public Team getTeam () { return team ; } public void setTeam (Team team) { this . team = team ; } } 3. Team.java package hellojpa ; import javax.persistence.* ; import java.util.ArrayList ; import java.util.List ; @Entity public class Team { @Id @GeneratedValue @Column (name = "TEAM_ID" ) private Long id ; private String name ; // Team 객체에서 Member 클래스를 참조하기 위해 @OneToMany (mappedBy = "team" ) private List<Member> members = new ArrayList<>() ; public Long getId () { return id ; } public void setId (Long id) { this . id = id ; } public String getName () { return name ; } public void setName (String name) { this . name = name ; } public List<Member> getMembers () { return members ; } public void setMembers (List<Member> members) { this . members = members ; } } 4. JpaMain.java package hellojpa ; import javax.persistence.EntityManager ; import javax.persistence.EntityManagerFactory ; import javax.persistence.EntityTransaction ; import javax.persistence.Persistence ; import java.util.List ; public class JpaMain { public static void main (String[] args) { // 엔티티 매니저 팩토리는 하나만 생성해서 애플리케이션 전체에서 공유 EntityManagerFactory emf = Persistence. createEntityManagerFactory ( "hello" ) ; // DB 커넥션을 얻는 일관적인 행위를 할때마다 EntityManager 를 만들어줘야한다 . // 엔티티 매니저는 쓰레드간에 공유 X ( 사용하고 버려야 한다 ) EntityManager em = emf.createEntityManager() ; // // JPA 의 모든 데이터 변경은 트랜잭션 안에서 실행 . EntityTransaction tx = em.getTransaction() ; tx.begin() ; // 트랜젝션 시작 try { // 저장 Team team = new Team() ; team.setName( "TeamAA" ) ; em.persist(team) ; Member member = new Member() ; member.setUsername( "member22" ) ; member.setTeam(team) ; em.persist(member) ; em.flush() ; em.close() ; Member findMember = em.find(Member. class, member.getId()) ; List<Member> members = findMember.getTeam().getMembers() ; for (Member m : members) { System. out .println( "kkk = " + m.getUsername()) ; } tx.commit() ; } catch (Exception ex) { tx.rollback() ; } finally { em.close() ; } emf.close() ; // 웹 애플리케이션에서 WAS 가 종료될 때 emf 종료 => release //code em.close() ; emf.close() ; } } 문제 1. 콘솔창에 kkk = 결과값이 나오지 않습니다. 문제 2. H2 DB에 저장되지 않습니다. em.flush(); em.clear(); 를 지우고 했을 때는 저장이 되지만 마찬가지로 결과값은 나오지 않았습니다. em.flush(); em.clear();를 붙이니 결과값도, DB에 저장도 되지 않았습니다. 원인 파악 부탁드립니다 ㅠㅠ 디버깅 해보았는데도 잘 모르겠어요 ㅠㅠ

  • JPA
  • java
GSP 댓글 1 좋아요 0 조회수 284

시퀀스 전략 중 allocationSize의 아이디어

미해결

자바 ORM 표준 JPA 프로그래밍 - 기본편

안녕하세요 영한님! 다름이아니라 제가 이해한 내용이 맞나 궁금해서 질문드립니다. 시퀀스 전략 중 allocationSize에서 이 값이 50이면 시퀀스를 한 번에 50씩 증가하고 그만큼 메모리에 1~50까지 식별자를 할당하는데 50까지 차면(51일 때) 시퀀스 값을 한 번 더 50 증가시켜 100까지 할당하는 방식이라고 하셨습니다. 처음에 조금 헷갈리거나 이해가 안갔던 부분은 시퀀스 값이 1이면 애플리케이션에서 1~50까지 사용하고 시퀀스 값이 2이면 애플리케이션에서 51~100까지 기본 키를 사용하는 건데, 제가 이를 이해한 것은 네트워크시간에 배우는 TCP의 슬라이딩 윈도우 개념과 비슷하지 않나 해서 이와 유사한 아이디어라고 이해하였는데 이렇게 생각해도 되나요??ㅎㅎ; 시퀀스 값 1마다 기본키 50으로 묶이는건 세그먼트와 바이트번호 관계처럼 묶이는(?) 개념이라 생각이 듭니다. 감사합니다 // 슬라이딩 윈도우

  • JPA
  • java
댓글 2 좋아요 1 조회수 466

JPA repository, REST API 개발

미해결

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

spring, MVC, JPA를 공부하면서 전체적인 흐름을 보려고 노력을 했는데요..! 자꾸만 아리송합니다 ㅠㅠ 강의를 보고 프로젝트에 적용해보려고 했으나.. 아직 쉽지않네요 ㅠㅠ 본 강의에서는 REST API방식이 아닌, 타임리프 같은 뷰 템플릿을 사용하여 만듭니다. 그래서 컨트롤러로 요청을 받고 모델에 값을 저장해서 뷰로 값을 보내죠 ! 그 뷰에서 따로 JSTL같은 문법으로 모델에 담긴 값을 받아서 렌더링(?)을 해주는데요 ! 지금 API 통신은 어떻게 되는지 감이 잘 안오네요 ㅠㅠ 리액트 개발자 분들과 프로젝트를 진행중인데, 소통은 어떻게 하는지 레퍼런스나 키워드 알려주실 수 있나요..? 두번째 질문입니다 ! 강의에서는 member 클래스와 repository 클래스를 만듭니다. 여기서는 JPA를 사용하지 않아서 respository를 만든 것 같은데요, JPA를 사용하면 interface에 JpaRepository를 만듦으로서 이 해당 클래스를 대체했다고 봐도 무관할까요?? 그래도 Member 클래스와 같은 클래스는 기본적으로 만들어 줘야 하는건지 모르겠습니다 ㅠㅠ (Entity 설계는 끝난 상태입니다 ! Entity설계한것이 Member 클래스의역할을 하는건가요??)

  • spring
  • MVC
australialove19 댓글 5 좋아요 8 조회수 687

@RequestBody 객체 바인딩 방식에 대한 질문입니다.

미해결

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

선생님 안녕하세요? 항상 열심히 듣고 있습니다. MVC 1편 뿐만 아니라 활용편(야생형 코스)을 수강하면서 H객체 바인딩 방식에 대해 질문이 생겨 글을 남깁니다. 제가 토이 프로젝트를 진행하면서 json형식 데이터를 messageBody에 담아 클라이언트에서 HTTP POST 요청을 통해 컨트롤러에 전달하여 DB에 객체를 저장하고자 했습니다. 코드는 아래와 같습니다. @RestController @RequiredArgsConstructor @Slf4j public class MemberController { private final MemberService memberService ; /*** * 회원 등록 */ @PostMapping ( "/members" ) public String createMember( @RequestBody Member member) { try { memberService .join(member); } catch (IllegalStateException e) { return "fail" ; } return "success" ; } ... 이하 생략 } @Entity @Getter public class Member { @Id @GeneratedValue @Column (name = "member_id" ) private Long id ; private String name ; private String password ; @Enumerated (EnumType. STRING ) private MemberStatus status ; @Embedded private BodyMeasureInfo bodyMeasureInfo ; protected Member() {} public Member(String name, String password, BodyMeasureInfo bodyMeasureInfo) { this . name = name; this . password = password; this . bodyMeasureInfo = bodyMeasureInfo; this . status = MemberStatus. LOG_OUT ; } 이하 생략 ..... } HTTP API 형식으로 회원 저장 URI에 POST 요청을 했을 때, 제가 예상했던 객체 바인딩은 API messageBody에 있는 name, password, bodyMeasureInfo가 바인딩 된 후, status는 객체 생성시 디폴트로 LOG_OUT으로 설정되는 것이었지만, 결과는 name, password, bodyMeasureInfo만 객체에 바인딩 되었고 status는 LOG_OUT으로 설정되지 않고 null인 상태로 DB에 저장되었습니다. 질문은 어떤 방식으로 객체에 생성자가 아닌 다른 방법으로 파라미터가 바인딩 되는 것인지 입니다. 혹시 이런 경우를 이후 챕터에서 설명하신 ArgumentResolver를 확장해야하는지 또한 여쭙고 싶습니다. 답변해주시면 감사하겠습니다.

  • spring
  • MVC
옥깡깡 댓글 1 좋아요 1 조회수 371

핸들러 관련하여 질문드립니다.

미해결

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

안녕하세요! 강의에서 preHandle 메소드에서 Object handler를 파라미터로 받아서, HandlerMethod 타입인지 확인후에 HandlerMethod 로 캐스팅하여 여러가지 핸들러에 대한 정보를 읽어올 수 있다고 하셨는데요! 제가 궁금한건 스프링MVC1편 강의에서 핸들러라 하면, 그... 결국에 @RequestMapping 을 사용하는 사용자가 정의한 컨트롤러 객체 아닌가요? 저 메소드의 인자로 받은 handler는 핸들러 어댑터가 실행하는 컨트롤러 객체가 아니라 다른 객체인건가요? 왜냐하면 저기서는 HandlerMethod 타입으로 캐스팅하는데 이게 컨트롤러 객체이면 타입이 HandlerMethod가 될 수 없을것 같아서 궁금하여 질문드립니다! 정리하면 파라미터로 넘어온 handler가 @RequestMapping을 사용하는 컨트롤러 객체라면 어떻게 HandlerMethod 타입으로 캐스팅이 될 수 있는지? 궁금합니다. 감사합니다!

  • spring
  • MVC
잠꾸 댓글 1 좋아요 2 조회수 403

dto 만들 때 질문이 있습니다.

미해결

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

요청이나 응답 dto를 만들 때 엔티티의 임베디드 타입 필드의 경우 다 풀어서 생성해야 하나요? 아님 임베디드 타입 필드 그대로 사용해도 괜찮나요??

  • spring
  • 웹앱
  • JPA
  • java
  • spring-boot
화이 댓글 1 좋아요 0 조회수 759

안녕하세요! 질문이 있습니다.

미해결

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

안녕하세요! 언제나 좋은 강의 감사드립니다 :) 파일업로드 예제에 대해 실습하면서 의문사항이 생겨 질문 드립니다. 처음 파일업로드를 완료한 상태에서, 따로 파일을 선택하지 않은 상태에서 웹브라우저를 새로고침하면, 저절로 이전에 파일업로드 처리가 완료된 POST /upload API 요청이 한번 더 나가서 파일업로드 처리가 한번 더 수행됩니다. 이럴경우, 사용자가 의도하지 않았는데도 파일업로드 처리가 될 우려가 있을 것 같고, 서버 측에서도 괜히 파일업도르 처리를 한번 더 수행하는 상황이 생길거 같은데,,, 왜 api call이 한번 더 나가는 걸까요?? 아니면 혹시 해결법이 있을까요? 리다이렉트를 수행시키면 될까요??

  • 파일업로드
  • spring
  • MVC
ygh 댓글 1 좋아요 0 조회수 436

@ExceptionHandler

미해결

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

안녕하세요 영한님 @ExceptionHandler public ErrorResult exHandler(Exception e){ log.error("[exceptionHandler] ex", e); return new ErrorResult("EX", "내부 공통처리 오류"); } ============================================ 여기서의 ApiExceptionV2Controller 컨트롤러에서 @ExceptionHandler 를 사용하면 ( 클라이언트에서 의 accept 가 application/json 일때 값이 잘 넘어가는것을 확인 했습니다. 그런데 accept 가 TEXT/HTML 일때 에는 view 페이지가 넘어가는것을 확인했습니다. 이말은 즉 , accept 가 TEXT/HTML 일때 에는 BasicErrorController 가 작동한다고 보면될까요 ? (WebServerCustomizer 의 Bean 은 주석 한상태)

  • spring
  • MVC
기팝 댓글 1 좋아요 4 조회수 414

findByName 메소드 작성 질문 있습니다.

미해결

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

안녕하세요. 제가 람다랑 optional, 컬렉션 그런부분을 아직 잘몰라서 자바 공부가 더 필요한데요. 이 부분 듣다가 궁금증이 있어서 질문 남기게 됐습니다. - 중점적인 내용은 `findName 메소드를 findById메소드 처럼 구현하면 안되냐`입니다. -> 다른 질문글을 통해 id는 유일한 기본키로 사용되서 중복이 없고, 이름은 중복이 있을 수 있다고 하셨습니다. 제가 코드는 정확히 모르겠지만 영한님의 강의를 들어보며 추측해보면 -> store - 객체 -> , values() - 값들중 -> . stream() - 모두 돌리는데 -> .filter() - 가로안에 있는 조건에 해당하는 값이 걸리면 -> .findAny() -리턴해라 이런 의미의 식 같습니다. 또 filter 안에 있는 람다표현식?은 member를 받아서 받은 멤버 객체의 name이 findByName 메소드 호출시 매개변수로 받은 name과 같은지를 체크한 것 같구요. 여기서 궁금한점이 store의 member를 하나씩 쭉 돌리는데 우리가 매개변수로 넘겨준 name과 같은 member를 모두 optional에 담아서 반환하는건가요? 즉, findById는 중복 없이 Optional에 하나의 Member 객체만 담아서 반환되어 코드를 저렇게 짠 것이고 findByName은 중복이 있을 수 있어, 매개변수로 받은 name과 같은 모든 member 객체를 optional에 담아 반환해주는 코드인건가요?

  • spring
  • spring-boot
  • java
  • MVC
댓글 1 좋아요 5 조회수 496

서버 기동 후 루트 접근 시 `/` AccessDeniedException 질문입니다

미해결

스프링 시큐리티

예제에서는 DB 리소스 설정 이후에도 루트접근이 가능해 보이는데, 저의경우는 접근이 불가능합니다 아래 이미지는 서버 기동 직후, 브라우저를 통해 루트 접근시 차단이 되는 부분에 BreakPoint 를 잡아 캡쳐했습니다. 익명 사용자의 경우에 허용되어야 할 `/` 웹 루트 경로가 Denied 되는 것은 어느 부분이 문제일까요.. DB 연동은 잘 처리가 되었으나 이부분에서 막힙니다. 특별히 설정을 바꾼것이 없는데 DB 연동 처리 이후, 계속 여기서 부터 막힙니다. 어느 부분부터 살펴봐야 해결이 될까요..? 혹시 정상인가요? ( 지난 강의 돌려보다가 문뜩 생각이 듭니다) 혹제 제가 놓친부분에 대해 조언을 구합니다. 읽어주셔서 감사드립니다.

  • spring-boot
  • java
  • Spring Security
Truestar 댓글 5 좋아요 0 조회수 768

일대일: 대상 테이블에 외래 키 단방향 관계를 JPA가 지원하지 않는 이유?

해결됨

자바 ORM 표준 JPA 프로그래밍 - 기본편

안녕하세요 강사님. 그림으로만 봐서는 일대다 단방향 과 비슷한 것 같은데, 왜 일대일: 대상 테이블에 외래 키 단방향 은 JPA가 지원하지 않는지 이해가 잘 안됩니다😭 일대다 단방향 일대일: 대상 테이블에 외래 키 단방향

  • JPA
  • java
만두 댓글 2 좋아요 0 조회수 709

인기 태그

인프런 TOP Writers

주간 인기글