묻고 답해요
160만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
- 
      
        
    미해결[신규 개정판] 이것이 진짜 크롤링이다 - 기본편
네이버쇼핑 검색창 클릭
크롬 버전 15입니다.네이버 쇼핑 클릭까지는 됩니다. 네이버 쇼핑 접속 후에 쇼핑 검색창 selector을 하고 싶은데 네이버 쇼핑이 많이 바껴 selector이름?이 무엇인지 잘 모르겠어요 ㅠ.. 혹시 현재 네이버 쇼핑의 검색창이 무엇인지 알수 있을 까요?오른쪽 마우스>copy>copy selector 클릭하면#gnb-gnb > div._gnb_header_area_150KE > div > div._gnbLogo_gnb_logo_3eIAf > div > div._gnbSearch_gnb_search_3O1L2 > form > div._gnbSearch_inner_2Zksb > div > input이렇게 나옵니다.
 - 
      
        
    미해결Jenkins를 이용한 CI/CD Pipeline 구축
젠킨스 빌드시 오류 (jdk 관련)
안녕하세요.강의 중에 해결이 되지 않아서 올립니다.해당 jenkins 컨테이너에 들어가서 jdk 전역변수 위치 확인 및 해당 경로에 jdk가 설치되어있는지 확인하면 잘 되어있는 것을 알 수 있습니다.위에 비슷한 상황으로 올리신 분이 있어 확인해보니위와 같이 tools에서 설정 및 해당 경로에 java가 있으면 된다는 분이 있어 시도 해 봤으나 동일하게 아래와 같이 jdk를 찾을 수 없다는 에러가 발생합니다..Thread.run(Thread.java:829)WARNING: LinkageError while performing UserRequest:hudson.maven.Maven3Builder@40f17c43java.lang.UnsatisfiedLinkError: /opt/java/openjdk/lib/libawt_xawt.so: libXext.so.6: cannot open shared object file: No such file or directory winodw os를 사용중이라서 해당 컨테이너를 나오면위와 같이 환경변수 설정이 되어있는데 컨테이너 밖에서도 opt/java/openjdk 위치에 동일한 jdk-11이 깔려있어야 에러가 안나는 건지 궁금하긴한데 강의내용상 자동으로 컨테이너에 jdk가 깔리기때문에 따로 해줄 게 없다고 들었는데 위와 같은 에러가 왜 발생하는지 궁금하네요...이 부분이 해결되어야 강의진행이 가능할 것 같은데 조언을 부탁드립니다.
 - 
      
        
    미해결[리뉴얼] SQL 베이스캠프
노션
노션 링크는 어디서 찾을 수 있을까요? 처음부터 수강했는데 못찾겠어요ㅜㅜ
 - 
      
        
    미해결입문강의 타입스크립트부터 ionic6 (앵귤러 기반)
VirtualScroll 이 버전 업데이트 되면서 많이 바뀐거 같아요..
virtualScroll 강의 듣는 중에 에러가 계속 나서 찾아보니 버전 업데이트 되면서 아예 바뀌었더라고요.. 괜찮으시다면 이런 내용은 업데이트가 안될까요..?Docs 보면서 혼자 해보고는 있는데 어렵습니다..
 - 
      
        
    미해결
스팟파이어 단축키 문의
스팟 파이어 단축키가 존재하나요? (예. [계산된 컬럼 추가] 같은 기능의 단축키)
 - 
      
        
    해결됨한 입 크기로 잘라먹는 타입스크립트(TypeScript)
교집합 타입 질문있습니다
dog: name, colorperson: name, language이 상태에서 그러면name, color, language, age 프로퍼티를 갖는 타입도 dog & person의 인터섹션 타입으로 볼 수 있는건가요?
 - 
      
        
    해결됨[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
115강 5분 10초, model의 타입을 ProductModel로 지정했을 때 발생하는 타입 및 null 에러가 있습니다
class ProductPage extends StatelessWidget { const ProductPage({super.key}); @override Widget build(BuildContext context) { return PaginationListView<ProductModel>( provider: productProvider, itemBuilder: <ProductModel>(_, index, ProductModel model) => GestureDetector( onTap: () => context.goNamed( RestaurantDetailPage.routeName, pathParameters: { 'rid': model.restaurant.id, }, ), child: ProductCard.fromProductModel( model: model, ), ), ); } }여기서 이상한 에러가 뜹니다. 먼저 'rid': model.restaurant.id 이 부분에서는 아래와 같은 에러가 뜹니다.The property 'restaurant' can't be unconditionally accessed because the receiver can be 'null'.Try making the access conditional (using '?.') or adding a null check to the target ('!').dartunchecked_use_of_nullable_value 그리고 두 번째로, ProductCard.fromProductModel(model: model)에서는 이런 에러가 뜹니다.The argument type 'ProductModel' can't be assigned to the parameter type 'ProductModel'.dartargument_type_not_assignable 두 에러 모두 이해되지 않습니다. ProductModel 타입을 ProductModel 타입으로 Assign할 수 없다니요? 같은 타입인데 이런 에러가 뜹니다. 또한 첫 번째 에러의 경우에도, 분명히 nullable 타입이 존재하지 않는데 nullable 체크를 하라고 하고 있습니다. 당황스럽습니다. 한편, 강의는 이런 식으로 되어 있습니다.itemBuilder: <ProductModel>(_, index, model)즉 model의 타입을 따로 지정해주지 않았습니다. 이렇게 했을경우 model의 타입은 dynamic이 되며, 자동 완성 기능은 수행할 수 없지만, 결론적으로 잘 작동은 합니다. 그런데 왜 저런 이상한 에러가 발생하는 지 모르겠습니다. 여기 이와 관련된 코드를 덧붙입니다. 그러나 대부분 강의와 동일합니다.@JsonSerializable() class ProductModel implements IModelWithId { @override final String id; /// 상품 이름 final String name; /// 상품 상세 정보 final String detail; /// 상품 이미지 URL @JsonKey(fromJson: DataUtils.pathToUrl) final String imgUrl; /// 상품 가격 final int price; /// 레스토랑 정보 final RestaurantModel restaurant; ProductModel({ required this.id, required this.name, required this.detail, required this.imgUrl, required this.price, required this.restaurant, }); factory ProductModel.fromJson(Map<String, dynamic> json) => _$ProductModelFromJson(json); }typedef PaginationWidgetBuilder<T extends IModelWithId> = Widget Function( BuildContext context, int index, T model, );문제가 발생하고 있는 스크린샷:
 - 
      
        
    미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
보안 및 content type 질문
Token 발급 과정에서 username:password 값을 base64 로 인코딩 후 authorization 헤더에 Basic $token 형태로 전송하는 것이 정석이라고 말씀해주셨습니다.질문1.Basic $token 형태는 인증정보가 그대로 base64 형태로 인코딩해줍니다. 그러면 누군가가 이 패킷을 까보기만 하면 데이터를 알 수 있는 것이 아닌가요..? 이 부분이 이해가 잘 안되네요. 설명부탁드립니다..질문2.추가로 챗gpt 에게 질문했을 때, 로그인할 때 content type 을 application/x-www-form-urlencoded 형태로 보내라고 하는데, 대부분은 json 형태로 전송하더라구요.. 설명부탁드립니다...
 - 
      
        
    해결됨[2025년 출제기준] 웹디자인기능사 실기시험 완벽 가이드
html과 css 구문 모두 똑같은데 sub-menu가 슬라이드 뒤에 숨어요ㅠ
해당 부분 html-<header> <article class="header-logo">로고</article> <article class="navi"> <ul class="menu"> <li> <a href="#none">MENU-1</a> <div class="sub"> <a href="#none">sub-1</a> <a href="#none">sub-2</a> <a href="#none">sub-3</a> <a href="#none">sub-4</a> </div> </li> <li> <a href="#none">MENU-2</a> <div class="sub"> <a href="#none">sub-1</a> <a href="#none">sub-2</a> <a href="#none">sub-3</a> <a href="#none">sub-4</a> </div> </li> <li> <a href="#none">MENU-3</a> <div class="sub"> <a href="#none">sub-1</a> <a href="#none">sub-2</a> <a href="#none">sub-3</a> <a href="#none">sub-4</a> </div> </li> <li> <a href="#none">MENU-4</a> <div class="sub"> <a href="#none">sub-1</a> <a href="#none">sub-2</a> <a href="#none">sub-3</a> <a href="#none">sub-4</a> </div> </li> </ul> </article> </header>해당 부분 css-.menu { padding: 0; list-style: none; width: 90%; margin: auto; margin-top: 10px; position: relative; } .menu li { text-align: center; } .menu li > a { border: 1px solid #000; display: block; padding: 5px; color: #000; transition: 0.3s; } .menu li:hover > a { background-color: #000; color: #fff; } .sub { border: 1px solid #000; position: absolute; top: 0; left: 100%; width: 100%; height: 200px; background-color: #000; /* display: none; */ } .sub > a { display: block; color: #fff; padding: 5px; transition: 0.3s; } .sub a:hover { background-color: #000; color: #fff; }인터넷 찾아보고 z-index도 넣어봤는데 소용이 없습니다ㅠㅠ
 - 
      
        
    해결됨[코드캠프] 부트캠프에서 만든 고농축 프론트엔드 코스
useMutation에러
Server ErrorInvariant Violation: Argument of undefined passed to parser was not a valid GraphQL DocumentNode. You may need to use 'graphql-tag' or another method to convert your operation into a documentThis error happened while generating the page. Any console logs will be displayed in the terminal window. 이러한 에러가 뜨는데 왜 발생하는 걸까요.const [contents, setContents] = useState(""); 18 | > 19 | const [나의함수] = useMutation(나의그래프큐엘셋팅) | ^ 20 | 21 | const onClickSubmit = async () => { 22 | const result = await 나의함수({ import { useState } from "react" import {나의그래프큐엘셋팅} from './BoardWrite.queries' // export는 골라서 가져오기 import BoardWriterUI from "./BoardWrite.presenter"; // export-default로 한 개만 가져오기 import { useMutation } from "@apollo/client"; // import BoardWriterUI from "./BoardWrite.presenter"; // export-default로 한 개만 가져오기 // import BoardWriterUI, {apple} from "./BoardWrite.presenter"; // export-default와 export 함께 가져오기 // import * as S from './BoardWrite.styles' // 모든 export를 가져와줘 // S.BlueButton // S.RedInput export default function BoardWrite() { const [writer, setWriter] = useState(""); const [title, setTitle] = useState(""); const [contents, setContents] = useState(""); const [나의함수] = useMutation(나의그래프큐엘셋팅) const onClickSubmit = async () => { const result = await 나의함수({ variables : { // variables 이게 $ 역활을 함 writer : writer, title : title, contents : contents } }) console.log(result) } const onChangeWriter = (event) => { setWriter(event.target.value) } const onChangeTitle = (event) => { setTitle(event.target.value) } const coChangeContents = (event) => { setContents(event.target.value) } return ( <BoardWriterUI aaa={onClickSubmit} bbb={onChangeWriter} ccc={onChangeTitle} ddd={coChangeContents}/> ) }-컨테이너import { gql } from "@apollo/client" const 나의그래프큐엘셋팅 = gql` mutation createBoard($writer : String, $title : String, $contents: String) { createBoard(writer : $writer, title : $title, contents : $contents) { _id number message } } ` -쿼리
 - 
      
        
    미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-G 재귀
http://boj.kr/7a4cd7062f27488eb2b897aae623f48e위와 같이 재귀로 모든 경우를 탐색하돼 백트래킹을 넣어 어차피 더 해봤자 의미 없는 경우는 제외를 해줬는데 메모리 초과가 나왔습니다.위처럼 재귀로 해결하면서 따로 백트래킹으로 예외 처리를 해주는 것 보다 bfs를 쓰는 것이 더 효율적인가요? 아니면 재귀와 bfs의 차이는 크지 않지만 예외 처리를 visited로 안해줘서 생기는 차이인가요? 어디서 차이가 나는 것인지 궁금합니다 큰돌 선생님!!+ visited 배열로 예외처리를 하면 효율적으로 이미 간 곳은 못 가게 되니 속도가 빨라지는 것까지 알겠습니다! 하지만 이렇게 되면 '다른 경로로 같은 이동 횟수를 가지면서 같은 지점에 도착한 경우'에는 visited 조건 문에서 제외가 되는 걸로 알고 있습니다. 이러면 최솟값이 나온 경우가 몇가지인지 알 수가 없죠.그래서 큰돌 선생님께서 위의 코드를 통해 그 수를 세어주신 것 같은데 어떻게 세어주는 개념인지 잘 이해가 가지 않습니다.위 그림처럼 이미 못가는 곳이 저렇다고 가정하면위 그림처럼 이전의 값들을 참고, 참고, 참고... 이렇게 참고 해가면서 현재의 경우의 수까지 나오는 것이라고 보면 될까요?
 - 
      
        
    해결됨실전! Querydsl
DTO가 DTO를 가지고 있을 때의 Projections.bean() 혹은 @QueryProjection 사용에 대하여
안녕하세요 영한님공부한 내용을 복습할겸 호출한 외부 api의 데이터를 Projections.bean() 혹은 @QueryProjection을 이용하여 DTO로 바로 조회하여 저장하는 연습을 하고 있었습니다.DTO가 일반적인 객체타입이나 원시타입만 가지고 있었을 때에는 큰 상관이 없었으나 DTO가 DTO를 내부적으로 또 가지고 있으니 위의 방법으로는 오류가 발생하였습니다.DTO안에 DTO가 포함된 관계성은 api 제공 사이트측에서 정한것이라 이를 수정하지는 못했습니다.리포지토리와 2개의 DTO의 코드는 다음과 같습니다.@NoArgsConstructor @Getter @Setter public class MatchDTO { private InfoDTO info; @QueryProjection public MatchDTO(InfoDTO info) { this.info = info; } }@Getter @Setter public class InfoDTO { private Long gameDuration; private String gameMode; private List<ParticipantDTO> participants; }public class MatchQueryRepositoryImpl implements MatchQueryRepository { private final EntityManager em; private final JPAQueryFactory query; public MatchQueryRepositoryImpl(EntityManager em) { this.em = em; this.query = new JPAQueryFactory(em); } @Override public Page<MatchDTO> search(MatchSearchCond searchCond, Pageable pageable) { List<MatchDTO> content = query .select(new QMatchDTO(match.info)) .from(match) .where(gameDurationLoe(searchCond.getGameDuration())) .offset(pageable.getOffset()) .limit(pageable.getPageSize()) .fetch(); return new PageImpl<>(content); } private BooleanExpression gameDurationLoe(Long gameDuration) { return gameDuration != null ? match.info.gameDuration.loe(gameDuration) : null; } }이렇게 코드를 설정하면 다음과 같은 컴파일 오류가 query.select()절에서 발생하였습니다.Required type: Expression<? extends practice.secondapi.dto.match.InfoDTO>Provided: QInfo 엔티티가 Q객체로 바뀌는 과정에서 타입 불일치가 일어난 듯 싶은데 구체적인 해결책은 잘 모르겠습니다 ㅠㅠ코드에 넣지는 않았지만 심지어 InfoDTO는 ParticipantDTO를 리스트로 가지고 있기도 해서... 어떻게 야매로 해결한다해도 또 같은 문제가 발생할 것 같아서 근본적인 원인과 해결책이 궁금합니다!
 - 
      
        
    미해결처음 만난 리액트(React)
7강 실습
react-create-app이 안돼서 vite를 사용해서 실습하고 있는데 코드를 똑같이 작성했지만 빈화면만 뜹니다. 무엇이 문제인지 모르겠어요
 - 
      
        
    미해결한 입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지
컴포넌트 부모 태그
안녕하세요! 좋은 수업 잘 듣고 있습니다 :)props로 컴포넌트를 받는 Container 컴포넌트에 대해 질문이 있습니다!JSX 규칙 중에 모든 컴포넌트는 부모 태그를 가지고 있어야 한다고 말씀해주셨는데 아래 코드처럼 Container는 부모 태그가 없이도 잘 동작하기에 이유가 무엇인지 궁금합니다!function App() { const counterprops = { a : 1, b : 2, c : 3, d : 4, initialVaule : 5, }; return ( // HTML을 반환 <Container> <div className="App"> <Counter {...counterprops}/> </div> </Container> ); }또한 function App() { const counterprops = { a : 1, b : 2, c : 3, d : 4, initialVaule : 5, }; return ( // HTML을 반환 <div className="App"> <Container> <Counter {...counterprops}/> </Container> </div> ); }이렇게 코드를 짜면 동작하지 않더라구요! 왜 첫번째 코드는 동작하고, 두번째 코드는 동작하지 않는지 궁금합니다!감사합니다.
 - 
      
        
    미해결공공데이터로 파이썬 데이터 분석 시작하기
(수정) Seaborn으로 히트맵 그릴 때 문제해결 공유합니다
sns.heatmap에서 100 이상의 수가 깨지는 현상이 발생합니다해결방법year_month_new = year_month.round(0).astype(int)sns.heatmap(data=year_month_new, cmap="Blues", annot=True, fmt="d")
 - 
      
        
    해결됨스프링 핵심 원리 - 기본편
스프링 부트 프로젝트 생성 이후 뜨는 빨간색 글씨
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 스프링 부트로 프로젝트 생성했는데 build.gradle, gitignore등에 빨간색이 생겨요 어떻게 해결해야하나요
 - 
      
        
    미해결Jenkins를 이용한 CI/CD Pipeline 구축
젠킨스에서 service healthy check를 하고싶은데 어떻게 해야하나요?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
 - 
      
        
    해결됨CS 지식의 정석 | 디자인패턴 네트워크 운영체제 데이터베이스 자료구조
이 사이트에서 교안 내용을 무단 사용중인지 의심됩니다.
TCP/IP 4계층, 3-way, 4-way handshake (oopy.io)교안 내용에 관해 추가적으로 구글링하며 공부하다가 찾은 사이트입니다.강사님 본인의 사이트가 아니거나 허락받은게 아닌경우 제보 드려야할거 같아 올립니다.
 - 
      
        
    해결됨실전! 스프링 데이터 JPA
1:N 양방향 매핑시에 컬렉션 필드 초기화가 안되는 문제..
안녕하세요. 강의 코드를 참고하며 1:N 양방향 매핑을 시도하고 있습니다.다른 테이블에서는 성공적으로 해서 정말 다른거 없이 똑같이 매핑해서 테스트를 진행중이었는데정말 이유를 모르겠는게 객체가 생성되면서 멤버 변수가 초기화가 되어야 하는데 되지 않아 null값이 들어가있고.null 값이 들어간 List에 add를 하려고 하니 NullPointerException이 나고 있습니다.같은 로직, 같은 OneToMany 매핑을 한 다른 엔티티 에서는 잘 되었는데 해당 부분에서 어떤 이유로 생성될때 멤버변수가 초기화가 되지 않는지 도무지 잘 모르겠습니다.. 이유를 아시는분 도와주시면 정말 감사하겠습니다.정상적으로 진행된 매핑 및 코드는 아래와 같습니다.@Entity @Inheritance(strategy = InheritanceType.JOINED) @DiscriminatorColumn(name = "dtype") @DiscriminatorValue("my") @Table(name="my_wallets") @Getter @Setter public class MyWallet { @Id @GeneratedValue @Column(name = "wallet_id") private Long id; private Integer balance=0; //cascade = Persist 속성을 명시해줌으로써, 영속성 전이를 사용하였음. //orphanRemoval = true 를 사용해서 고아 객체를 자동으로 제거 함. @OneToMany(mappedBy = "wallet", cascade = CascadeType.PERSIST,orphanRemoval = true) private List<Transactions> transactions = new ArrayList<>(); public void addTransactions(Transactions transaction){ this.transactions.add(transaction); transaction.setWallet(this); } ------------------------------------- @Entity @Table(name = "transactions") @Getter @Setter @ToString @AllArgsConstructor @NoArgsConstructor @Builder public class Transactions { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "transaction_id") private Long id; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "wallet_id") @Setter private MyWallet wallet; private Long counterId; private Timestamp transactionDate; private String transactionType; private Integer amount; private String location; private Integer balance; private Boolean success; } ----------------------테스트 부분 Transactions t = Transactions.builder() .amount(100) .balance(200) .success(Boolean.TRUE) .build(); MyWallet m1 = createMyWallet(); m1.addTransactions(t); em.persist(m1);컴파일 에러도 없고, 정상적으로 h2 db에 들어가는것을 확인 했습니다.그런데 같은 로직으로 진행한 연관관계 메서드에서 오류가 발생했습니다.문제가 되는 코드들은 아래와 같습니다. import lombok.*; import javax.persistence.*; import java.util.ArrayList; import java.util.List; @Entity @Table(name = "article") @Getter @Setter @ToString @AllArgsConstructor @NoArgsConstructor @Builder public class Article { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "article_id") private Long id; private Long walletId; private Long imageId; @OneToOne(fetch = FetchType.LAZY) @JoinColumn(name = "transaction_id") private Transactions transaction; @OneToMany(mappedBy = "article",cascade = CascadeType.PERSIST, orphanRemoval = true) private List<Comments> comments = new ArrayList<>(); // List<Commnets> comments = new ArrayList 를 해주었음에도 null이 들어가있음. public void addComment(Comments comment){ //따라서 null 에 add 를 하려고 하니 NullPointerException이 발생합니다.. comments.add(comment); comment.setArticle(this); } } import lombok.*; import javax.persistence.*; import java.sql.Timestamp; @Entity @Table(name = "comments") @Getter @ToString @AllArgsConstructor @NoArgsConstructor @Builder @Setter public class Comments { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "comment_id") private Long commentId; @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL) @JoinColumn(name = "article_id") @Setter private Article article; private Long writerId; private String content; private Timestamp postedDate; } 이 아래는 실행해봤던 테스트 코드중 발생하는 위치의 코드입니다.. Article article = Article.builder() .imageId(99L) .walletId(1L) .imageId(-99L) .build(); em.persist(article); Comments comment = Comments.builder().content("컨텐츠1").writerId(123L).build(); System.out.println("comment = " + comment.toString()); em.persist(comment); article.addComment(comment); //이 부분이 문제..persist를 안해줘서 그런가 싶어서 앞뒤로 옮기며 확인해봤는데 여전히 필드 초기화가 되지 않아서 정말 의문입니다 제가 기본적으로 무엇을 놓치고 있는걸까요 ㅠㅠ 테스트 코드에서 무언가 잘못했을까 싶어 전체 코드도 남겨봅니다. import lombok.RequiredArgsConstructor; import org.apache.tomcat.jni.Address; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; import javax.annotation.PostConstruct; import javax.persistence.EntityManager; import java.awt.print.Book; @Component @RequiredArgsConstructor public class initDb { private final InitService initService; @PostConstruct public void init() { initService.doInit1(); // initService.doInit2(); } @Component @Transactional @RequiredArgsConstructor static class InitService { private final EntityManager em; public void doInit1() { Transactions t = Transactions.builder() .amount(100) .balance(200) .success(Boolean.TRUE) .build(); MyWallet m1 = createMyWallet(); m1.addTransactions(t); em.persist(m1); MoimWallet moim = createMoimWallet(1000); em.persist(moim); System.out.println("2차 테스트"); moim.setBalance(100); //Mywallet으로 업 캐스팅 ok MyWallet moim2 = createMoimWallet(2000); em.persist(moim2); User user = new User(null, m1, 1L, "ansik_id", "1234", "안식_name", "981212-121212", "010111", UserType.Parent, null); // user.getUsername("안식씨"); em.persist(user); WalletsAndMember wam = new WalletsAndMember(null, moim, user); em.persist(wam); WalletsAndMember wam2 = new WalletsAndMember(null, (MoimWallet) moim2, user); em.persist(wam2); Article article = Article.builder() .imageId(99L) .walletId(1L) .imageId(-99L) .build(); em.persist(article); Comments comment = Comments.builder().content("컨텐츠1").writerId(123L).build(); System.out.println("comment = " + comment.toString()); em.persist(comment); System.out.println("comment = " + comment.toString()); // comment.setArticle(article); article.addComment(comment); // article.getComments().add(comment); em.persist(article); em.flush(); em.clear(); } private static MyWallet createMyWallet() { MyWallet myWallet = new MyWallet(); return myWallet; } private static MoimWallet createMoimWallet(int amount) { MoimWallet moimWallet = new MoimWallet(); moimWallet.setTarget_amount(amount); return moimWallet; } } } 아래에 에러 로그를 남겨봅니다Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled. 2023-08-10 00:59:32.985 ERROR 47056 --- [ restartedMain] o.s.boot.SpringApplication : Application run failed org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'initDb': Invocation of init method failed; nested exception is java.lang.NullPointerException at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:160) ~[spring-beans-5.3.28.jar:5.3.28] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:440) ~[spring-beans-5.3.28.jar:5.3.28] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1796) ~[spring-beans-5.3.28.jar:5.3.28] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:620) ~[spring-beans-5.3.28.jar:5.3.28] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) ~[spring-beans-5.3.28.jar:5.3.28] at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.28.jar:5.3.28] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.28.jar:5.3.28] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.28.jar:5.3.28] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.28.jar:5.3.28] at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:955) ~[spring-beans-5.3.28.jar:5.3.28] at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:920) ~[spring-context-5.3.28.jar:5.3.28] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583) ~[spring-context-5.3.28.jar:5.3.28] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:147) ~[spring-boot-2.7.13.jar:2.7.13] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:731) ~[spring-boot-2.7.13.jar:2.7.13] at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:408) ~[spring-boot-2.7.13.jar:2.7.13] at org.springframework.boot.SpringApplication.run(SpringApplication.java:307) ~[spring-boot-2.7.13.jar:2.7.13] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1303) ~[spring-boot-2.7.13.jar:2.7.13] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1292) ~[spring-boot-2.7.13.jar:2.7.13] at team.ServerApplication.main(ServerApplication.java:12) ~[classes/:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na] at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:50) ~[spring-boot-devtools-2.7.13.jar:2.7.13] Caused by: java.lang.NullPointerException: null at team.entities.Article.addComment(Article.java:33) ~[classes/:na] at team.initDb$InitService.doInit1(initDb.java:74) ~[classes/:na] at team.initDb$InitService$$FastClassBySpringCGLIB$$48d5c178.invoke(<generated>) ~[classes/:na] at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) ~[spring-core-5.3.28.jar:5.3.28] at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793) ~[spring-aop-5.3.28.jar:5.3.28] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-5.3.28.jar:5.3.28] at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) ~[spring-aop-5.3.28.jar:5.3.28] at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:123) ~[spring-tx-5.3.28.jar:5.3.28] at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:388) ~[spring-tx-5.3.28.jar:5.3.28] at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) ~[spring-tx-5.3.28.jar:5.3.28] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.28.jar:5.3.28] at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) ~[spring-aop-5.3.28.jar:5.3.28] at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:708) ~[spring-aop-5.3.28.jar:5.3.28] at team.initDb$InitService$$EnhancerBySpringCGLIB$$3cdef9a7.doInit1(<generated>) ~[classes/:na] at team.initDb.init(initDb.java:22) ~[classes/:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na] at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:389) ~[spring-beans-5.3.28.jar:5.3.28] at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:333) ~[spring-beans-5.3.28.jar:5.3.28] at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:157) ~[spring-beans-5.3.28.jar:5.3.28] ... 23 common frames omitted Process finished with exit code 1
 - 
      
        
    미해결재고시스템으로 알아보는 동시성이슈 해결방법
RedissonClient null
TC에 문제가 있어 디버깅을 해보니RedissonClient가 null이네요.기본 url에 port인데 왜 이럴까요? ㅠㅠ