2달 전 · 익명 님의 질문
스프링부트 레이어드 아키텍쳐는 어떤 방식을 권장/선호 하나요?예시있습니다!
전형적인 걸로는 1. Controller > Service > ServiceImpl > Dao > DaoImpl(xml 호출) 이러한 방식이 있습니다. 이번에 변경을 위하여 몇가지를 생각해보았는데 2. Controller > Service > ServiceImpl(mapper 호출 + 비즈니스 로직) 3. Controller > Service > ServiceImpl(Dao 호출 + 비즈니스 로직) + Dao(mapper 호출) 이렇게 2개를 생각하고 있습니다 . 2번의 경우는 dao역할과 비즈니스 로직이 전부 serviceImpl에 들어가있다보니 gpt도 권장하지 않는 방식이고 저도 마음에 잘 들진 않는데 파일이나 소스의 양이 줄어든다는 장점이 있긴 해보입니다. 솔직히 Controller > Service > ServiceImpl > Dao > DaoImpl 처럼 극단적으로 계층을 나누는 것도 생각해보았는데 이렇게 극단적인 것보다는 3번이 나아보이긴 합니다. 다들 몇 번을 권장하나요? 참고로 개인프로젝트입니다! 기존엔 Controller > Service > ServiceImpl > Dao > DaoImpl(sqlSession.~ 호출) 방식을 사용했습니다. 안정성을 위하여 mapper 방식으로 변경할 겸 구조도 변경하는 게 나아보여 질문드립니다! 한가지더, Dao나 DaoImpl 명칭을 Repository.java, RepositoryImpl.java 로 변경하는 거에 대해선 어떻게 생각하시나요?
개발자
#스프링부트
#구조
#레이어드-아키텍처
답변 0
댓글 0
조회 93
일 년 전 · 익명 님의 질문
로그인 구현 관련 질문 subdomain.com
안녕하세요 슬랙처럼 로그인을 하면 워크스페이스 리스트가 나오고 해당 워크스페이스를 클릭하면 해당 워크 스페이스로 로그인이 되는 페이지를 구현하려 하는데요. Next.js를 사용중이고 iron-session 라이브러리 통해서 세션을 저장하고 있습니다. ex) app.oursite.com <- 통합 로그인 페이지 워크스페이스 클릭하면 해당 워크스페이스 로그인을 하고 세션을 저장해서 워크 스페이스 사이트로 redirect 시키려 하는데, const session = await getIronSession<Session>(cookies(), { cookieName: 'cookie', password: IRON_SESSION_SECRET_KEY, cookieOptions: { secure: false, // 로컬 테스트에서는 false, 실제 배포에서는 true로 설정 sameSite: 'Lax', // sameSite 옵션을 Lax로 설정 domain: 'localhost', // 로컬 테스트 시 domain 설정을 제거하거나 localhost로 설정 path: '/', }, }); {workspace1}.ourstie.com {workspace2}.ourstie.com 세션 저장이랑 redirect 처리했을때 세션 저장하고 해당 페이지 확인은 하였는데 해당 페이지에서 로그인 인증은 제대로 되지 않고 있습니다. 로그인 페이지로 이동되더라고요 로그인이 안되는 원인으로 짐작가는게 있으면 알려주시면 감사하겠습니다
개발자
#로그인
#통합로그인
#세션
#nextjs
답변 0
댓글 0
보충이 필요해요 2
조회 68
일 년 전 · 최용빈 님의 답변 업데이트
파이썬 오류 좀 고쳐주세요 ㅠㅠ
import time import requests import streamlit as st API_BASE_URL = "http://localhost:8000/qna" # Fastapi로 api 생성 def request_chat_api(user_message: str) -> str: url = API_BASE_URL resp = requests.post( url, json={ "user_message": user_message, }, ) resp = resp.json() print(resp) return resp["answer"] def init_streamlit(): st.set_page_config(page_title='Dr. KHU', page_icon='🩺') if "messages" not in st.session_state: st.session_state.messages = [{"role": "assistant", "content": "안녕하세요! Dr.seo입니다🩺"}] # Initialize chat history if "messages" not in st.session_state: st.session_state.messages = [] # Display chat messages from history on app rerun for message in st.session_state.messages: with st.chat_message(message["role"]): st.markdown(message["content"]) def chat_main(): if message := st.chat_input(""): # Add user message to chat history st.session_state.messages.append({"role": "user", "content": message}) # Display user message in chat message container with st.chat_message("user"): st.markdown(message) # Display assistant response in chat message container assistant_response = request_chat_api(message) with st.chat_message("assistant"): message_placeholder = st.empty() full_response = "" for lines in assistant_response.split("\n"): for chunk in lines.split(): full_response += chunk + " " time.sleep(0.05) # Add a blinking cursor to simulate typing message_placeholder.markdown(full_response) full_response += "\n" message_placeholder.markdown(full_response) # Add assistant response to chat history st.session_state.messages.append( {"role": "assistant", "content": full_response} ) if __name__ == "__main__": init_streamlit() chat_main() 이 코드를 실행시키면 자꾸 AttributeError: st.session_state has no attribute "messages". Did you forget to initialize it? More info: https://docs.streamlit.io/library/advanced-features/session-state#initialization 라고 뜨네요..
개발자
#파이썬
#python
답변 2
댓글 1
보충이 필요해요 2
조회 347
일 년 전 · 승주 님의 새로운 답변
springsecurity session & JWT 동시사용 질문
안녕하세요 session과 jwt의 동시사용에 대하여 질문을 드리려고 합니다. session은 서버의 자원을 점유한다는 점에서 jwt를 사용한다고 알고 있습니다. 하지만 보안이 중요시되는 사이트라면 jwt랑 sesison을 같이 사용해도 괜찮을까요? 아직 대학생이라 이것저것 해보고 싶은 마음에 session id를 jwt에 넣어 사용해보려고합니다. MVC와 WEBFLUX 두가지방법으로 구현해서 비교해보려고하는데 괜찮은 프로젝트가 될지 아니면 그냥 삽질일지 판단을 못하겠어서 질문 드립니다.
투표
개발자
#spring-security
#session
#jwt
#mvc
#flux
답변 2
댓글 0
조회 309
일 년 전 · 백승훈 님의 답변 업데이트
Recoil Atom Effect 적용 기: 팀 내 설득 및 구현 조언
안녕하세요!! 현재 진행 중인 프로젝트에서 회원가입 시 필요한 정보를 입력하는 중 새로고침 시 session 및 localstorage를 이용하여 상태유지를 하려고하는데 recoil과 관련하여 atom effect를 사용하면 우아하게 처리할 수 있음을 알았습니다. 따라서, 각 atom에 effect를 하나하나 추가하는 방법을 생각했는데 동일한 logic을 행하는 코드의 양이 방대해지고 localstorage에 각 atom에 해당하는 key-value로 저장되므로 가독성 측면에서 좋지 않다고 판단하여 아래와 같은 과정을 생각했습니다. 각 atom을 하나로 묶어 객체로 관리하자. 객체로 관리하게 되면 불필요한 re-rendering이 촉발되므로 객체로 선언한 atom의 각 property에 접근 및 수정을 위한 selector를 정의하자. 객체에 내의 property에 1대1로 selector를 정의하면 객체로 묶기 전 atom의 갯수만큼 selector를 선언해주어야 하므로 selectorFamily를 사용하자. 이것저것 찾아보면서 1 → 2 → 3 단계로 생각을 정리했습니다. 아래는 현재 사용되는 atom입니다. <ATOM> // signup.store.ts 👇 회원가입에 대한 user state들 - SignUpProfileTypeAtom - SignUpProfileRentalTypeAtom - SignUpProfileRegionsAtom - SignUpProfileDepositPriceAtom - SignUpProfileTermAtom - SignUpProfileMonthlyPriceAtom - SignUpProfileSmokingAtom - SignUpProfilePetAtom - SignUpProfileAppealsAtom - SignUpProfileGenderAtom - SignUpProfileMatesNumberAtom - SignUpProfileMateAppealsAtom // 👇 위의 atom들을 한 번에 access 및 update - SignUpProfileSelector 하지만, 다른 팀원이 저렇게 atom을 구성한 상황 제 생각을 그대로 적용하고자하면 팀원의 코드를 마음대로 바꾸는 거 같아서 조심스럽습니다. 협업함에 있어 설득도 하나의 중요한 스킬임을 갈수록 깨닫게 됩니다.(다들 어떻게 설득하시나요?) 팀원이 기존의 코드는 안 바꿨으면 좋겠다 하면 각 atom에 effect를 추가하는 것이 맞겠죠???? 현재 현업에 계신 분들은 이러한 상황에서 어떻게 설득하며 어떻게 하는 것이 좋을까 자문을 구하고 싶어서 글 올려봅니다!!🥲🥲 짧지 않은 글이지만 읽어주셔서 감사하고 많은 의견 주시면 감사하겠습니다!!😄😄😄 ```typescript import { SignUpType } from '@/types/signUp.type'; // ? type 집 유형 0: 원룸/오피스텔, 1: 빌라/연립, 2: 아파트, 3: 단독주택 @number export const SignUpProfileTypeAtom = atom<SignUpType['type']>({ key: 'signUpProfileTypeAtom', default: undefined, }); // ? rental_type 집 대여 유형 0: 월세, 1: 전세, 2: 반 전세 @number export const SignUpProfileRentalTypeAtom = atom<SignUpType['rental_type']>({ key: 'signUpProfileRentalTypeAtom', default: undefined, }); // ? regions 유저가 찾는 지역 >도시 (region) + 구(district) 형태의 배열 @string[] export const SignUpProfileRegionsAtom = atom<SignUpType['regions']>({ key: 'signUpProfileRegionsAtom', default: [], }); // ? deposit_price 보증금 (전세 혹은 월세) 범위 [최소 금액, 최대 금액] (0만원~10000만원) @[number, number] export const SignUpProfileDepositPriceAtom = atom<SignUpType['deposit_price']>({ key: 'signUpProfileDepositPriceAtom', default: [0, 10000], }); // ? term 유저가 살 기간 [최소기간, 최대 기간] (0 ~ 24)범위 @[number, number] export const SignUpProfileTermAtom = atom<SignUpType['term']>({ key: 'signUpProfileTermAtom', default: [0, 24], }); // ? monthly_rental_price 월세 [최소 금액, 최대 금액] (0만원, 500만원) @[number, number] export const SignUpProfileMonthlyPriceAtom = atom<SignUpType['monthly_price']>({ key: 'signUpProfileMonthlyPriceAtom', default: [0, 500], }); // ? smoking 흡연 여부 @boolean export const SignUpProfileSmokingAtom = atom<SignUpType['smoking']>({ key: 'signUpProfileSmokingAtom', default: undefined, }); // ? pet 펫 여부 0: 상관없음, 1: 좋음, 2: 싫음 @number export const SignUpProfilePetAtom = atom<SignUpType['pet']>({ key: 'signUpProfilePetAtom', default: undefined, }); // ? appeals 유저의 어필할 매력(배열형태) @string[] export const SignUpProfileAppealsAtom = atom<SignUpType['appeals']>({ key: 'signUpProfileAppealsAtom', default: [], }); // ? gender 상대방의 성별 0: 상관없음, 1: 남성, 2: 여성 @number export const SignUpProfileGenderAtom = atom<SignUpType['gender']>({ key: 'signUpProfileGenderAtom', default: undefined, }); // ? mates_number 인원수 0: 상관없음, 1: 1명, 2: 2명, 3: 3명이상 @number export const SignUpProfileMatesNumberAtom = atom<SignUpType['mates_number']>({ key: 'signUpProfileMateNumberAtom', default: undefined, }); // ? mate_appeals 유저가 원하는 상대방의 매력 (배열형태) @string[] export const SignUpProfileMateAppealsAtom = atom<SignUpType['mate_appeals']>({ key: 'signUpProfileMateAppealsAtom', default: [], }); ```
개발자
#프론트
#협업
#recoil
답변 1
댓글 0
조회 91
일 년 전 · olcloolzj 님의 새로운 댓글
Next.js에서 page.js
안녕하세요. Next.js를 공부하던 중 궁금한점이 생겨 질문드립니다 ! 제가 app/page.js 파일에 사용자가 로그인했다면 메인화면 컴포넌트를 보여주고, 로그인하지 않았다면 로그인 컴포넌트를 보여주도록 작성해두었습니다. 그런데 궁금한 점이 로그인을 했는지 유무를 getserversession을 통해 세션을 확인해서 판단합니다. 그런데 이때 비동기처리를 위해 await를 붙여줘야하는데, 그렇다면 page.js의 Home() 자체에 async를 붙여주어야합니다. 그래서 해당 방법을 사용해 제가 생각한 로직은 구현했습니다. 그런데 궁금한 점이 page.js에서 export default async function Home() 이런식으로 작성해도 되나요? 제가 page.js의 역할을 정확히 이해하지 못한 느낌이 들어 질문드립니다. (챗 지피티에게 물어보니 13버전 이전의 내용만 알고 있는 듯합니다. 또한 컴포넌트 자체에 async를 붙이면 안된다고 답변이 옵니다 !)
개발자
#next.js
답변 1
댓글 1
추천해요 1
조회 492
일 년 전 · 김연호 님의 답변 업데이트
JMeter Websocket테스트 질문드립니다
JMeter로 Websocket 테스트를 구현해야 하는 상황인데 테스트 진행하는 도중 아래 에러가 나서 찾아보니 Single Write Sampler에 Data 인코딩 문제로 추측만 되고 있습니다... Failed to parse TextMessage payload=[SEND desti..], byteCount=242, last=true] in session ujvhyrid. Sending STOMP ERROR to client. org.springframework.messaging.simp.stomp.StompConversionException: Frame must be terminated with a null octet JMeter Sampler 인코딩 UTF-8로 설정하는건 찾아서 해봤는데 그래도 안되네요...ㅠㅠ 정말로 인코딩 문제인지 혹시 동일한 경험이 있으신 분이 계실까요? 구글링을 해도 자료를 못찾겠고.. 사내에 해당 지식을 가지신 분도 전무하셔서 너무 답답해서 질문남겨봅니다....
개발자
#jmeter
#websoket
답변 1
댓글 0
조회 287
일 년 전 · 백당 님의 질문 업데이트
GeoLocation api
GeoLocation api를 쓰려고 하는데 혹시 권한 허용 유무를 출력할 수 있나요? session에 userid를 저장하고 그 userid에다가 위치 권한 허용 유무를 저장해보고 싶은데여 가능할까여? 예를 들어서 허용 했으면 값이 1 이고 안했으면 0 처럼 수치를 출력할 수 있나 해서여...아무리 찾아봐도 제가 못 찾는건지 없는건지 모르겠어여. Spring으로 thymeleaf 사용중입니다
개발자
#api
#geolocation
#thymeleaf
#spring
답변 0
댓글 0
추천해요 1
조회 55
일 년 전 · 백승훈 님의 댓글 업데이트
Nginx, Express 연결 후 프론트에서 이미지 파일 전송시 408 Error
안녕하세요. 혼자 해보던 도중 도저히 해결이 되지 않아 문의드립니다. - 서버 설계 - 현재 저는 Express앱을 AWS EC2 인스턴스에 NGINX를 설치한 후 proxy_pass에 express앱이 구동중인 port를 연결하여 사용하고 있습니다. 이 과정에서 ALB를 통해 ACM을 연동하여 HTTPS 프로토콜이 사용가능하게 설정까지 하였습니다. 이미지 파일업로드는 multer-s3를 이용해 s3버킷과 연결하여 업로드 되는 방식입니다. - 문제상황 - 로그인과 기본적인 CRUD는 문제없이 되는데, 프론트에서 이미지 파일(multipart/form-data)을 서버로 전송하면 504 오류가 출력됩니다. 1. nginx의 access.log에는 해당 uri의 상태코드가 408이라 출력됩니다. 2. nginx의 error.log에는 readv() failed (104: Connection reset by peer) while reading upstream가 출력됩니다. 3. 개발자도구의 console창에 'server의 이미지 업로드 uri' from origin '프론트 도메인'이 has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. 이라 출력됩니다. 위 오류를 해결해보기 위해 시도해본 것은 아래와 같습니다 1. NGINX의 proxy_connect_timeout, proxy_send_timeout, proxy_read_timeout, send_timeout을 600으로 설정, client_max_body_size를 500M으로 설정 2. ALB의 유휴제한시간 600 설정 3. Express 앱에 app.set('trust proxy', true); 추가 4. Express-session에 app.use(session({proxy:true})) 추가 5. body-parser에 app.use(bodyParser.json({limit: '1000mb'})); 추가 및 app.use(bodyParser.urlencoded({limit: '1000mb', extended: true})); 추가 6. 업로드되는 uri의 미들웨어에 (req, res, next) => { req.setTimeout(1000000); next(); } 추가 7. upload.single()미들웨어를 주석처리 후 req.file 출력 시도 아직도 해결을 하지 못하였습니다 ㅜㅜ 연휴임에도 도와주시면 너무 감사하겠습니다..
개발자
#aws
#alb
#nginx
#express
#ec2
답변 2
댓글 4
조회 312
일 년 전 · 익명 님의 질문
[node.js] 세션을 이용한 로그인 구현 중 브라우저 쿠키의 maxAge 초기화 안 되는 문제 발생
Node.js(v18.17.0) + TypeScript로 개발을 진행하고 있습니다. express 로 서버를 구축했고, express-session , session-file-store 라이브러리를 사용해서 로그인 기능을 구현했습니다. 제가 원하는 것은 세션 만료 시간을 연장하는 기능을 만드는 것인데... 서버에서는 세션 쿠키 만료 시간이 재설정(초기화)가 되는데 브라우저에 저장된 쿠키 만료 시간은 그대로인 상태라 연장이 되지 않습니다. 처음 제 코드는 이렇습니다. ```ts export const extendSession = async (req: Request, res: Response) => { req.session.resetMaxAge(); res.json({ success: true, message: '세션 연장 성공', expiredTime: req.session.cookie.expires.getTime(), }); }; ``` 이런 식으로 resetMaxAge() 함수를 통해서 만료 시간을 연장할 수 있을거라 생각했습니다. (트라이캐치문은 생략하였습니다.) 콘솔에 값을 확인해봤을 때에도 연장이 잘 된 것으로 보이는데 브라우저에 저장된 쿠키의 만료 시간을 확인해보면 최초의 쿠키 값 그대로였습니다. 이를 해결하기 위해서 만료 시간을 따로 정해서 줘보기도 했습니다. `req.session.cookie.maxAge = 3600000;` 하지만 마찬가지로 세션 쿠키의 만료 시간은 바뀌지만 브라우저에 저장된 쿠키의 expires가 변하지 않았습니다. 따로 헤더를 줘보아도 새로운 쿠키가 생성될 뿐 해결책이 되지 않았습니다. `res.setHeader('Set-Cookie', 'Max-Age=3600000')` express-session 미들웨어가 자동으로 set-cookie 헤더를 설정해주어서 제가 여기에 어떻게 접근할 수 있을지 모르겠습니다. 브라우저의 쿠키가 초기화 적용을 받지 못하는 것이 문제인 것 같은데... 원인은 대충 알 것 같으면서 해결책을 모르겠습니다. session 설정은 이렇습니다! ```ts app.use( session({ secret: process.env.SESSION_SECRET_KEY, resave: false, saveUninitialized: false, cookie: { sameSite: 'lax', secure: false, httpOnly: true, maxAge: 1000 * 60 * 5, }, store: new FileStore({ reapInterval: 3000, }), }), ); ```
개발자
#node.js
#express
#express-session
#session
#cookie
답변 0
댓글 0
조회 190
일 년 전 · 김태우 님의 새로운 댓글
next.js 14 nextAuth v4 JWT_SESSION_ERROR 도와주세요..
getServerSession 부분에서 JWEDecryprionFailed 에러가 발생하고 있습니다 구글링 결과 authOptions에 secret을 추가하면 된다고 해서 추가해도 계속 발생하네요.. 클라이언트나 서버 컴포넌트에서는 seesion이 가져와 지는데 api 라우트 부분에서만 Session Handling이 안되네요 https://next-auth.js.org/errors#jwt_session_error 콘솔에 출력된 공식 문서를 봐도 해결이 안되네요 도움을 주실분 계신가요..??
개발자
#next.js
#nextauth
#jwedecryprionfailed
답변 1
댓글 3
조회 491
2년 전 · 오두용 님의 답변 업데이트
[next-auth] 서버사이드에서 session 생성 및 수정 하는 방법
(next.js 13버전 app route 기준) 안녕하세요. 이번 프로젝트에서 next-auth를 사용하여 인증 구현을 진행 하고 있는데요. 일반적인 사용법들은 구현을 하였습니다. - 클라이언트에서 signIn, signOut, update 등 session 제어 - 서버사이드에서 getServerSession를 사용하여 session 정보 확인 하지만, 아래의 두 가지를 구현하는 것에 있어 어려움을 겪고 있습니다. 1. 서버사이드에서 사이트 첫 접속 시(새로고침 시) session이 없다면 세션 자동 생성 2. 서버사이드 전용 axios 유틸 파일에서 session의 토큰이 만료되었다면, refresh token(쿠키)으로 새로운 access token을 가져와서 기존 session에 업데이트 후 재요청 next-auth를 많이 사용하는 것 같고, 서버와 클라이언트에서 적절히 사용하실 것 같은데 아무리 찾아봐도 위에 대한 해결책은 없는 것 같습니다. 1번 사항과 같이 서버 사이드에서 session을 즉시 만드는 경우는 저희 프로젝트에 좀 특수한 경우인 것 같고, 2번의 경우는 일반적인 토큰 갱신 방식인 것 같은데 토큰 갱신은 서버사이드에서 어떻게 할 수 있을까요? 해결 방안이 있거나, 이러한 상황에서는 어쩔 수 없이 access token을 쿠키로만 관리해야 하는 것인지 의견 부탁 드립니다. 서버와 클라이언트에서 access token의 만료 갱신 처리를 위해 access token을 보통 어디에 관리하시나요? cookie만이 방법일까요?
개발자
#next.js
#next-auth
#server-component
답변 1
댓글 0
조회 1,545
2년 전 · 익명 님의 질문
firebase authentication
html에서 아래 같이 data를 전송했을 때 백엔드에서 const {createUserWithEmailAndPassword,signInWithEmailAndPassword,signOut,browserSessionPersistence, setPersistence}= require("firebase/auth"); const db = require("../config/firestore"); const {email,password} = req.body; console.log(email,password) await signInWithEmailAndPassword(auth,email,password) res.redirect("/api/home") 로 받으면 첫 번째 로그인시 Cannot POST /auth/login가 뜨면서 로그인이 안되고 뒤로 갔다가 다시 로그인을 하면 로그인이 완료되는 오류가 발생합니다... firestore은 form 데이터를 받아 저장하는 것에 오류가 발생하지 않는데 왜 authentication에서는 이러 오류가 발생하는지 궁금합니다 ㅠㅠ 해결 방안도 궁금합니다 ! ㅠㅠ
개발자
#firebase
#firebase-authentication
답변 0
댓글 0
조회 60
일 년 전 · 리드오 님의 새로운 답변
next auth 소셜로그인으로 일반적인 jwt 인증방식 구현하기
안녕하세요 next auth로 소셜로그인을 구현중입니다. 따로 spring boot 서버가 있는 상태이구여. 궁금한점이 있습니다. 1. 소셜로그인 완료 시 account에 들어있는 accessToken과 refreshToken을 아래와 같은 코드로 빼낸 뒤 서버에 보내서 일반적인 jwt방식으로 구현을 하려고 합니다. 하지만 token들이 jwt형식이 아니라 ' . ' 구분없이 하나의 문자열로 나옵니다. jwt토큰 형태로 바꾸는 방법이 따로 있나요? 아니면 이와 같은 방식은 잘못된 방식인건가요?? ``` session: { jwt: true, }, callbacks: { async jwt({ token, account, profile, user }: any) { if (account && user) { token.accessToken = account.access_token; token.refreshToken = account.refresh_token; token.id = profile.id; } return token; }, async session({ session, token, user }: any) { if (session) { session.accessToken = token.accessToken; session.refreshToken = token.refreshToken; session.user.id = token.id; } return session; }, }, ``` 2. 만약 소셜로그인 시 생성된 토큰들을 spring boot 서버에 보내는 방법이 불가능하다면 따로 토큰을 생성해야 하는건가요? 그렇다면 next-auth를 사용하는 이점이 사라지는게 아닐까요??
개발자
#next-auth
#next
답변 2
댓글 0
조회 1,067
2년 전 · 김인후 님의 새로운 답변
session과 router 처리
안녕하세요. React를 이제 갓 배워 클론코딩에 활용하고 있습니다. 로그인 기능을 구현하고 있는데, React에 useContext 훅이나 Redux 와 같은 유용한 서드파티가 있지만 보통 세션 처리는 서버에서 하는 걸로 알고있습니다. 여기서 생기는 의문이 그럼 처음 서비스에서 세션 정보를 취득했을 때 그 정보를 클라이언트에서 상태 관리하여 사용하는 건지, 아니면 지속적으로 서버와 통신하여 가져오는건지 궁금합니다. 라우터 처리도 비슷한 질문인데요. 서버에도 리다이렉션이 있고, React에도 Router 라이브러리로 리다이렉션을 구현할 수 있는데 각각 어느 상황에서 쓰는건지 구분이 가지 않습니다. 초보적인 질문이라 좀 부끄럽네요.. 감사합니다!
개발자
#react
#express
답변 1
댓글 0
조회 50
일 년 전 · 상현 님의 답변 업데이트
Next.js server component(app router)의 auth 관련 질문 입니다.
안녕하세요. 이번에 Next.js(13)에서 최신 기술인 app router를 기반으로 자그마한 홈페이지를 구축 중에 있습니다. JWT 기반으로 SSR을 구축하고 있습니다. middlware로 어떻게 든 토큰 재발행이 가능한 로그인 구현을 완료 했습니다. 하지만 ServerComponent이다 보니, RSC에서 accesstoken 혹은 refreshtoken과 같은 인증 토큰이 만료 되었을 때, 재 발행을 하려면 어떻게 해야 할까요? cookie나 header는 접근은 가능해도 Set-Cookie를 내려 보내거나 할 수는 없는 걸로 문서에 나오고 실제로도 되지 않습니다. 어떻게 하면 ServerComponent에서 토큰을 재발행 하거나 다른 인증 방법이 있을 까요? 아니면 JWT + Session으로 가는 조합을 사용 해야 할까요??? 또, client와 server 간의 토큰 공유를 위해 access-token만 http-only를 해제하고 사용 중에 있습니다. 이게 cors나 csrf와 같은 공격에 취약한 문제가 있어서 이게 올바른 구현 방법일까요? 일단 제가 찾은 방법으로 가장 쉽게 해결되는 방법은 아직 실험 단계인 server action을 활성화 해서 클라이언트에서 토큰을 가지고 있을 필요가 없이 서버에서만 관리 하는 방법입니다. BFF을 일부 수용해서 해결 했습니다. front <-> BFF <-> api
개발자
#next.js-13
#oauth2.0
#jwt
답변 3
댓글 1
추천해요 1
조회 1,206
2년 전 · 정윤서 님의 질문
URLSession, Alamofire, Moya
iOS개발 중 서버 통신 할 때 사용하는 걸 이 세가지라고 들었는데 혹시 더 있나요? 더 있다면 어떤 게 있는지 서버 통신하는 방법을 익히고 싶은데 어떻게 해야할 지 감이 안와서 그러는데 혹시 아예 기본부터 차근차근 알려주는 블로그나 영상 같은 게 있다면 알려주세요!!
개발자
#서버
#swift
#ios-개발자
#ios
#서버연동
답변 0
댓글 0
조회 50
2년 전 · 커리어리 AI 봇 님의 새로운 답변
초보 개발 질문입니다. Spring Security를 사용해보려고 하는데 활용방법 있을까요?
환경 : Spring boot : 빠른 설정 추가를 위해서 사용합니다. jsp : jsp를 이용하지만 axios로 프론트-백엔드를 연결합니다. JPARepository : 쿼리 작성을 간편화 하기 위해 사용합니다. ORACLE : 사용하는 데이터 베이스 입니다. 하고 싶은 기능은 : Spring Security 를 통한 로그인, 로그인 시 jwt토큰 발급입니다. 로그인, 회원가입 기능을 구현중인데 Spring Security 라는 프레임워크가 있길래 사용해보려고합니다. 회원가입은 자체적으로 만들었는데 로그인 기능은 기존에 Controller - Service - DB 를 통해 DB에서 아이디, 비밀번호 일치하는지 확인하고 jsp를 이용했기 때문에 Session에 로그인 정보를 담아 주었습니다. 이번에는 axios를 통해 프론트엔드에서 요청을 보내면 서버에서 응답하는 방식을 사용해보려고합니다. (jsp + axios 입니다.) 그리고 로그인이 성공하면 jwt토큰을 발행해서 로그인을 유지시켜주려고 합니다. 그래서 대부분 Spring Security 와 jwt를 같이 사용하길래 저도 사용해보려고합니다. Spring Security를 사용하면 로그인, 인증, 토큰 관리 등을 더 편하게 사용할 수 있다고해서 사용해보려고하는데 Spring Security의 대표적으로 사용하는 기능은 또 무엇이 있을까요? 그리고 Spring Security를 사용하면 어떤 점에서 장점이 있을까요? 너무 부족한 질문들이라 죄송합니다. 답변해주시면 잘 참고하겠습니다.
개발자
#spring-security
#jwt
#spring-boot
답변 1
댓글 0
조회 225
2년 전 · 강경석(핸디) 님의 답변 업데이트
_app.tsx에서 session을 접근하고 싶어요.
next-auth.js를 사용 중이고 next.js 버전은 v13이에요. 새로이 가입한 유저일 경우 특정 페이지로 넘어가게 할려고 하는데 이에 대한 코드가 있을 적절한 위치가 _app.tsx인데 pageProps로 받은 session은 undefined이기도 해서 다른 방식으로 접근해야 하는지 할 수 있다면 어떤 방법인지 궁금합니다.
개발자
#next.js
답변 2
댓글 0
조회 541
2년 전 · 오두용 님의 답변 업데이트
next auth를 사용중인데 서버 컴포넌트에서 useSession을 사용하는 방법이 있을까요?
안녕하세요 next 13버전으로 프론트를 구현하고있습니다. 로그인은 next auth로 하고 있고 12버전에서 13으로 올리면서 useSession을 사용하는 부분에 에러가 발생합니다. Error: React Context is unavailable in Server Components next.js 13버전은 서버컴포넌트가 기본으로 알고 있어서 일반적인 방법으로는 useSession을 사용하지 못하는 것 같습니다. 혹시 서버 컴포넌트에서 next auth의 session값을 불러올 수 있는 방법이 있을까요?
개발자
#next.js
#next-auth
#server-component
답변 2
댓글 2
추천해요 1
조회 1,832
2년 전 · 코린이 님의 새로운 답변
Import 활성화가 안됩니다 ㅠㅠ
2주차에 파이썬 파이참 플라스크를 이용한 로그인 페이지를 구현중입니다 상단에 보시면 import에 session, redirect, url_for 이 세개가 비활성화되어있습니다 인터프리터를 추가해야되는건가요 아니면 어떤문제가 있는걸까요..?
개발자
##
##html
#python
답변 4
댓글 3
조회 253
2년 전 · 손정현 님의 답변 업데이트
postgreSQL Sequence Error 원인이 무엇인가요?
현재 postgreSQL DB, 시퀀스를 사용하고 있는 상태입니다. 에러 내용 : currval of sequence "시퀀스명" is not yet defined in this session select nextval('시퀀스명'); 현재 쿼리를 실행후 select currval('시퀀스명'); 쿼리를 실행하면 정상적으로 쿼리가 실행됩니다. 하지만 nextval로 시퀀스를 올리지않고 currval 현재 시퀀스를 조회하면 위와 같은 에러가 발생합니다. 왜 에러가 발생하는 건가요? 선배님들 도와주세요!
개발자
답변 1
댓글 1
추천해요 1
조회 171
3년 전 · 성원 님의 답변 업데이트
Type error: Property 'session' does not exist on type '{}' (nextjs auth google 연동)
next-auth 라이브러리를 사용해서 구글 로그인을 구현하고있는데 에러가 발생합니다. https://dantechblog.gatsbyjs.io/posts/next-auth/ 이 글을 따라서 연동중이고 import type { AppProps } from "next/app"; import {SessionProvider} from 'next-auth/react'; const App = ({Component, pageProps}:AppProps) => { return ( <SessionProvider session={pageProps.session}> <Component {...pageProps} /> </SessionProvider> ); } export default App; 위와 같이 작성한 코드에서 pageProps가 session 타입을 가지고 있지 않다고 에러가 나옵니다.. (Type error: Property 'session' does not exist on type '{}' ) 혹시 next-auth로 구글 연동하신 분들 같은 이슈 해결해본적 있으신가요??
개발자
답변 1
댓글 0
추천해요 3
조회 335
3년 전 · 이은재 님의 답변 업데이트
React native에서 local, session storage를 사용하고 싶어요.
Web에서 local storage나 session storage를 사용하는 것처럼 데이터를 기기나 접속 기준으로 사라지지 않게 저장해두려고 합니다. React native 에서 구현하려면 어떻게 해야 하는지 알 수 있을까요?
개발자
#react-native
답변 2
댓글 0
추천해요 1
조회 485
3년 전 · 문승욱(카이론) 님의 답변 업데이트
리액트와 boot로 프로젝트 진행중입니다
리액트와 boot로 프로젝트 진행중입니다 로그인 기능 구현중인데 boot에서 session.setAttribute로 세션을 넘겨주면 리액트에서 이 값을 어떻게 받을 수 있나요..? 이외에 boot를 백단으로 두고 로그인기능을 구현하는 방법은 어떤게 있을까요?
개발자
#백엔드
답변 1
댓글 0
추천해요 2
조회 715