묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
뷰를 찾을때
@RequestMapping("/response-view-v2") public String responseViewV2(Model model) { model.addAttribute("data", "hello"); return "response/hello"; } response/hello 를 찾을 때, 정적 리소스에서 먼저 찾은다음 없으면, 동적에서 찾는걸로 순서가 정해져 있나요? 아니면 response/hello 가 정적인지 동적인지 판별하고 정적 또는 동적 리소스 폴더 아래에서만 찾는건가요?
-
미해결스프링 시큐리티 완전 정복 [6.x 개정판]
AuthenticationManger - HttpSecurity 사용
customFilter 메소드에 http를 전달받는 부분은 무시하라고 하셨는데강의 자료에도 http를 인수로 넘기는 부분이 그대로 있어서, 이건 수정이 필요한 부분인가요?다른 질문이 또 있습니다.HttpSecurity 사용과 직접 생성의 차이점이 궁금합니다.직접 생성 방식우리가 생성한 필터?(CustomAuthenticationFilter이게 맞는지는 모르겠지만)를 통해 인증을 진행할 때 ,직접 생성한 AuthenticationManger를 사용해서 인증을 진행하도록 한다고 이해했습니다. 이게 맞나요?http.formLogin을 통해 FormLoginConfigurer를 설정하는 부분이 있던데,UsernamePasswordAuthenticationFilter가 DaoAuthenticationProvider를 사용하지만,우리가 만든 CustomAuthenticationFilter가 사용하는 AuthenticationManager에도 DaoAuthenticationProvider를 사용하니까 여기서 처리되도록 한 것인가요? 굳이 formLogin 부분이 추가된 이유를 명확하게 잘 모르겠습니다.HttpSecurity 사용 방식여기서는 AuthenticationManager를 AuthenticationManagerBuilder를 통해서 생성하는데,이 authenticationManager는 그럼 기본적으로 AuthenticationProvider들을 갖고있는게 있나요? 생성 후 따로 넣어주는 authenticationProvider들이 없는 것 같아서 이해가 잘 안됩니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
소스코드 받을 수 있나요
자바강의처럼 소스코드 받아보고 싶은데 혹시 업데이트 해 주실 수 있으신가요? 만약 안된다면 이유가 뭘까요
-
해결됨Next + React Query로 SNS 서비스 만들기
배포테스트할때 클라이언트에서 api호출하면 쿠키가 전달되지 않고있습니다.
안녕하세요 선생님배포테스트할때 클라이언트에서 api호출하면 쿠키가 전달되지 않고있습니다. 클라이언트에서는credentials: 'include'를 적용했고const response = await fetch(`${process.env.NEXT_PUBLIC_BASE_URL}/user/setting`, { method: 'PATCH', credentials: 'include', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify(userSettingObj), }); if (response.ok) { const sessionUpdateInfo = await response.json(); await updateSession(sessionUpdateInfo); router.push('/'); } 서버에서는const express = require('express'); const cors = require('cors'); const passport = require('passport'); const session = require('express-session'); const cookieParser = require('cookie-parser'); const dotenv = require('dotenv'); const morgan = require('morgan'); const path = require('path'); const hpp = require('hpp'); const helmet = require('helmet'); const postRouter = require('./routes/post'); const postsRouter = require('./routes/posts'); const userRouter = require('./routes/user'); const usersRouter = require('./routes/users'); const db = require('./models'); const passportConfig = require('./passport'); dotenv.config(); const app = express(); db.sequelize.sync() .then(() => { console.log('db 연결 성공') }) .catch(console.error); passportConfig(); if (process.env.NODE_ENV === 'production') { app.use(morgan('combined')); app.use(hpp()); app.use(helmet()); } else { app.use(morgan('dev')); } app.use( cors({ origin: ['http://localhost:3000', 'whatisyourmbti.com', 'http://43.201.56.221'], // true or * // access-control-allow-origin가 true된다. --> 다른 도메인끼리 api 요청 credentials: true, // access-control-allow-credential가 true된다. --> 다른 도메인끼리 쿠키 전달 method: '*', }) ); // 프론트에서 보낸 정보를 req.body에 넣어준다. 순서 중요! app.use(express.json()); // json 형식으로 보냈을때 데이터 처리해줌 app.use(express.urlencoded({ extended: true })); // form submit으로 보냈을 때 데이터 처리해줌 app.use(cookieParser(process.env.COOKIE_SECRET)); app.use(session({ saveUninitialized: false, resave: false, secret: process.env.COOKIE_SECRET, cookie: { httpOnly: true, secure: false, } })); app.use(passport.initialize()); app.use(passport.session()); app.use((req, res, next) => { console.log('Session ID:', req.sessionID); console.log('Cookies:', req.cookies); console.log('Signed Cookies:', req.signedCookies); next(); }); app.get('/', (req, res) => { res.send('hello express'); }); app.get('/api', (req, res) => { res.send('hello api'); }); app.use('/post', postRouter); app.use('/posts', postsRouter); app.use('/user', userRouter); app.use('/users', usersRouter); app.listen(80, () => { console.log('서버 실행 중!'); });credentials: true, 쿠키옵션을 설정해주었는데0|app | Session ID:---------------------------- U8DRuillNv2DBRmexmO1mZZ7fGJeWXCw0|app | Cookies:------------------------------- [Object: null prototype] {}0|app | Signed Cookies:------------------------ [Object: null prototype] {}이런식으로 쿠키값이 전달되고 있지 않아서유저 정보가 필요한(로그인 확인)로직에서 401에러가 떨어지게 됩니다.app.use(session({ saveUninitialized: false, resave: false, secret: process.env.COOKIE_SECRET, cookie: { httpOnly: true, secure: false, } }));위부분들을 검색해보고 바꿔보기도 했는데, 잘안되더라구요.클라이언트의 ip는 http://43.201.56.221입니다. 쿠키는 로그인 후 프론트서버에서 브라우저에 삽입해주고 있습니다.console.log(`${process.env.NEXT_PUBLIC_BASE_URL}/user/login ---------------------login api`); const authResponse = await fetch(`${process.env.NEXT_PUBLIC_BASE_URL}/user/login`, { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ ...credentials }), } ); // 프론트서버에서 백엔드서버의 로그인 토큰을 받아온것. 토큰은 문자열이라서 // cookie라이브러리로 객체로 만들어준다. let setCookie = authResponse.headers.get('Set-Cookie'); console.log('set-cookie', setCookie); if (setCookie) { const parsed = cookie.parse(setCookie); console.log(parsed, '---------------parsed cookie'); // 브론트서버에서 브라우저에 쿠키를 심어준다. // 프론트서버에 쿠키를 심으면 안된다! 왜냐하면 프론트서버는 서버라서 공용이다. // 여러 브라우저가 전부 프론트서버르 바라본다. 개인정보 유출 문제 발생할 수 있다. cookies().set('connect.sid', parsed['connect.sid'], parsed); // parsed = 나머지 옵션들 } console.log(authResponse, '--------------------------------authResponse'); let user = await authResponse.json(); console.log(user, '--------------------------------user'); // console.lo(authResponse); if (!authResponse.ok) { return null; } // return user object with the their profile data return { ...user, email: user.email, name: user.nickname, image: user.image, id: user.id, } } catch (err) { console.error('로그인 에러', err); } 그리고 cors에러는 발생하지 않고있습니다. 혹시 수정해야할 코드나, 참고해야할 부분이 있다면 알려주시면 감사하겠습니다.
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
db, jdbc, jpa 등 관계 정리 문의
현재 트랜잭션관하여 강의를 듣고있는 중입니다. jdbc 트랜잭션 코드랑 jpa 트랜잭션 코드랑 다르다고 하셨는데 이 부분에서 관계정리가 안되거 같아 질문드립니다.위의 사진처럼 이해하면 되나요?? jpa에서 자체적으로 데이터소스를 관리하는지 jdbc 트랜잭션 코드라고 설명을 해주셨는데 여기서 jdbc가 의미하는게 데이터소스 코드를 의미하는지 위의 두개의 질문도 궁금합니다.
-
미해결[유니티 레벨 업!] 모듈식으로 개발하는 스킬 시스템
Entity 질문 있습니다.
private Transform GetTransformSocket(Transform root, string socketName) { if (root.name == socketName) return root; foreach(Transform child in root) { var socket = GetTransformSocket(child, socketName); if (socket) return socket; } return null; } 재귀에서 child를 계속 찾는다는게 이해가 가지 않습니다.child는 그냥 변수명 아닌가요?ㅠ
-
미해결빅데이터/텍스트마이닝 분석법 (LDA,BERTtopic,감성분석,CONCOR with ChatGPT)
데이터 전처리 관련 질문드립니다.
안녕하세요 선생님데이터 전처리 과정에서 힘든점이 있어 한가지 여쭙고 싶어 질문드립니다.텍스트 마이닝의 경우 원본(예를 들어 리뷰 등) 데이터가 많게는 몇천건에서 수만건, 수십만건 까지 자료를 수집해서 분석할 수 있는데 한글의 경우 okt 분석기로 형태소 분석을 하고 나면 여전히 제대로 단어가 분리되지 않아 단어 정제, 불용어 제거, 단어 정규화 과정을 계속 거쳐야 하잖아요..그런데 원본 리뷰 데이터가 수천, 수만건일 경우 수천 수만건을 개인이 일일이 하나씩 봐가면서 전처리 작업을 진행해야 할 것 같은데 이 과정이 너무나 시간이 많이 소요되고 힘든 것 같습니다.데이터 전처리시 이렇게 하나씩 데이터를 봐가면서 정제작업을 거치는 것이 정상적인 진행과정인지 너무 궁금합니다. ㅠ질문 읽어주셔서 감사합니다!
-
해결됨모의해킹 실무자가 알려주는, 파일 업로드 취약점 공격 기법과 실무 사례 분석 : PART 1
Response from?
실습5-3에 21초에 보면 Request to를 Response from으로 만드는게 보이는데 저는 이렇게 나옵니다. 어떻게 해야 html소스가 다 보일수 있죠?
-
해결됨PM을 위한 데이터 리터러시(프로덕트 데이터 분석)
지표 정의하기 연습 문제
안녕하세요! 연습 문제에 대한 피드백 부탁드립니다 🙂각 기능에 대한 이탈률각 기능이 동작하지 않는다를 특정 이슈 혹은 고객 불만족으로 인해 기능의 다음 액션을 수행하지 못했다로 정의하고자 합니다. 그 경우 동작 여부는 각 기능을 클릭한 후 전환(특정 행동) 발생 여부로 파악할 수 있습니다. 이는 각 기능의 클릭 수 대비 유저가 특정 행동 없이 얼마나 이탈을 했느냐로 지표를 정의할 수 있습니다. 이는 이슈로 인한 미전환인지 고객 불만으로 인한 이탈로 나누어 데이터를 다시 한번 나눠야 합니다.이탈률 = (클릭 - 전환)/클릭검색 결과에 대한 CTR검색 기능을 search 바를 클릭하여 유저가 직접 상품을 검색하는 것으로 정의할 때 검색 기능은 유저가 원하는 것을 클릭했는 지에 대해 만족 여부를 파악할 수 있습니다. 이는 검색 결과 페이지 PV 대비 검색 결과의 상품 리스트를 클릭한 클릭율로 측정해야 합니다.CTR = 검색 결과 상품 클릭 / 검색 결과 페이지 PV필터를 사용한 검색 결과에 대한 CTR필터 기능의 활성화는 검색 결과에서 필터를 사용하여 상품을 클릭한 수로 정의할 수 있습니다. CTR = 필터 기능을 사용한 후 상품 클릭 수 / 검색 결과 페이지 PV주문(배달) 수 배달 서비스에서 가장 중요한 전환은 주문을 했는지 여부입니다. 그 이유는 주문이 발생해야 배달앱의 매출이 발생하기 때문입니다. 이 수를 늘리기 위해선 각 퍼널의 전환 지표를 개선해야 합니다. 이 중 가장 먼저 개선해야 하는 전환 지표는 주문 페이지에서 실제 주문을 하는 비율이며, 결제 과정에서의 오류 및 유저 경험을 개선해야 합니다.주문 비율이 아닌 주문 수가 중요한 이유는 비율은 주문 수가 줄어들어도 이전 퍼널의 지표가 감소한다면, 주문율이 증가한 것처럼 보여질 수 있기 때문입니다. 추천 수 대비 구매율추천은 유저가 특정 상품을 구매할 수 있도록 유도하는 기능입니다. 이 기능의 목적은 추천 상품 구매이며, 성능을 파악하기 위해서는 추천한 상품 수 대비 몇 건이나 유저들이 구매했는 지를 확인해야 합니다. 추천 수 대비 구매율이 좋지 않다면 추천 알고리즘의 성능이 좋지 않다는 것을 의미합니다.유튜브 쇼츠 - 체류시간유튜브 쇼츠의 가장 중요한 지표는 체류시간으로 생각됩니다. 특정 체류시간을 기반으로 콘텐츠를 소비 혹은 전환되었다고 정의할 수 있습니다. 쇼츠를 통해 유저들이 앱에 머무르게 하여 여러 콘텐츠를 소비하게 하고 이 체류시간을 기반으로 광고 영상 또한 자연스럽게 소비 시키는 것이 수익 모델이라고 예상됩니다. 체류 시간이 수익과 가장 접점에 있는 지표였다면, 그 다음 보조 지표는 추천 알고리즘과 동일하게 유저가 콘텐츠를 소비하기 까지 얼만큼의 스크롤을 하는지로 유튜브 콘텐츠의 질을 파악할 수 있습니다. 마지막으로 쇼츠를 클릭하는 수를 트래킹하여 쇼츠 DAU를 관리해야 합니다.온보딩 진행 후 가입율기존 : 가입 페이지 -> 가입변경 : 가입 페이지 -> 온보딩(선택) -> 가입 위와 같이 온보딩 기능이 추가되었다면, 온보딩 한 유저의 가입률을 보아야 합니다. 해당 지표가 낮아지면 온보딩은 유저에게 허들로 작용할 것이고, 지표가 개선된다면 온보딩을 통해 유저가 서비스에 흥미를 느끼고 가입을 했다고 판단할 수 있습니다.
-
해결됨Flutter 앱 개발 기초
수강 기간 연장 문의 드립니다.
오늘 접속해서보니...수강 기간이 정해져 있는 강의였네요. T T혹시 연장 받을 수 있을까요?
-
미해결스프링 배치
ExecutionContext 질문
안녕하세요. 아래 코드에서 둘 다 ExecutionContext가 반환되는데, 둘은 같은 ExecutionContext가 아니라 다른 ExecutionContext인가요?메서드 참조로 계속 타고 들어가서 하나는 getJobExecution()에서, 나머지 하나는 getStepExecution()에서 꺼내오는데 둘다 동일한 타입의 ExecutionContext라 헷갈립니다.그리고 저렇게 각각 꺼내올 때 다른 ExecutionContext라 JobExecutionContext에 저장된 값을 Step에서 공유가 가능하고, stepExecutionContext에 저장된 값은 Step에서 공유가 불가능한 것이 맞는지 궁금합니다.ExecutionContext jobExecutionContext = stepContribution.getStepExecution().getJobExecution().getExecutionContext(); ExecutionContext stepExecutionContext = stepContribution.getStepExecution().getExecutionContext();
-
미해결오라클 성능 분석과 인스턴스 튜닝 핵심 가이드
direct path read/write temp 관련 질문
안녕하세요!direct path read/write temp 강의를 듣다가 궁금한점이 생겨 질문 드립니다. PDF의 PGA를 활용한 SQL 정렬 메커니즘 (165p) 관련하여, Temp Tablespace에서도 정렬작업이 가능한 것으로 보이는데, PGA에서 1차적으로 정렬한 뒤 Temp Tablespace에서 마무리만 하는 이유가 있을까요? (처음부터 Temp Tablespace에서 다 처리하면 더 효율적일것 같은데, 그러지 않는 이유가 궁금합니다)그림에서 최종적으로 Temp Tablespace에서 정렬된 데이터는 다시 PGA로 가져오나요?Hash join 같은 경우에도, 같은 매커니즘으로(PGA에서 일부 작업 후 Temp Tablespace로 이동) 동작하는지 궁금합니다. 감사합니다!
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
변경 감지와 병합 강의대로 코드를 작성한 후 잘 되던 상품수정이 안됩니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]현재 페이지상에서 회원, 상품, 주문에 대한 모든 코드가 잘 작동되고 있는 상황입니다. 그 중 상품수정이 원래 잘 되었으니 강의 내용 중 변경 감지와 병합 코드를 작성해 본 후 잘 상품을 등록하고 목록에 보이는데 수정을 하면 에러가 나는데 해결으 못하고 있어서 글을 남깁니다. 전체 코드도 함께 남기겠습니다.https://drive.google.com/file/d/1kZe8QTmGrdlldqF5gaMomyVlWPtoBhTK/view?usp=sharing
-
미해결비전공자도 이해할 수 있는 Docker 입문/실전
docker compose up 시 느려짐 + 프로젝트 실행 안되는 문제
안녕하세요. 항상 좋은 강의 감사합니다.현재 이 강의와 CI/CD 입문/실전 강의를 동시에 수강중입니다. 현재 강의로 배포하는 방법을 익힌 후CI/CD 에서 배운것처럼 무중단 배포로 넘어가려고 하는데 문제가 생겨 질문드립니다... 강사님의 설명대로 할 땐 제대로 스프링부트 파일이 실행이 되었는데개인프로젝트에 진행하려 하니 문제가 생겨서 문의드립니다. 각각의 개인 프로젝트마다환경도 다르고 설정도 달라서 조언주시기 힘드실 수도 있을 것 같습니다. 한 이틀을 꼬박 매달려도안되서 답답한 마음에 질문드립니다... ㅜㅜ 먼저, 현재 주어진 상황입니다1.윈도우환경에서 실습중이고, putty를 활용하여 프로젝트를 진행중에 있습니다.2. 프로젝트는 스프링부트+mysql (스프링시큐리티도 적용)aws의 인바운드규칙에 8080포트는 열어뒀습니다. 그리고 제가 작성한 도커파일과 compose.yml입니다. 운영환경에서 실행시킬거라 ENTRYPOINT를 추가했습니다.FROM openjdk:17-jdk COPY build/libs/*SNAPSHOT.jar /app.jar ENV SPRING_PROFILE="dev" ENTRYPOINT ["java", "-Dspring.profiles.active=${SPRING_PROFILE}", "-jar", "/app.jar"]services: my-server: build: . ports: - 8080:8080 depends_on: my-db: condition: service_healthy environment: - SPRING_PROFILES_ACTIVE=dev my-db: image: mysql environment: MYSQL_ROOT_PASSWORD: pwd1234 MYSQL_DATABASE: mydb volumes: - ./mysql_data:/var/lib/mysql ports: - 3306:3306 healthcheck: test: ["CMD", "mysqladmin", "ping"] interval: 5s retries: 10이러고 docker compose up -d --build를 하면이렇게 나옵니다. 처음엔 프로파일 설정하는 게 문제였는데 위와 같이 설정을 한 후로는 dev로 잘 인식하는 것 같은데 로그 찍히는게 이게 전부입니다. 시행착오 전엔 더 길게 찍히고 db접속되는내용도 나왔었는데 그 후론 이렇게 나오고 전부네요. 문제점은일단 제 ec2의 퍼블릭ip:8080 으로 접속 시 접속이 안되는 점이 제일 큽니다. 제 빌드 파일이 그렇게 크지 않은 것 같습니다. 80mb정도 나오고, EC2는 용량을 30Gb로 설정을 해줬습니다. 그런데 너무너무 느려집니다. docker compose up -d --build 후에 너무너무 느려지고 명령어 하나 치기까지 너무 느려집니다. 모니터링 결과 cpu는 20~30 퍼센트 정도 사용으로 나옵니다. 그래서 인스턴스 재부팅도 여러번해봤지만 compose up만 하면 느려지네요,, 그래서 이 EC2 인스턴스로 연습을 많이 한 것 같아서 필요없는것들 지웠지만 그래도 너무 느려집니다. 그래서 새로 aws 계정을 파서 EC2 인스턴스를 만들어서 실행해봐도 느려지는 문제는 똑같습니다. 스프링시큐리티를 적용했기 때문에 처음 실행할 때 토큰이 나오면 로그인하려 하는데 아예 접속이 안되니 어떡해야할지 모르겠네요 ㅠㅠ....구글링과 gpt로 다 고쳐보고는 있는데 근본적인 문제가 어디일지 감이 안와서 혹시 예상되는 문제점이 있으실까 해서 여쭤봅니다 ㅠㅠ 감사합니다. p.s. 새로 만든 EC2 인스턴스에선 cpu사용률이 99퍼 찍었네요 ㅠㅠ 일단 이것부터 해결하고 오겠습니다...
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
em.close()는 왜 준영속 상태인가요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]강의 범위자바 ORM 표준 JPA 프로그래밍 - 기본편 섹션3. 영속성 관리 - 내부 동작 방식 준영속 상태 질문 내용6:14 에서 em.close()가 준영속 상태라고 하셨는데영속성 컨텍스트가 종료되면영속성 컨텍스트 자체가 없는거잖아요 그러면 준영속이 아니라최초의즉, new 로 객체 생성만 한 비영속 상태가 되어야 하는게 아닌가요? 왜 close()를 하면 준영속 상태가 되는 건지 궁금합니다.
-
해결됨Real MySQL 시즌 1 - Part 1
4:30 올려주신 공식문서 링크 공유드립니당
https://dev.mysql.com/doc/refman/8.0/en/innodb-online-ddl-operations.html#online-ddl-generated-column-operations직접 입력하기 번거로우시면 여기서 보시면 됩니다
-
해결됨Real MySQL 시즌 1 - Part 1
14:00 올려주신 공식문서 링크 올립니당
https://dev.mysql.com/doc/refman/8.0/en/innodb-transaction-isolation-levels.html직접 입력하기 번거로우시면 여기서 보시면 됩니당
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
핸들러 조회할 때
이전 강의까지 다수의 @Controller가 존재했는데, 요청된 url로 가장 먼저 RequestMappingHandlerMapping이 등록된 url을 찾는 방법이 어떻게 되나요? @RequestMapping(url)도 빈으로 등록되어서 찾는건가요? 아니면 모든 @Controller 빈 을 무작위로 조회하고 그 안의 요청과 맞는 @RequestMapping(url)을 찾으면 그 @Controller의 클래스를 handler로 매핑하는 방식인가요?
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
인터셉터 질문입니다
1)인터센터 구현하실 때 storage를 주입해서 사용했고final FlutterSecureStorage storage;다른 스플래쉬 스크린에서는 const로 common > const > data.dartfinal storage = FlutterSecureStorage(); 에 있는 storage를 가져다 쓰고 있습니다.stateless, stateful widget도 결국 class가 청사진 이라고 생각되는데모두 storage;를 주입 받아야 하지 않나요? 궁금합니다..! 2)인터셉터에서 선생님께서 onRequest 에 return super.onRequest(options, handler); 부분이 핸들러가 에러를 발생시킬지 , 정상처럼 진행시킬지 알아서 결정한다고 하셔서 그럼 혹시 여기서도 return handler.reject와 return handler.resolve를 쓸 수 있나요?? 3) 인터셉터에서 onError에 if(/auth/token 경로도 아니고 && 401일때){ ...}그외에는 return handler.reject(err)를 사용했는데 사실 그대로 에러를 내는 거면 return super.onError(err,handler); 를 써도 되지 않나요?
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
의존관계주입
공부를하다가 제대로 이해하고있는건지 확인하고싶어 질문드립니다!JDBC템플릿도 그렇고JPA에서 의존관계주입시, 리포지토리안에서 JPAQueryFactory를 생성해 엔티티매니저를 주입받아 사용합니다.지금은 config에서 의존관계설정을 다하는데 이걸 스프링부트가 해주게되면 스프링컨테이너에 올라가있는 리포지토리,서비스,컨트롤러를보고 적절하게 생성자 파라미터에있는 이 엔티티매니저를 생성해 주입해주는것인가요??