173만명의 커뮤니티!! 함께 토론해봐요.
미해결
스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] HelloSpringApplication 실행 시 아래와 같은 입력 상자가 뜨는데 이유가 뭔가요?
우기
2024-03-02T09:34:03.466Z
댓글 1
좋아요 0
조회수 365
미해결
데이터 분석 SQL Fundamentals
안녕하세요, JOIN 수업을 들으며 JOIN 순서와 수행시간에 궁금한 점이 생겨서 질문드립니다. 1번 emp -> dept 테이블로 조인한 경우 -- 1 SELECT B.DNAME, A.EMPNO, A.ENAME, A.JOB, C.FROMDATE, C.TODATE, C.SAL FROM HR.EMP A JOIN HR.DEPT B ON A.DEPTNO = B.DEPTNO JOIN HR.EMP_SALARY_HIST C ON A.EMPNO = C.EMPNO WHERE B.DNAME IN ('SALES', 'RESEARCH') 2번 dept -> emp 테이블로 조인한 경우 SELECT A.DNAME, B.EMPNO, B.ENAME, B.JOB, C.FROMDATE, C.TODATE, C.SAL FROM HR.DEPT A JOIN HR.EMP B ON A.DEPTNO = B.DEPTNO JOIN HR.EMP_SALARY_HIST C ON B.EMPNO = C.EMPNO WHERE A.DNAME IN ('SALES', 'RESEARCH') 데이터가 작은 테이블에서 큰 테이블(1 -> m)로 조인하는 것보다 큰 테이블에서 작은 테이블로(m -> 1) 조인하는게 속도가 더 빠를 것 같은데, 어떤 방식으로 조인하는게 더 효율적인지 궁금합니다. 데이터가 엄청 많아지는 경우, 1번과 2번 두 쿼리의 실행 속도에서 큰 차이가 날까요? 내부적으로 더 효율적인 방식으로 실행을 할 수 도 있는건가요?
현지원
2024-03-02T06:44:25.136Z
댓글 1
좋아요 0
조회수 221
해결됨
손에 익는 Next.js - 마이그레이션하기
Create React App에서 Next.js로 마이그레이션하기 의 깃허브 소스도 npm i 하면 에러가 발생합니다. $ npm install npm ERR! code ERESOLVE npm ERR! ERESOLVE could not resolve npm ERR! npm ERR! While resolving: react-scripts@5.0.1 npm ERR! Found: typescript@5.3.3 npm ERR! node_modules/typescript npm ERR! typescript@"^5.3.3" from the root project npm ERR! peer typescript@">= 2.7" from fork-ts-checker-webpack-plugin@6.5.3 npm ERR! node_modules/fork-ts-checker-webpack-plugin npm ERR! fork-ts-checker-webpack-plugin@"^6.5.0" from react-dev-utils@12.0.1 npm ERR! node_modules/react-dev-utils npm ERR! react-dev-utils@"^12.0.1" from react-scripts@5.0.1 npm ERR! node_modules/react-scripts npm ERR! react-scripts@"5.0.1" from the root project npm ERR! 1 more (tsutils) npm ERR! npm ERR! Could not resolve dependency: npm ERR! peerOptional typescript@"^3.2.1 || ^4" from react-scripts@5.0.1 npm ERR! node_modules/react-scripts npm ERR! react-scripts@"5.0.1" from the root project npm ERR! npm ERR! Conflicting peer dependency: typescript@4.9.5 npm ERR! node_modules/typescript npm ERR! peerOptional typescript@"^3.2.1 || ^4" from react-scripts@5.0.1 npm ERR! node_modules/react-scripts npm ERR! react-scripts@"5.0.1" from the root project npm ERR! npm ERR! Fix the upstream dependency conflict, or retry npm ERR! this command with --force or --legacy-peer-deps npm ERR! to accept an incorrect (and potentially broken) dependency resolution. npm ERR! npm ERR! npm ERR! For a full report see: npm ERR! C:\Users\Administrator\AppData\Local\npm-cache\_logs\2024-03-02T03_03_34_358Z-eresolve-report.txt 관련한 안내 좀 부탁합니다.
억수
2024-03-02T03:07:08.417Z
댓글 2
좋아요 0
조회수 426
해결됨
손에 익는 Next.js - 마이그레이션하기
vite 로 작성한 경우를 마이그레이션 하는데요. 강의에 따라서 진행하였는데 최종 아래처럼 에러가 발생합니다. Require stack: \node_modules\next\dist\server\dev\next-dev-server.js vite\node_modules\next\dist\server\dev\next-dev-server.js vite\node_modules\next\dist\server\next.js vite\node_modules\next\dist\server\lib\start-server.js package.json 은 아래와 같아요. { "name": "next-migration-02-vite", "private": true, "version": "0.0.0", "type": "module", "scripts": { "dev": "next dev", "build": "next build", "lint": "next lint", "start": "next start" }, "dependencies": { "next": "^14.1.1", "react": "^18.2.0", "react-dom": "^18.2.0" }, "devDependencies": { "@types/node": "20.11.24", "@types/react": "^18.2.56", "@types/react-dom": "^18.2.19", "@typescript-eslint/eslint-plugin": "^7.0.2", "@typescript-eslint/parser": "^7.0.2", "@vitejs/plugin-react": "^4.2.1", "eslint": "^8.56.0", "eslint-plugin-react-hooks": "^4.6.0", "eslint-plugin-react-refresh": "^0.4.5", "typescript": "^5.2.2", "vite": "^5.1.4" } } 관련해서 안내좀 부탁드립니다. 좋은 주말 되세요~
억수
2024-03-02T02:32:36.051Z
댓글 2
좋아요 0
조회수 909
해결됨
자바 ORM 표준 JPA 프로그래밍 - 기본편
안녕하세요. 11:03 경에 "이런 것들 json으로 말아넣자"라고 말씀하신 부분이요. 조금 더 풀어서 설명해주실 수 있을까요? 당장 이 프로세스가 필요해서는 아니지만 개념적으로라도 알고 있으려고 합니다! "이런 데이터"에 관해서도 조금 더 풀어서 말씀해주실 수 있을까요? 어떤 성격의 데이터들은 테이블이 아니라 json으로 관리할 수 있다는 것인지 조금 더 구체적으로 알고 싶습니다. 감사합니다.
literate_t
2024-03-01T15:38:00.882Z
댓글 2
좋아요 3
조회수 347
미해결
스프링과 JPA 기반 웹 애플리케이션 개발
이메일 인증요청시간을 1시간으로 잡으셨는데 인증할때마다 마지막인증요청 시간을 업데이트 쳐줘야 하는거 아닌가요 ??? (/resend-confirm-email) 이 메서드를 실행 정상 했을때 마다
java spring spring-boot jpa thymeleaf
H K
2024-03-01T12:14:37.692Z
댓글 2
좋아요 0
조회수 378
미해결
[백문이불여일타] 데이터 분석을 위한 중급 SQL
SELECT CASE WHEN A=B AND B=C THEN 'Equilateral' ELSE 'OTHER' END, A,B,C FROM Triangles 이 구문을 SELECT CASE WHEN A=B AND B=C THEN 'Equilateral' ELSE 'OTHER' END, * FROM Triangles 이전 수업에 알려주신 방법처럼 아스타로 이렇게 쓸 수는 없는걸까요!? 전체 데이터를 뽑아와서 비교하고 싶은데 오류가 뜹니다..!
위다혜
2024-03-01T07:12:55.096Z
댓글 1
좋아요 0
조회수 217
미해결
package bufferTest; import java.util.Scanner; public class BufferTest { public static void main(String[] args) { Scanner scan = new Scanner(System.in); String a = scan.next(); String[] arr1 = {"a"}; System.out.println(System.identityHashCode(a)); System.out.println(System.identityHashCode(arr1[0])); } } 왜 arr[0]과 a의 주소 값이 다른가요..??? 답변 주시면 정말 감사하겠습니다!
김민식
2024-02-29T16:15:07.888Z
댓글 1
좋아요 0
조회수 139
해결됨
실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
api란 개념을 잘 모르겠습니다. 그냥 controller에서 mapping하는 것이 api 인가요? 1편에서 만들었던 @GetMapping("/members/new") public String createForm(Model model) {...} 이런 코드들도 각각 api라 하는 것인가요?
에어
2024-02-29T01:28:13.282Z
댓글 1
좋아요 1
조회수 408
미해결
[백문이불여일타] 데이터 분석을 위한 고급 SQL 문제풀이
set 3의 3번 문제에서, 데이터의 개수가 짝수일 때 다음 쿼리문을 알려주셨는데요. SELECT ROUND(AVG(LAT_N), 4) FROM ( SELECT ROW_NUMBER() OVER (ORDER BY LAT_N) - 1 AS row_num , COUNT(*) OVER () - 1 AS row_total , LAT_N FROM Station ) t WHERE row_num IN (FLOOR(row_total / 2), CEIL(row_total / 2)) 이때, 왜 ROW_NUMBER()와 COUNT(*) 에서 각각 1을 빼는건가요? 각각 1을 빼지 않아도 정답이 잘 출력되는데, 혹시 이 문제에서는 드러나지 않는 예외상황이 있는걸까요?
95980
2024-02-28T13:24:33.078Z
댓글 2
좋아요 0
조회수 294
미해결
따라하며 배우는 노드, 리액트 시리즈 - 기본 강의
이제는 promise chain이나 async await 문으로 콜백함수를 처리해야 하는 것으로 보입니다. 다음과 같이 코드를 수정해서 돌아가는 것을 확인했으니 활용하시면 좋을 것 같아요! // index.js app.post('/login', (req, res) => { // 이메일이 DB에 있는지 확인 User.findOne({ email: req.body.email }) .then (async (user) => { if (!user) { throw new Error("제공된 이메일에 해당하는 유저가 없습니다.") } // 비밀번호가 일치하는지 확인 const isMatch = await user.comparePassword(req.body.password); return { isMatch, user }; }) .then(({ isMatch, user }) => { console.log(isMatch); if (!isMatch) { throw new Error("비밀번호가 틀렸습니다.") } // 로그인 완료 return user.generateToken(); }) .then ((user) => { // 토큰 저장 (쿠키, localstorage ...) return res.cookie("x_auth", user.token) .status(200) .json({ loginSuccess: true, userId: user._id }); }) .catch ((err) => { console.log(err); return res.status(400).json({ loginSuccess: false, message: err.message }); }) }); // User.js userSchema.pre('save', function( next ) { // 비밀번호 암호화 const user = this; if(user.isModified('password')) { bcrypt.genSalt(10, function(err, salt) { if (err) { return next(err); } bcrypt.hash(user.password, salt, function(err, hash) { if (err) { return next(err); } user.password = hash; return next(); }); }); } else { return next(); } }); userSchema.methods.comparePassword = function(plainPassword) { // 암호화된 비밀번호와 같은지 체크 const user = this; return bcrypt.compare(plainPassword, this.password) } userSchema.methods.generateToken = function() { // jwt 생성 user = this; const token = jwt.sign(user._id.toJSON(), 'secretToken'); user.token = token; return user.save(); }
ywk0205
2024-02-28T13:07:46.300Z
댓글 2
좋아요 4
조회수 699
미해결
실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
지난 강의 JPA 활용 1편을 듣고왔는데요, API를 개발하는 이유와 의미가 무엇인가요?
2024-02-28T06:04:36.509Z
댓글 1
좋아요 0
조회수 281
미해결
[백문이불여일타] 데이터 분석을 위한 고급 SQL
서브쿼리 > 1번째 강의에 나오는 강의 중 8분대 쯤에 나오는 이야기인데요, 일주일동안의 평균을 구할 때, 특정 날짜에 데이터가 없어서 나누기 7이 아닌 6이 될 경우를 주의하라고 해주셨거든요. 그럼 특정 날짜에 데이터가 없어서 이를 보완해야할 경우, 해결방법이 어떻게 되는지 간단하게 설명해주실 수 있을까요?
HYUNCHAE JO
2024-02-28T04:04:16.477Z
댓글 1
좋아요 0
조회수 282
해결됨
비전공자의 전공자 따라잡기 - 데이터베이스,SQL
안녕하세요~ 타임어택 2주차 수강하고 있습니다~ "섹션2의 처음 만나는 DDL" 강의 9분 32초에서 employee 테이블에서 외래키 생성에 필요한 role_id 컬럼 만드실 때 NOT NULL을 체크하셨는데요~ 그 다음 강의(on update, on delete)에서는 이게 해제되었더라구요. 외래키 설정에서 On Delete - SET NULL을 하면 NOT NULL 속성이 문제가 되는데 강의에서는 그 설명이 없어 보이더라구요. 아마 강의 편집 과정에서 NOT NULL을 적용하면 중간에 서로 모순되어 에러가 나는 부분을 덜어낸 것으로 보여집니다. SET NULL을 하면 employee.role_id의 값만 지워지는 점을 강의시간 때 설명 해주셨기 때문에 NOT NULL을 선택하면 안되는 게 맞을거라 생각합니다. 제가 맞게 알고 있는지 궁금해서 질문 드립니다. 감사합니다!
sql mysql dbms/rdbms mysql-workbench
Yonggu Choi
2024-02-27T06:44:03.264Z
댓글 1
좋아요 1
조회수 412
미해결
다양한 사례로 익히는 SQL 데이터 분석
안녕하세요. 강의 잘 듣고 있는데요 with 절이 계속 사용하고 있는것 같은데 with 절 말고 서브쿼리로 작성해도 상관없나요? 그리고 상관없다면 with절하고 서브쿼리 중에서 어떤 쿼리가 더 성능이 좋은 쿼리인가요?
sql postgresql dbms/rdbms 퍼포먼스-마케팅 데이터-엔지니어링
kopti
2024-02-27T02:30:09.574Z
댓글 1
좋아요 0
조회수 264
미해결
데이터 분석 SQL Fundamentals
안녕하세요 '실습용 스키마 설치 이슈 시 적용하세요'라는 강의편에 맥북에서 create schema nw; 이렇게 DBeaver에서 실행을 하면 아래와 같은 에라가 뜨네요 ㅠ SQL Error [42501]: ERROR: permission denied for database postgres 검색을 통해 해결을 해 보려고 했는데 잘 안되서 질문을 남깁니다.
심동희
2024-02-26T15:40:43.310Z
댓글 2
좋아요 0
조회수 1271
미해결
[리뉴얼] 처음하는 SQL과 데이터베이스(MySQL) 부트캠프 [입문부터 활용까지]
https://davelee-fun.github.io/ 이 사이트 크롤링을 1번 사진처럼 4파트로 분리해서 크롤링후 2번 사진 처럼 만들어놓은 DB 테이블에 insert하는 코드를 작성해보았는데, (3번사진) 크롤링부분에서 잘못된건지 코드가 잘 돌아가지 않습니다. 혹시 어느부분이 잘못됬는지 알수있을까요? import requests from bs4 import BeautifulSoup import re pg=1 if pg==1: #1페이지 크롤링시 res = requests.get('https://davelee-fun.github.io/') #웹사이트 get request 1페이지 soup = BeautifulSoup(res.content, 'html.parser') #html 파싱 items = soup.select('div.card h') product_id=17890001 #promary key 임의설정 page_num=pg for item in items: recom_info=item.select_one('a.text-dark') #추천 product_name=item.select_one('h4.card-text') #상품명 provider=item.select_one('a[target="_blank"]') #제공자 -> teddy register_date=item.select_one('span.post-date') #등록일자 -> 05 jun 2020 SQL = """INSERT INTO product_info VALUES('"""+product_id+"""', '""" + str(recom_info.get_text()) + """','""" + str(product_name.get_text()) + """','""" + str(provider.get_text()) + """', '""" + str(register_date.get_text()) + """','""" +page_num+ """'); """ print(SQL) cursor.execute(SQL) 우선 1페이지를 크롤링한 값을 넣어보려고 했습니다.
python sql mysql dbms/rdbms 데이터-엔지니어링
학부연구생준
2024-02-26T12:45:42.066Z
댓글 1
좋아요 0
조회수 280
미해결
개요 로그인 성공 후 인덱스 페이지로 넘어갑니다. 인덱스 페이지에는 "테스트 버튼" 이라는 버튼을 클릭하면, test 로드하는 api 를 호출하도록 했습니다. 그러나 api 요청만 진행되고, 페이지는 바뀌지 않습니다. 개발자도구 메시지에 해당 페이지의 html 코드만 출력됩니다. 참고자료 index.html <!DOCTYPE html> <html lang="ko"> <head> <meta charset="UTF-8"> <title>인덱스 페이지</title> <script src="https://code.jquery.com/jquery-3.7.0.min.js" integrity="sha256-2Pmvv0kuTBOenSvLm6bvfBSSHrUJ+3A7x6P5Ebd07/g=" crossorigin="anonymous"></script> </head> <body> <h1>환영합니다!</h1> <p>성공적으로 로그인하셨습니다.</p> <button id="logoutButton">로그아웃</button> <button id="testButton">테스트 버튼</button> <script> $(document).ready(function() { // 로그아웃 버튼 이벤트 $('#logoutButton').click(function() { // 로컬 스토리지에서 토큰 제거 localStorage.removeItem('accessToken'); // 로그인 페이지로 리다이렉션 window.location.href = '/login'; }); // 테스트 버튼 이벤트 $('#testButton').click(function() { // 로컬 스토리지에서 토큰 가져오기 const token = localStorage.getItem('accessToken'); if (token) { $.ajax({ url: '/api/test', // 요청할 서버의 URL type: 'GET', // HTTP 메서드 beforeSend: function(xhr) { // 요청 헤더에 토큰 추가 xhr.setRequestHeader('Authorization', token); }, success: function(data) { // 요청 성공 시 로직 console.log("테스트 요청 성공:", data); alert("테스트 요청 성공"); }, error: function(xhr, status, error) { // 요청 실패 시 로직 console.error("테스트 요청 실패:", xhr.responseText); alert("테스트 요청 실패"); } }); } else { alert("토큰이 없습니다. 다시 로그인해주세요."); } }); }); </script> </body> </html> 보이는 것처럼 로컬 스토리지에서 토큰을 가져온 후 요청 헤더에 다시 담아서 전송합니다. JwtAuthorizationFilter @Override protected void doFilterInternal(HttpServletRequest req, HttpServletResponse res, FilterChain filterChain) throws ServletException, IOException { // 헤더에서 토큰 추출 log.info("헤더에서 토큰 추출"); String tokenValue = jwtUtil.getJwtFromHeader(req); log.info("토큰 : " + tokenValue); if (StringUtils.hasText(tokenValue)) { // 토큰 유효성 검사 if (!jwtUtil.validateToken(tokenValue)) { log.info("Token Error"); return; } Claims info = jwtUtil.getUserInfoFromToken(tokenValue); try { setAuthentication(info.getSubject()); } catch (Exception e) { log.error(e.getMessage()); return; } } else { log.info("토큰이 없습니다."); } filterChain.doFilter(req, res); } // 인증 처리 public void setAuthentication(String loginId) { log.info("인증 성공"); SecurityContext context = SecurityContextHolder.createEmptyContext(); Authentication authentication = createAuthentication(loginId); context.setAuthentication(authentication); SecurityContextHolder.setContext(context); } // 인증 객체 생성 private Authentication createAuthentication(String loginId) { log.info("인증 객체 생성"); UserDetails userDetails = userDetailsService.loadUserByUsername(loginId); return new UsernamePasswordAuthenticationToken(userDetails, null, userDetails.getAuthorities()); } 이렇게 JwtAuthorizationFilter 가 있을 때 헤더에서 토큰이 추출되는 거까지 로그에 다 출력되고, 인증 객체까지 생성되는 걸 확인했습니다. Console 2024-02-26T14:31:24.699+09:00 INFO 59767 --- [nio-8081-exec-3] JWT 검증 및 인가 : 토큰 : eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ0ZXN0NiIsImF1dGgiOiJPV05FUiIsImlhdCI6MTcwODkyNDY0NiwiZXhwIjoxNzA4OTI4MjQ2fQ.TLjHCc1_ZtTbzGb-2c0ueLmxgCyxQf1rUQs4DkqMv_c 2024-02-26T14:31:24.706+09:00 INFO 59767 --- [nio-8081-exec-3] JWT 검증 및 인가 : 인증 성공 2024-02-26T14:31:24.706+09:00 INFO 59767 --- [nio-8081-exec-3] JWT 검증 및 인가 : 인증 객체 생성 Hibernate: /* <criteria> */ select u1_0.id, u1_0.email, u1_0.login_id, u1_0.password, u1_0.role from users u1_0 where u1_0.login_id=? 2024-02-26T14:31:24.722+09:00 INFO 59767 --- [nio-8081-exec-3] TestController : test controller 로그를 보면 test controller 를 호출하는 거까지 확인할 수 있었습니다. 그러나 페이지는 로드되지 않고, 메시지에 html 코드만 출력이 됩니다. 자료 Test.html <!DOCTYPE html> <html lang="ko"> <head> <meta charset="UTF-8"> <script src="https://code.jquery.com/jquery-3.7.0.min.js" integrity="sha256-2Pmvv0kuTBOenSvLm6bvfBSSHrUJ+3A7x6P5Ebd07/g=" crossorigin="anonymous"></script> <title>Test Page</title> </head> <body> <h1>This is a test page.</h1> </body> </html> 정리 로그인 성공 후 인덱스 페이지로 넘어감 해당 인덱스 페이지에서 test 페이지로 넘어가고자 함 인가 필터 모두 거치고, 토큰 값이 전달되는 거까지 확인했음 test controller 까지 요청되지만, 정작 페이지는 불러와지지 않음 대체 제가 뭘 놓친 걸까요 ㅠㅠㅠㅠ 이거때문에 며칠 동안 머리 싸매고 있습니다,,, 제발 도와주세요,,,
java spring jwt secuity javascript mvc
오세창
2024-02-26T05:42:48.470Z
댓글 1
좋아요 0
조회수 587
미해결
[백문이불여일타] 데이터 분석을 위한 SQL 실전편 (무료 미니 코스)
모드 회원가입이 안되는데 혹 어떻게 하는건지 아시는분?
하승현
2024-02-26T05:21:06.018Z
댓글 1
좋아요 0
조회수 348
미해결
자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
스프링부트 버전이 2.7x 버전은 없는데 무엇으로 선택해야 하나요?
java spring aws mysql spring-boot jpa
2024-02-25T14:18:07.388Z
댓글 1
좋아요 1
조회수 351