묻고 답해요
160만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결제로베이스부터 배우는 웹개발의 개념과 바이브 코딩
Supabase를 사용하여 서비스에 사용자 인증 기능을 구현
선생님, 안녕하세요. Supabase를 사용하여 제 서비스에 사용자 인증 기능을 구현하려고 합니다. 제가 이해한 내용이 맞는지 확인 부탁드려요! (1)인증 방식 설정: Supabase 프로젝트 대시보드의 Authentication 섹션 내 Providers 탭으로 이동하고, 여기서 제 서비스 사용자들이 이용할 로그인 방식(예: 이메일/비밀번호, Google/Kakao 등의 소셜 로그인, Magic Link 등)을 선택하고 필요한 설정을 완료하여 활성화 한다. (2) 애플리케이션 프론트엔드 구현: 제 웹사이트코드(나 앱의 프론트엔드 예: JavaScript, React, Flutter 등)에서 Supabase 클라이언트 라이브러리를 가져와 사용하고, 사용자들이 회원가입, 로그인, 로그아웃 등을 할 수 있는 UI(예: 로그인 페이지, 회원가입 폼)를 만들고, 이 UI와 Supabase 클라이언트 라이브러리의 함수들 연동하여 실제 인증 기능을 구현한다. (3) 사용자 데이터 관리: 사용자가 위 프론트엔드를 통해 회원가입하면, 그 정보는 Supabase 내의 auth.users라는 전용 테이블에 자동으로 저장되는 것이 맞나요? 결론적으로, 제 서비스의 최종 사용자들은 제가 프론트엔드에 구현한 로그인/회원가입 시스템과 Supabase Auth를 통해 별도의 사용자 계정을 갖고 서비스를 이용하게 되는 구조라고 이해하면 될까요? 혹시 제가 잘못 이해하고 있거나, 추가적으로 고려해야 할 중요한 사항이 있다면 알려주시면 감사하겠습니다.
-
미해결제로베이스부터 배우는 웹개발의 개념과 바이브 코딩
메인 브랜치로 이동
깃 실습처럼...몇몇 작업이 에러가 심해서 돌아가려고'깃 그래프'에서 돌아갈 커밋 위치한 곳에 reset current branch to this commit... 을 눌러 hard를 선택해 주었는데도...돌아가지를 안네요콘솔창에서 명령어 git reset --hard 810380ae 도 안먹고... ㅠㅠ(커서에서 에이전시에 시켰는데 810380ae로 돌아가로...여러 터미널 명령어를 실행했는데도 변하질 않네요)어찌해야 하나요? 다른 방법이 있는지 좀 알려주세요
-
미해결제로베이스부터 배우는 웹개발의 개념과 바이브 코딩
웹서비스를 만들고나서..
선생님이 가르쳐 주신 웹서비스를 만들고 나서(컨텐츠,로그인,결제 등 전부 포함),위의 것들로 커서에서 구글 플레이스토어, 애플 스토어 등에 올릴 수 있나요?커서와 수파베이스,버셀로 웹페이지 만들어서 사람들하게 공유하는것은 가능한데, 그걸 또 앱 배포용 코드(?)로 변환해서 만들 수 있는지요?쳇지피티에 물어보면 이미 만들어진 웹서비스를 앱용으로도 가능하다는데...커서에서도 쉽게(현재까지는 쉽게 배워서 쉽네요 ^^) 변환을 시킬 수 있는지 알고 싶습니다~
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
OrderServiceTest에서 assertTrhwos 질문이 있습니다~
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 아니오3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]여기에 질문 내용을 남겨주세요.안녕하세요.Junit5로 assertThrows테스트를 하고 있습니다.원래는 다른 분들처럼 assertThrows만 작성했습니다. (리턴 없는 형태)테스트는 성공하는데 에러 로그가 전~혀 하나도 뜨지 않습니다.고민하다가 에러 내용을 받아서 soutv로 뿌려줘서 확인했습니다. assertEquals로 비교하는게 맞나요?아니면 제가 모르는 Junit5 사용법이 따로 있는건지요?gpt, 구글 등등 다 검색해봐도 답을 알 수 없어서 고민하다가 질문 올립니다.조언 부탁드립니다 감사합니다~
-
해결됨제로베이스부터 배우는 웹개발의 개념과 바이브 코딩
슬러그 주소..
선생님 게시글이 슬러그 필드를 이용해서 고유의 url 형성되는건 알겠는데 만약 제목글이 같은 글의 경우 같은 url이 만들어지면 같은 제목의 여러개의 동일한 url이 생기는게 아닌가요?조금 이해가 안가서요...
-
미해결제로베이스부터 배우는 웹개발의 개념과 바이브 코딩
깃허브 버셀연동
선생님~커서에서 코드 수정하고 연동된 깃허브에 커밋도 시켜주었는데,버셀에 최종 마스터가 뜨지 않는데 왜 이런걸까요? ㅠㅠ 어제 저녁 이것땀시 너무 #&!@ 해서 ㅠㅠ커서에 '최종1'이 마스터로 된 화면이고요.. 깃허브에 최종1이 master 로 되어 있는것 같구요? 근데 버셀에서는 그전단계로만 되어 있어서요 ㅠㅠ(근데 사실 이것도 어제 저녁에 계속 마스터로 안되 있어서 버셀에 있는 프로젝트 계속 지우면서 최신 깃허브 가져온거거든요?) 깃허브에 버셀에 제대로 업뎃이 안되는데, 어디부터 봐야할지 좀 도움 좀 주세요~
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
orderItems[0] 은 아직 단일주문만 가능하기에 인가요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요! 강의를 듣는 도중 궁금한게 있어 질문드립니다. <td th:text="${item.orderItems[0].item.name}"></td> <td th:text="${item.orderItems[0].orderPrice}"></td> <td th:text="${item.orderItems[0].count}"></td>부분에 [0] 인건 아직 단일 주문만 가능하기에 [0] 으로 하신건가요?개인적으로 변경하여 한 번에 여러 개의 주문이 가능하게 될 경우에는 [0] 하드코딩이 아닌 타임리프 반복문의 인덱스를 넣으면 되는건가요??
-
미해결제로베이스부터 배우는 웹개발의 개념과 바이브 코딩
회원 가입 이메일 문의
안녕하세요 선생님..선생님 강의를 따라하다가,회원 가입한 사람 모두가 글을 쓸수 있는 낚서장 같은 블로그를 만들었는데,회원 가입 페이지나 등록 등을 커서에서 만들어서 잘 동작하는것 같고, 수파베이스에서도 세팅을 해주었는데,회원가입에서 이메일과 비번을 입력하면 제게 확인 메일이 와야 하는데 오질 않네요.이거 혹시 smtp 서비스를 추가해야 되는건가요?
-
미해결[연재형] WE CAN Cusor AI ! - 커서AI 우리도 할 수 있습니다.
저는 컨트롤L이랑 컨트롤+쉬프트+I랑 동일한 창이 열리네요
저는 컨트롤L이랑 컨트롤+쉬프트+I랑 동일한 창이 열리네요컴포저가 열려야할거같은데, 컨트롤L이랑 같은 창이 열립니다. 오른쪽 창이 열립니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
연관관계 편의 메서드 위치
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]안녕하세요~! 궁금한 부분이 있습니다양방향일 경우에는 연관관계 편의메서드를 작성하는게 좋다고 말씀주셨는데 그렇다면 연관관계 메서드를 주인엔티티 선언하는 이유가 있을까요?아니면 상황에 따라 바뀌는걸까요? 기준이 있는지 궁금합니다~!
-
해결됨제로베이스부터 배우는 웹개발의 개념과 바이브 코딩
vercel에 등록 중...
버셀에 등록하는데 계속 에러가 나는데.. 어떤 방법으로 이 에러를 확인 할 수 있을까요?
-
해결됨제로베이스부터 배우는 웹개발의 개념과 바이브 코딩
깃허브 커밋 중...
안녕하세요~선생님 강의 잘 따라하고 있는데요,SEO 제안이 아닌, 다른걸로도 한번 만들어 봤는데,(node.js로)... 조금 복잡한거라 그런지 1000여개의 파일이 만들어 지더라구요. 그래도 콘솔에서 실행도 잘되고 에러도 없어서. 이번 장의 깃허브에 올리는걸 실험해볼려고 했는데,파일이 U -> A로 변동이 되었는데 대부분의 파일이 U에서 A로 바뀌지 않더라구요.그래도 이니셜 업로드는 되던데, u로 되어 있는것들이 어떤건지 찾아볼려고 해도 안보이더라구요.그래서,,,예를 들어 .env 파일처럼 올려서는 안되는 파일들이 u로 남아 있는건지요?그렇다면 .env 하나야 복사해서 올리면 되는데,.env 파일처럼 실행에 필요한 중요한 파일들이 안올라가면, 나중에 깃허브에서 클론하고 가져왔을때(내 동료나 또는 내가 집에서 하고 싶을때) 실행에 어떤 파일이 필요한건지 알수 있나요?
-
해결됨제로베이스부터 배우는 웹개발의 개념과 바이브 코딩
seo 팁 생성기 1차 구현에 대해
안녕하세요~ 선생님~ ^^선생님 설명대로 잘 따라하니 정말 깔끔하고 정교한 SEO 팁 생성기가 되네요!OPENAI API를 사용하니 답변도 아주 정말 정교하고 치밀하게 잘 나오고요 ^^그런데 만약 이런 어플을 제작했다고 하면 매번 이렇게 터미널을 열고(커서를 열고) 수동으로 타이핑해서 프로그램을 실행 시키는게 여간 사용성이 안좋던데(제가 실제 적용하거나, 친구에게 주는것 등에서)이거 나중에 윈도우에서 아이콘 클릭해서 일반적인 프로그램 실행시키듯이 할수도 있는건가요?나중에 이번 강의에서 그거 배우는지 궁금해요~(차차 배워나가면 나중에 알게 되겠지만... 지금 너무 궁금해서요 ^^)
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
콘솔창 오류 ?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]H2 database 상에는 테이블이 잘 만들어졌고 오류도 안뜨는데 콘솔창에 create table~ 이 문장들이 출력되지가 않습니다.상관없는 것인지 아니면 뭐가 문제일까요 ?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
Order, OrderItem
안녕하세요, 이번 실습 프로젝트 동안에 Order와 OrderItem은 N:1의 연관관계로 설계하셨습니다. OrderService의 order()안에서 OrderItem을 생성하고 Order를 생성하는 것으로 미루어 볼 때, 하나의 OrderItem이 하나의 Order와 대응되는 구조가 아닌가요? (즉 한 건의 주문 데이터는 한 건의 주문상세 데이터만 갖는 구조) 이런거라면 order에서 cancel할 때 OrderItem을 순회하며 cancel하는 것이 의미가 있는건지 궁금합니다! 즉, 일괄 주문이 안되는데 일괄 주문 취소가 의미가 있는건지 궁금합니다! 감사합니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
createOrder() 생성 메서드
@OneToMany(mappedBy = "order", cascade = CascadeType.ALL) private List<OrderItem> orderItems = new ArrayList<>(); @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY) @JoinColumn(name = "delivery_id") private Delivery delivery;보시는 바와 같이 Order의 생성 메서드에 필요한 파라미터에 들어가는 두 데이터입니다. 주문이 만들어지기 위해서는 OrderItem이 먼저 필요하기 때문에 인자로 주입하고 또 영속성 전이를 주는 것이 논리적이라 생각해 동의할 수 있었습니다. 그러나 Delivery 타입을 메서드로 주입받는 것은 배송이 있고 그 다음 주문이 존재한다는 흐름으로 받아들여집니다. 이 부분에 대한 조언을 얻을 수 있을까요? 감사합니다.
-
미해결제로베이스부터 배우는 웹개발의 개념과 바이브 코딩
커서에서 깃을 커맨드 프롬프트창에서 커밋하는 방법은 없나요? 마우스 클릭 말고요.
커서에서 깃을 커맨드 프롬프트창에서 커밋하는 방법은 없나요? 마우스 클릭 말고요.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
변경감지 로직이 실행되려면 @Transactional 이 필수인가요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]@Transactionalpublic void updateItem(Long id, String name, int price, int stockQuantity) { Item item = itemRepository.findOne(id); item.setName(name); item.setPrice(price); item.setStockQuantity(stockQuantity);} 여기서 @Transactional 이 없으면 변경감지 로직이 발생하지 않나요? @Transactional 은 두개이상의 쿼리를 하나의 논리적인 단위로 묶어줄때 사용하는 것으로 알고 있는데 이 상황에서도 변경감지를 실행하기 위해 반드시 호출해주어야하나요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
어떤 상태를 준영속이라하는지 , 준영속 역할이 무엇인지 궁금합니다!
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]준영속이란 한번은 영속상태였지만, 현재는 영속성 컨텍스트의 관리 대상이 아닌 엔티티인데db 에 저장될떄 pk 가 생기기 떄문에 객체에 식별자가 있으면 무조건 준영속 엔티티인가요?엔티티매니저에서 꺼내서 Detached되어 식별자가 셋팅되거나 아니면 새로운 객체에 id 값만 셋팅되어 있으면 준영속 상태볼 수 있나요?왜 준영속 상태는 따로 있나요? 비영속만 있어도 되지않나요? 무슨 이점이 있나요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
도메인 설계에 대한 고민
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]erd 설계를 하다가 스스로 의문이 조금 들어서 질문드립니다.현재 다음과 같은 앱을 구상하고 있습니다. AI 모델과 연동해서 추천 시스템을 생각 중인데 도메인 설계에 대해서 궁금한 부분이 생겨서 질문드립니다.package forpracticejunbao.junbaoprac_be.recommend.domain; import forpracticejunbao.junbaoprac_be.user.domain.User; import forpracticejunbao.junbaoprac_be.common.util.BaseEntity; import jakarta.persistence.*; import lombok.*; import java.util.ArrayList; import java.util.List; @Table(name = "recommend") @Entity @Getter @NoArgsConstructor @AllArgsConstructor @Builder public class Recommend extends BaseEntity { @Id @Column(name = "recommend_id") @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "user_id", nullable = false) private User user; @OneToMany(mappedBy = "recommend",cascade = CascadeType.ALL, orphanRemoval = true) @Builder.Default private List<RecommendClusterOption> recommendClusterOptions = new ArrayList<>(); @OneToMany(mappedBy = "recommend",cascade = CascadeType.ALL, orphanRemoval = true) @Builder.Default private List<RecommendValueOption> recommendValueOptions = new ArrayList<>(); @OneToMany(mappedBy = "recommend",cascade = CascadeType.ALL, orphanRemoval = true) @Builder.Default private List<RecommendResult> results = new ArrayList<>(); public void updateRecommendClusterOptions(List<RecommendClusterOption> recommendClusterOptions) { if (this.recommendClusterOptions != null) { this.recommendClusterOptions.clear(); this.recommendClusterOptions.addAll(recommendClusterOptions); } else { this.recommendClusterOptions = recommendClusterOptions; } } public void updateRecommendValueOptions(List<RecommendValueOption> recommendValueOptions) { if (this.recommendValueOptions != null) { this.recommendValueOptions.clear(); this.recommendValueOptions.addAll(recommendValueOptions); } else { this.recommendValueOptions = recommendValueOptions; } } }Recommend 클래스를 만들고, ClusterOption(클러스터 선택)과 ValueOption(계절, 요일 등등)을 일대다 다대일로 풀고자 했는데 이 두가지 엔티티가 크게 다르지 않은 것 같아서 그냥 하나로 합치는게 좋을지(그냥 enum으로만 구분) 아니면 의미적으로 좀 다르기 때문에 구분하는게 좋을지 궁금합니다.(클러스터 선택과 계절 선택은 하나만 선택 가능, 나머지는 하나 이상 선택 가능 조건이기에 클러스터와 계절을 도메인으로 묶을지도 살짝 고민이 되는 것 같습니다..)결과를 RecommendResult로 보여주고자하는데(ai 추천 받은 top 5값에 대한 스팟 정보 제공 목적) 괜찮은 설계일지 궁금합니다.init.sql을 통해 클러스터, 계절, 요일 등 초기값들을 insert 해주고, spot 정보는 csv 파일로 부터 읽어오도록 구현하고 있는데(@PostConstruct, implementation 'com.opencsv:opencsv:5.5' 이용) 실제로 이런 설계에서 초기값을 주입하고 이후 로직 구현하는게 실무적으로 일반적인 방식인지 궁금합니다..! 긴 글 읽어주셔서 감사합니다.