묻고 답해요
167만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결토비의 클린 스프링 - 도메인 모델 패턴과 헥사고날 아키텍처 Part 1
토비님이 생각하시는 복잡한 도메인은 무엇이라고 생각하시나요?
안녕하세요. 토비님강의가 마치 의도하신 것 처럼 시니어 개발자님과 함께 개발하면서 의논하는 느낌으로 진행되어서 재밌게 잘 수강하고 있습니다.강의 내용에서 DDD는 도메인이 복잡해진 순간에 택해야 한다. 라는 말씀을 해주셨는데요.문득, "토비님이 생각하시는 도메인이 복잡해진 순간은 어떤 순간일까? 나름의 기준이 있으신걸까?" 하는 생각이 들었습니다.개인적으로 저는 어떻게 생각할까 라고 고민을 해봤는데요. 1) 도메인을 설명하기 위해서 개발자가 코드를 살펴봐야 하는 순간2) 각 도메인 간의 결합도가 고객의 유스케이스를 해결하기 위해 다양하게 결합되어야 하는 경우이 두 가지가 떠올랐는데, 토비님의 견해가 궁금해서 질문드려봅니다!늘 양질의 강의를 제공해주셔서 감사드립니다. (_ _)
-
미해결토비의 클린 스프링 - 도메인 모델 패턴과 헥사고날 아키텍처 Part 1
Email Pattern 테스트 검증 관련 질문이 있습니다.
안녕하세요 토비님, 강의 너무 잘 듣고 있습니다.이메일 패턴 테스트 관련해서 궁금한 부분이 생겨 질문을 드립니다.해당 강의를 기준으로 기존 : Member 엔티티에서 패턴 검증변경 후 : Email 값객체에서 패턴 검증 변경 후 단계에서 Email 값 객체에 패턴 검증하는 로직이 들어갔기에 해당 로직에 대한 테스트는 EmailTest 에 들어가야 하지 않는가? 라는 생각이 들어요.해당 부분에 대해 의견을 여쭙고 싶습니다.감사합니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
db연결은 되는데 웹 페이지에서 회원 정보 데이터가 반영이 안됩니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]db는 연결이 되어있다고 하는데 막상 db콘솔에서 insert한 데이터가 웹 페이지 회원 목록 조회에서는 안뜹니다. 막상 회원가입을 하면 목록에 뜨는 상황입니다.그리고 db를 끊어도 웹 페이지에서 회원 가입과 회원 목록 조회는 됩니다.그리고 db를 연결한 상태에서 웹 페이지에서 회원가입을 하면 db에는 넘어온 정보가 없습니다
-
해결됨토비의 클린 스프링 - 도메인 모델 패턴과 헥사고날 아키텍처 Part 1
Mybatis같은 sql mapper를 사용시..
안녕하세요 토비님! 강의 너무 잘듣고 있습니다. 애그리거트 쪽 강의를 들으면서 문득 든 생각을 질문드립니다.현재 사내에서 하고 있는 프로젝트는 JPA를 전혀사용하지 않고 Mybatis만을 사용하고 있는데요 이런 경우에도 에그리거트라던가 헥사고날 아키텍쳐를 적용하면서 진행하는게 충분히 가능할까요? 그게 아니라면 기존에 적용하고 있는 흔히 말하는 레이어드 아키텍쳐 및 트랜잭션 스크립트 방식으로 진행하는게 더 나은 방법일까요?혹시라도 수준 떨어지는 질문이라면 사과드립니다.감사합니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
강의내의 인텔리제이 기능
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]다름이 아니라 3:38쯤에 옆에 아이콘을 누르면 약간 확장이 되는 기능이 제 인텔리제이에서는 보이지가 않아서요. 어떻게 설정을 하는걸까요?
-
미해결죽음의 Spring Batch: 새벽 3시의 처절한 공포는 이제 끝이다.
외부 API 호출 적재 방법
외부 API를 호출해서 DB에 적재하는 배치를 구성을 하려고한다. 이때까지 문서 내용을 바탕으로는 Chunk가 아닌 Tasklet으로 해도 문제가 없다고 판단이든다. 하지만 공공 데이터 API를 1번 호출 할 때 10건씩만 데이터를 조회해야한다는 단점이있다. 평소에 하루에 1번 호출하겠지만 지난 3달의 데이터를 일단 적재를 해야한다. 이런 상황에서도 RepeatStatus.CONTINUABLE이 아닌 while문으로 계속 호출하고 끝나면 RepeatStatus.FINISHED로 반환해도 되는 지 궁금하다. 또한 외부API를 호출 할 때 PageNo도 명시를해줘야하는데 pageNo을 1씩 증가시키다가 특정 pageNo일때 오류가나면 해당 pageNo일때 부터 동작하도록 하려면 Jenkins의 매개변수 값을 설정해서 다시 batch를 돌리려고한다.하지만 아래처럼 PAGE_NO을 정수로하고싶었는데 String으로 해야한다는 점이있어, 리스너에서 해당 매개변수를 Integer 또는 Long 타입으로 변경을 해야하는 과정을 추가해야 할 지 아니면 더 수월한 방법이 있는 지 궁금하다. 💀 [시스템 인텔리전스]일반적으로 Tasklet에서 DB 트랜잭션 관리가 필요한 않은 경우가 많지는 않다. 모든 Tasklet이 데이터베이스 작업을 포함하는 것은 아니기 때문이다. 예를 들어, 파일을 정리하거나, 외부 API를 호출하거나, 단순한 알림을 보내는 작업이라면 DB트랜잭션을 고려할 필요가 없다. 그러므로 반복이 필요할 경우 작업의 성격을 잘 판단해서 while문으로 처리할지, RepeatStatus로 처리할지 현명하게 선택하라. 모든 반복을 RepeatStatus로 처리하는 것이 능사는 아니다.
-
해결됨Spring AI 실전 가이드: RAG 챗봇 만들기
해당 내용을 공부하며 블로그에 포스팅 해도 될까요?
해당 내용을 공부하며 출처를 남기고 블로그에 포스팅 해도 될까요?그리고, 지금 날짜로는 무료 크레딧이 18달러 제공 되는 걸로 보이는데 적용이 안되는지 0달러로 떠서 429 반환으로 막혔다가, 5달러 결제를 하니 진행이 되네요 ㅠㅠ무료 크레딧은 자동으로 등록되는건데 에러였던건지, 어떤 과정을 거쳐서 무료 크레딧을 등록해야하는건지에 대한 내용도 있었으면 좋겠습니다.
-
해결됨토비의 클린 스프링 - 도메인 모델 패턴과 헥사고날 아키텍처 Part 1
mise도 사용하시나요?
안녕하세요, 토비님.5강 개발 환경 구성(2)에서 sdk man을 소개해주셨는데요,저는 처음 보는 서비스라 찾아보니 최근에는 편의성 등을 이유로 mise를 많이들 사용하는 것 같더라구요. 강의에서는 mise 대신 sdk man을 사용하신 이유가 궁금합니다, 아무래도 java만 다루는 강의다보니 sdk man을 선택하신 걸까요?토비님께서도 실무나 개인적으로는 mise를 사용하시는지 혹은 다른 서비스를 사용하시는지도 궁금합니다.
-
미해결토비의 클린 스프링 - 도메인 모델 패턴과 헥사고날 아키텍처 Part 1
`Objects.requireNonNull()`을 계속 사용하시는 이유가 궁금합니다.
15강에서 스프링의 @NonNull 지원과 SpotBugs를 통해서 null 안정성을 확보하신 내용을 봤습니다. 그런데 계속해서 Objects.requireNonNull() 을 사용하시는 것을 보고 의문이 들었습니다. 이미 Member 객체의 null 안정성은 확보된 것이 아닌가요?굳이 Objects.requireNonNull() 을 계속 남기시는 이유를 생각해봤는데, 애노테이션+도구의 조합과 함께 코드적으로 null 안정성을 확보하고 싶으신 것으로 이해했습니다. (해당 도구가 사라져도 코드 수준의 안정성은 남아있기 때문에, 코드를 수정할 필요는 없어지니까요!) null 검증에 대해서만큼은 코드가 장황해지는 비용보다 추후의 변경에 대한 비용이 더 크다고 생각하시는 것 같은데, 제 이해가 맞을까요?
-
미해결카카오,구글 SNS 로그인(springboot3, vue3)
filterchain 구성에서 포스트맨으로 테스트시
안녕하세요 레디스 강의에 이어 잘 수강하고 있습니다!filterchain 구성에서 포스트맨으로 테스트 시에 raw password가 그대로 컨트롤러에 전달되는데, 실무에서는 (Q.1) 이렇게 하는 방식이 허용되는지 궁금합니다. (Q.2) 안된다면 어떤식으로 해결하는지 궁금하네요!
-
미해결토비의 클린 스프링 - 도메인 모델 패턴과 헥사고날 아키텍처 Part 1
MemberRepositoryTest 중 Member table이 생성이 안됨
토비님 지금 강의 '엔티티 식별자와 JPA 엔티티' 섹션을 수강하던 중 MemberRepositoryTest에서 맴버 생성 테스트를 진행하는데 저는 Member 테이블이 생성이 안되어서 오류가 터지네요![Table "MEMBER" not found (this database is empty)토비님께서는 별 다른 설정 안하시고 해도 성공적으로 돌아갔는데 이유를 알 수 있을까요??
-
미해결죽음의 Spring Batch: 새벽 3시의 처절한 공포는 이제 끝이다.
문제상황에 대해서 이해가 안간다.
이전 청크의 ItemProcessor에서 엔티티를 수정한게 왜 문제인지 이해가 안간다. ItemProcessor에서 데이터를 수정하고 ItemWriter에서 DB에 flush를 할것 같은데 왜 다음 chunk에서 ItemReader에서 doReadPage()로 데이터를 읽는 시점에 의도치 않게 DB에 변경사항이 발생하는가?? 이미 앞선 데이터는 DB에 모두 반영되지 않았는가?? 이전 청크라는 상황이 이해 안된다. 이것이 왜 위험한가? 만약 이전 청크의 ItemProcessor에서 엔티티를 수정했다면? doReadPage()에서 데이터를 읽으려는 시점에 의도치 않게 DB에 변경사항이 반영될 수 있다. 이는 ItemReader의 책임 범위를 완전히 벗어난 동작이다. ItemReader는 데이터를 읽기만 해야 하는데, 실제로는 데이터 변경까지 일으킬 수 있는 것이다. 더 큰 문제는 이런 동작을 코드를 자세히 들여다보지 않으면 전혀 예상할 수 없다는 점이다.
-
미해결죽음의 Spring Batch: 새벽 3시의 처절한 공포는 이제 끝이다.
중복 문장 발견 후 보고
배치 처리, 시스템 종결의 서막💀 장에서 중복된 문장 발견. 두 세계의 공존웹은 실시간 상호작용의 최전선에서 사용자와 연결을 담당한다. 배치는 시스템의 후방에서 대규모 데이터 처리를 책임진다. 둘은 역할이 다르지만,함께 작동할 때 시스템은 완벽해진다. 함께 작동할 때 시스템은 완벽해진다. 배치가 없다면 시스템의 무게를 견딜 수 없고, 웹이 없다면 사용자와의 연결이 끊어진다. 네가 이 두 세계를 모두 이해하고 다룰 수 있다면, 시스템의 모든 것을 지배할 수 있다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
Appearance 에서 번외로 알려주신 설정 적용하면 작동 안합니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.기본 설정인 Gradle로 할때는 문제없는데, 번외로 알려주신 설정인 인텔리제이로 돌리게 되면 스프링부트가 작동하지 않습니다. 해결 방법이 있나요?
-
미해결토비의 클린 스프링 - 도메인 모델 패턴과 헥사고날 아키텍처 Part 1
compose.yml 파일 질문
안녕하세요 토비님처음 프로젝트를 실행하면 compose.yml 파일이services: mysql: image: 'mysql:latest' environment: - 'MYSQL_DATABASE=mydatabase' - 'MYSQL_PASSWORD=secret' - 'MYSQL_ROOT_PASSWORD=verysecret' - 'MYSQL_USER=myuser' ports: - '3306' 이렇게 설정되어있는데 저기서 데이터베이스 이름이나 user 정보를 변경하면 빌드가 되지않습니다.저 상태 그대로 놔두면 빌드는 되는데 인텔리제이의 데이터베이스 탭을 이용해서 접근해보면 splearn(제경우에는 이름을 변경하지 못했으니 아마 mydatabase) 데이터베이스가 생성되지 않고 Server Objects라는 폴더 하나만 존재합니다
-
미해결토비의 클린 스프링 - 도메인 모델 패턴과 헥사고날 아키텍처 Part 1
iterm 설정 문의
안녕하세요. 강의 잘 보고 있습니다.다름이 아니라 cat .sdkmanrc로 file을 출력할 때 줄 번호와 같이 이쁘게 정돈되어 출력되는 것을 보고 기능을 찾아보고 있는데 무엇인지 잘 모르겠어서 질문 글에서 여쭤봅니다.
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
순수 jdbc, jdbc 템플릿 ,통합 테스트할때 결과 주소값 질문
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요.복습 할겸, 새로운 헬로우 스프링을 만들어서 다시 영상을 보면서 치고 있었습니다.그리고 나서 테스트 케이스 만드는 부분이 잇었는데, 여기에서 저는 그냥 하는 김에 전부다 테스트 케이스를 만들자! 라는 생각이 들어서 만들었습니다.그리고 나서 통합 테스트 영상까지 따라 치고 나서,(메모리 테스트 케이스를 복사 붙여 놓기를 한다음 @SpringBootTest @Transactional @Autowired는 추가 햇음) 테스트 케이스를 실행햇는데테스트 케이스에서 노랑색 에러 메시지가 뜹니다. 이렇게요. 그래서. 전에 만든 helloSpring어떤가 시범을 해봤는데(코드를 똑같이 완전히 복사 붙여 놓기 하고 코드에 문제 없는지 확인.)잘 되더 라고요.근데. 빈 을 안 건드린게 생각나서 jpa템플릿에서 jdbc로 바꾸니 똑같이 오류나는 것을 확인할 수 있었습니다.(전에는 getId로 비교해서 테스트 케이스를 통과한 것 같습니다.)(jpa 메모리 에서 통합 테스트 한것) 여기서 궁금증이왜 jdbc에서는 객체의 주소값 이 다른지 알고싶습니다.테스트에서는 뭐 알수가 없더라고요.답변 부탁 드립니다.
-
미해결스프링부트를 이용한 웹 프로그래밍: 웹사이트 이렇게 만드는 거예요!
추가 강의 해주실수 있나요?
강의 맘에 듭니다 아직 뒤에는 못봤지만 스웨거와 querydsl를 이용한 강의도 오픈 해주셨으면 해요
-
미해결실전에서 바로 써먹는 Elasticsearch 입문 (검색 최적화편)
스프링부트에서 엘라스틱 인덱스 설정(동의어 필터 적용 에러)
개발환경 : WSL 기반의 리눅스 + 엘라스틱 서치spring boot : 3.5톰캣 서버를 구동하면 아래와 같은 에러가 발생합니다.request [HEAD http://localhost:9200/products] returned [HTTP/1.1 404 Not Found]2025-06-19T09:34:18.201+09:00 DEBUG 15492 --- [ restartedMain] org.elasticsearch.client.RestClient : request [PUT http://localhost:9200/products] returned [HTTP/1.1 400 Bad Request]인덱스를 생성하는 구문에서 에러가 발생하는데 이유를 살펴보면 아래와 같이 나옵니다.[illegal_argument_exception] failed to build synonyms from ['product_synonyms' analyzer settings product-settings.json 파일에 설정한 product_synonyms 부분에서 에러가 발생하고 있습니다.(혹시 잘못 작성했을까 해서 강사님의 github 파일을 복사했습니다.)---------------------------------------------------------------------------------------------[해결해보기]products_name_analyzer에서 product_synonyms 를 제거한 후 서버를 구동하면 서버는 문제없이 구동됩니다."products_name_analyzer": { "char_filter": [], "tokenizer": "nori_tokenizer", "filter": ["nori_part_of_speech", "nori_readingform", "lowercase"] },엘라스틱서치에 가서 확인해 보면 인덱스는 생성 되었으나 한글이 깨지는 상황입니다."analysis": { "filter": { "product_synonyms": { "type": "synonym", "synonyms": [ "samsung, �궪�꽦", "apple, �븷�뵆", "�끂�듃遺�, �옪�깙, 而댄벂�꽣, computer, laptop, notebook", "�쟾�솕湲�, �쑕���룿, �빖�뱶�룿, �뒪留덊듃�룿, �쑕���쟾�솕, phone, smartphone, mobile phone, cell phone", "�븘�씠�룿, iphone", "留λ턿, 留�, macbook, mac" ] } },[질문1] product_synonyms 필터가 적용된 상태에서 서버를 구동하는 부분 에러[질문2] 한글 깨짐 에러
-
미해결스프링부트를 이용한 웹 프로그래밍: 웹사이트 이렇게 만드는 거예요!
데이터베이스 테이블이 중복 생성 되는 오류
영상 52분에서 로그인이 성공되는 반면 저는 로그인이 계속 실패나와서 무엇이 문제인지 확인하는데 데이터베이스 테이블이 두 개가 생성된 것을 확인했습니다. 기존에 있던 테이블은 USER_MEMBER 인데, Entity 객체를 만들고 나서 user_member 테이블이 생성되었고 애플리케이션 실행 후 다시 가입을 하면 user_member 데이터베이스에 저장되며 기존 기능들은 에러 없이 정상 작동이 됩니다.. 궁금한 것은 데이터베이스 테이블이 저렇게 두 개 생성된건데 제가 무엇을 잘못해서 만들어졌는지 또 이대로 사용하는데 문제는 없는지 궁금합니다.. 코드는 선생님 코드랑 다른 부분이 없습니다 ㅠ