묻고 답해요
167만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결실전! 스프링 데이터 JPA
강사님은 member_id가 3부터 시작했는데
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]저는 member_id가 1 부터 시작했는데 혹시 이유를 알 수 있을까요? 그리고 왜 member_id 가3 부터 시작하는 이유가 궁금합니다
-
미해결스프링 시큐리티 OAuth2
keycloak이 강의 버전과 맞지 않아서 생기는 오류 일부 정리
keycloak 버전이 제일 낮은 게 20 버전이라서 저는 가장 최근 버전인 23 버전으로 사용했습니다. 23 버전 기준으로, 제가 파악한, 강의와 다른 부분입니다.20 버전부터는 최초 로그인 할 때 동의 항목이 안 나올텐데요. 관리자 콘솔에서 Clients -> Cliend details에서 Login settings에서 Consent required를 켜면 됩니다.엑세스 토큰 발급 이후에 userinfo 엔드포인트로 user 데이터를 요청하면 body에 아무 것도 안 나올 겁니다. 응답 헤더 살펴보면 insufficient_scope이며 Missing openid scope이라고 나오는데요.이렇게만 써있으면 userinfo 요청할 때 param에 scope=openid 넣으면 될 것 같지만 안 됩니다. 토큰에 해당 정보가 없는 거라서, 토큰 발급 전에(code 얻어야할 때) scop에 openid를 추가하면 됩니다.http://localhost:8080/realms/oauth2/protocol/openid-connect/auth?response_type=code&client_id=oauth2-client-app&scope=profile email openid&redirect_uri=http://localhost:8081 공식문서에 나와 있습니다. In case an access token is missing openid scope.
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
왜 실패가 뜨는지 모르겠습니다
CMD 들어가서 java -version 확인해서 17버전인데 java version "17.0.10" 2024-01-16 LTSJava(TM) SE Runtime Environment (build 17.0.10+11-LTS-240)Java HotSpot(TM) 64-Bit Server VM (build 17.0.10+11-LTS-240, mixed mode, sharing) 인텔리로 실행하면 왜 저렇게 뜨는지 모르겠습니다... 삭제하고 다시 설치했는데도 저러는데 뭐가 문제일까요 ㅠ
-
미해결쥬쥬와 함께 하루만에 시작하는 백엔드 - 스프링, 도커, AWS
2-3 진행 중 에러 발생
2-3 강의 중 12분 쯤에 Send를 누르면 200 OK가 떠야한다고 하셨는데 저는 500 에러가 발생합니다!package com.jyujyu.review.api; import com.jyujyu.review.service.TestService; import lombok.AllArgsConstructor; import lombok.Getter; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; @AllArgsConstructor @RestController public class TestEntityApi { private final TestService testService; @PostMapping("/test/entity/create") public void createTestEntity( @RequestBody CreateTestEntityRequest request ) { testService.create(request.getName(), request.getAge()); } @AllArgsConstructor @Getter public static class CreateTestEntityRequest { private final String name; private final Integer age; } } package com.jyujyu.review.api; import com.jyujyu.review.service.TestService; import lombok.AllArgsConstructor; import lombok.Getter; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; @AllArgsConstructor @RestController public class TestEntityApi { private final TestService testService; @PostMapping("/test/entity/create") public void createTestEntity( @RequestBody CreateTestEntityRequest request ) { testService.create(request.getName(), request.getAge()); } @AllArgsConstructor @Getter public static class CreateTestEntityRequest { private final String name; private final Integer age; } } package com.jyujyu.review.repository; import com.jyujyu.review.model.TestEntity; import org.springframework.data.jpa.repository.JpaRepository; public interface TestRepository extends JpaRepository<TestEntity, Long> { // Long -> TestEntity에 @Id가 있는 필드의 자료형을 작성한다. } package com.jyujyu.review.model; import jakarta.persistence.*; import lombok.Getter; @Getter @Table(name = "test") @Entity public class TestEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; private Integer age; public TestEntity(String name, Integer age) { this.name = name; this.age = age; } public TestEntity() { } public void changeNameAndAge(String name, Integer age) { this.name = name; this.age = age; } }plugins { id 'java' id 'org.springframework.boot' version '3.2.2' id 'io.spring.dependency-management' version '1.1.4' } group = 'com.jyujyu' version = '0.0.1-SNAPSHOT' java { sourceCompatibility = '17' } repositories { mavenCentral() } configurations { compileOnly { extendsFrom annotationProcessor } } dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' testImplementation 'org.springframework.boot:spring-boot-starter-test' compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' implementation 'org.springframework.boot:spring-boot-starter-data-jpa' runtimeOnly 'com.h2database:h2' } tasks.named('test') { useJUnitPlatform() } server.port=8081 spring.h2.console.enabled=true spring.h2.console.path=/h2-console spring.h2.console.settings.web-allow-others=true spring.datasource.driver-class-name=org.h2.Driver spring.datasource.url=jdbc:h2:mem:rss spring.datasource.username=sa spring.jpa.hibernate.ddl-auto=create spring.jpa.show-sql=true알려주신대로 코드를 작성하고 포스트맨에서 Send를 눌러도 500 Internal Server:Error 라고 뜨네요 ㅠ 원인을 찾아봐도 안보여서 여쭙습니다..! 참고로 포트는 8081이 맞습니다혹시 파일 필요하실까봐 링크 첨부했습니다https://drive.google.com/file/d/1W65YQNY5rOGjWuqr-ntff7_QuTWz4eDw/view?usp=sharing
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
도메인에 정의된 메서드를 클라이언트 단에서 직접 접근할 경우 어떤 문제가 있나요?
분명 강의중에 설명해주셨던 내용같은데,,, 넓은 범위를 복습하다보니 내용을 찾기가 어려워서 잘문 남깁니다. 강의 내용에서는 주문을 생성할 때, orderService 계층의 order() 메서드를 호출하여 orderItem 을 생성하고, 이는 내부적으로 createOrder 를 다시 호출해서 디비에 저장되는 식으로 코드를 짰습니다. 그런데 문득 클라이언트 단에서(예를 들어 controller 계층에서) order.createOrder 를 직접 접근하면 어떤 문제들이 있을지가 궁금해졌습니다.예릃 들어 아래 제 테스트 코드 처럼요.이런 설계가 안좋아보이긴 하나, 마땅히 생각나는 문제가 없어서 질문드립니다.@Test @DisplayName("Direct access thru Order Domain") @Transactional @Rollback(value = false) public void directAccess(){ Item bread = new Bread( "red bean", 100, 2000, "a", BreadSize.LARGE ); itemService.createItem(bread); Order order = new Order(); orderService.createOrder(order); OrderItem orderItem = OrderItem.createOrderItem1(bread, bread.getItemPrice(), 20); order.addOrderItem1(orderItem); }
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
1강 Run이 활성화되지 않습니다.
버전은 java 17, spring 3.2.2 입니다.Build tools>Gradle> 각각 gradle로 안되서 intellij로 바꾼상태를 캡쳐한것입니다.자주묻는 질문에서도 봤는데.. 원인을 모르겠습니다..!ㅠㅠ 도와주세요
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
IntelliJ Ultimate 사용한 MySQL접근 관련
선생님 안녕하세요? 강의 잘듣고 있습니다.다름이 아니라 10강에서 MySQL 접근 방법1를 따라하려고 하는데 Datebase이 없더라고요...버전이 달라서 그런건가 싶어서 따로 찾아보니까view-Tool Windows안에서 보통 선택할 수 있다는걸 발견했는데여기에도 없더라고요... 이런 경우에는 다시 설치하는 것 말고는 방법이 없는거겠죠...?
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
오타발생 관련 카프카 특정 레코드 삭제가 윈도우 기반에서는 가능한가요?
안녕하세요! 강의 잘 보고 있습니다. topic에 입력시,오타가 있는 스크립트를 입력했는데,해당 오타가 있는 레코드가 지속적으로 남아 있더군요,또한 이로 인해 jsonParser 오류가 발생해서,topic을 삭제할까 하다가, 윈도우 기반에서는 오류가 발생할 수 있다고 (https://www.inflearn.com/questions/644825)하여, topic의 오타가 있는 레코드를 삭제하고자 합니다. 혹시 방법이 있을까요??
-
미해결1시간만에 끝내는 spring boot rest api 서비스 개발
@Autowired 관련
강의 내용에 대해 질문해 주세요에러가 날 경우 본인 코드가 있는 git 주소를 알려주거나 최대한 상세히 적어주세요 @Autowired 를 사용해도 QuickService가 호출되지 않는 것 같습니다 어떻게 해야 하나요?
-
해결됨자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
아마존 리눅스 2023 el9 버전 mysql 설치 중 KEY 오류
아마존 리눅스 2023으로 인스턴스를 사용했을 때 지면님과 강사님께서 알려준 el9 버전 레포지토리를 사용하는 명령어sudo dnf install <https://dev.mysql.com/get/mysql80-community-release-el9-1.noarch.rpm> sudo dnf install mysql-community-server 이렇게 하여도 저는 계속 sudo dnf install mysql-community-server 해당 명령어를 통해 설치하려고 하면The GPG keys listed for the "MySQL 8.0 Community Server" repository are already installed but they are not correct for this package.이런 오류가 발생하였습니다.계속 키가 옳지 않다는 오류가 생겼고 챗지피티랑 구글링을 통해 이것저것 해보다가sudo rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022 sudo yum update 위의 두 명령어를 실행하고sudo dnf install mysql-community-server해당 명령어로 재설치 해주니 제대로 설치가 되었습니다!제 추측으로는 KEY를 다시 받아오고 yum update 하는 과정이 필요했던 것 같습니다! 저와 같은 오류를 가지는 분들에게 도움이 되었으면 좋겠네요...!!!
-
미해결Java 마이크로서비스(MSA) 프로젝트 실습
여전히 타겟을 찾을 수 없습니다..
강의와 같은 버전으로 모두 같게 진행하지 않아서 그런지..windows 타겟을 찾을 수가 없습니다.전에 AI가 알려준 건 도움이 되질 않았어요분명 prometheus 타겟은 잡힌 것으로 봐서는 app 폴더 내부로 들어가서 prometheus.yml 파일도 잘 읽은 것 같은데요..왜 그대ㅑ로 아래에 job_name이 windows인 것은 왜 설정이 안 되는지 모르겠습니다..
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
kafka connect status - tasks가 빈 배열
안녕하세요,kafka source connect 등록할 때 mariadb가 연결이 잘 안되서 h2 db로 진행을 했습니다.등록 후 kafka connect status를 보면 tasks가 빈 배열로 나오네요,,CLI에서는 마지막에 tables were not found라고 나오는데 테이블이 있는데도 없다고 하는데 혹시 이런 증상 해결하신 분 계실까요?
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
merge 질문이 있습니다.
안녕하세요 영한님! 강의를 듣던 중 궁금한 점이 생겨서 질문 남깁니다. 프로젝트를 진행하며 Spring Data JPA를 사용하면서 Entity를 update 하는 방법에 대해서 고민이 생겼습니다.findById를 한 후 save() 메서드를 호출하는 방법과public Post updatePost(long postId, PostUpdateRequest request) { Post post = findById(postId); post.update(request.getTitle(), request.getContent()); return postRepository.save(post); } 영한님이 말씀하신 dirty checking 을 이용하는 방법 중 어떤게 더 나은 방법인지 궁금해서요.@Transactional public void updatePost(long postId, PostUpdateRequest request) { Post post = findById(postId); post.update(request.getTitle(), request.getContent()); } spring data jpa 의 save() 메서드의 경우 새로운 엔티티일땐 em.persist()존재하는 엔티티일땐 em.merge() 방식으로 동작한다고 알고 있습니다. findById를 통해 엔티티를 조회해서 영속상태로 만든 후 em.merge를 하게 된다면 dirty checking을 통해 엔티티를 update하는 것과 어떤 차이가 있는건지 궁금합니다. @Transactional을 사용해서 리소스를 사용하는것 보단, save 메서드 호출을 통해 em.merge()를 사용하는게 더 나은 방법이 아닌지,혹은 update 하는 동안의 트랜잭션은 큰 리소스 사용 없이 동작하기 때문에 dirty checking을 사용하라고 하신 것인지 궁금합니다!
-
미해결[개념은 호옹~, 실습 빡] 스프링 부트, 입문!
27강 관련 질문
혹시 삭제버튼도 모달로 등록해서 삭제를 할 순없는건가요?그러면 document.querySelectorAll 을 쓰지않아도 되는거 아닌가요? 추가로 // 삭제 버튼 이벤트를 처리 commentDeleteBtns.forEach(btn => { // 각 버튼의 이벤트 처리를 등록 btn.addEventListener("click", (event) => { // 이벤트 발생 요소를 선택 const commentDeleteBtn = event.target; // 삭제 댓글 id 가져오기 const commentId = commentDeleteBtn.getAttribute("data-comment-id"); console.log(`삭제 버튼 클릭: ${commentId}번 댓글`); }); });해당 코드에서 event.relatedTarget이란 함수를 쓰지않는이유는 relatedTarget함수가 모달 전용이라서 그런건가요?
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
연관관계 편의 메소드 작성 기준 질문 (Order 엔티티의 addOrderItem 메서드 관련)
https://www.inflearn.com/questions/1138263 이분 내용에 이어서 질문 드립니다.(양방향 연관관계에서 연관관계 편의 메서드를 어디에 정의할지 관련)JPA 기본편 내용에서 들었던 것에서 혼동이 조금 생겨서요.원래 "연관관계 주인이 있는 쪽에서 편의메서드를 정의할 것을 권장한다" 로 알고 있었으나,위 링크 답변을 보니 "비즈니스 로직을 개발할 때 자주 사용하게 되는 중심" 에 적용해도 되는 걸로 이해했습니다.그럼 어디에 두던 상관은 없지만, 양방향일 경우 두 엔티티 간 참조 무한루프가 걸릴 수 있으니 한 쪽에만 편의메서드를 정의할 것으로 정리하면 될까요? 감사합니다 🙂
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
왜 lombok이 없다고 나올까요...
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]MemberRepositoryTest 중 테스트 실패 원인이 lombok이 존재하지 않는다고 나옵니다.plugin에 lombok이 깔려있는 것을 확인했고annotation도 설정해줬습니다.Member 클래스에도 lombok이 잘 적용됐고요.MemberRepository는 이렇습니다. 마지막으로 MemberRepositoryTest는 이렇습니다. 제가 어느 부분에서 놓친 것인지 잘 모르겠습니다.lombok 재설치와 intellij 재시작을 몇번을 했는지 모르겠습니다.어느 부분에서 제가 놓쳤는지 알려주실 수 있으신가요 ?
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
8강 재질문입니다 (코드포함) (해결)
코드를 다시 찬찬히 살펴봐도 틀린게 뭔지 모르겠어요...시간나시면 검토 가능 하실까요? 아니면 처음부터 다시 코딩을 해봐야겠네요////package com.group.libraryapp.UserController; import com.group.libraryapp.domain.user.User; import com.group.libraryapp.dto.calculator.request.user.response.UserResponse; import com.group.libraryapp.user.request.UserCreateRequest; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; import java.util.*; @RestController public class UserController { private final List<User> users = new ArrayList<>(); @PostMapping("/user") // POST /user public void saveUser(@RequestBody UserCreateRequest request){ users.add(new User(request.getName(), request.getAge())); } @GetMapping("/user") public List<UserResponse> getUsers(){ List<UserResponse> responses = new ArrayList<>(); for(int i=0; i<users.size(); i++){ responses.add(new UserResponse(i + 1, users.get(i))); }//users에 저장한 유져들을 for문으로 userResponse형태로 바꾸어 결과 list에 추가 return responses; } } package com.group.libraryapp.dto.calculator.request.user.response; import com.group.libraryapp.domain.user.User; public class UserResponse { private long id; private String name; private Integer age; public UserResponse(long id, User user) { this.id = id; this.name = user.getName(); this.age = user.getAge(); } public long getId() { return id; } public String getName() { return name; } public Integer getAge() { return age; } } package com.group.libraryapp.domain.user; public class User { private String name; private Integer age; public String getName() { return name; } public Integer getAge() { return age; } public User(String name, Integer age) { if(name == null || name.isBlank()){ throw new IllegalArgumentException(String.format("잘못된 name(%s)이 들어왔습니다.", name)); } this.name = name; this.age = age; } } // 해결했습니다.강사님께서 화면공유 방법으로 해결해주셨고 말씀해주신 해결방법은인텔리제이에서 run 후 오류내역에서 com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `com.group.libraryapp.user.request.UserCreateRequest` (no Creators, like default constructor, exist): cannot deserialize from Object value (no delegate- or property-based Creator) at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 1, column: 2]확인하셨고UserCreateRequest클래스에서 기본생성자를 추가하여 해결하였습니다.매개변수가있는 생성자를 사용하면 추가로 기본생성자를 만드는 습관을 들이겠습니당
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
무엇을 jar 해야하나요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]필자는 2분 57초까지 했을 때, 여기서 사진 마지막 부분에 ls로 무엇이 있는지 확인을 했는데 jar 파일이 두개가 떠서 저 경우에는 무엇을 jar 해야하는지 여쭙고 싶어요+ 강의에서 보면 ll 명령어를 사용하는데 저 명령어가 저는 없는 명령어라고 뜨는 것 같아서요, 뭐라쳐야하나요? 저 또한 MAC OS 입니다.
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
실무에서 주로 사용하는 DB툴이 궁금합니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]강의에서는 주로 H2 데이터베이스를 활용해 강의를 진행해주시는데, 실무에서는 데이터베이스를 다룰 때 보통 어떤 툴을 사용하는 지 궁금합니다.
-
미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
Post에 edit 메서드 삼항연산자 질문
업데이트 관련 질문입니다!!PostEdit을 만들고 Post에 edit이라는 메서드를 만들어서 PostEdit자체를 받은 후에 삼항연산자를 쓰는 방식으로 해결해도 문제가 없을까요??@Data public class PostEdit { @NotBlank(message = "제목을 입력하세요.") private String title; @NotBlank(message = "내용을 입력하세요.") private String content; @Builder public PostEdit(String title, String content) { this.title = title; this.content = content; } }public void edit(PostEdit postEdit) { this.title = postEdit.getTitle() != null ? postEdit.getTitle() : this.title; this.content = postEdit.getContent() != null ? postEdit.getContent() : this.content; }