묻고 답해요
130만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결모의해킹 실무자가 알려주는, SQL Injection 공격 기법과 시큐어 코딩 : PART 1
xampp oracle 연동하면서 겪은 오류 정리, 연동방법
정말 2일동안 oracle 연동만 한거같습니다..저는 처음에 xampp 최신판을 설치했는데요instant-client와 xampp의 vc버전이 호환되지 않아 실행안됨xampp는 apmsetup과 달리 64bit버전으로 php나 mysql이 설치될 수 있음이 두개를 설치하면서 배웠습니다..이 두개 조건만 기억하시면 oci8까지는 문제없이 되실겁니다oci8 설정https://stz.co.kr/phpxampp-oracle/두말할 필요없이 이 링크만 보고 그대로만 진행하시면 oci8까지는 확실하게 실행됩니다.client는 light가 아니라 basic 패키지로 설치하셔도 무방합니다(무작정 설치하다가 xampp 설치만 10번 해본거같습니다..)해당 링크는 xampp 64비트를 지원하기 때문에 client도 64비트로 깔아주시는거 기억부탁드립니다여기서 xampp랑, oci 설정까지 다 됩니다. 그런데 저는 이후에 tns오류가 발생하더군요tns에러..(ora 12518, 12514등등)이건 리스너를 고치는게 맞습니다. 스택오버플로우 페이지도 찾아보고 다 했는데 이 게시글이 답입니다.서비스 이름이 소문자인지 대문자인지 체크해라저는 sid 이름을 소문자로 바꾸고 이제 SID_LIST_LISTENER= 되어있는 곳에 내가 추가한 TNSNAME 을 적자-> 이 과정에서 정말 중요한게 있습니다. 추가를 할때 oracle home의 주소를 dbhomeXE가 아니라 tnsname이 있는 경로로 바꾸어주어야합니다. 저는 21c\homes\OraDB21Home1\network\admin에 있었습니다. 제가볼때 경로랑 이름이 문제였던거 같습니다 https://xively.tistory.com/entry/oracle-sql-error-ORA-12514-TNSlistener-does-not-currently-know-of-service-requested-in-connect-descriptor-%EC%97%90%EB%9F%AC-%ED%95%B4%EA%B2%B0-oracle-sqlDeveloper-%EA%B0%91%EC%9E%90%EA%B8%B0-%EC%A0%91%EC%86%8D-%EC%95%88%EB%90%A8-%ED%95%B4%EA%B2%B0-Oracle-11g-ora-12541-no-listener#google_vignette
-
미해결스프링 시큐리티 완전 정복 [6.x 개정판]
섹션.8 메서드 기반 권한 부여 @PreAuthorize
안녕하세요? 섹션8. 메서드 기반 권한 부여 강의 보다가 잘 안되는 부분이 있어서 질문 드립니다! (16분 쯤에 설명 나오는 부분입니다!) @GetMapping("/user/{id}") @PreAuthorize("#id == authentication.name") public String authentication(@PathVariable(name = "id") String id){ return id; }해당 강의에서 user 로 로그인 시 위 url 로 접근이 가능했는데, 똑같이 해봤는데 403 이 떴습니다. 혹시나 해서 공유해주신 github 프로젝트로 해당 branch 로 체크아웃했더니 같은 현상이 나타납니다.이것저것 시도해보다가 스프링 공식페이지에서 @P 어노테이션에 대한 설명이 있길래 아래와 같이 도입해봤더니 정상동작합니다.@GetMapping("/user/{id}") @PreAuthorize("#id == authentication.name") public String authentication(@P("id") @PathVariable(name = "id") String id){ return id; }https://docs.spring.io/spring-security/reference/servlet/authorization/method-security.html 강의 하실 때보다 시큐리티 버젼이 또 올라가서 안되는 부분이 생긴 것일까요?아니면 제가 어떤 부분을 놓치고 있는걸까요? ㅠ
-
미해결[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
3-4 수치형 - 민맥스 스케일링
학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!질문과 관련된 영상 위치를 알려주면 더 빠르게 답변할 수 있어요먼저 유사한 질문이 있었는지 검색해보세요 # 수치형 - 민맥스 스케일링 cols = ['age', 'fnlwgt', 'education.num', 'capital.gain', 'capital.loss', 'hours.per.week'] from sklearn.preprocessing import MinMaxScaler scaler = MinMaxScaler() n_train[cols] = scaler.fit_transform(n_train[cols]) n_test[cols] = scaler.transform(n_test[cols])KeyError: "None of [Index(['age', 'fnlwgt', 'education.num', 'capital.gain', 'capital.loss',\n 'hours.per.week'],\n dtype='object')] are in the [columns]"수치형 - 민맥스 스케일링 부분이에서 이러한 에러가 뜹니다..ㅜㅜ해결 방법이 궁금합니다.
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
MyBatis나 Jpa를 사용했을 때, 커넥션이 커넥션 풀로 반환되는 시점 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.안녕하세요 영한님.이번 강의를 들으면서 실제 MyBatis나 JPA를 사용했을 때커넥션이 커넥션 풀로반환되는 시점이 궁금했습니다.GPT에게 물어본 결과로는,트랜잭션 단위로 커넥션을 커넥션 풀로 반환한다는 답변을 받았습니다.예를들어 트랜잭션 1에서 findById(), findByUsername()을 호출한다면 트랜잭션 1에서 획득한 커넥션 1을 가지고findById()에 의한 select 쿼리를 호출 후커넥션1을 반환하지 않고그대로 유지하다가 findByUsername()으로 두 번째 select 쿼리를 호출한다는 답변을 받았습니다.이부분이 맞는지 질문 드리고 싶습니다.
-
미해결김영한의 실전 자바 - 중급 1편
인스턴스 간 참조관계
public class InnerOuterMain { public static void main(String[] args) { InnerOuter outer = new InnerOuter(); InnerOuter.Inner inner = outer.new Inner(); } }내부 클래스에 대한 인스턴스는 바깥 클래스에 대한 인스턴스를 가지고 있습니다. 그렇지만 바깥 클래스의 인스턴스는 내부 클래스의 인스턴스를 가지고 있지 않은게 맞나요? 바깥 클래스인 InnerOuter 내에 메서드를 만들고, 내부 클래스가 가진 변수에 접근하는 코드를 작성하니 cannot find symbol이 뜨긴 했습니다.
-
미해결쿠버네티스 어나더 클래스 (지상편) - Sprint 1, 2
kubectl
[ 무게감 있게 설치하는 방법 2/3 ] - kubelet, kubeadm, kubectl 패키지 설치 과정 중 발생한 문제 아래 캡쳐본과 같이 "sudo yum install -y kubelet-1.27.1-0.x86_64 kubeadm-1.27.1-0.x86_64 kubectl-1.27.1-0.x86_64 --disableexcludes=kubernetes" 입력 시 다음과 같은 에러가 발생하는데 구글링을 해봐도 잘 이해가 되지 않습니다. 조언주시면 감사하겠습니다 !
-
미해결
Opening JPA EntityManager in OpenEntityManagerInViewInterceptor 후 바로 Closing 되는 현상
안녕하세요. 프로젝트를 진행하면서 해결하기 어려운 문제를 직면해 이렇게 질문을 드립니다. 현재 프로젝트에 사용하는 기술은 다음과 같습니다.사용기술spring boot 3.2.0spring data JPAdockerec2querydslgradle 8.5spring securityMySQL 8 문제상황@PathVariable로 주어진 값을 이용해 dto를 list로 반환하는 조회 로직을 개발했습니다. querydsl을 이용해 로직을 구현했고, postman으로 로컬 테스트를 진행했을 때는 원하는 값이 정상적으로 반환됐습니다. 하지만 해당 프로젝트를 docker 이미지로 빌드하고, ec2에서 컨테이너화 시켜 실행했을 때, 다음과 같이 "Opening JPA EntityManager in OpenEntityManagerInViewInterceptor" 이후 바로 EntityManager 가 Closing 됐고, 해당 테이블을 조회하는 쿼리가 누락됐습니다.로컬 테스트 시 정상적인 로그입니다.2024-05-04T03:54:35.072+09:00 DEBUG 28044 --- [nio-8080-exec-5] o.s.security.web.FilterChainProxy : Secured GET /mentee/list/1 2024-05-04T03:54:35.078+09:00 DEBUG 28044 --- [nio-8080-exec-5] o.j.s.OpenEntityManagerInViewInterceptor : Opening JPA EntityManager in OpenEntityManagerInViewInterceptor 2024-05-04T03:54:35.163+09:00 INFO 28044 --- [nio-8080-exec-5] c.e.m.m.controller.MenteeController : mentee list controller 진입 2024-05-04T03:54:35.167+09:00 DEBUG 28044 --- [nio-8080-exec-5] o.s.orm.jpa.JpaTransactionManager : Found thread-bound EntityManager [SessionImpl(741559576<open>)] for JPA transaction 2024-05-04T03:54:35.167+09:00 DEBUG 28044 --- [nio-8080-exec-5] o.s.orm.jpa.JpaTransactionManager : Creating new transaction with name [com.example.magnet.mentee.service.MenteeService.getAppliedMentees]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT,readOnly 2024-05-04T03:54:35.168+09:00 DEBUG 28044 --- [nio-8080-exec-5] o.s.orm.jpa.JpaTransactionManager : Exposing JPA transaction as JDBC [org.springframework.orm.jpa.vendor.HibernateJpaDialect$HibernateConnectionHandle@3fddb404] 2024-05-04T03:54:35.169+09:00 INFO 28044 --- [nio-8080-exec-5] c.e.magnet.mentee.service.MenteeService : mentees 메소드 진입 - service 2024-05-04T03:54:35.169+09:00 INFO 28044 --- [nio-8080-exec-5] c.e.m.m.repository.MenteeRepositoryImpl : mentees 메소드 구현체 진입 2024-05-04T03:54:35.366+09:00 DEBUG 28044 --- [nio-8080-exec-5] org.hibernate.SQL : /* select mentee.id, mentee.member.nickName, mentee.email, mentee.schedule, mentee.phone from Mentoring mentoring inner join mentoring.menteeList as mentee where mentoring.id = ?1 */ select ml1_0.mentee_id, m2_0.nick_name, ml1_0.email, ml1_0.schedule, ml1_0.phone from mentoring m1_0 join mentee ml1_0 on m1_0.mentoring_id=ml1_0.mentoring_id join member m2_0 on m2_0.member_id=ml1_0.member_id and (m2_0.deleted = 0) where m1_0.mentoring_id=? 2024-05-04T03:54:35.369+09:00 INFO 28044 --- [nio-8080-exec-5] p6spy : #1714762475369 | took 2ms | statement | connection 3| url jdbc:mysql://localhost:3306/magnet?serverTimezone=UTC&characterEncoding=UTF-8 /* select mentee.id, mentee.member.nickName, mentee.email, mentee.schedule, mentee.phone from Mentoring mentoring inner join mentoring.menteeList as mentee where mentoring.id = ?1 */ select ml1_0.mentee_id,m2_0.nick_name,ml1_0.email,ml1_0.schedule,ml1_0.phone from mentoring m1_0 join mentee ml1_0 on m1_0.mentoring_id=ml1_0.mentoring_id join member m2_0 on m2_0.member_id=ml1_0.member_id and (m2_0.deleted = 0) where m1_0.mentoring_id=? /* select mentee.id, mentee.member.nickName, mentee.email, mentee.schedule, mentee.phone from Mentoring mentoring inner join mentoring.menteeList as mentee where mentoring.id = 11 */ select ml1_0.mentee_id,m2_0.nick_name,ml1_0.email,ml1_0.schedule,ml1_0.phone from mentoring m1_0 join mentee ml1_0 on m1_0.mentoring_id=ml1_0.mentoring_id join member m2_0 on m2_0.member_id=ml1_0.member_id and (m2_0.deleted = 0) where m1_0.mentoring_id=NULL; 2024-05-04T03:54:35.371+09:00 DEBUG 28044 --- [nio-8080-exec-5] o.s.orm.jpa.JpaTransactionManager : Initiating transaction commit 2024-05-04T03:54:35.371+09:00 DEBUG 28044 --- [nio-8080-exec-5] o.s.orm.jpa.JpaTransactionManager : Committing JPA transaction on EntityManager [SessionImpl(741559576<open>)] 2024-05-04T03:54:35.372+09:00 INFO 28044 --- [nio-8080-exec-5] p6spy : #1714762475372 | took 0ms | commit | connection 3| url jdbc:mysql://localhost:3306/magnet?serverTimezone=UTC&characterEncoding=UTF-8 ; 2024-05-04T03:54:35.373+09:00 DEBUG 28044 --- [nio-8080-exec-5] o.s.orm.jpa.JpaTransactionManager : Not closing pre-bound JPA EntityManager after transaction 2024-05-04T03:54:35.425+09:00 DEBUG 28044 --- [nio-8080-exec-5] o.j.s.OpenEntityManagerInViewInterceptor : Closing JPA EntityManager in OpenEntityManagerInViewInterceptor 2024-05-04T03:55:28.135+09:00 INFO 28044 --- [ionShutdownHook] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default' 2024-05-04T03:55:28.136+09:00 INFO 28044 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown initiated... 2024-05-04T03:55:28.142+09:00 INFO 28044 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown completed. docker+ ec2의 배포환경에서 실행한 결과 입니다.요청은 postman으로 보냈습니다.2024-05-03T19:00:18.374Z DEBUG 1 --- [nio-8080-exec-1] o.s.security.web.FilterChainProxy : Secured GET /mentee/list/4 2024-05-03T19:00:18.384Z DEBUG 1 --- [nio-8080-exec-1] o.j.s.OpenEntityManagerInViewInterceptor : Opening JPA EntityManager in OpenEntityManagerInViewInterceptor 2024-05-03T19:00:18.517Z DEBUG 1 --- [nio-8080-exec-1] o.j.s.OpenEntityManagerInViewInterceptor : Closing JPA EntityManager in OpenEntityManagerInViewInterceptor= 해당 로그처럼 "Opening JPA EntityManager in OpenEntityManagerInViewInterceptor" 이후 바로 "Closing JPA EntityManager in OpenEntityManagerInViewInterceptor"로 변환됐습니다.JpaTransactionManager가 정상적으로 호출되지 않았다고 생각합니다.Found thread-bound EntityManager [SessionImpl(741559576<open>)] for JPA transactionCreating new transaction with name [com.example.magnet.mentee.service.MenteeService.getAppliedMentees]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT,readOnlyExposing JPA transaction as JDBC [org.springframework.orm.jpa.vendor.HibernateJpaDialect$HibernateConnectionHandle@3fddb404]Not closing pre-bound JPA EntityManager after transaction > OSIV설정이 true로 되어있는 상태입니다.위에 나열한 일련의 과정들이 누락되었습니다. 해당 문제가 querydsl의 EntityManager문제라고 생각해 차선책으로 spring data jpa와 jqpl을 이용해서 해당 로직을 구현하고 로컬에서도 정상적으로 값을 반환하는 것을 확인했지만, 똑같은 문제가 반복됐습니다. 아래는 querydsl을 기준으로 작업한 코드 목록입니다. service 클래스 단위에 @Transactional을 작성했고, Mentee엔티티와 Mentoring엔티티는 N:1 관계입니다. QueryDslConfig@Configuration //@EnableJpaAuditing public class QueryDslConfig { @PersistenceContext private EntityManager entityManager; @Bean public JPAQueryFactory jpaQueryFactory() { return new JPAQueryFactory(entityManager); } } Service@Transactional(readOnly = true) public List<AppliedMenteesDto> getAppliedUsers(Long mentoringId) { log.info("mentees 메소드 진입 - service"); return menteeRepository.mentees(mentoringId); // List<Mentee> mentees = menteeRepository.findAllByMentoringId(mentoringId); // jpq를 이용한 로직 // List<AppliedMenteesDto> resultDto = MenteeToAppliedMenteesDto(mentees); // return resultDto; }AppliedMenteesDto는 @QueryProjection을 적용한 결과반환 dto입니다. querydsl을 사용했습니다. Repositorypublic interface MenteeRepository extends JpaRepository<Mentee, Long>, MenteeRepositoryCustom { List<AppliedMenteesDto> mentees(Long mentoringId); } MenteeRepositoryImpl@Repository @RequiredArgsConstructor @Slf4j public class MenteeRepositoryImpl implements MenteeRepositoryCustom{ private final JPAQueryFactory jpaQueryFactory; @Override public List<AppliedMenteesDto> mentees(Long mentoringId){ log.info("mentees 메소드 구현체 진입"); return jpaQueryFactory .select(new QAppliedMenteesDto( mentee.id, mentee.member.nickName, mentee.email, mentee.schedule, mentee.phone )) .from(mentoring) .join(mentoring.menteeList, mentee) .where(mentoring.id.eq(mentoringId)) .fetch(); } } 트랜잭션 처리나 OSIV 문제일까요? 로컬에서는 되는데, EC2 docker 배포환경에서는 안되는 이유가 궁금합니다 ㅜㅜ spring data JPA를 이용한 다른 로직들은 정상적으로 동작합니다ㅜㅜ
-
미해결[2024 업데이트] UX/UI 시작하기 : Figma 입문 (Inflearn Original)
오브젝트는 뭘 눌러야 생기는거죠?
오브젝트 생성이 안되는데 버튼 어떤걸 눌러야생기는 걸까요? 저렇게 색상 구분도 하고싶은데어떻게 하신걸까요????
-
미해결따라하며 배우는 노드, 리액트 시리즈 - 기본 강의
다음과 같은 에러들이 발생합니다.
강의 잘 보고 있습니다.다음과 같은 에러가 발생하여 문의드립니다.혹시 추가로 설치가 필요한 것들이 있는 것일까요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
애노테이션에 대해서 전반적인 질문
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]애노테이션에 대해서 @xxx 을 붙이면 이런기능이 된다. 이렇게만 알고 있는데요, 실제로 컴파일할 때 어떻게 이루어지는지 조금더 자세한 설명같은게 없을까요? https://developer-youn.tistory.com/122 위의 링크에 있는 정보보다 조금더 deep한 내용이었으면 좋겠습니다.
-
미해결스프링 시큐리티 완전 정복 [6.x 개정판]
실행하면 localPage가 뜨지 않습니다. + 로그인이 되지 않습니다.
@EnableWebSecurity @Configuration public class SecurityConfig { @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { http .authorizeHttpRequests(auth -> auth.anyRequest().authenticated()) .formLogin(form -> form .loginPage("/loginPage") .loginProcessingUrl("/loginProc") .defaultSuccessUrl("/",true) .failureUrl("/failed") .usernameParameter("userId") .passwordParameter("passwd") .successHandler((request, response, authentication) -> { System.out.println("authentication: " + authentication.getName()); response.sendRedirect("/home"); }) .failureHandler((request, response, exception) -> { System.out.println("exception: " + exception.getMessage()); response.sendRedirect("/login"); }) .permitAll() ); return http.build(); } @Bean public UserDetailsService userDetailsService(){ UserDetails user = User.withUsername("user").password("{noop}1111").roles("USER").build(); return new InMemoryUserDetailsManager(user); } } @RestController public class IndexController { @GetMapping("/") public String index() { return "index"; } @GetMapping("/home") public String home() { return "home"; } @GetMapping("/loginPage") public String loginPage() { return "loginPage"; } } 1.application.yml에 들어있는 내용은 없습니다. 해당 코드로 실행하고 localhost:8080/을 주소창에 입력하면 localhost:8080/loginPage가 나와야 하는데 localhost:8080/login으로 리다이렉트 됩니다. 어떤 문제인가요 ? 2. /login에서 아이디에 user, 비밀번호에 1111을 입력해도 로그인이 되지 않고 자격 증명 실패 문구가 뜹니다. 실행할 경우 Using generated security password: cf396bfb-5992-4723-a33d-6cf1f0af2146 이런 비밀번호가 뜨는데 왜 아직도 이런 비밀번호가 뜨는지 모르겠습니다. 로그인에 실패하면 /failed로 넘어가야 하는데 /login?error 여기로 넘어갑니다. 뭘 어떻게 고쳐야 할까요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
JPA repository질문입니다.
JPA repository를 public interface MemberRepository extends JpaRepository<Member, Long> { } 이런식으로 사용하면 기본적인 crud가 된다고 구글링하다가 알게됐습니다.아직 선생님 수업을 다 듣지 못했지만 이런식으로 사용하지않는걸로아는데 save() 레코드 저장 (insert, update) findOne() primary key로 레코드 한건 찾기 findAll() 전체 레코드 불러오기. 정렬(sort), 페이징(pageable) 가능 count() 레코드 갯수 delete() 레코드 삭제이렇게사용하면 em.persist 처럼 사용안하고 그냥 save만 불러서 쓸수이ㅣㅆ는거아닌가요?제가 아직 잘몰라서 ㅠㅠ햇갈립니다
-
미해결Next + React Query로 SNS 서비스 만들기
로그인을 서버액션으로 구현해봤는데 궁금한게 있습니다.
로그인을 클라이언트 컴포넌트에서 서버액션을 통해 구현해봤는데, 궁금한게 생겨서 질문 드립니다.로그인 모달의 코드입니다. "use client"; import style from "@/app/(beforelogin)/_component/login.module.css"; import { ChangeEventHandler, FormEventHandler, useState } from "react"; import { redirect, useRouter } from "next/navigation"; import { signIn } from "next-auth/react"; import { useFormState, useFormStatus } from "react-dom"; import onSubmit from "../_lib/signin"; import BackButton from "./BackButton"; function showMessage(messasge: string | null | undefined) { if (messasge === "no_id") { return "아이디를 입력하세요."; } if (messasge === "no_password") { return "비밀번호를 입력하세요."; } return ""; } export default function LoginModal() { const [state, formAction] = useFormState(onSubmit, { message: null }); const { pending } = useFormStatus(); return ( <div className={style.modalBackground}> <div className={style.modal}> <div className={style.modalHeader}> <BackButton /> <div>로그인하세요.</div> </div> <form action={formAction}> <div className={style.modalBody}> <div className={style.inputDiv}> <label className={style.inputLabel} htmlFor="id"> 아이디 </label> <input id="id" name="id" className={style.input} type="text" placeholder="" /> </div> <div className={style.inputDiv}> <label className={style.inputLabel} htmlFor="password"> 비밀번호 </label> <input id="password" name="password" className={style.input} type="password" placeholder="" /> </div> </div> <div className={style.message}>{showMessage(state?.message)}</div> <div className={style.modalFooter}> <button className={style.actionButton} disabled={pending}> 로그인하기 </button> </div> </form> </div> </div> ); } 아래는 signin.ts 의 코드입니다."use server"; import { redirect } from "next/navigation"; import { signIn } from "@/auth"; const onSubmit = async (prevState: any, formData: FormData) => { if (!formData.get("id") || !(formData.get("id") as string)?.trim()) { return { message: "no_id" }; } if ( !formData.get("password") || !(formData.get("password") as string)?.trim() ) { return { message: "no_password" }; } let shouldRedirect = false; try { const response = await signIn("credentials", { username: formData.get("id"), password: formData.get("password"), redirect: false, }); console.log(response.status, "1"); console.log(response, "2"); shouldRedirect = true; } catch (err) { console.error(err); return { message: null }; } if (shouldRedirect) { redirect("/home"); // try/catch문 안에서 X } }; export default onSubmit; 이렇게 했을 때에, 콘솔이 이렇게 찍힙니다. 1. response가 http://localhost:3000/i/flow/login이렇게 날라오고, status는 그에 따라 undefined 입니다.응답이 이렇게 오면 response에 따른 status를 모르는데 에러처리를 어떻게 해야하나요 ?? 아래는 회원가입을 똑같이 서버액션으로 구현했을때에, signup.ts의 코드입니다."use server"; import { redirect } from "next/navigation"; import { signIn } from "@/auth"; const onSubmit = async (prevState: any, formData: FormData) => { if (!formData.get("id") || !(formData.get("id") as string)?.trim()) { return { message: "no_id" }; } if (!formData.get("name") || !(formData.get("name") as string)?.trim()) { return { message: "no_name" }; } if ( !formData.get("password") || !(formData.get("password") as string)?.trim() ) { return { message: "no_password" }; } if (!formData.get("image")) { return { message: "no_image" }; } let shouldRedirect = false; try { const response = await fetch( `${process.env.NEXT_PUBLIC_BASE_URL}/api/users`, { method: "post", body: formData, credentials: "include", } ); console.log(response.status, "1"); if (response.status === 403) { return { message: "user_exists" }; } console.log(await response.json(), "2"); console.log(response, "3"); shouldRedirect = true; /*await signIn("credentials", { username: formData.get("id"), password: formData.get("password"), redirect: false, });*/ } catch (err) { console.error(err); return { message: null }; } if (shouldRedirect) { redirect("/home"); // try/catch문 안에서 X } }; export default onSubmit; 이 때에, console.log 의 결과입니다.response 응답 객체에서 await response.json()을 취했는데, OK로 나오는 이유가 궁금합니다. 로그인 구현에서 redirect를 false로 하면 client측에서 라우팅하는 것이고, true로 하면 서버쪽에서 리다이렉트 하는 것이라고 알고 있습니다.그런데 서버 액션으로 api 호출을 하는 것인데,redirect를 false로 하고 아래 redirect를 해주어도 redirect가 되는 것인지 궁금합니다. 그리고 redirect를 true로 하면이렇게 에러가 떠버립니다.서버액션으로 리다이렉트 시켜주는 것이라 생각해서 true옵션을 주었는데 에러가 왜 뜨는지 궁금합니다.바쁘실텐데 많은 질문 죄송합니다 ㅜㅜ
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
현재 스프링db2편 학습하는 중인데요
영상에선 itemservice-db파일 기존의 코드를 수정해서 사용하라고 하셔서 그렇게 했는데요거기에 깔려있는게 2.6.5입니다.id 'org.springframework.boot' version '2.6.5'근데 강의 자료에선 이제 3.0이상을 쓰라고 하셔서요이게 일단 거기 있는데로 2.65로 진행해도 되는건가요?아님 spring.io가서 3.0을 다시 깔아야하나요jpa까지 하다가 오류가 계속나서 처음부터 다시 시작하려고 하는데요일단 영상 그래도 2.6.5으로 진행하고 싶은데자료를 계속 보는데 전부 2.xx는 지원이 끊겨서 3.0으로 쓰라고 하셔서요진짜 2.xx다 빼고 3.0이상으로 전부 바꿔야 하나요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-K insert 질문
큰돌님 안녕하십니까커뮤니티 찾아보니까 insert 함수 첫 번째 인자는 이터레이터 값이 들어가야 해서 begin() + '넣어줘야 할 위치' 가 들어가야 오류가 안 나고 정상 작동한다고 봤는데http://boj.kr/9fc8f9dd8de44b04b979a877da3962fd이렇게 해도 백준에서 맞다고 합니다. 또 Programiz(c++ online Compiler)로 코딩하는데 오류 안 나고 잘 작동해서 해서 질문드립니다.
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
람다식이 이해가 안됩니다.
멤버서비스 테스트에서 예외가 발생했을때 사용한 람다식이 해석이 안됩니다. 무슨 의미 인가요?assertThatThrownBy(()-> member service.accountTransfer(members.getMemberId(), memberEx.getMemberId(), 2000) .isInstanceOf(IllegalStatementException.class);위 람다식은 어떻게 해석해야 하나요?
-
미해결[2024 업데이트] UX/UI 시작하기 : Figma 입문 (Inflearn Original)
도대체 예제 파일이 어딨죠?
보면서 따라 하고싶은데 다운로드 버튼은 어디에도 보이지 않네요......
-
미해결개발자를 위한 쉬운 도커
WSL 도커 컨테이너 개발 오류
도커 데스크탑 대신 wsl에 도커 엔진을 설치해서 사용중입니다.윈도우에서 devcontainer 설정을 하고 개발 컨테이너 폴더 열기를 했을 때 아래와 같이 에러가 발생하는데, 혹시 path를 C:/Users/... 대신 /mnt/c/Users/...로 수정할 수 있는 방법이 있을까요?ERROR: unable to prepare context: path "c:Userscdw55DesktopCodingEasy-Dockerleafyleafy-frontend.devcontainer" not found
-
미해결mongoDB 기초부터 실무까지(feat. Node.js)
user 내장 시 ref 필드 필요성
안녕하세요 !유익한 강의 감사합니다. Blog.js에서 BlogSchema를 보면,user를 내장하였는데,_id에 ref 필드가 그대로 있더라구요.사실 populate 하지 않을 꺼면 ref필드는 삭제해도 되지 않을까요?만약 내장하려는 문서에 ref가 필요한 케이스가 있다면 어떤 게 있을까요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
세팅 에러
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. https://drive.google.com/file/d/13uBXfVIbf-eYNNi0rG_paNywzx65M4CI/view?usp=drive_link 시작 초기에 build.gradle이랑 jpashopapplication을 돌렸을 때, Exception java.lang.NoClassDefFoundError: Could not initialize class org.codehaus.groovy.reflection.ReflectionCache [in thread "Daemon worker"] Could not create an instance of type ijmapper_2lopa9aslcq9lq2pwmglefwkb.> Could not initialize class org.codehaus.groovy.runtime.InvokerHelper* Try:Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights. 이런 에러가 2개떠서 더이상 진행하지 못하는 상황입니다. 혹시 해결법 알 수 있을까요?