묻고 답해요
143만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨Real MySQL 시즌 1 - Part 2
에피소드 21에 궁금한 점이 있어 질문드립니다.
강의 마지막 주의사항 중 아래의 설명이 있었는데요."참조하는 테이블들의 데이터에는 읽기 잠금(Shared Lock) 이 발생하므로, 잠금경합이 발생할 수 있음" 이 부분에 대한 추가적인 궁금증이 있습니다.만약 Product 테이블이 100만건이 있고 Order 테이블을 업데이트 하기 위해 Product 테이블과 JOIN 을 거는 상황이라고 했을 때 업데이트 대상이 되는 Order 테이블에 X 락이 걸리는 것 뿐만 아니라, Product 테이블에도 S락이 걸리므로 다른 트랜잭션에서 Product 테이블에 UPDATE 를 하려고 했을때 lock wait timeout 같은 문제가 발생할수있다는 것일까요?
-
해결됨입문자를 위한 Spring Boot with Kotlin - 나만의 포트폴리오 사이트 만들기
프로젝트 환경 변수 설정 에서 복사 붙여넣기 application-docker.yml
application-default.ymlapplication-docker.yml프로젝트 환경 변수 설정 에서 복사 붙여넣기 할때 들여쓰기 적용이 안되어. 일일이 적용했습니다.-windows-그리고 아래와 같이 추가 설명을 달아주셨으면 좋겠네요spring: # Spring 프레임워크 설정 jpa: # JPA (Java Persistence API) 설정 database: h2 # 사용할 데이터베이스로 H2를 지정 open-in-view: false # "Open EntityManager in View" 패턴 비활성화 show-sql: true # SQL 쿼리를 콘솔에 출력 hibernate: # Hibernate 관련 설정 ddl-auto: create # 데이터베이스 스키마를 자동으로 생성 properties: # 추가적인 Hibernate 속성 설정 hibernate: format_sql: false # SQL 쿼리를 포맷하지 않음 # default_batch_fetch_size: 10 # 주석 처리된 설정, 배치로 가져올 때 한 번에 가져올 개수 (사용되지 않음) datasource: # 데이터 소스 설정 url: jdbc:h2:mem:portfolio # H2 메모리 데이터베이스의 JDBC URL username: sa # 데이터베이스 사용자 이름 password: # 데이터베이스 비밀번호 (빈 값) driver-class-name: org.h2.Driver # H2 데이터베이스 드라이버 클래스 이름 h2: # H2 데이터베이스 관련 추가 설정 console: # H2 콘솔 설정 enabled: true # H2 콘솔을 활성화 path: /h2-console # H2 콘솔에 접근할 경로
-
해결됨자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
mysql connector ? 오류 ㅠㅠ
communications link failure 오류가 나는데 mysql 재설치를 몇 번해도 연결이 안되네요 어떻게 해결해야할까요..?
-
해결됨입문자를 위한 Spring Boot with Kotlin - 나만의 포트폴리오 사이트 만들기
프로그램 수정해서 다시 docker에 이미지를 올릴땐 내용처럼 이렇게 하면되나요??
안녕하세요. 이젠 기본적인 spring 기능은 이 강의로 많이 알게 되었습니다.감사합니다. 빨리 강좌 하나 더 내주세요.... 코틀린 & spring 강좌가 너무 없어서 강의 찾아 다니느것도 일이네요 ...====================================Docker로 프로젝트 빌드 하기 . 강좌중에 만약 프로그램 수정하면 아래 처럼 하면 되나요?step 1) Gradle에서 jar 파일을 다시 만든다. ...참고 ) 빌드중에 에러가 없어야함... test 코드에서도 에러가 없어야함step2) docker-compose.yml 파일 새로고침 한다.step3) Dockerfile을 재 실행한다.step4) 도커가 잘 올라갔는지 확인한다.프로그램 수정후엔 위 4개의 절차대로 진행하면 되나요??이걸로 회사의 개인 서버를 가지고 있는곳에 도커 깔고 동작 하면 서버의 기능으로 완벽할꺼 같은데 ....그리고 구글 클라우드에도 프로그램 수정하면 도커에서 push up hub 를 누르고 docker-compose.yml 누르면 되나요??버전 수정 안해줘도 되나요?추가 질문) 이건 뭐 제가 잘 모르고 좀 시간을 두고 확인해봐야 하는거라서 질문드리기 어렵지만 그래도 아시면 답변 부탁 드려용 ^^)))테스트 코드 작성중 아래처럼 DSL로 작성하는 경우를 봤는데 꽤나 직관적이고 편리하게 되어 있더라구요...아래 같은 테스트 코드 많이 사용하나요??비동기 방식에서만 사용하나요??테스트 코드 작성하는 방법이 꽤나 많아서 이걸 다 익혀야하는 생기네요 ㅠ.ㅠ감사합니다. 다음 강의 꼭 내주세요. ^^
-
해결됨Real MySQL 시즌 1 - Part 1
페이징 쿼리 관련해서 질문드립니다.
현재 spring data jpa query + paging 을 사용하고 있습니다. fun findAllFollowing(followerId: Long, pageable: Pageable): List<SnapProfile> = from(snapProfileFollow) .join(snapProfile).on(snapProfile.id.eq(snapProfileFollow.following.id)) .where(snapProfileFollow.follower.id.eq(followerId)) .orderBy(*snapProfile.orderSpecifiers()) .offset(pageable.offset) .limit(pageable.pageSize.toLong()) .fetch() .map { it.following.toModel() }이것을 데이터 개수 기반으로 변경하고 싶은데 혹시 이럴 때 변경해보신 경험이 있으실까요?
-
미해결[켠김에 출시까지] 유니티 캐주얼 모바일 MMORPG (M2)
질문있습니다.
안녕하세요 M2 1주차 강의(섹션 1. 클라/서버 프레임워크와 이동 동기화)를 들어봤는데 서버와 클라 강의가 너무 문외한이라 환불하고 M1강의를 살려고 했는데 이미 자료를 다운받아서 환불이 불가능 하더라고요.질문1. 2주차부터는 전투, AI, 자동사냥등 유니티 게임 기능구현이 주된 내용같은데 2주차부터 제대로 들으면 될까요? 질문2. 1주차 내용이 설명이 없어 이해가 안되는데 이에 맞는 강의추천이나 문서 알려주실 수 있나요?
-
해결됨[켠김에 출시까지] 유니티 캐주얼 모바일 MMORPG (M2)
패킷모아보내기 관련 해서 질문 있습니다.
안녕하세요 루키스님^^루키스님 덕분에 고퀄 강의를 또 듣게 되어 정말 무궁한 영광입니다.프로젝트가 어떻게 완성되어 갈지 흥미진진하고 너무 기대됩니다. ㅎㅎ들뜬 마음을 부여잡고 복습을 하다가 문득 라이브에서는 캐치를 못한 부분이 있어서 바쁘신 와중에 질문을 올리게 되었습니다ㅜ다름이 아니고 기존 강의에서는 서버 프로젝트에서 패킷모아보내기 관련 코드가 있던 것으로 기억합니다.이번에는 해당 부분이 보이질 않는 것을 보니 일부러 해당 부분을 빼놓으신 것 같은데 혹시 이번 프로젝트에서는 패킷 모아보내기 작업은 따로 안하실 예정이신가요?
-
해결됨대용랑 채팅 TPS에 대한 stateful 서비스 구축하기
채팅 클라이언트는 누구와 연결되는지
안녕하세요 강사님복습을 하다가 궁금한 점이 3가지 정도 생겨 질문드립니다.1) 채팅 유저가 최초 접속을 하면컨트롤 서버에 접속가용 가능한 채팅 서버의 주소를 응답받음해당 채팅 서버와 소켓 연결이런 흐름으로 이해했는데 맞을까요?프론트 단 코드에서는 채팅 서버와 직접 소켓 연결하는 코드만 있어서 질문드립니다. 2) 사용자가 채팅 시, 채팅 서버가 도중에 다운되면 사용자는 컨트롤 서버에 재연결 시도하여 가용가능한 채팅 서버를 재할당 받는 것인가요?3) 컨트롤 서버에 api 주소 중 /server-list 라는 api 가 있던데 해당 API 는 누가 호출하는 것인가요? 가용가능한 서버 리스트를 내려주는 API 로 이해했는데, 그럼 채팅 사용자가 해당 API 를 직접 찌르는 걸까요?
-
미해결[켠김에 출시까지] 유니티 캐주얼 모바일 MMORPG (M2)
비주얼 스튜디오 솔루션 탐색기 구조 짜는법
완전 초보입니다.압축 파일 해제해놓고 강의에서 설명하시는거 따라가려고 솔루션 탐색기에 나와있는 모습 그대로 만들려고 하는데 평소에 유니티랑 rider만 사용해왔던 터라 어떻게 해야하는지 잘 모르겠습니다. 글로 설명된 내용이라도 좋으니 알려주시면 안될까요? ㅠㅠ
-
미해결[켠김에 출시까지] 유니티 캐주얼 모바일 MMORPG (M2)
완전초보 질문 죄송합니다 ㅠ
C#게임서버 part4 도 보고 유니티연동 part7도 보고 이것저것 띄엄띄엄 보느라 제대로 정리도 안되고 그러고 있는데요 M2 이번에 수강신청후 코드다운받아서 비주얼 2019로 켰는데위와같이 오류가 뜹니다...이걸 어떻게 해결할수있나요?잘 안보이는데 현재.NET SDK에서는 .NET 8.0을 대상으로 하는것을 지원하지 않습니다 .NET 6.0 이하를 대상으로 하거나 .NET8.0을 지원하는 .NET SDK버전을 사용하세요 이렇게 프로젝트들 마다 뜨네요...
-
해결됨Real MySQL 시즌 1 - Part 1
(1,2강) char, varchar, text 관련 질문
utf8mb4 char에서도 varchar와 마찬가지로 변경되는 문자열이 할당된 길이를 넘어버리면 레코드를 다른 공간으로 옮겨야하는 것이겠죠?그렇다면 varchar와 마찬가지로 길이가 자주 변경되는 경우 사용하면 안되겠네요. 맞나요?varchar가 char과 달리 공간을 미리 예약하지 않는다면, varchar(50)에서 50은 무슨 의미인가요?2강에 나오는 메모리 버퍼 크기에만 영향을 주는 것인가요?varchar 타입의 메모리 버퍼 공간은 어떤식으로 사용되는 것인가요?예를들어, 메모리 버퍼 공간을 테이블 1개당 1개 만들어서 재활용한다고 하면 varchar(30)는 겨우 (latin기준) 30바이트, varchar(255)는 겨우 255바이트를 사용하니까 메모리 공간 차이가 별로 없을 것 같습니다.그래서 테이블 1개당 1개만 사용하는 것은 아닐 것 같은데, 가져오는(예상되는?) row갯수만큼 할당해두는 것이려나요?(text 디폴트 관련) 표현식이라는 용어를 처음 들어봤는데요, 표현식이 무엇인가요? 구글에 나이브하게 검색하면 정규표현식만 나오네요.https://dev.mysql.com/doc/refman/8.4/en/expressions.html 이 문서의 expression을 의미하는 것일까요?'abc'와 ('abc') 사이에 어떤 차이가 있는지 궁금합니다.text는 어떻게 저장되기 때문에 row사이즈 제한에 포함이 안되나요?혹시 언제나 오프페이지로 저장되는건가요?
-
해결됨Real MySQL 시즌 1 - Part 1
커버링 인덱스 질문 드립니다
안녕하세요! 페이징 쿼리 관련해서 질문 좀 드립니다방명록(사진) 목록을 조회하는 페이징 쿼리에서 테이블에 soft delete(deleted_at), 공개 여부(is_private) column이 있어서 post.deleted_at is null and post.is_private is false 조건이 자주 들어가는데 커버링 인덱스를 위해 해당 column을 인덱스에 추가하는 것은 어떻게 생각하시나요?
-
미해결[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지
트랜잭션 기능을 서비스 함수로 구현하는 방법
안녕하세요 스스로 해보기를 위해 강의 후반부에 있는 sequelize 에서 제공하는 transaction 기능을 추가하여 낙찰한 경우에 t수행하는 상품에 낙찰자 ID를 넣고 낙찰자의 금액을 까는 함수를 서비스 함수로 처리해서 하려고 하는데 상품등록을 하는 단계에서 다음과 같은 에러가 발생합니다 .어떻게 하면 될까요?관련된 코드 부분을 같이 올립니다sequelize trasnation 을 적용해서 auctionedOff 함수를 다음과 같이 생성하였습니다services/index.jsconst sequelize = require('sequelize'); const { Auction , Good, User}= require('../models'); exports.auctionedOff = async ( good ) => { const t = await sequelize.transaction(); try { const success = await Auction.findOne({ where: { GoodId: good.id }, order: [['bid', 'DESC']], transaction : t, }); if (!success) { return; } await good.setSold(success.UserId); //낙찰 await User.update({ money: sequelize.literal(`money - ${success.bid}`), }, { where: { id: success.UserId }, transaction: t, }); await t.commit(); } catch (error) { await t.rollback(); } };그리고 이 함수를 다음과 같이 contollers/index.js 파일에서 아래 코드 처럼 불러서 실행 하고자 했습니다const { Op } = require('sequelize'); const { Good, Auction, User, sequelize } = require('../models'); const auctionedOff = require('../services'); const schedule = require('node-schedule'); exports.createGood = async(req, res, next) => { try { const { name, price } = req.body; const good = await Good.create({ OwnerId: req.user.id, name, img: req.file.filename, price, }); const end = new Date(); end.setDate(end.getDate() + 1); // 하루 뒤 const job = schedule.scheduleJob(end, auctionedOff(good)); job.on('error', (err) => { console.error('스케줄링 에러', err); }); job.on('success', () => { console.log(`${good.id} 스케줄링 성공`); }); res.redirect('/'); } catch (error) { console.error(error); next(error); } };
-
해결됨비전공자의 전공자 따라잡기 - 데이터베이스,SQL
설치 오류 질문드립니다.
남겨주신 링크로 다운해봤고 직접 들어가서도 다운해봤는데 저 상태에서 그냥 꺼지고 인스톨러가 실행이 안되는데 뭐가 문제일까요? 도움주시면 감사하겠습니다.
-
해결됨[2024 리뉴얼] 처음하는 SQL과 데이터베이스(MySQL) 부트캠프 [입문부터 활용까지]
MySQL에서는 숫자 타입 컬럼에서 '', ""를 함께 사용해도 되나요?
안녕하세요,실전 SQL 데이터분석 연습: 집계 함수 익히고 실제 DB로 연습하기 (업데이트) 13:00~ 부분의 연습문제8 관련하여 궁금한 사항이 있어서 문의 드립니다. 문제는 영화 렌탈 테이블(rental)에서 inventory_id가 367이고, staff_id가 1인 로우(Row) 전체 출력하기 입니다. Rental 테이블의 inventory_id 컬럼은 타입이 mediumint, staff_id는 tinyint 인 것 같습니다.그런데 정수 타입의 컬럼인데 Where 조건 절에서 ''를 써도 동일하게 결과값이 조회가 되는 것 같더라구요.제가 잘못 알고 있을 수도 있지만 정수와 같은 숫자 타입의 경우 값을 '' 혹은 "" 없이 입력하고,Str 같은 문자의 경우 '', "" 를 값에 함께 입력해야 문자타입으로 인식하는 것 같은데혹시 MySQL에서는 컬럼타입에 있어서 이러한 구분 없이 사용이 되는 것일까요? 따옴표 ('') 없이 조건 값을 입력해서 조회했을 경우따옴표를 함께 조건에 입력해서 조회했을 경우감사합니다.
-
미해결[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지
경매 진행 메인 화면에서 오류 발생
경매 코드를 작성한 후 동작을 시켰을 때 메인 화면에 아래 그림과 같은 에러가 발생 하였습니다에러 발생 부분의 코드는 controllers/index.js 파일 부분인데 특별한 오류 점을 찾을 수가 없어 (작성한 파일들은 guithub 에 올려주신 파일들과 비교할 때 틀린 점을 발견하지 못함) 강사님께 문제 해결을 위해 질문 드립니다 해당 코드 부분try { const yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); //어제시간 const goods = await Good.findAll( { where: { SoldId: null, createdAt: { [Op.gte] : yesterday} }, }); res.render ('main', { title: 'NodeAuction', goods, });에러 로그 내용:Error at Query.run (D:\Javascript_Work\node_works\node_js_3\skyc_work\node_auction\node_modules\sequelize\lib\dialects\mysql\query.js:52:25) at D:\Javascript_Work\node_works\node_js_3\skyc_work\node_auction\node_modules\sequelize\lib\sequelize.js:315:28 at process.processTicksAndRejections (node:internal/process/task_queues:95:5) at async MySQLQueryInterface.select (D:\Javascript_Work\node_works\node_js_3\skyc_work\node_auction\node_modules\sequelize\lib\dialects\abstract\query-interface.js:407:12) at async Good.findAll (D:\Javascript_Work\node_works\node_js_3\skyc_work\node_auction\node_modules\sequelize\lib\model.js:1140:21) at async exports.renderMain (D:\Javascript_Work\node_works\node_js_3\skyc_work\node_auction\controllers\index.js:7:19) { name: 'SequelizeDatabaseError', parent: Error: Unknown column 'Good.SoldId' in 'where clause' at Packet.asError (D:\Javascript_Work\node_works\node_js_3\skyc_work\node_auction\node_modules\mysql2\lib\packets\packet.js:728:17) at Query.execute (D:\Javascript_Work\node_works\node_js_3\skyc_work\node_auction\node_modules\mysql2\lib\commands\command.js:29:26) at Connection.handlePacket (D:\Javascript_Work\node_works\node_js_3\skyc_work\node_auction\node_modules\mysql2\lib\connection.js:481:34) at PacketParser.onPacket (D:\Javascript_Work\node_works\node_js_3\skyc_work\node_auction\node_modules\mysql2\lib\connection.js:97:12) at PacketParser.executeStart (D:\Javascript_Work\node_works\node_js_3\skyc_work\node_auction\node_modules\mysql2\lib\packet_parser.js:75:16) at Socket.<anonymous> (D:\Javascript_Work\node_works\node_js_3\skyc_work\node_auction\node_modules\mysql2\lib\connection.js:104:25) at Socket.emit (node:events:518:28) at addChunk (node:internal/streams/readable:559:12) at readableAddChunkPushByteMode (node:internal/streams/readable:510:3) at Readable.push (node:internal/streams/readable:390:5) { code: 'ER_BAD_FIELD_ERROR', errno: 1054, sqlState: '42S22', sqlMessage: "Unknown column 'Good.SoldId' in 'where clause'", sql: "SELECT `id`, `name`, `img`, `price`, `createdAt`, `updatedAt`, `deletedAt` FROM `goods` AS `Good` WHERE (`Good`.`deletedAt` IS NULL AND (`Good`.`SoldId` IS NULL AND `Good`.`createdAt` >= '2024-07-02 01:58:59'));", parameters: undefined }, original: Error: Unknown column 'Good.SoldId' in 'where clause' at Packet.asError (D:\Javascript_Work\node_works\node_js_3\skyc_work\node_auction\node_modules\mysql2\lib\packets\packet.js:728:17) at Query.execute (D:\Javascript_Work\node_works\node_js_3\skyc_work\node_auction\node_modules\mysql2\lib\commands\command.js:29:26) at Connection.handlePacket (D:\Javascript_Work\node_works\node_js_3\skyc_work\node_auction\node_modules\mysql2\lib\connection.js:481:34) at PacketParser.onPacket (D:\Javascript_Work\node_works\node_js_3\skyc_work\node_auction\node_modules\mysql2\lib\connection.js:97:12) at PacketParser.executeStart (D:\Javascript_Work\node_works\node_js_3\skyc_work\node_auction\node_modules\mysql2\lib\packet_parser.js:75:16) at Socket.<anonymous> (D:\Javascript_Work\node_works\node_js_3\skyc_work\node_auction\node_modules\mysql2\lib\connection.js:104:25) at Socket.emit (node:events:518:28) at addChunk (node:internal/streams/readable:559:12) at readableAddChunkPushByteMode (node:internal/streams/readable:510:3) at Readable.push (node:internal/streams/readable:390:5) { code: 'ER_BAD_FIELD_ERROR', errno: 1054, sqlState: '42S22', sqlMessage: "Unknown column 'Good.SoldId' in 'where clause'", sql: "SELECT `id`, `name`, `img`, `price`, `createdAt`, `updatedAt`, `deletedAt` FROM `goods` AS `Good` WHERE (`Good`.`deletedAt` IS NULL AND (`Good`.`SoldId` IS NULL AND `Good`.`createdAt` >= '2024-07-02 01:58:59'));", parameters: undefined }, sql: "SELECT `id`, `name`, `img`, `price`, `createdAt`, `updatedAt`, `deletedAt` FROM `goods` AS `Good` WHERE (`Good`.`deletedAt` IS NULL AND (`Good`.`SoldId` IS NULL AND `Good`.`createdAt` >= '2024-07-02 01:58:59'));", parameters: {} }
-
해결됨Real MySQL 시즌 1 - Part 1
prepardStatement 관련 질문 드립니다
안녕하세요.강의 내용 중에"커넥션 풀을 사용하기 때문에 Parse-tree 를 캐시하고 재활용하는 부분이 매우 비효율적으로 바뀔 가능성이 높다"라고 언급하신 부분이 있는데 이 부분이 잘 이해가 안되서 질문드리고 싶습니다. 히카리같은 커넥션 풀을 사용하면 커넥션이 닫히지 않고 계속 재활용하게 되서 이미 캐시된 Parse-tree를 재활용 할 수 있기 때문에 오히려 이점이 있는 것이 아닌가 단순하게 생각이 되는데요, 예를 들어 1번 커넥션에서 A쿼리 패턴으로 PreparedStatement 객체를 생성하여 mysql 서버에 캐시가 되었다면, 다시 동일한 1번 커넥션을 사용하여 A쿼리 패턴을 쓰게 된다면 이미 캐시된 Parse-tree를 재활용하는 것이 아닐까? 이렇게 생각했거든요.어떤 점에서 비효율적으로 동작할 가능성이 있다는 것인지 궁금합니다. 바쁘신데 읽어주셔서 감사합니다.
-
미해결[2024 리뉴얼] 처음하는 SQL과 데이터베이스(MySQL) 부트캠프 [입문부터 활용까지]
DCL 강의 파트 CLI 입력 창에서 잘못 입력 시 취소하는 방법
안녕하세요,수업을 들으면서 간혹 타자를 잘못 치게 되는 경우가 있는데이럴때 입력 창에서 어떻게 뒤로 가기를 하거나 빠져나갈 수 있는 방법이 있을까요? 예를들어 제가 exit을 입력해야 하는데 잘못하여 'by'로 잘못 입력 후 엔터를 치니화살표가 뜨면서 계속 해당 칸에서만 입력이 가능합니다.이런 경우 어떻게 원래 입력위치로 돌아가서 'exit'으로 입력을 할 수 있을까요?현재로서는 방법을 알지 못하여 창을 아예 껐다가 모든 명령어를 다시 입력 후 재진행하고 있으나혹시 이와 같은 상황에서 명령어로 수정이 가능할 지 궁금하여 문의드립니다. 감사합니다.
-
해결됨대용랑 채팅 TPS에 대한 stateful 서비스 구축하기
코드 공유
안녕하세요 강사님,지금 막 따라가고 있는 수강생들 중 한명입니다. 저는 1편은 듣지 않고 2편 부터 따라가고 있습니다. 혹시 실례가 안된다면 "처음 뵙는 분들! 이전 강의에 대한 소스코드를 간단하게 알려드릴게요"에서 나오는 코드를 파일 형태로 공유 해주실수 있을까요? 아무래도 다음에 존재하는 강의를 보다 더 수월하게 이해하고 실습하기 위해 필요할 듯 싶습니다. 감사합니다
-
해결됨입문자를 위한 Spring Boot with Kotlin - 나만의 포트폴리오 사이트 만들기
안녕하세요 스프링 시큐리티 로그인 개발 질문 드려용 ^^
안녕하세요.강의 내용중에 궁금한게 있어서 질문 드립니다.로그인 폼을 거치지 않고 POST body를 전달해서 바로 로그인 해보면 어떨까 해서 시도 했는데 잘 되지 않네요 ...fun filterChain(httpSecurity: HttpSecurity): SecurityFilterChain { return httpSecurity .authorizeHttpRequests { authorizeHttpRequests -> authorizeHttpRequests .requestMatchers(AntPathRequestMatcher("/admin/**")).authenticated() .anyRequest().permitAll() }.csrf {csrf -> csrf.disable() }.headers { headers -> headers.addHeaderWriter(XFrameOptionsHeaderWriter(XFrameOptionsHeaderWriter.XFrameOptionsMode.SAMEORIGIN)) }.formLogin { formLogin -> formLogin.defaultSuccessUrl("/h2-console") // 추가 ////////////////////////////////////////// formLogin.loginProcessingUrl("/login") formLogin.usernameParameter("email") formLogin.passwordParameter("password") }.logout { logout-> logout.logoutRequestMatcher(AntPathRequestMatcher("/admin/logout")) .logoutSuccessUrl("/") }.build() }강의 내용중에 제가 주석으로 추가 내용 달았어요...그리고 Entity는 아래처럼 구성했습니다.class Account(email: String, pw: String): BaseEntity(), UserDetails {........@field:NotNull @Column(unique = true) var email: String = email @Column(name = "password") var pw: String = pw그래서위에처럼 전달했습니다.그리고 run accountRepository에 디버깅 브레이크를 걸고 Post 메세지를 쐈습니다.그런데 디버깅 걸린건 "" 공백이네요.프론트 엔드에서 시큐리티 로그인페이지를 만들고 아디이 패스워드를 전달해서 제어하려고 시도 했는데 뭔가 문제가 있나봐요...답변 해주지면 감사하겠습니다.@Service class AdminSecurityService( private val accoutRepository: AccountRepository ) : UserDetailsService { override fun loadUserByUsername(email: String): UserDetails { return accoutRepository.findByEmail(email) .orElseThrow{RuntimeException("사용자 정보를 찾을 수없습니다.") } } }=========추가 질문 드려요지금 시큐리티 로그인은 Spring boot 초기화 스타트 한후 유저의 접근을 막는 방화벽 같은 용도로 사용하는건가요??아니면 웹 "react" http://localhost:3000/에서 로그인 폼 게발한후에 로그인 정보(이메일, 패스워드 아이디)를 http://localhost:8080/login 에 POST / GET 방식으로 전달하고 시큐리티에 접근해서 로그인 하는 사용자 로그인 목적으로 사용하는건지 ...이게 intellij IDEA에 웹페이지랑 스프링 부트를 개발해서 강의내용은 이해하는데 프론트 엔드와 백엔드와의 통신으로 본다면 좀 헛깔려요로그인 페이지는 프론트 엔드에서 만드는게 아니라 백엔드에서 만들어야하나... 그럼 프론트엔드에서 백엔드에 접근해 시큐리티 로그인을 한후 로그인 성공 했다는 메세지를 어떻게 프론트 엔드에 전달해야되는지... 그냥 관리자 페이지(사용자 목록 리스트나 사용자 로그인 접근 정보를 보는 용도)를 사용할때 시큐리티 로그인을 사용하고 user로그인(작성한 글, 좋아요 같은 카운트, 로그인한 전화번호, 사진 정보)은 따로 user 로그인하는 Api Controller에 접근해서 로그인 하는건지 좀 헛깔려요.현재 구글에서 찾아보면 관리페이지는 시큐리티로 접근 사용자, 게스트튼 로그인 API로 접근해서 관리하는거 같은데 정보 찾는게 어렵네요...