묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[개념은 호옹~, 실습 빡] 스프링 부트, 입문!
15강 DTO ArticleForm 수정 후 새 데이터 입력 질문
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 데이터 수정 시 수정한 데이터의 id를 받아오기 위해서 ArticleForm에 toEntity 메소드 return을return new Article(null, title, content)에서 return new Article(id, title, content)로 수정하였는데요, 그렇게되면 새로운 데이터를 생성하는 ArticleController의 createArticle메소드에서 에러가 납니다. 처음 데이터 생성 시 id는 자동생성을 하게 해두고 new.mustache에서 id값을 input으로 받아오지 않았어서 그런것이라고 생각되는데, 혹시 해결 방법이 있을까요?
-
해결됨따라하며 배우는 리액트 A-Z[19버전 반영]
nextJS typescript 부분 메인페이지 ui
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.이 부분에서 저는 npm 설치 후에 index.tsx파일이 아래와 같은 형식으로 자동생성 되는데 강의영상에는 다르게 나오더라구요.. 혹시 이 부분이 어떤 차이인지 다름으로 인해서 문제가 되는지 알 수 있을까요??강의 영상 부분
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
Cause: zip END header not found 에러
캐시도 날려보고 프로젝트 재시작도 해봤는데 안됩니다.. jdk 11인데 왜 안되는 걸까요
-
미해결한 입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지
마지막에 말씀하신 내용이 잘 이해가 안갑니다.
안녕하세요.강의를 듣다가 마지막에 하신 말씀이 잘 이해가 안돼서 질문드립니다.복잡한 상태 관리 로직 분리하기 - useReducer의 22:31 부분에서"dispatch는 함수형 업데이트 그런거 필요 없이 호출하면 알아서 현재의 state를 참조해서 자동으로 해주니 useCallback을 사용하면서 dependency array를 걱정할 필요가 없다."라고 하셨는데 이게 무엇을 의미하는 말씀인지 말 모르겠습니다...
-
미해결따라하며 배우는 노드, 리액트 시리즈 - 레딧 사이트 만들기(NextJS)(Pages Router)
dispatch에서 const dispatch = useContext(DispatchContext); 가 console.log(dispatch)를 하면 null로 출력이 나옵니다.
안녕하세요 강사님,수업대로 코드를 작성해도 제목과 같이 원하지 않던 오류가 생겨 질문을 드립니다.아래와 같이 작성했을때, dispatch함수가 function이 아니라는 오류를 내뱉어, 원인을 찾았더니, useContext(DispatchContext)가 null인 원인이었습니다. 이를 어떻게 고쳐야 정상적으로 작동을 할지 잘 모르겠습니다.코드는 다음과 같습니다. import axios from "axios"; import { createContext, useContext, useEffect, useReducer } from "react"; import { User } from "../types"; interface State { authenticated: boolean; user: User | undefined; loading: boolean; } export const StateContext = createContext<State>({ authenticated: false, user: undefined, loading: true }); export const DispatchContext = createContext<any>(null); interface Action { type: string; payload: any; } const reducer = (state: State, { type, payload }: Action) => { switch (type) { case "LOGIN": return { ...state, authenticated: true, user: payload } case "LOGOUT": return { ...state, authenticated: false, user: null } case "STOP_LOADING": return { ...state, loading: false } default: throw new Error(`Unknown action type: ${type}`) } } export const AuthProvider = ({ children }: { children: React.ReactNode }) => { const [state, defaultDispatch] = useReducer(reducer, { user: null, authenticated: false, loading: true }) console.log("state", state); const dispatch = (type: string, payload?: any) => { defaultDispatch({ type, payload }); } return ( <DispatchContext.Provider value={dispatch}> <StateContext.Provider value={state}>{children}</StateContext.Provider> </DispatchContext.Provider> ) } export function useAuthState() { const state = useContext(StateContext); //if(!state) throw new Error("Provider is not found"); return state; } export function useAuthDispatch(){ const dispatch = useContext(DispatchContext); //if(!dispatch) throw new Error("Provider is not found"); return dispatch; } /** * * <AuthProvider> * <Component {...} /> => Component가 위의 children에 들어감 * </AuthProvider> * * */위는 context/auth 코드이고, 아래는 pages/api/login 코드입니다.import React, { useState, useContext, FormEvent} from 'react' import Link from "next/link" import axios from "axios" import InputGroup from "../components/InputGroup" import { useRouter } from 'next/router' import { useAuthDispatch, useAuthState, AuthProvider, StateContext, DispatchContext } from "../context/auth"; const Login = () => { let router = useRouter(); const [username, setUsername] = useState(""); const [password, setPassword] = useState(""); const [errors, setErrors] = useState<any>({}); const dispatch = useAuthDispatch(); //const dispatch = useContext(DispatchContext); const handleSubmit = async (event: FormEvent) =>{ event.preventDefault(); try{ const res = await axios.post("/auth/login",{password, username}, {withCredentials: true}); console.log("res: ",res); dispatch("LOGIN", res.data?.user) router.push('/'); }catch(error: any){ console.log(error || {}); //setErrors(error.response.data || {}); } } return ( <div className="bg-white"> <div className="flex items-center justify-content h-screen p-6"> <div className="w-10/12 h-2/4 mx-auto md:w-96"> <h1 className="mb-2 text-lg text-yellow-500 font-medium">로그인</h1> <AuthProvider> <form onSubmit={handleSubmit} className="h-1/2"> <InputGroup placeholder="Username" value={username} setValue={setUsername} error={errors.username} /> <InputGroup placeholder="Password" value={password} setValue={setPassword} error={errors.password} /> <button className="w-full py-2 text-xs font-bold text-white uppercase bg-gray-400 border border-gray-400 rounded"> 로그인 </button> </form> </AuthProvider> <small className="text-black"> 아직 아이디가 없나요? <Link href="/login"> <a className="ml-1 text-blue-500 uppercase">회원가입</a> </Link> </small> </div> </div> </div> ) } export default Login
-
미해결비전공자를 위한 개발자 취업 올인원 가이드 [통합편]
몇가지 질문이 있습니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
-
미해결탄탄한 백엔드 NestJS, 기초부터 심화까지
populate 사용시 500에러
populate를 사용하지 않을 때에는 올바르게 동작하나, populate를 사용할 경우에 다음과 같은 에러가 발생합니다.[Nest] 50421 - 2022. 11. 07. 오전 1:04:09 ERROR [ExceptionsHandler] Schema hasn't been registered for model "comments".Use mongoose.model(name, schema)MissingSchemaError: Schema hasn't been registered for model "comments".Use mongoose.model(name, schema) comments를 삽입하는 api는 올바르게 동작하고 mongodb의 cats.comments에 올바르게 데이터가 삽입되는 것을 확인했습니다. 수많은 시간을 시도했으나 해결하지 못했습니다. 저의 github repository를 첨부합니다. 에러 해결에 도움을 주셨으면 좋겠습니다.https://github.com/Jaew00Shin/nest-study감사합니다.
-
미해결Jenkins를 이용한 CI/CD Pipeline 구축
get_url - url 및 checksum 404 not found 발생시 해결법
안녕하세요, 질문이라기 보다는 다른 수강생들에게 정보 공유차 글 남깁니다. Tomcat 의 경우 버전 업데이트가 진행되면과거 버전 파일을 올리지 않아서, 예제 그대로 진행하면실제 파일 다운로드시 404 notfound 가 발생하는걸로 보여집니다.2022/11/6 기준 제가 사용한 스크립트는 다음과 같으며문제 발생시 https://dlcdn.apache.org/tomcat/tomcat-9/에서 버전 확인하여 스크립트 변경 진행해주시면 될 것 같습니다
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
tipp) css 적용 안되시는분들
boot strap 사이트에서 css js 폴더 복붙했는데 안되시면 (버젼 문제일수 있다고 해요) 해결 방법은 다음과 같습니다. 방법:강의 자료에서 코드 다운 받고 아래 폴더에서css jss 폴더 찾으신다음 그대로 static 에 복붙하고reload disk 한번 해주시면 될거에요 ex)jpashop-v20210728\src\main\resources\static
-
미해결
UNET 1회 epoch 만 하고 Evaluation 시에 발생하는 오류
train_isbi_2012.py를 1회 epoch학습 후 evaluation하기 위해 evaluate_isbi_2012.py를 실행하니 아래와 같이 오류가 발생하네요...이유를 알 수 있을까요? 2022-11-06 23:29:46.594995: W tensorflow/core/util/tensor_slice_reader.cc:96] Could not open saved_model_isbi_2012\unet_model: UNKNOWN: NewRandomAccessFile failed to Create/Open: saved_model_isbi_2012\unet_model : 액세스가 거부되었습니다.; Input/output errorTraceback (most recent call last):File "D:\UNET-tf2\evaluate_isbi_2012.py", line 89, in <module>app.run(main)File "C:\Users\chlee\venv39\lib\site-packages\absl\app.py", line 312, in runrunmain(main, args)File "C:\Users\chlee\venv39\lib\site-packages\absl\app.py", line 258, in runmainsys.exit(main(argv))File "D:\UNET-tf2\evaluate_isbi_2012.py", line 66, in mainunet_model.load_weights(FLAGS.checkpoint_path)File "C:\Users\chlee\venv39\lib\site-packages\keras\utils\traceback_utils.py", line 67, in error_handlerraise e.with_traceback(filtered_tb) from NoneFile "C:\Users\chlee\venv39\lib\site-packages\tensorflow\python\training\py_checkpoint_reader.py", line 45, in error_translatorraise errors_impl.OpError(None, None, error_message, errors_impl.UNKNOWN)tensorflow.python.framework.errors_impl.OpError
-
해결됨20년 경력자의 알기쉬운 컴퓨터네트워크
ospf 관련
eigrp처럼 네트워크 주소로 잘못 라우터를 설정하였는데 에러가 뜹니다... 어떻게 삭제 또는 수정해야하나요... ospf는 네트워크 주소로 넣으면 안되고 ip 주소를 넣어야하나요? 계속 에러가 뜰때는 작업중지를 CLI에서 어떻게 하나요? 다시 그냥 ip주소로도 했는데 에러가 계속 뜨는데 원인이 뭘까요... area id가 미스 매치라는데 ...
-
미해결스프링 시큐리티
로그인 기능 구현 안됨 ㅜㅜ
안녕하세요! 개인 프로젝트에 강의를 보면서 스프링 시큐리티를 입히고 있는 과정에서 문제가 있어서 문의드립니다!저의 SecurityConfig 클래스는 이렇게 되어있는데 로그인 시 스프링 시큐리티가 호출되지 않습니다 ㅜㅜ도대체 어디가 문제인 걸까요! 며칠째 삽질하다 문의 드립니다!package com.zhfvkq.dyshop.security; import com.zhfvkq.dyshop.member.service.CustomUserDetailsService; import com.zhfvkq.dyshop.security.provider.CustomAuthenticationProvider; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.boot.autoconfigure.security.servlet.PathRequest; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.config.annotation.authentication.configuration.AuthenticationConfiguration; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.WebSecurityCustomizer; import org.springframework.security.crypto.factory.PasswordEncoderFactories; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.security.web.SecurityFilterChain; @Slf4j @Configuration @RequiredArgsConstructor public class SecurityConfig { private final AuthenticationSuccess authenticationSuccess; private final AuthenticationFailure authenticationFailure; private final LogoutExecute logoutExecute; private final LogoutSuccess logoutSuccess; private final CustomUserDetailsService customUserDetailsService; private final AuthenticationEntryException authenticationEntryException; private final AccessDeniedHandlerException accessDeniedHandlerException; private String[] ignoredMatcherPattern = {"/", "/img/**", "/lib/**", "/member/**"}; @Bean public static PasswordEncoder passwordEncoder() { return PasswordEncoderFactories.createDelegatingPasswordEncoder(); } @Bean public CustomAuthenticationProvider customAuthenticationProvider() { return new CustomAuthenticationProvider(); } @Bean public AuthenticationManager authenticationManager(AuthenticationConfiguration authConfiguration) throws Exception { return authConfiguration.getAuthenticationManager(); } @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http .authorizeRequests() .anyRequest().authenticated() ; http.formLogin() // 로그인 .loginPage("/member/login") .usernameParameter("userId") .passwordParameter("password") .loginProcessingUrl("/member/login") .successHandler(authenticationSuccess) .failureHandler(authenticationFailure) .permitAll() ; http.logout() // 로그아웃 .logoutUrl("/member/logout") // default post .logoutSuccessUrl("/") .invalidateHttpSession(true) // 세션 무효화 .deleteCookies("SESSION", "JSESSIONID", "remember-me") .addLogoutHandler(logoutExecute) .logoutSuccessHandler(logoutSuccess) ; http.rememberMe() // 사용자 저장 .rememberMeParameter("idMaintain") // default 파라미터는 remember-me .tokenValiditySeconds(604800) // 7일로 설정(default 14일) .alwaysRemember(false) .userDetailsService(customUserDetailsService) ; http.sessionManagement() .maximumSessions(1) // -1 무제한 .expiredUrl("/member/login") // 세션 만료 ; http.exceptionHandling() // Exception 처리 .authenticationEntryPoint(authenticationEntryException) // 인증 예외 .accessDeniedHandler(accessDeniedHandlerException) // 인가 예외 ; return http.build(); } /** * 정적 자원 및 루트 페이지 ignore */ @Bean public WebSecurityCustomizer webSecurityCustomizer() { return (web) -> web.ignoring() .requestMatchers(PathRequest.toStaticResources().atCommonLocations()) .antMatchers(ignoredMatcherPattern); } } 제 깃허브도 같이 전달 드립니다!https://github.com/zhfvkqHub dyshop프로젝트
-
해결됨20년 경력자의 알기쉬운 컴퓨터네트워크
eigrp 설정후 문제
eigrp 설정 후 show ip ro를 했을때 eigrp가 설정된게 뜨지 않는데 어떻게 해야하나요...
-
미해결[2026년 출제기준] 웹디자인개발기능사 실기시험 완벽 가이드
.sub-back
<!DOCTYPE html> <html lang="ko"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>산업대학교</title> <link rel="stylesheet" href="css/style.css"> </head> <body> <div class="container"> <div class="header-inner"> <header> <div class="header-logo"> <a href="#none"> <img src="images/logo-header.png" alt="header logo"> </a> </div> <div class="navi"> <ul class="menu"> <li> <a href="#none">대학소개</a> <div class="sub-menu"> <a href="#none">총장인사말</a> <a href="#none">학교소개</a> <a href="#none">홍보관</a> <a href="#none">캠퍼스안내</a> </div> </li> <li> <a href="#none">입학안내</a> <div class="sub-menu"> <a href="#none">수시모집</a> <a href="#none">정시모집</a> <a href="#none">편입학</a> <a href="#none">재외국민</a> </div> </li> <li> <a href="#none">정보서비스</a> <div class="sub-menu"> <a href="#none">대학정보알림</a> <a href="#none">정보공개</a> <a href="#none">정보서비스안내</a> </div> </li> <li> <a href="#none">커뮤니티</a> <div class="sub-menu"> <a href="#none">공지사항</a> <a href="#none">참여게시판</a> <a href="#none">자료실</a> </div> </li> </ul> <div class="sub-back"></div> </div> </header> </div> <div class="content-inner"> <div class="slide"> <div> <a href="#none"> <img src="images/slide-01.jpg" alt="slide1"> <img src="images/slide-02.jpg" alt="slide2"> <img src="images/slide-03.jpg" alt="slide3"> </a> </div> </div> <div class="items"> <div class="news"> <div class="tab-inner"> <div class="btn"> <span>공지사항</span> </div> <div class="tab1"> <a href="#none">산업대학교 동문회장배 자선골프대회<b>2016-09-12</b></a> <a href="#none">개교 100주년 기념 야외 오페라 초청<b>2016-09-10</b></a> <a href="#none">동문회장 및 운영위원장 후보자 추천<b>2016-09-09</b></a> <a href="#none">진행위원회(정회원) 선발 결과<b>2016-09-07</b></a> <a href="#none">산업대학교 동문회 개최일 변경<b>2016-08-30</b></a> </div> </div> </div> <div class="gallery"> <div class="tab-inner"> <div class="btn"> <span>갤러리</span> </div> <div class="tab2"> <a href="#none"> <img src="images/gallery-01.jpg" alt="gallery1"> <img src="images/gallery-02.jpg" alt="gallery2"> <img src="images/gallery-03.jpg" alt="gallery3"> </a> </div> </div> </div> <div class="banner"> <a href="#none"> <img src="images/banner.jpg" alt="banner"> </a> </div> </div> </div> <div class="footer-inner"> <footer> <div class="Copyright"> <div></div> <div></div> </div> <div class="family-site"></div> </footer> </div> </div> <script src="script/jquery-1.12.4.js"></script> <script src="script/custom.js"></script> </body> </html> @charset "UTF-8"; body { margin: 0; background-color: #ffffff; color: #333333; font-size: 15px; } a { color: #333333; text-decoration: none; } .container {} .header-inner { border: 1px solid red; } header { height: 100px; width: 1200px; margin: auto; } header > div { /* border: 1px solid blue; */ height: 100px; position: relative; z-index: 10; } .header-logo { width: 200px; float: left; line-height: 130px; } .navi { width: 600px; float: right; margin-right: 20px; } .content-inner {} .slide { width: 1200px; margin: auto; margin-bottom: 20px; } .slide > div { /* border: 1px solid green; */ height: 300px; } .items { width: 1200px; margin: auto; overflow: hidden; } .items > div { /* border: 1px solid blue; */ height: 200px; float: left; box-sizing: border-box; } .news { width: 425px; } .gallery { width: 425px; } .banner { width: 350px; } .footer-inner { border: 1px solid red; } footer { height: 100px; width: 1200px; margin: auto; overflow: hidden; } footer > div { border: 1px solid green; height: 100px; float: left; box-sizing: border-box; } .Copyright { width: 1000px; } .Copyright div { border: 1px solid black; height: 50px; } .family-site { width: 200px; } /* slide */ .slide { position: relative; width: 1200px; height: 300px; overflow: hidden; } .slide > div { position: absolute; width: 3600px; font-size: 0; top: 0; left: 0; animation: slide 10s linear infinite; } @keyframes slide { 0% { left: 0; } 30% { left: 0; } 35% { left: -1200px; } 65% { left: -1200px; } 70% { left: -2400px; } 95% { left: -2400px; } 100% { left: 0; } } /* news & gallery */ .tab-inner { width: 95%; margin: auto; } .btn {} .btn span { border: 1px solid #000000; display: inline-block; width: 100px; text-align: center; padding: 5px; border-radius: 5px 5px 0 0; border-bottom: none; margin-bottom: -1px; background-color: #ffffff; } .tab1, .tab2 { border: 1px solid #000000; padding: 0 15px; height: 160px; } .tab1 a { display: block; padding: 5px; border-bottom: 1px solid #000000; } .tab1 a:last-child { border-bottom: none; } .tab1 a b { float: right; font-weight: normal; } .tab2 { text-align: center; } .tab2 img { width: 120px; padding-top: 25px; } .banner img { width: 96%; } /* navigation */ .menu { list-style: none; padding: 0; padding-top: 52px; border: 1px solid red; } .menu li { border: 1px solid black; float: left; width: 25%; box-sizing: border-box; text-align: center; } .menu li > a { border: 1px solid #000000; display: block; padding: 5px; transition: 0.5s; } .menu li:hover > a { background-color: #000000; color: #ffffff; } .sub-menu { border: 1px solid #000000; } .sub-menu a { display: block; padding: 5px; color: #ffffff; transition: 0.5s; } .sub-menu a:hover { background-color: #ffffff; color: #000000; } .sub-back { background-color: #000000; width: 1200px; height: 140px; position: absolute; left: 0; top: 100%; z-index: -1; }배경색이 왼쪽으로 이동이 안됩니다.- 먼저 유사한 질문이 있었는지 검색해주세요.- 궁금한 부분이 있으시면 해당 강의의 타임라인 부분을 표시해주시면 좋습니다.- HTML, CSS, JQUERY 코드 소스를 텍스트 형태로 첨부해주시고 스크린샷도 첨부해주세요.- 다운로드가 필요한 파일은 해당 강의의 마지막 섹션에 모두 있습니다.
-
미해결모두의 깃 & 깃허브
더하는 커밋 뿐인데 빨간 줄이 생겨요
제가 E 만 더해서 커밋 해주었는데 커밋이 올라가는 상세 내용을 보면 D를 빼주고 그 다음에 E와 D를 같이 올린게 이 커밋이라고 합니다. 이것 뿐만 아니라 다른 알파벳을 더해줄때도 그렇습니다 .왜 그러는 걸까요?
-
미해결윤재성의 스프링 프레임워크 개발자를 위한 실습을 통한 입문 과정
7강 loc컨테이너 질뮨이용..
ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("config/beans.xml");// 별도 설정하지 않으면 빈객체를 자동생성한다고 하셧는데왜 자동생성이되면서 생성자가 호출되는건가여? 원래 생성되면서 생성자가 호출되는건가여?
-
미해결탄탄한 백엔드 NestJS, 기초부터 심화까지
이미지 업로드 관련 질문
’Multer와 미디어 파일 서비스‘ 강의에서 질문이 있습니다.http://localhost:8000/media/cats/${fileName} 형식으로 나타내는데 여기서 media가 갑자기 어떻게 나온건지 궁금합니다.그리고 저의 경우에는 다음 경로로 이미지를 생성했을 때 이미지가 나타나지 않고{ "success": false, "timestamp": "2022-11-06T12:52:22.427Z", "statusCode": 404, "message": "Cannot GET /media/cats/EDIT%20&%20EXPORT_IG%20Feed%201200x12001667739124052.png", "error": "Not Found"} 이런 형식의 json이 나타납니다. 어떻게 해결해야 할지 몰라서 질문합니다. 감사합니다.
-
미해결재고시스템으로 알아보는 동시성이슈 해결방법
동시성 질문있습니다!
안녕하세요 좋은 강의 잘들었습니다.동시성 관련 공부하다보니 헷갈리는 부분이 있어서 질문드립니다.답변 부탁드립니다 :)java에서는 동기화를 제공하기위해 synchronized와 volatile, 아토믹 클래스를 이용해서 동시성을 보장한다고 알고있습니다. 근데 이게 단일 서버 싱글 코어 환경에서만 국한되는 내용이구요, 반면에 단일 서버 멀티 코어 환경에서는 아토믹클래스로 데이터의 가시성 및 원자성을 보장해주는것으로 알고있습니다. 그렇다면 분산서버 환경에서는 싱글코어든 멀티코어든 어플리케이션단에서는 동시성을 보장할 방법이 없게되고, 강의에서처럼 디비락을 통하여 동시성을 보장하는 방법이 정답이라고 이해하면 될까요?두번째 질문은 분산서버 관련 내용이긴한데요, 요요즘 많이 사용하는 msa 서버 환경에서 비즈니스 도메인 단위로 서버를 두는것으로 알고있는데, 그렇다면 재고관리에 대한 로직은 한대의 서버에 담아 두게되고, 디비락 없이 자바동기화 방법으로도 해결이 될 것같은데 속도적인 측면에서 redis를 사용하는것일까요? 아니면 기업마다 인프라를 구축하는 방법이 다른 부분일까요?
-
미해결[2026년 출제기준] 웹디자인개발기능사 실기시험 완벽 가이드
공지사항, 갤러리 tab 부분
.tab-inner .tab, .gallery-inner .tab { border: 1px solid black; padding: 0 10px; height: 145px; } 부분에 갤러리도 같이 묶었는데 갤러리 부분만 반영되지 않습니다.실제 문제를 보니 공지사항과 tab 부분에 border값을 넣지 않던데 큰 상관이 없는 건가요?<!DOCTYPE html> <html lang="ko"> <head> <meta charset="UTF-8"> <title>레이아웃 가로고정형-공지사항, 갤러리 별도구성</title> <link rel="stylesheet" href="css/style.css"> </head> <body> <div class="container"> <header> <div class="header-logo">로고</div> <div class="navi">네비게이션</div> </header> <div class="slide"> <div>이미지 슬라이드</div> </div> <!--아이템--> <div class="items"> <div class="news"> <div class="tab-inner"> <div class="btn"> <span>공지사항</span> </div> <div class="tab"> <a href="#none">SNS 발송 서비스 개선작업 <b>2020.01.09</b></a> <a href="#none">휴대폰 인증 서비스 개선 작업 <b>2020.01.07</b></a> <a href="#none">카드사 부분 무이자 할부 이벤트 <b>2019.12.31</b></a> <a href="#none">올앳 서비스 작업 안내 <b>2019.12.20</b></a> <a href="#none">휴대폰 결제 시스템 작업 안내 <b>2019.12.20</b></a> </div> </div> </div> <div class="gallery"> <div class="gallery-inner"> <div class="btn"> <span>갤러리</span> </div> </div> <div class="tab"> <a href="#none"><img src="images/gallery-01.jpg" alt="gallery1"></a> <a href="#none"><img src="images/gallery-02.jpg" alt="gallery1"></a> <a href="#none"><img src="images/gallery-03.jpg" alt="gallery1"></a> </div> </div> <div class="banner">배너</div> </div> <footer> <div class="footer-logo">로고</div> <div class="copyright">copyright</div> <div class="sns">sns</div> </footer> </div> </body> </html> .container { border: 2px solid gray; width: 1200px; margin: auto; } header { height: 100px; } header > div { background-color: rgb(185, 185, 185); height: 100px; } .header-logo { width: 200px; float: left; } .navi { width: 660px; float: right; } /* Content */ .slide {} .slide > div { border: 1px solid gray; height: 300px; } .items { overflow: hidden; } .items > div { height: 200px; float: left; box-sizing: border-box; /*border: 1px solid gray;*/ } .news { width: 500px; } .gallery { width: 350px; } .banner { border: 1px solid black; width: 350px; } /*Footer*/ footer { overflow: hidden; } footer > div { border: 1px solid gray; height: 100px; float: left; box-sizing: border-box; } .footer-logo { width: 200px; } .copyright { width: 800px; } .sns { width: 200px; } /* Tab Content */ .tab-inner, .gallery-inner { width: 95%; margin: auto; } .tab-inner .btn {} .tab-inner .btn span, .gallery-inner .btn span { border: 1px solid black; display:inline-block; width: 100px; text-align: center; padding: 5px; border-radius: 5px 5px 0 0; border-bottom: none; margin-bottom: -1px; background-color: white; } .tab-inner .tab, .gallery-inner .tab { border: 1px solid black; padding: 0 10px; height: 145px; } .tab-inner .tab a { display: block; padding: 3px; border-bottom: 1px solid black; text-decoration: none; color: black; } .tab-inner .tab a:last-child { border-bottom: none; } .tab-inner .tab a b { float: right; font-weight: normal; } /* gallery Content */ .gallery .tab img { width: 100px; } .gallery .tab { text-align: center; padding-top: 30px; box-sizing: border-box; }
-
미해결Slack 클론 코딩[실시간 채팅 with React]
3095포트로 요청이 가지 않습니다.
devServer: { historyApiFallback: true, // react router port: 3090, devMiddleware: { publicPath: '/dist/' }, static: { directory: path.resolve(__dirname) }, proxy: { '/api/': { target: 'http://localhost:3095', changeOrigin: true, }, }, },-> webpack.config.ts if (prod) { app.enable("trust proxy"); app.use(morgan("combined")); app.use(helmet({ contentSecurityPolicy: false })); app.use(hpp()); } else { app.use(morgan("dev")); // app.use( // cors({ // origin: true, // credentials: true, // }) // ); }-> back > app.js 에서 주석한 부분 const onSubmit = useCallback((e: React.FormEvent<HTMLFormElement>): void => { e.preventDefault(); console.log(email, nickname, password, passwordCheck); if (!mismatchError && nickname) { console.log("회원가입 하러가기!"); setSignUpError('') // 비동기 요청전에 초기화 한번 해주기 setSignUpSuccess(false); axios.post('/api/users', { email, nickname, password, }) .then((response) => { console.log(response); setSignUpSuccess(true); }) .catch((err) => { console.log(err.response); setSignUpError(err.response.data); }); } }, [email, nickname, password, passwordCheck]);-> SignUp axios 부분 const onSubmit = useCallback((e: React.FormEvent<HTMLFormElement>) => { e.preventDefault(); setLogInError(false); axios.post( 'api/users/login', { email, password }, { withCredentials: true } ) .then(() => { }) .catch((error) => { }) }, []);-> LogIn axios 부분 -> 회원가입 시 3090 포트로 요청이 갑니다.-> 로그인 시도 마찬가지로 3090 포트로 요청이 갑니다. 검색도 해보고 /api/를 /api로도 바꿔봤는데, 마땅한 해결책을 찾을수가 없어서 질문드립니다.