묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 시큐리티
provider안쪽에
log.info("username : "+username); log.info("password : "+password ); AccountContext accountContext = (AccountContext) userDetailsService.loadUserByUsername(username);이부분에서 Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exceptionjava.lang.NullPointerException: null이에러가나는데@Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { log.info("로그로그로그");여기 자체로 넘어오지를 않습니다.어떤거를 손봐야할까요..@RequiredArgsConstructor public class CustomUserDetailsService implements UserDetailsService { private final UserRepository userRepository;지금 보통 RequiredArgsConstructor 로 초기화중입니다.빼고 해봐도 별차이가없네요.. @Getter public class AccountContext extends User { private Account account; public AccountContext(Account account, ArrayList<GrantedAuthority> roles) { super(account.getUsername(), account.getPassword(), roles); this.account = account; } }AccountContext 코드입니다.제가 혼자 해보려고해도 시간이많이없어서 질문올립니다..오래된강의인거는 알고있었지만 너무많이 바뀐거같아요..
-
미해결탄탄한 백엔드 NestJS, 기초부터 심화까지
Module Provider 관련 추가 질문
먼저 보다 자세한 설명을 해주기 위해 이렇게 보충강의도 올려주신점 감사드립니다! 그리고 설명도 이해가 아주 잘 되었습니다.간단한 질문인데요, 비단 AppModule 뿐만 아니라 A Module에서 B Module의 Provider를 등록하면 결과적으로 의존성 주입이 되서 서버가 실행되더라구요 원래 그런건가요 ?? 그리고 결국 이것도 안좋은 패턴이니 하지 말아야하는게 맞겠죠 ?
-
미해결스프링부트 시큐리티 & JWT 강의
강사님 마지막 강의 질문이 있습니다!
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 좋은 강의 너무 잘 들었습니다.!스프링 시큐리티랑 jwt 너무 막막했었는데 이 강의 듣고 진짜 이해가 잘 갔어요! 배운 내용 복습만 해도 시큐리티 부분은 충분할것 같아요 정말 감사드립니다 😊 마지막 강의까지 다 들었는데 오류가 나서 문의 드립니다super를 지우기 전에는 로그인 후 /user 로 해도 403에러가 떴었는데 super를 지우면 아무것도 안 뜨는데 어떤게 잘못된건지 알 수 있을까요?마지막 부분 JwtAuthorizationFilter 클래 doFilterInternal 메서드에서 super부분을 지우면 아예 Controller를 안 타는것 같아서요ㅜ http://localhost8080/api/v1/user 로 보내면 403이나 500등 에러코드도 안 뜨고 인텔리제이에서도 따로 에러 로그도 안 뜨는데 무슨 문제인지 모르겠어서 질문 드립니다ㅜnellizi/jwt (github.com) 깃허브 주소입니다!
-
해결됨디자인 시스템 with 피그마
*2, *3, *4 하면 안될까요?
안녕하세요 범쌤! 강의 잘 보고있습니다. 감사합니다.보던중에 궁금한 점이 있어서요.Spacing값을 직전함수?에 더하는 방식으로 작업해주신 이유가 base값이 변했을 때 반영되게라고 해주셨는데요.그냥 {Spacing.baseSpacing}*2, {Spacing.baseSpacing}*3, {Spacing.baseSpacing}*4, ...이런식으로 해주는것과 나중에 차이가 있을까요?처음에만 곱하고 나중엔 더하는게 헷갈려서요.
-
미해결CS 지식의 정석 | 디자인패턴 네트워크 운영체제 데이터베이스 자료구조
재귀함수 관련 강의 추가 가능할까요?
재귀적으로 생각하는 방법과 재귀 함수를 사용했을 때 디버깅하는 방법을 알고 싶습니다. 특히 재귀 함수가 여러 줄에서 여러 번 호출됐을 경우와 재귀 호출의 결과를 변수에 저장해서 다른 함수의 매개변수로 사용됐을 때 어떤 방식으로 동작하는지와 재귀적으로 생각하는 방법 디버깅하는 방법을 알고 싶습니다. DEEP DIVE에 하노이탑 문제 구현해주세요
-
미해결Jenkins를 이용한 CI/CD Pipeline 구축
docker 이미지 다운로드 불가
[Windows환경에서 SSH+Docker 컨테이너 기동 시 발생하는 오류 해결] 관련하여 문의드립니다... Windows 1) docker run --privileged --name docker-server -itd -p 10022:22 -p 8081:8080 -e container=docker -v /sys/fs/cgroup:/sys/fs/cgroup edowon0623/docker:latest /usr/sbin/init위 명령어로 컨테이너 실행 시, 이미지는 잘 다운받아지지만 ssh 접속시 아래와 같은 메시지가 나옵니다.docker run --privileged --name docker-server -itd -p 10022:22 -p 8081:8080 -e container=docker -v /sys/fs/cgroup:/sys/fs/cgroup edowon0623/docker:latest /usr/sbin/init $ ssh root@localhost -p 10022 kex_exchange_identification: Connection closed by remote host Connection closed by ::1 port 10022 도커 데스크탑에서 컨테이너 상세 내역을 보니 아래와 같이 나옵니다.. Windows 2, 위 명령어로 실행되지 않을 때) docker run -itd --name docker-server -p 10022:22 -e container=docker --tmpfs /run --tmpfs /tmp -v /sys/fs/cgroup:/sys/fs/cgroup:ro -v /var/run/docker.sock:/var/run/docker.sock edowon0623/docker:latest /usr/sbin/init위 명령어 실행시, 이미지 다운로드 자체가 불가합니다.$ docker run -itd --name docker-server -p 10022:22 -e container=docker --tmpfs /run --tmpfs /tmp -v /sys/fs/cgroup:/sys/fs/cgroup:ro -v /var/run/docker.sock:/var/run/docker.sock edowon0623/docker:latest /usr/sbin/init docker: Error response from daemon: invalid mount path: 'C' mount path must be absolute. See 'docker run --help'.윈도우 환경입니다....
-
미해결스프링 시큐리티
질문
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 안녕하세요실전프로젝트 -인증 프로세스 Form 인증 구현 - 1강을 듣고 따라하고있는데저는 user ID로 로그인했을때 /messages에도 접근가능한데 왜 이럴까요 ㅠㅠ@Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Bean public PasswordEncoder passwordEncoder() { return PasswordEncoderFactories.createDelegatingPasswordEncoder(); } //사용자 추가 @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { String password = passwordEncoder().encode("1111"); auth.inMemoryAuthentication().withUser("user").password(password).roles("USER"); auth.inMemoryAuthentication().withUser("manager").password(password).roles("MANAGER"); auth.inMemoryAuthentication().withUser("admin").password(password).roles("ADMIN"); } @Override protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests() .antMatchers("/").permitAll() //루트 페이지는 전부 접근 가능 .antMatchers("/config").hasRole("ADMIN") .antMatchers("/messages").hasRole("MANAGER") .antMatchers("/mypage").hasRole("USER") .anyRequest().authenticated() .and() .formLogin(); } }@Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Bean public PasswordEncoder passwordEncoder() { return PasswordEncoderFactories.createDelegatingPasswordEncoder(); } //사용자 추가 @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { String password = passwordEncoder().encode("1111"); auth.inMemoryAuthentication().withUser("user").password(password).roles("USER"); auth.inMemoryAuthentication().withUser("manager").password(password).roles("MANAGER"); auth.inMemoryAuthentication().withUser("admin").password(password).roles("ADMIN"); } @Override protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests() .antMatchers("/").permitAll() //루트 페이지는 전부 접근 가능 .antMatchers("/config").hasRole("ADMIN") .antMatchers("/messages").hasRole("MANAGER") .antMatchers("/mypage").hasRole("USER") .anyRequest().authenticated() .and() .formLogin(); } }있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
-
미해결웹 게임을 만들며 배우는 React
웹팩 설정 질문
안녕하세요.리액트 강의보다가 요즘에는 cra로 하면 웹팩설정을 따로 할 필요가 없다고 하던데 그러면 웹팩부분은 신경 안써도 되는건가요?
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
Next 페이지별 컴포넌트 사용
next의 라우팅에서 컴포넌트 사용에 대해 질문드립니다우선 components와 pages의 구성은 이런식으로 되어있는데요 |-- components |-- AppLayout.js --> 부모 |-- Nav.js --> AppLayout의 자식 |-- NavItem.js --> Nav의 자식|-- pages |-- store |-- index.js |-- upload.js|-- index.jsAppLayout은 모든 페이지에서 사용 되고있습니다 여기서 store로 시작되는 페이지에선 NavItem이 사용 되지 않습니다.'/store', '/store/upload' 이 처럼 /store으로 시작하는 주소에선 모두 NavItem을 렌더링 하고싶지 않은데 방법이 있을까요? 키워드를 몰라서 그런건지.. 구글링으로 도저히 찾을수가없어서 질문드립니다.
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
typescript getServerSideProps 에러
type script, redux toolkit으로 진행하고 있습니다.getServerSideProps에서 type에러가 나고 있는데 검색으로도 해결이 어렵습니다. .ㅜㅜ store설정에 문제가 있는걸까요 ..? /pages/index.tsx export const getServerSideProps = wrapper.getServerSideProps( async (context: any) => { context.store.dispatch(loadMyInfoRequest()); context.store.dispatch(loadPostRequest(undefined)); context.store.dispatch(END); await context.store.sagaTask.toPromise(); } ); //에러메세지 Argument of type '(context: any) => Promise<void>' is not assignable to parameter of type 'GetServerSidePropsCallback<EnhancedStore<any, AnyAction, SagaMiddleware<object>[]>, any>'. Type 'Promise<void>' is not assignable to type 'GetServerSideProps<any, ParsedUrlQuery, PreviewData>'. Type 'Promise<void>' provides no match for the signature '(context: GetServerSidePropsContext<ParsedUrlQuery, PreviewData>): Promise<GetServerSidePropsResult<any>>'. /store/config.ts import { applyMiddleware, compose, configureStore } from "@reduxjs/toolkit"; import axios from "axios"; import createSagaMiddleware from "redux-saga"; import { all, fork } from "redux-saga/effects"; import { authSaga } from "../sagas/auth.saga"; import { postSaga } from "../sagas/post.saga"; import { createWrapper } from "next-redux-wrapper"; import { composeWithDevTools } from "@reduxjs/toolkit/dist/devtoolsExtension"; import rootReducer from "../reducers"; axios.defaults.baseURL = "http://localhost:3001"; axios.defaults.withCredentials = true; const sagaMiddleware = createSagaMiddleware(); const middlewares = [sagaMiddleware]; const enhancer = process.env.NODE_ENV === "production" ? compose(applyMiddleware(...middlewares)) : composeWithDevTools(applyMiddleware(...middlewares)); export const store = configureStore({ reducer: rootReducer, middleware: [sagaMiddleware], devTools: process.env.NODE_ENV !== "production", enhancers: [enhancer], }); function* rootSaga() { yield all([fork(authSaga), fork(postSaga)]); } sagaMiddleware.run(rootSaga); const wrapper = createWrapper(() => store); export default wrapper;
-
미해결Vue.js 완벽 가이드 - 실습과 리팩토링으로 배우는 실전 개념
깃 권한 요청드립니다.
인프런 아이디 : yoonmin9411인프런 이메일 : yoonmin9411@medialog.co.kr깃헙 아이디: shineminscat@naver.com깃헙 Username: shineminscat
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
Memory Pool#2 삭제 Lockfree stack 과의 값 교환 차이가....?
이전에 Lock free stack 에서는 ABA problem 이 발생하지 않는다고 별도로 들고 있었기 때문이라고 하셨는데 이전에도 링크드 리스트 처럼 포인터를 들고 있던 방식이고 현재 이것도 그것과 유사한 방식인데 왜 이전에는 ABA 가 발생하지 않았다고 하는건지 잘 이해가 가질 않네요 이전 lock free stack 에서 삭제 할때의 로직과 크게 달라보이진 않는것 같은데요..이전 lock free stack 에서도 ABA Problem 이 발생하지 않나요?차이점이 명확하게 어떤 부분인지 모르겠습니다..답변좀 부탁드려요! Memory Pool#2 시간은 26:55 초에서 정도에서..
-
미해결Slack 클론 코딩[실시간 채팅 with React]
proxy 504 에러
몇 번 재확인 해도 webpack proxy 설정을 잘 한 것 같은데혹시 proxy 설정을 보여주신대로 하면 network에 Request URL이 3095로 되는게 정상 아닌가요?dev server 껐다 다시 실행, localhost를 127.0.0.1로 바꿔서 실행도 해봤습니다. 웹팩이 제대로 연결(?)이 안된건지.. 504 Gateway timeout은 새로고침하거나 네트워크 장치를 다시시작하라는데,. 좀 더 구글링 해보겠습니다. 근데 이게 근본적인 원인은 아닌것같아서.. 질문남깁니다.
-
미해결C 프로그래밍 - 입문부터 게임 개발까지
질문있습니다!
자꾸 알 수 없는 오류가 발생해서 여기저기 찾아보고 해결해보려고 헤더에 <stdlib.h>도 넣고 해봤고 나도코딩 님께서 올리신 소스코드를 그대로 복사 붙여넣기 해서 실행하는데도 아래 사진과 같은 상태로 에러가 나서 여쭤봅니다.혹시 왜 에러가 나는지, 그리고 그 해결법을 알 수 있을까요..?혹시 몰라 소스코드도 첨부합니다.#include <stdio.h>#include <time.h>#include <stdlib.h>// 10마리의 서로 다른 동물 (각 카드 2장씩)// 사용자로부터 2개의 입력값을 받아서 -> 같은 동물 찾으면 카드 뒤집기// 모든 동물 쌍을 찾으면 게임 종료// 총 실패 횟수 알려주기int arrayAnimal[4][5]; // 카드 지도 (20장의 카드)char* strAnimal[10]; // 10개의 공간배열을 만드는데, 거기에 들어가는게 문자 포인터int checkAnimal[4][5]; // 뒤집혔는지 여부 확인void initAnimalArray();void initAnimalName();void shuffleAnimal();int getEmptyPosition();int conv_pos_x(int x);int conv_pos_y(int y);void printAnimals();void printQuestion();int foundAllAnimals();int main(void){ srand(time(NULL)); initAnimalArray(); initAnimalName(); shuffleAnimal(); int failCount = 0; // 실패 횟수 while (1) { int select1 = 0; // 사용자가 선택한 처음 수 int select2 = 0; // 사용자가 선택한 두번째 수 printAnimals(); // 동물 위치 출력 printQuestion(); // 문제 출력 (카드 지도) printf("뒤집을 카드를 2개 고르세요 : "); scanf_s("%d %d", &select1, &select2); if (select1 == select2) // 같은 카드 선택 시 무효 continue; // 좌표에 해당하는 카드를 뒤집어 보고 같은지 안 같은지 확인 // 정수 좌표를 (x,y) 로 변환 int firstSelect_x = conv_pos_x(select1); int firstSelect_y = conv_pos_y(select1); int secondSelect_x = conv_pos_x(select2); int secondSelect_y = conv_pos_y(select2); // 카드가 뒤집히지 않았는지 확인하고 같은 동물인지 확인 if ((checkAnimal[firstSelect_x][firstSelect_y] == 0 && checkAnimal[secondSelect_x][secondSelect_y] == 0) && (arrayAnimal[firstSelect_x][firstSelect_y] == arrayAnimal[secondSelect_x][secondSelect_y]) ) { printf("\n\n빙고! : %s 발견!\n\n", strAnimal[arrayAnimal[firstSelect_x][firstSelect_y]]); checkAnimal[firstSelect_x][firstSelect_y] = 1; checkAnimal[secondSelect_x][secondSelect_y] = 1; } else // 다른 동물인 경우 { printf("\n\n 땡!! (틀렸거나, 이미 뒤집힌 카드입니다)\n"); printf("%d : %s\n", select1, strAnimal[arrayAnimal[firstSelect_x][firstSelect_y]]); printf("%d : %s\n", select2, strAnimal[arrayAnimal[secondSelect_x][secondSelect_y]]); printf("\n\n"); failCount++; } if (foundAllAnimals() == 1) { printf("\n\n축하합니다! 모든 동물을 다 찾았네요 \n"); printf("지금까지 총 %d 번 실수하였습니다.\n", failCount); break; } } return 0;}void initAnimalArray(){ for (int i = 0; i < 4; i++) { for (int j = 0; j < 5; j++) { arrayAnimal[i][j] = -1; } }}void initAnimalName(){ strAnimal[0] = "원숭이"; strAnimal[1] = "하마"; strAnimal[2] = "강아지"; strAnimal[3] = "고양이"; strAnimal[4] = "호랑이"; strAnimal[5] = "사자"; strAnimal[6] = "돼지"; strAnimal[7] = "코끼리"; strAnimal[8] = "기린"; strAnimal[9] = "낙타";}void shuffleAnimal(){ // ㅁㅁㅁㅁㅁ 0 1 2 3 4 // ㅁㅁㅁㅁㅁ 5 6 7 8 9 // ㅁㅁㅁㅁㅁ 10 11 12 13 14 // ㅁㅁㅁㅁㅁ 15 16 17 18 19 // 이 배열에서 빈 공간 두 곳에 랜덤으로 동물을 배치 for (int i = 0; i < 10; i++) { for (int j = 0; j < 2; j++) { int pos = getEmptyPosition(); // 비어있는 위치 반환 int x = conv_pos_x(pos); int y = conv_pos_y(pos); // 반환한 값을 (x,y) 좌표로 변환 arrayAnimal[x][y] = i; } }}// 좌표에서 빈 공간 찾기int getEmptyPosition(){ while (1) { int randPos = rand() % 20; // 0~19 사이의 숫자 반환 // ex) 19 = (3,4) int x = conv_pos_x(randPos); int y = conv_pos_y(randPos); if (arrayAnimal[x][y] == -1) { return randPos; } } return 0; // int로 반환하는 함수이기 때문에 적은것이지, 큰 의미는 없음}int conv_pos_x(int x){ // ex) 19 = (3,4) return x / 5;}int conv_pos_y(int y){ return y % 5; // y를 5로 나눈 나머지 값}void printAnimals(){ printf("\n==================정답==================\n\n"); for (int i = 0; i < 4; i++) { for (int j = 0; j < 5; j ++) { printf("%8s", strAnimal[arrayAnimal[i][j]]); } printf("\n"); } printf("\n========================================\n\n");}void printQuestion(){ printf("\n\n(문제)\n"); int seq = 0; for (int i = 0; i < 4; i++) { for (int j = 0; j < 5; j++) { // 카드를 뒤집어서 정답을 맞혔으면 '동물 이름' if (checkAnimal[i][j] != 0) { printf("%8s", strAnimal[arrayAnimal[i][j]]); } // 정답을 못 맞혔으면 다시 뒷면 -> 위치를 나타내는 숫자 else { printf("%8d", seq); } seq++; } printf("\n"); }}int foundAllAnimals(){ for (int i = 0; i < 4; i++) { for (int j = 0; j < 5; j++) { if (checkAnimal[i][j] == 0) { return 0; } } } return 1;}
-
미해결탄탄한 백엔드 NestJS, 기초부터 심화까지
DI(의존성 주입)을 왜 해야하나요?
cats.service.ts 파일import { Injectable } from '@nestjs/common'; @Injectable() export class CatsService { getAllCats(): string { return 'get all cats1'; } } export const getAllCatsTest = () => { return 'get all cats2'; }; cats.controller.ts 파일import { CatsService } from './cats.service'; import * as catsService2 from './cats.service'; import { Controller, Get, } from '@nestjs/common'; @Controller('cats') export class CatsController { constructor(private catsService: CatsService) {} @Get() getAllCat() { return this.catsService.getAllCats(); } @Get('2') getAllCat2() { return catsService2.getAllCatsTest(); } } Dependency Injection을 사용해야하는 이유가 명확히 이해가 안됩니다. A라는 클래스에서 B라는 클래스를 인스턴스화 (new 키워드 사용) 했을 때, A클래스가 B클래스에 대해서 의존성이 발생하고만약에 B 클래스의 수정점이 발생한다면, A클래스도 수정해줘야하는 부분은 인지를 했습니다. 그런 경우에 변화를 유연하게 대응하기 위해 A클래스에서 직접 인스턴스화를 하는것이 아니라,인스턴스화된 클래스를 주입받아 사용만 하는걸 Dependency Injection(의존성 주입)으로 이해했습니다. 하지만, import해서 쓰면 되는걸 왜 굳이 의존성주입이라는 형태로 사용해야하는지 이해를 못했습니다. 제가 위에 예시로 작성한 service 파일과 controller를 보시면,getAllCat()는 의존성 주입해서 사용한거고, getAllCat2는 import한 서비스를 사용한겁니다. 어떠한 이유에서 의존성 주입의 개념을 사용해야하는지 명쾌하게 알고 싶습니다.
-
해결됨스프링 핵심 원리 - 기본편
appConfig.memberService() 와 getBean(MemberService.class)
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]공부 중에 제가 이해한 것이 맞는지 아닌지 의문이 들어 질문 남깁니다.//1번 AppConfig appConfig = new AppConfig(); memberService = appConfig.memberService(); //2번 AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class); MemberService memberService = ac.getBean("memberService", MemberService.class);1번에서 AppConfig 객체를 직접 만들어서 memeberService를 가져오는 것은 순수 Java 코드로 짜기 때문이고 2번에서 AnnotationConfigApplicationContext에서 getBean()메소드를 통해서 가져오는 것은 스프링으로 전환하여 스프링을 이용하는 것이라고 보면 되나요?+ ) 클래스 자료형을 다음과 같이 ApplicationContext로 사용하는 것보다 AnnotationConfigApplicationContext를 클래스 자료형과 생성자를 쓰는 것은 기능상 이유 때문인가요?ApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);
-
미해결Jenkins를 이용한 CI/CD Pipeline 구축
jenkins war 빌드된 파일을 tomcat 서버에 배포하기에서 질문이 있습니다.
안녕하세요 강의 정말 잘 듣고 있는 수강생입니다. 좋은 컨텐츠의 강의 제공해주셔서 감사합니다.질문이 있는데요. My-Third-Project에서 jenkins war 빌드 후 로컬 tomcat에 배포하는 부분에서 젠킨스 item 설정에 빌드 후 조치에서 궁금한 점이 있었습니다.deploy war/ear to container 설정에서 Tomcat URL 설정하는 부분에서 mac os의 ifconfig로 확인해보니 172.x.x.x:8088로 나왔습니다.이게 사실 와이파이 내부의 private ip라고 이해했고 처음에는 와이파이 외부 공인 ip주소를 입력해서 설정했었는데요. 그렇게 하니까 Connection refused 나오면서 배포 실패가 나오더라구요.172.x.x.x 로 지정해서 빌드해보니 배포 성공이 나오긴했었는데요. 로컬에서 실행한 docker 컨테이너 내의 jenkins 서버에서 로컬의 tomcat 서버 주소를 와이파이의 private ip로 설정하는 이유가 무엇인지 궁금했습니다.
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
다대다 관계와 관련해서
안녕하세요 강의 수강 후 게시판을 만들다가 궁금한 점이 생겨 질문을 남깁니다. 게시글과 해시태그를 M:N 관계로 등록하면서 강사님이 category-item을 설명하시면서 하신 것처럼 ManyToMany로 등록을 했습니다.게시글을 작성하면서 해시태그를 작성하고 싶은데 service단에서 어떻게 작성해야 하는지 궁금합니다. (연관관계의 주인은 게시글입니다.) 현재 등록하려는 해시태그가 해시태그 테이블에 없으면 해시태그 테이블에 해당 해시태그를 저장하고, article 테이블에서도 hashtag를 등록해주었습니다. (article Entity에서 addHashtag 메서드를 만들어서)이 경우 db 조회시 중개테이블에도 값이 잘 들어가있는데 postman으로 조회시 해시태그의 article이 빈 리스트로 나옵니다. 어떻게 해야 하나요??
-
해결됨[언리얼 시스템 연구 과정] UE5 스파르타 클래스: 심화편
플레이타임 제작 블루프린트 질문있습니다
강의에선 남은 시간을 나타낼 때 텍스트 바인드에서 GS Game State의 플로트 타입인 Timer가 나타났는데 UE5에서는 인티저 타입인 동전점수 밖에 나오지 않습니다. Timer타입을 인티저 타입으로 바꾸면 보이는 걸로 봐선 플로트타입이 안나오는거 같은데 따로 설정을 해야하나요?
-
미해결[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
storetap에서 다른 사이트로 이동하는 것
마지막 인강부분을 보고 있어요. 웹뷰를 통해 Store tap을 누르면 다른 사이트로 넘어가 이동하는데요.그런데 구글 문서 링크를 넣었더니 앱에서 나와서 이동하더라구요. 어떻게 해야 앱 내에서 이동할까요???