묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
Test 코드 작성 중 MemberRepository 궁금한 것이 있습니다.
@Autowired MemberRepository memberRepository;@Bean public MemberRepository memberRepository(){ //return new MemoryMemberRepository(); //return new JdbcMemberRepository(dataSource); return new JdbcMemberRepository(dataSource); } 이것이 자동으로 JdbcMemberRepository 주입되는 것이 memberRepository가 스프링 빈으로 등록이 되었고 이 등록된 것이 스프링 컨테이너에서 관리하기 때문인가요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
jdbcTemplate.query 에서 sql 문 파라미터 질문 있습니다
public Optional<Member> findById(Long id) { List<Member> result = jdbcTemplate.query("select * from member where id = ?", memberRowMapper()); return result.stream().findAny(); }궁금한게 저기 sql문에서 ? 파라미터가 어떻게 입력이 되는거죠?public Optional<Member> findById(Long id) { List<Member> result = jdbcTemplate.query("select * from member where id = ?", memberRowMapper(),id); return result.stream().findAny(); }밑에 방식으로 해야되는거 아닌가요?
-
미해결코드로 배우는 React with 스프링부트 API서버
토큰쿠키저장에 대해서 질문드립니다.
강의에서 토큰을 보관하기에 보안에도 좋고 적절한 곳이 쿠키라고 말씀해주셨는데 보통 쿠키에 저장을 많이 하는편일까요?내년 하반기에 크롬에서 쿠키차단예정을 하고 있다고 들어서 왠지 다른 대체제가 필요할거같은데 쿠키를 사용 못하게 된다면 보통 클라이언트에서는 로컬스토리지 이외에는 대체제가 없는지 궁금합니다.
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
fail()이 무엇인가요
회원 서비스에 대한 테스트코드 중 일부인데try {memberService.join(member2);fail();} catch (IllegalStateException e) {assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다.");} 여기서 fail()에 대한 제대로된 설명이 없이 넘어가셨는데 fail()이 무엇인가요?
-
미해결스프링 부트 - 핵심 원리와 활용
순수 라이브러리 만들기에서 memory.jar의 의존성 문제
순수 라이브러리 만들기에서 memory.jar를 외부 라이브러리로 만들때, 여기서 참조된 라이브러리가 jar파일에 포함되지 않을 것 같은데요.만약 memory.jar안에서 사용된 라이브러리가 참조한 프로젝트에 없을때 참조 오류가 발생할텐데…memory.jar안에 참조로 사용된 라이브러리를 포함하려면 어떻게 해야 할까요?저의 경우 프로젝트를 작은 단위로 나누어 프로젝트로 구성하고 autoconfiguration을 적용하려고 하는데 .. 참조하는 프로젝트에서 사용하지 않는 참조를 사용하는 경우가 다수 발생합니다. 좀더 자세한 상황을 첨부 합니다. memory.jar 에서 이 프로젝트에서만 사용하는 inflearn.jar를 참고하고 있습니다. 이 경우 memory.jar를 패키징하면 spring에서 사용하는 기술을 사용하지 않기 때문에 jar에 jar를 포함하지 못하고 fat jar로 빌드하지 않으면 inflearn.jar가 포함되지 않을 텐데요.그렇게 되면 memory.jar를 참조하는 프로젝트에서 inflearn.jar가 없어 오류가 발생할 것 같습니다. 또한, 그 반대로 위 문제 때문에 fat jar로 패키징하는 경우 참조하는 쪽의 라이브러리와 같은 라이브러리로 사용으로 충돌이 발생하는 문제는 없는지요..? 죄송하게도 제가 두 경우를 충분하게 테스트 후 질문을 드리려고 했으나 샘플을 구성하고 여러가지 시도 후 질문 하려면 너무 많이 시간이 걸릴 것 같아 (제가 만들 샘플의 해답이 정답인지도 확인이 어려움) 먼저 질문 올리고 제 생각처럼 실제 오류가 발생하는지는 테스트 하고 문제를 해결할 수 있는지도 같이 보도록 하겠습니다. 감사합니다.
-
미해결[개정판 2023-11-27] Spring Boot 3.x 를 이용한 RESTful Web Services 개발
create posts 부분에서의 에러 발생
https://www.inflearn.com/course/lecture?courseSlug=spring-boot-restful-web-services&unitId=39127&tab=community&category=questionDetail&q=222413해당 강의에서의 posts create 부분에 500 interna error가 발생해서 문의드립니다 package com.example.restfulwebservice.bean; import com.fasterxml.jackson.annotation.JsonIgnore; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import javax.persistence.*; @Entity @Data @NoArgsConstructor @AllArgsConstructor public class Post { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; private String description; // 게시물:사용자는 N:1 관계 // JsonIgnore 통해서 정보를 가져오지 않음 @ManyToOne(fetch = FetchType.LAZY) // FetchType.LAZY는 지연 로딩, 사용자 데이터를 필요한 시점에 가져옴. 즉시 로딩 안함 @JsonIgnore // 다른 엄한 JsonIgnore를 불러오는 바람에 N+1 문제가 너무 크게 발생함.... private User user; } Post.java package com.example.restfulwebservice.Controller; import com.example.restfulwebservice.bean.Post; import com.example.restfulwebservice.bean.User; import com.example.restfulwebservice.exception.UserNotFoundException; import com.example.restfulwebservice.exception.UsersAndCountResponse; import com.example.restfulwebservice.repository.PostRepository; import com.example.restfulwebservice.repository.UserRepository; import org.springframework.hateoas.EntityModel; import org.springframework.hateoas.server.mvc.WebMvcLinkBuilder; import org.springframework.http.ResponseEntity; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; import org.springframework.web.servlet.support.ServletUriComponentsBuilder; import javax.validation.Valid; import java.net.URI; import java.util.Date; import java.util.List; import java.util.Optional; import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.linkTo; import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.methodOn; @RestController @RequestMapping("/jpa") public class UserJPAController { private UserRepository userRepository; private PostRepository postRepository; public UserJPAController(UserRepository userRepository){ this.userRepository = userRepository; } // /jpa/users @GetMapping("/users") public List<User> retrieveAllUsers(){ return userRepository.findAll(); } // ResponseEntity를 사옹한 정답 코드 @GetMapping("/usersAndCount") public ResponseEntity retrieveAllUsersAndCount(){ List<User> users = userRepository.findAll(); int count = users.size(); UsersAndCountResponse result = UsersAndCountResponse.builder() .count(users.isEmpty() ? 0 : users.size()) .users(users) .build(); EntityModel entityModel = EntityModel.of(result); WebMvcLinkBuilder linkTo = linkTo(methodOn(this.getClass()).retrieveAllUsers()); entityModel.add(linkTo.withSelfRel()); return ResponseEntity.ok(entityModel); } // jpa/users/{id} @GetMapping("/users/{id}") public ResponseEntity retrieveUsersById(@PathVariable int id){ Optional<User> user = userRepository.findById(id); if (!user.isPresent()){ throw new UserNotFoundException("id - " + id); } EntityModel entityModel = EntityModel.of(user.get()); WebMvcLinkBuilder lintTo = linkTo(methodOn(this.getClass()).retrieveAllUsers()); entityModel.add(lintTo.withRel("all-users")); return ResponseEntity.ok(entityModel); } @DeleteMapping("/users/{id}") public void deleteUser(@PathVariable int id){ userRepository.deleteById(id); } // /jpa/users @PostMapping("/users") public ResponseEntity<User> createUser(@Valid @RequestBody User user){ if(user.getJoinDate() == null) user.setJoinDate(new Date()); User savedUser = userRepository.save(user); // USER CREATED // /users/4 // 생성된 User의 URI를 저장 후 반환하기 URI location = ServletUriComponentsBuilder .fromCurrentRequest() .path("/{id}") .buildAndExpand(savedUser.getId()) .toUri(); return ResponseEntity.created(location).build(); } @GetMapping("/users/{id}/posts") public List<Post> retrieveAllPostByUser(@PathVariable int id){ Optional<User> user = userRepository.findById(id); if(!user.isPresent()){ throw new UserNotFoundException("id-" + id + " user not found"); } return user.get().getPosts(); } @PostMapping("/users/{id}/posts") public ResponseEntity<Post> createPost(@PathVariable int id, @RequestBody Post post) { Optional<User> userOptional = userRepository.findById(id); if (!userOptional.isPresent()) { throw new UserNotFoundException("id-" + id); } User user = userOptional.get(); post.setUser(user); postRepository.save(post); URI location = ServletUriComponentsBuilder .fromCurrentRequest() .path("/{id}") .buildAndExpand(post.getId()) .toUri(); return ResponseEntity.created(location).build(); } } UserJPAController.java 파일이고, user의 post 통한 생성과 get 통한 id로 해당 사용자 post 조회는 이상 없습니다
-
해결됨실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)
/v2/index.html로 책 등록시 서버에 연결이 불가능하거나, 네트워크 오류입니다. 라고 뜹니다ㅠㅠ
안녕하세요 최태현 강사님!강의 잘보고있습니다 : )다름이 아니라 제가 기존에 oracle을 사용하고 있어서 server port는 8089로 설정해서 사용하고 있습니다. localhost:8089/v1/index.html을 실행시켜서 사용자 등록, 책 등록을 하면 잘 실행이 되는데v2/index.html로 접속하여 책 등록을 하면 아무런 반응이 없다가 '서버에 연결이 불가능하거나, 네트워크 오류입니다.' 라는 alert 메시지를 봅니다. 이게 어떤 문제인지 알 수 있을까요??
-
해결됨쥬쥬와 함께 하루만에 시작하는 백엔드 - 스프링, 도커, AWS
2-2 h2 console connect 관련 질문 드립니다.
처음에 잘 되다가 다시 접속할려고 보니 다음과 같이 오류가 뜨면서 connect가 안됩니다.. 그리고 h2 embedded가 아닌 server로 계속 잡힙니다
-
미해결코드로 배우는 React with 스프링부트 API서버
Product게시판 이미지에 대해서
토큰적용 후 발생하는 현상에 대해서 질문드립니다.Product게시판에 이미지에 경우, 아래와 같이 표시가되는데요 이때 토큰을 헤더에 설정 되어있지않기떄문에 {"error":"ERROR_ACCESS_TOKEN"}가 발생합니다.jwtAxios를 사용하여 처리는 가능할듯한데 문제는 결과값이 문자열로 되돌아와서 이미지표시가 좀 힘들어보이고 어떻게 처리해야할지 모르겠습니다.이런경우 어떠한방식으로 처리하는게 좋을까요?src={`${host}/api/products/view/s_${product.uploadedFileNames[0]}`}
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
JPA을 사용하려면protected UserDto(){}을만들어줘야한다고 하셨는데 저는 protected UserDto(){}을 만들어주면 오류가 나네요 이유가 뭘까요? ;
(사진)
-
미해결코드로 배우는 React with 스프링부트 API서버
강의 순서 및 누락 건 확인
안녕하세요 강의 진행 중에[로그인 적용 확인] -> [로그아웃 처리] 를 보다 보니 중간에 쿠키 설정이 다되어 있어서뭔가 순서가 뒤바뀐 건가요...
-
미해결[개정판 2023-11-27] Spring Boot 3.x 를 이용한 RESTful Web Services 개발
퀴즈 완료 후 질문드립니다
// UserAndCountResponse.java @AllArgsConstructor @ToString @Data public class UsersAndCountResponse { private int count; private List<User> users; } // UserJPAController.java @GetMapping("/usersAndCount") public UsersAndCountResponse retrieveAllUsersAndCount(){ List<User> users = userRepository.findAll(); int count = users.size(); System.out.println(new UsersAndCountResponse(count, users)); return new UsersAndCountResponse(count, users); } UserAndCountResponse.java 파일을 exception 혹은 response 폴더에 생성하여 다음과 같은 코드를 작성하였고, 406 error가 발생하였으나 @Data 어노테이션 추가하자 잘 동작했습니다 그런데 문제의 의도는 ResponseEntity 부분에 두 정보를 포함하는 것 같은데, 관련 키워드로 찾아봐도 복수의 응답을 포함하는 방법을 찾을 수 없었기에 질문드립니다
-
미해결[개정판 2023-11-27] Spring Boot 3.x 를 이용한 RESTful Web Services 개발
퀴즈 해설 질문드립니다
JPA를 이용한 사용자 추가와 삭제 - HTTP POST/DELETE method 강의의 과제 부분의 해설이나 정답지가 있으신가요?새로운 response를 생성하거나, 혹은 ResponseEntity에서 복수 정보를 반환하는 식으로 접근하려 하는데 맞는 접근 방법인지 모르겠습니다
-
해결됨자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
DB 테이블간 연결에 대한 질문입니다.
안녕하세요 태현님. 두가지 질문이 있습니다.1. 지금까지(34강) 강의를 따라 하고 MySQL 워크벤치에서 ERD를 확인해 보면테이블 간에 PK - FK로 연결이 안 되어있는데요연결을 안 해주어도 괜찮은 이유가 뭔지 궁금합니다.제가 NestJS나 Express.js 로 백엔드를 만들었을 때는 TypeORM, Prisma, Sequelize 같은 ORM을 이용했었는데그때는 코드단에서 테이블 간에 연결 처리 (PK - FK로 연결)을 해주면데이터베이스에서 확인을 해봤을 때이런 식으로 연결이 된 것을 확인할 수 있었거든요..혹시 제가 뭔가 잘못 알고 있는 걸까요?굳이 DB에서 실제로 연결을 안 해주어도 괜찮은 건가요??아니면 스프링 + JPA 조합의 특성인가요??2. 그리고 MySQL 워크벤치에서create table user_loan_history ( id bigint auto_increment, user_id bigint, book_name varchar(255), is_return tinyint(1), primary key (id) );이렇게 DB create 문을 작성해서 실행 시키지 않아도 서버를 실행시킬 때 자동으로 로컬 DB에 테이블을 생성해 주도록 하는 설정이 있는지 궁금합니다.
-
미해결[개정판 2023-11-27] Spring Boot 3.x 를 이용한 RESTful Web Services 개발
yml파일에서 jpa설정을하고 에러가나요
Caused by: org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [boolean] for value [ture]이런 오류가나는데 뭐가 문제일까요?
-
해결됨자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
에러 발생 코드 관련 질문입니다.
//BookService @Service public class BookService { private final BookRepository bookRepository; private final UserLoanHistoryRepository userLoanHistoryRepository; private final UserRepository userRepository; public BookService( BookRepository bookRepository, UserLoanHistoryRepository userLoanHistoryRepository, UserRepository userRepository ) { this.bookRepository = bookRepository; this.userLoanHistoryRepository = userLoanHistoryRepository; this.userRepository = userRepository; } @Transactional public void saveBook(BookCreateRequest request) { bookRepository.save(new Book(request.getName())); } @Transactional public void loanBook(BookLoanRequest request) { // 1. 책 정보를 가져온다. Book book = bookRepository.findByName(request.getBookName()) .orElseThrow(IllegalArgumentException::new); // 2. 대출기록 정보를 확인해서 대출중인지 확인한다. // 3. 만약에 확인해는데 대출 중이라면 예외를 발생시킨다. if (userLoanHistoryRepository.existsByBookNameAndIsReturn(book.getName(), false)) { throw new IllegalArgumentException("이미 대출되어 있는 책입니다"); } // 4. 유저 정보를 가져온다. User user = userRepository.findByName(request.getUserName()) .orElseThrow(IllegalArgumentException::new); // 5. 유저 정보와 책 정보를 기반으로 UserLoanHistory를 저장 userLoanHistoryRepository.save(new UserLoanHistory(user.getId(), book.getName())); } } 북서비스 코드인데요// 1. 책 정보를 가져온다. Book book = bookRepository.findByName(request.getBookName()) .orElseThrow(IllegalArgumentException::new);이 부분에서 // 2. 대출기록 정보를 확인해서 대출중인지 확인한다. // 3. 만약에 확인해는데 대출 중이라면 예외를 발생시킨다. if (userLoanHistoryRepository.existsByBookNameAndIsReturn(book.getName(), false)) { throw new IllegalArgumentException("이미 대출되어 있는 책입니다"); } 이 부분 처럼 "존재하지 않는 책입니다" 라는 메세지를 터미널(콘솔인가요? 이거 찍히는 곳 명칭이 터미널인지 콘솔인지 모르겠네요) 에 찍어주려면 어떻게 해야하나요? 그리고 첫 번째 경우와 두 번째 경우에 에러를 발생시키는 방법이 다른 이유는 무엇인지 궁금합니다.
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
@Component를 InitDb에서 전역으로 해준 것 아닌가요?
@Component를 InitDb에서 전역으로 해준 것 아닌가요?다시 InitService에서 다시 @component를 해주는 이유가뭔지 궁금합니다.
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
글동록하는부분에서 등록을 하고나면 나이부분에 값이 00세라고들어가네요 이유가뭘까요??
객채셍성하고 등록화면부분올려드렷어요
-
미해결코드로 배우는 React with 스프링부트 API서버
로그인 적용확인 회차에대해서
위에 내용하고 겹치는듯한데 맞나요?... 로그인 적용확인 회차부터해서 뭔가 내용이 이어지질 않는듯한 느낌이듭니다....
-
미해결스프링 부트 - 핵심 원리와 활용
application.properties에서 spring.config.activate.on-profile에 빨간줄
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 이런 식으로 뜨는데 뭔가 설정이 잘못된 건가요?ㅠㅠ