inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

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

어떤 객체가 이벤트를 발생시키는지

미해결

[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지

여러 챕터에서 객체의 on 메서드를 사용하는 코드가 자주 보여서 개념에 대해 알아보았습니다. const fs = require("fs"); console.log("before:", process.memoryUsage().rss); // 메모리 체크 // 스트림 방식으로 파일 읽고 보내기 const readStream = fs.createReadStream("./big.txt"); const writeStream = fs.createWriteStream("./big3.txt"); readStream.pipe(writeStream); readStream.on("end", () => { console.log("stream: ", process.memoryUsage().rss); }); 그런데 이렇게 이벤트가 발생하는 객체의 종류를 모두 외우고 있어야 하나요? 아니면 이 객체가 이벤트를 발생시키는지 예상(?), 판단할 수 있는 기준이 있나요?

  • node.js
  • mysql
  • mongodb
  • express
  • typescript
  • socket.io
  • jwt
공태성 댓글 1 좋아요 0 조회수 155

input box에 데이터 입력후 확인 버튼 누르고 input 데이터 수정하면 오류 발생 ...

미해결

코드로 배우는 React 19 with 스프링부트 API서버

안녕하세요 Redux 수업 다 듣고 이해 되지 않아서 따로 프로젝트를 뽑아서 Redux를 연습 하고 있어요... 일단 이해는 다된거 같아요... 아래 dispatch 하는 부분에서 오류가 뜨네요.. 먼저 처리 순서가 ... input에 데이터를 입력하고 로그인 버튼을 클릭하고 다시 input에 데이터를 입력하면 오류가 뜨네요 cannot assign to read only property 'current' of object '# object ' 버튼 클릭하는 부분에 dispatch하는 내용을 넣었구요.. 구글에는 깊은 복사 뭐 이런거 있던데 그거랑 관련 없는거 같구... =================================== 리듀스 기본을 알면 저 문제 해결될꺼라는 어떤분의 답변이 야속하네요 ... 코드 시작 ============================= import { useState } from "react"; import { useDispatch } from "react-redux"; import {login} from "../slices/loginSlice" const initState = { email:'', password:'' } function LoginComponent(props) { const [loginParam, setLoginParam] = useState({...initState}) const disPatch = useDispatch() const handleChange = (e)=> { loginParam[e.target.name] = e.target.value setLoginParam({...loginParam}) } const handleLoginClick = (e)=>{ console.log(".......") disPatch ( login(loginParam) ) } const handleLogoutClick = (e)=>{ disPatch( login(initState) ) } return ( <div> <div className="flex flex=nowrap gap-x-8 place-content-center "> <div> <div> login </div> <div> <input className="text-base w-300 p-6 rounded-r border border-solid border-neutral-500 shadow-md" name="email" type ={'text'} value={loginParam.email} onChange ={handleChange}> </input> </div> <div> <input className="text-base w-300 p-6 rounded-r border border-solid border-neutral-500 shadow-md" name="password" type={'password'} value={loginParam.password} onChange={handleChange} > </input> </div> <div> <button className = "rounded p-4 w-36 bg-blue-500 text-xl text-white" onClick={handleLoginClick} > Login.. </button> </div> </div> <button onClick={handleLogoutClick}> logout </button> </div> </div> ) } export default LoginComponent; =============================

  • react
  • spring-boot
  • jpa
  • jwt
  • redux-toolkit
just kim 댓글 1 좋아요 1 조회수 140

Refresh Token 만료시 로그아웃 및 페이지 이동 처리

미해결

코드로 배우는 React 19 with 스프링부트 API서버

Refresh Token마저 만료되었을때 Todo 또는 Product 메뉴를 누르면 자동으로 로그아웃 및 메인페이지로 이동하려고 합니다. 강의 내용대로 쿠키 member를 삭제하여 로그아웃 처리는 하였으나 '/' Path로 이동은 안되어서 방법을 찾지 못하여 질문드립니다. 추가로 토큰만료시 jwtUtil의 beforeRes에서 쿠키를 삭제하였으나 todo 페이지가 호출 및 페이지 이동이 안되어서 todo 페이지 나오기전에 페이지 이동을 하고싶습니다. ListComponent의 useEffect에 hook을 사용했으나 실제로 이동안 되고 jwtUtil, todoAPI 는 모두 규칙 위반으로 hook이나 navigate를 사용할수 없더라구요. 어떻게 해야할까요..

  • react
  • spring-boot
  • jpa
  • jwt
  • redux-toolkit
ghoonpark 댓글 1 좋아요 0 조회수 464

2.4강에서 1:18초쯤에 <T>를하고 뭔가 추가하는 작업

미해결

[초급] 찍어먹자! 코틀린과 Spring Security + JWT로 회원가입 만들기

어떤 작업을 한 것이고 단축키가 무엇인지 궁금합니다

  • kotlin
  • spring-boot
  • jpa
  • spring-security
  • jwt
댓글 2 좋아요 0 조회수 217

세션 8장 마무리 후 product 에서 상품 이미지 깨짐 현상

미해결

코드로 배우는 React 19 with 스프링부트 API서버

안녕하세요 8장 까지 마무리 하고 product 이미지 가 출력되지 않는 현상을 봤습니다. 확실한건 이미지 링크는 header에 Authorization에 bearer token이 없어서 출력되지 않는거 같아요.. 일단 shouldNotFilter에 if(path.startsWith("/api/products/view")) { return true; } 해서 보이게 했긴해지만 결국에는 링크도 토큰 인증 처리해야겠죠?

  • react
  • spring-boot
  • jpa
  • jwt
  • redux-toolkit
just kim 댓글 1 좋아요 0 조회수 144

Redux에서 <provider >사용시 오류 -Cannot read properties of undefined (reading ‘getState’)

미해결

코드로 배우는 React 19 with 스프링부트 API서버

안녕하세요 열심히 강의 듣고 있습니다. 거의 중 후반까지 왔어요. jwt 강의 까지 듣고 많은걸 알게 되어서 많이 기쁩니다. 자신감이 많이 생겼네요. (참고로 java는 잘 못해서 kotlin으로 다 컨버팅 했네요 .... ) https://github.com/justkjy/apiserver 컨버팅 작업 하니깐 2번 듣게 되고 정확하게 이해가 되네요 ... == 본론 === 리덕스 툴킷 설정 강의에서 알려주신 코드를 따라 쳤는데 에러가 났어요.. const root = ReactDOM.createRoot(document.getElementById('root')); // root.render( // <Provider strote={store}> // <App /> // </Provider> // ); root.render( <App /> ); Cannot read properties of undefined (reading ‘getState’) 그래서 provider를 지워라고 하네요... 이게 맞나요?? 인프런 이슈 정보에도 지워라고 하긴 하는데 =========== https://www.inflearn.com/community/questions/36034/%EC%A0%9C%EB%A1%9C%EC%B4%88%EB%8B%98-%EC%BD%94%EB%93%9C%EB%A5%BC-%EB%94%B0%EB%9D%BC%EC%84%9C%EB%8F%84-%EA%B7%B8%EB%8C%80%EB%A1%9C-%EB%B3%B5%EC%82%AC%ED%96%88%EB%8A%94%EB%8D%B0-%EC%9D%B4-%EB%AC%B4%EC%8A%A8%EC%97%90%EB%9F%AC%EC%9D%B8%EA%B0%80%EC%9A%94-%EB%AA%87%EC%9D%BC%EC%A7%B8-%ED%95%B4%EA%B2%B0-%EB%AA%BB%ED%95%98%EA%B3%A0-%EC%9E%88%EC%8A%B5%EB%8B%88%EB%8B%A4 ================================= 저렇게 하면 강의 따라 가는데 문제가 없을까요? 리덕스 툴킷 설정

  • react
  • spring-boot
  • jpa
  • jwt
  • redux-toolkit
just kim 댓글 1 좋아요 0 조회수 168

[스프링부트 3.2] RefreshToken 발급시 파라미터 오류

해결됨

코드로 배우는 React 19 with 스프링부트 API서버

스프링부트 3.2 버전인데 APIRefreshController의 refresh의 파라미터중 String refreshToken만 적으면 -parameter 오류가 나네요. 인텔리제이에서 gradle로 빌드하거나 어노테이션에 이름을 붙여 적으니 잘 동작합니다. 식겁했습니다..

  • react
  • spring-boot
  • jpa
  • jwt
  • redux-toolkit
ghoonpark 댓글 1 좋아요 1 조회수 211

ModelMapper 와 entityToDto 차이

미해결

코드로 배우는 React 19 with 스프링부트 API서버

강사님의 강의에서 엔티티를 DTO로 변환할때 2가지 방식을 다 보여주셨는데 , 모델 매퍼로 엔티티 -> DTO 변환방식과 entityToDto 메소드 처럼 직접 개발자가 명시해줘서 엔티티를 DTO로 변환하는 방식의 차이점과 선택기준이 궁금합니다!!

  • react
  • spring-boot
  • jpa
  • jwt
  • redux-toolkit
현이 댓글 1 좋아요 0 조회수 140

섹션1의 첫번째강의에서 WebStorm으로 프로젝트 진행할때의 질문

미해결

코드로 배우는 React 19 with 스프링부트 API서버

WebStorm으로 작업하신다고 하시고 프로젝트 처음에 불러오는 과정이 안나와서 짐작으로 frontend/ch02_start폴더를 만들고 cmd콘솔에서 npm install react-router-dom진행했거든요. 근데 강사님이 실습하는 폴더구조가 다르거든요? 이 과정이 생략되어있어서.. src폴더, public폴더가 자동으로 안생기는데 임의로 src폴더 만들고 그냥 하는건가요? 중간 과정 생략된걸 짐작으로 따라하려다보니 확신이 안들어서 여쭤봅니다

  • react
  • spring-boot
  • jpa
  • jwt
  • redux-toolkit
anffydqnghkf 댓글 3 좋아요 0 조회수 323

오류 문의 _ org.springframework.orm.jpa.JpaSystemException: could not deserialize

미해결

스프링부트 시큐리티 & JWT 강의

우선 도움 많이 받고 있습니다 1) 다름이 아니라 3강-시큐리티 회원 가입에서 동영상 강의 12분 10초까지는 제가 작성한 코드가 잘 실행 됩니다. 회원 가입한 데이터가 콘솔에 잘 출력 됩니다 2) 그리고 나서 데이터를 DB까지 잘 저장 하기 위해서 레지파토리를 작성 하여 회원 가입을 시도 했는데 아래와 같이 오류가 발생 합니다 3) 제 소견으로 저는 이미 마리아 DB랑 아래와 같이 설정 하여 사용 중에 있었습니다. 이게 문제인거 같기도 합니다 spring.application.name=FirstProject server.servlet.encoding.force-response=true spring.datasource.driver-class-name=org.mariadb.jdbc.Driver spring.datasource.url=jdbc:mariadb://localhost:3306/FirstProject?createDatabaseIfNotExist=true spring.datasource.username=root spring.datasource.password=1234 spring.jpa.hibernate.ddl-auto=update spring.jpa.properties.hibernate.format_sql=true spring.jpa.show-sql=true spring.jpa.open-in-view=true User(id=0, username=6, password=6, email=6@naver.com, role=null, createDate=null) Hibernate: insert into user (create_date, email, password, role, username) values (current_timestamp(6), ?, ?, ?, ?) Hibernate: select u1_0.create_date from user u1_0 where u1_0.id=? 2024-08-02T21:41:49.880+09:00 ERROR 19076 --- [FirstProject] [io-8080-exec-10] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: org.springframework.orm.jpa.JpaSystemException: could not deserialize] with root cause 아래는 코드 내용 입니다 ~~~~~~~ package com.example.FirstProject.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.web.SecurityFilterChain; @Configuration @EnableWebSecurity // 스프링 시큐리티 필터가 스프링 필터체인에 등록 public class SecurityConfig { // @Bean public BCryptPasswordEncoder encodePwd() { return new BCryptPasswordEncoder(); } @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http.csrf(csrf -> csrf.disable()); http.authorizeHttpRequests(authorize -> authorize .requestMatchers("/user/**").authenticated() .requestMatchers("/manager/**").hasAnyRole("ADMIN", "MANAGER") .requestMatchers("/admin/**").hasRole("ADMIN") .anyRequest().permitAll() ); http.formLogin(form -> form .loginPage("/loginForm")); return http.build(); } } package com.example.FirstProject.controller; import com.example.FirstProject.model.User; import com.example.FirstProject.repository.UserRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.ResponseBody; @Controller public class indexController { @Autowired private UserRepository userRepository; @Autowired private BCryptPasswordEncoder bCryptPasswordEncoder; // 아래는 http://localhost:8080/ 로 들어 왔을 때의 겟 맵핑 임 // http://localhost:8080/ 로 들어오면 index.mustache 페이지로 전환 됨 @GetMapping({"","/"}) public String index(){ return "/index"; } // href="/joinForm"가 들어오거나 URL 주소가 8080/joinForm로 들어오면 페이지는 return 값인 joinForm으로(mustache) 전환 해라 @GetMapping("/joinForm") public String joinForm(){ return "joinForm"; } @GetMapping("/loginForm") public String loginForm(){ return "loginForm"; } // 아래는 href="/user"가 타고 들어 오면 URL 주소는 8080/user 이 되면서 페이지는 return 값인 user로(mustache) 페이지가 전환 됨 @GetMapping("/user") public @ResponseBody String user(){ return "user"; } @GetMapping("/admin") public @ResponseBody String admin(){ return "admin"; } @PostMapping("/join") public @ResponseBody String join(User user){ System.out.println(user); user.setRole("ROLE_USER"); String rawPassword=user.getPassword(); String encPassword=bCryptPasswordEncoder.encode(rawPassword); user.setPassword(encPassword); userRepository.save(user); return "redirect:/loginForm"; } } package com.example.FirstProject.model; import jakarta.persistence.Entity; import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; import jakarta.persistence.Id; import lombok.Data; import org.hibernate.annotations.CreationTimestamp; import java.security.Timestamp; @Entity @Data public class User { @Id // primary key @GeneratedValue(strategy = GenerationType.IDENTITY) private int id; private String username; private String password; private String email; private String role; //ROLE_USER, ROLE_ADMIN @CreationTimestamp private Timestamp createDate; } package com.example.FirstProject.repository; import com.example.FirstProject.model.User; import org.springframework.data.jpa.repository.JpaRepository; // JpaRepository 를 상속하면 자동 컴포넌트 스캔됨. public interface UserRepository extends JpaRepository<User, Integer> { // Jpa Naming 전략 // SELECT * FROM user WHERE username = 1? // User findByUsername(String username); // SELECT * FROM user WHERE username = 1? AND password = 2? // User findByUsernameAndPassword(String username, String password); // @Query(value = "select * from user", nativeQuery = true) // User find마음대로(); } <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>회원가입 페이지</title> </head> <body> <h1>회원가입 페이지</h1> <hr/> <form action="/join" method="post"> <input type="text" name="username" placeholder="Username"/> <br/> <input type="password" name="password" placeholder="Password"/> <br/> <input type="email" name="email" placeholder="Email"/> <br/> <button>회원가입</button> </form> </body> </html> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>로그인 페이지</title> </head> <body> <h1>로그인 페이지</h1> <hr/> <!-- 시큐리티는 x-www-form-url-encoded 타입만 인식 --> <form action="/loginProc" method="post"> <input type="text" name="username" placeholder="Username"/> <br/> <input type="password" name="password" placeholder="Password"/> <br/> <input type="email" name="email" placeholder="Email"/> <br/> <button>로그인</button> </form> <a href="/joinForm">회원 가입 페이지 이동</a> </body> </html>

  • spring
  • spring-security
  • jwt
김성은 댓글 1 좋아요 1 조회수 636

writer content

미해결

코드로 배우는 React 19 with 스프링부트 API서버

서버 쪽 이랑 이름이 다르면 데이터 바인딩이 안되지 않나요?

  • react
  • spring-boot
  • jpa
  • jwt
  • redux-toolkit
dev 댓글 1 좋아요 0 조회수 131

JWT 탈취 예방을 위해 어느정도까지 해야하나요?

미해결

jwt 탈취 보완을 위해 블랙리스트, RTR 등 다양한 방법이 사용한다는것을 배웠습니다. 그런데 점점 jwt의 stateless한 성질을 잃는다고 느껴서 실제 현업에서는 어떻게 사용하고 포트폴리오에서 사용 할 배포용 프로젝트에서도 어느정도까지 보완을하는지 궁금합니다.

  • jwt
ehddbs452100 댓글 1 좋아요 0 조회수 440

querydsl 에러

해결됨

코드로 배우는 React 19 with 스프링부트 API서버

(사진)

  • react
  • spring-boot
  • jpa
  • jwt
  • redux-toolkit
dev 댓글 1 좋아요 0 조회수 316

안녕하세요 로그인 비밀번호 관리 질문드려용....

미해결

코드로 배우는 React 19 with 스프링부트 API서버

안녕하세요 로그인 질문 드립니다. 강의와 크게 상관은 없지만 강의 듣다가 궁금한게 생겨서요.. 현재 시큐리티 강의 듣고 있습니다. DB에 암호화해서 저장하는건 이해하였습니다. 사용자가 암호를 잊었을때 시큐리티 암호 같은 방식은 암호 재발급 하면 되지만 복원 하는건 힘들어 보이네요 . 예를 들어서 이런 방식입니다. 암호의 3째자리 까진 알려주는 방식 암호의 흰트를 입력하면 가입한 이메일에 암호를 보내준다던지... ms sqlserver에는 암호 복원 기능 있는거 같던데 ... 암튼 강의듣다가 생각나서 질문 드려요

  • react
  • spring-boot
  • jpa
  • jwt
  • redux-toolkit
just kim 댓글 1 좋아요 0 조회수 179

논 블로킹 방식의 동작 원리 이해가 어렵습니다.

미해결

[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지

강의 교안의 논 블로킹의 정의 와 책의 예제(setTimeout 함수를 이용해 작업 시간이 긴 함수를 백그라운드로 보냄)를 읽어 보면 오래 걸리는 함수를 백그라운드로 보내는 것 같은데, 그 다음 설명을 보면 일부 코드들이 백그라운드에서 병렬로 실행된다고 되어있어서 헷갈립니다. 위 내용을 바탕으로 제가 이해한 것은 작업 시간이 긴 함수, 일부 코드 모두 백그라운드로 전달 작업 시간이 긴 함수는 태스크 큐로 전달되고 동시 작업이 가능한 일부 코드들은 백그라운드에서 병렬로 처리 일부 코드들의 병렬 처리가 끝나고 나면 태스크 큐에 있는 (블로킹 방식의)작업 시간이 긴 함수 처리 인데 맞을까요?

  • node.js
  • mysql
  • mongodb
  • express
  • typescript
  • socket.io
  • jwt
공태성 댓글 2 좋아요 0 조회수 239

[자바] 시큐리티 Config 참고

미해결

스프링부트 시큐리티 & JWT 강의

@Configuration @EnableWebSecurity // 스프링 시큐리티 필터가 스프링 필터체인에 등록 public class SecurityConfig { @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http.csrf(AbstractHttpConfigurer::disable) .authorizeHttpRequests(authorize -> authorize .requestMatchers("/user/**").authenticated() // /user라는 url로 들어오면 인증이 필요하다. .requestMatchers("/manager/**").hasAnyRole("MANAGER", "ADMIN") // manager으로 들어오는 MANAGER 인증 또는 ADMIN인증이 필요하다는 뜻이다. .requestMatchers("/admin/**").hasRole("ADMIN") // //admin으로 들어오면 ADMIN권한이 있는 사람만 들어올 수 있음 .anyRequest().permitAll() // 그리고 나머지 url은 전부 권한을 허용해준다. ); http.formLogin(form -> form .loginPage("/login")); return http.build(); } } 현재 버전 업데이트가 되면서 많이 바꿔어서 참고할 분들은 참고 해주시면 될꺼 같습니다!

  • spring
  • spring-security
  • jwt
한상희 댓글 1 좋아요 13 조회수 1004

router 이동 질문 드립니다.

해결됨

코드로 배우는 React 19 with 스프링부트 API서버

안녕하세요. 열심히 강의 듣고 있습니다. ... react에서 router 이동에 궁금한거 잇어서 질문 드려요 1 root 의 라우터에는 TodoIndex와 ProductsIndex 2개의 페이지가 있습니다. ............ 생략 .............. { path: "todo", element: ...<TodoIndex/>..., children: todoRouter() }, { path: "products", element: ... <ProductsIndex/>..., children: productsRouter() } 2. TodoIndex의 child은 todoRoter이고 add의 TodoAdd와 mdify의 TodoModify가 있습니다. { path: "add", element: ...<TodoAdd/>... }, { path: "modify/:tno", element: ...<TodoModify/>... } ProductsIndex의 child은 productsRouter이고 add의 ProductList와 mdify의 ProductModify가 있습니다. 현재 ../products/add 에 있다고 했을때 add 페이지에 있는 버튼을 누르면 ../todo/add 로 점프해서 이동 하려면 어떻게 navigate 해야되나요? todo/add에서 todo/modify 이런식의 같은 폴더 레벨이면 쉽게 이동되던데 ...

  • react
  • spring-boot
  • jpa
  • jwt
  • redux-toolkit
just kim 댓글 1 좋아요 1 조회수 192

Product 컨트롤러 api 결과값 리턴 질문

미해결

코드로 배우는 React 19 with 스프링부트 API서버

상품 등록이나 수정을 하고나서 return Map.of("result", "Success") 이렇게 리턴해주셨는데 실무에서 이런 방식을 많이 사용하나요 아니면 교육목적이기 때문에 조금 러프하게 하신건가요?? 이번 강의를 보고 실무와 가깝게 프로젝트를 진행하고 싶은데 이렇게 Map에 간단하게 리턴할지 아니면 api마다 매번 ResponseEntity에 Http Status Code 담아 리턴해야 할지 기준을 모르겠습니다. 제 목적에 맞게 하려면 어떤 방식으로 api 결과를 리턴해줘야 할까요??

  • react
  • spring-boot
  • jpa
  • jwt
  • redux-toolkit
현이 댓글 1 좋아요 0 조회수 191

이론강의

미해결

스프링부트 시큐리티 & JWT 강의

안녕하세요OAuth이론강의는 어디에있는지알수잇을까요?

  • spring
  • spring-security
  • jwt
조소영 댓글 1 좋아요 0 조회수 319

파일 업로드 관련 질문

미해결

코드로 배우는 React 19 with 스프링부트 API서버

[파일 업로드 설정과 확인] 강의에서 DB에 아주 중요한게 아니라면 성능적인 부분때문에 DB에 파일을 저장하면 안된다고 하셨습니다. 클라우드를 이용하는게 일반적이라고 생각합니다만 한가지 궁금한게 있습니다. 만약 게시글이라는 엔티티에 대표 사진이 딱 한장 들어갈 수 있다고 한다면 아래와 같은 순서로 구현할 수 있겠다는 생각이 들었습니다. 이런 방법에 대해 어떻게 생각하시나요?? 애플리케이션 단에서 이미지 등록 -> 이미지 base64 인코딩 -> 인코딩 된 긴 문자열을 압축 -> 압축된 문자열을 RDB(MYSQL) 게시글 테이블에 게시물 대표이미지 (longtext 형)에 저장. 조회할때는 애플리케이션 단에서 별도로 압축된 문자를 원래 인코딩 된 문자열로 디코딩하는 로직 필요하겠지만 비용이 크지 않다고 생각했습니다.

  • react
  • spring-boot
  • jpa
  • jwt
  • redux-toolkit
현이 댓글 1 좋아요 0 조회수 261

인기 태그

인프런 TOP Writers

주간 인기글