묻고 답해요
167만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결웹소켓/STOMP 채팅서비스(spring, vue, redis)
Stomp과 웹소켓 프로토콜
connect할 때 웹소켓은 ws프로토콜 stomp는 http프로토콜을 사용하는건가요? 연결 후 메시지를 주고 받을 때 웹소켓은 ws프로토콜 stomp도 ws프로토콜을 사용하는건가요?
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
댓글 최대 2 depth - CUD API 테스트 & 테스트 데이터 삽입 질문입니다.
안녕하세요 강의 잘 듣고 있습니다. 강의랑 버전 맞춰서 실행하고 있는데delete 메서드는 잘 동작하는데 deleted가 계속 0이네요..아래 질문글도 보고 해봤는데 저는 강의 버전이랑 딱 맞춰서 뭐가 문제인지 잘 모르겠습니다!.. 댓글 세 개 다 테스트 해봤는데 테스트는 잘 통과하는데 강의에서는 두번째 댓글부터 Empty Set이라고 나오는데저는 아래 사진처럼 나옵니다..
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
PK 생성 전략의 '유니크 문자열 또는 숫자' 단점 부분 질문있습니다.
안녕하세요. 오늘도 인덱스 관련해서 질문을 들고 왔습니다!(선생님이 "이런것도 질문해? 제발 질문 하지마 제발" 이라고 들 정도의 질문을 하는 학생들이 대부분 실력이 상승 한다고 해서 물음표 살인마가 되기로 했습니다. 지인들한테 강의 마구마구 홍보중입니다.. 한번만 봐주셉요..) 데이터 삽입 필요한 인덱스 페이지가 가득 찼다면 ,B+ tree 재구성 및 페이지 분할로 디스크 I/O 증가정렬된 상태를 유지하기 때문에 삽입시마다 B+tree 재구성으로 인해 정렬로 인한 성능 저하 된다는건 이해가 되었습니다.(맞다면..) 허나 페이지 분할은 잘 이해가 안가네요 ㅠ 페이지 분할에 대해 제가 이해한 바인 아래 내용이 맞는지 궁금합니다.PK가 AUTO_INCREMENT일 경우데이터가 항상 B+ Tree의 마지막(오른쪽 끝)에 삽입됨.하나의 페이지가 꽉 차면, 새로운 페이지가 오른쪽에 생성됨.1. [ Page 1 ] (꽉 참) → 데이터 추가 시 분할 필요 2. [ Page 1 (반) ] → [ Page 2 (새로운 페이지 생성) ] PK가 유니크 문자열 또는 숫자일 경우랜덤한 값이 삽입될 때, 페이지가 꽉 차지 않았더라도 균형을 맞추기 위해 강제적으로 새로운 페이지가 만들어질 수 있음.1. [ Page 1 ] (데이터 60% 차 있음) → 중간에 랜덤 값 삽입 시 균형 유지 필요 2. 균형 유지 과정에서 일부 데이터를 새로운 페이지로 이동하여 분산 3. [ Page 1 (30%) ] → [ Page 2 (새로운 페이지 생성) ] 즉, 유니크 문자열 또는 숫자는 페이지가 “완전히 가득 차지 않아도” 새로운 페이지가 생성될 수'도' 있다.
-
해결됨코드로 배우는 React 19 with 스프링부트 API서버
REST 방식 컨트롤러 만들기(2)-LocalDateFormatter ㅠㅠ;
선생님, 안녕하세요~섹션 3. 스프링부트와 API서버 => REST 방식 컨트롤러 만들기(2)에서 4:06분 근처=> LocalDateFormatter에서 오류가 납니다. CustomServletConfig까지 작성하고 실행하면 아래와 같은 오류가 나옵니다.C:\backend2\serverapi\serverapi\src\main\java\org\zerock\serverapi\controller\formatter\LocalDateFormatter.java:12: error: type Formatter does not take parameterspublic class LocalDateFormatter implements Formatter<LocalDate> {^앞.뒤로 돌려보면서 찾아 보려 했는데 잘 모르겠습니다. LocalDateFormatter만드는 부분부터 오류가 납니다.죄송하지만 확인하시면 답변 부탁 드립니다.감사합니다. 코드 첨부합니다.package org.zerock.serverapi.controller.formatter; import org.hibernate.engine.jdbc.internal.Formatter; import java.text.ParseException; import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.util.Locale; import static java.awt.SystemColor.text; public class LocalDateFormatter implements Formatter<LocalDate> { @Override public LocalDate parse(String Text, Locale locale) throws ParseException { return LocalDate.parse(text, DateTimeFormatter.ofPattern("yyyy-MM-dd")); } @Override public String print(LocalDate object, Locale locale) { return DateTimeFormatter.ofPattern("yyyy-MM-dd").format(object); } }
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
spring 부트 3.5 사용중인데 zuul 어떻게 해양할까요
deprecated돼서 spring initializr에 검색조차 안되는데그냥 강의 듣다보면 다른 해결방안 나오는건가요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
채번 쿼리 로그
안녕하세요.아래 강의 소스의 내용중 memberService.join메소드를 호출시 em.persist로 인해 select next value 시퀀스값을 가져오는 쿼리를 기대했습니다.@SpringBootTest(classes = JpashopApplication.class) @Transactional public class MemberServiceTest { @Autowired MemberService memberService; @Autowired MemberRepository memberRepository; @Autowired EntityManager em; @Test @Rollback(value = false) public void 회원가입() throws Exception { System.out.println("MemberServiceTest.회원가입"); //given Member member = new Member(); member.setName("kim"); //when Long savedId = memberService.join(member); //then assertThat(memberRepository.findOne(savedId)).isEqualTo(member); } 하지만, 아래 소스 InitDb의 init메소드의 제거 여부에 따라위 시퀀스 채번쿼리가 나타났다 사라졌다 합니다.@Component @RequiredArgsConstructor public class InitDb { private final InitService initService; @PostConstruct public void init() { initService.dbInit1(); initService.dbInit2(); } .... }다른 분들 도 같은 현상을 겪는지 궁금하며 원인을 알고싶습니다.
-
미해결[개정판 2023-11-27] Spring Boot 3.x 를 이용한 RESTful Web Services 개발
HelloWorldBean 관련 에러
`java: constructor HelloWorldBean in class mystudy.myrestfulservice.bean.HelloWorldBean cannot be applied to given types;required: no argumentsfound: java.lang.Stringreason: actual and formal argument lists differ in length`라는 오류 메시지가 자꾸 떠서 강의 진행이 어렵습니다.package mystudy.myrestfulservice.bean; import lombok.AllArgsConstructor; import lombok.Data; @Data @AllArgsConstructor public class HelloWorldBean { private String message; } package mystudy.myrestfulservice.controller; import mystudy.myrestfulservice.bean.HelloWorldBean; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RestController; @RestController public class HelloWorldController { // GET // URI - /hello-world // @RequestMapping(method = RequestMethod.GET , path = "/hello-world") @GetMapping(path = "/hello-world") public String helloWorld() { return "Hello World!"; } @GetMapping(path = "/hello-world-bean") public HelloWorldBean helloWorldBean() { return new HelloWorldBean("Hello World"); } @GetMapping(path = "/hello-world-bean/path-variable/{name}") public HelloWorldBean helloWorldBeanPathVariable(@PathVariable String name) { return new HelloWorldBean(String.format("Hello World %s", name)); } }Enable Annotation Processing 체크하기 ,리빌드, 캐시 삭제, 재부팅, 롬복 재설치, 프로젝트 다시 생성하기 별에 별 방법을 써도 안됩니다...
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
컬렉션 필드에 대한 하이버네이트의 추적
안녕하세요.강의 13:00에서@OneToMany 컬렉션 필드를 하이버네이트가 변경사항을 추적한다는 말씀을 하셨습니다. 연관관계의 주인이 아닌 거울이기 때문에 컬렉션에 요소를 추가/제거 하더라도 테이블에 영향을 주지 않는데요. 즉 더티체킹을 하지 않는 것으로 이해했기 때문에 하이버네이트가 추적을 한다는 말씀이 잘 와닫지 않습니다. 제가 잘못이해한 것이 있는지 궁금합니다~!
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
rows per chunk 에 대해서 궁금합니다.
이번에 커버링 인덱스를 설명하시면서 아 대충 왜 빠르게 조회가 되는지 이해가 되기 시작했습니다. 그런데 최근에 했던 프로젝트 중에 이와 비슷한데 왜 성능이 개선되었는지 모르는 것이 하나 있습니다. 아래 부분인데요..일단 created_at 은 index 가 적용되지 않았음을 알려드립니다. select ep1_0.employee_post_id, ep1_0.access_url, ep1_0.contact, ep1_0.contents, ep1_0.member_id, m1_0.member_id, m1_0.access_url, m1_0.authority, m1_0.birth_day, m1_0.email, m1_0.login_id, m1_0.name, m1_0.nick_name, m1_0.password, m1_0.personal_link, m1_0.personal_statement, m1_0.sex, m1_0.tmp_password, m1_0.twitter_link, m1_0.youtube_link, ep1_0.payment_amount, ep1_0.payment_method, ep1_0.title, wft1_0.work_field_tag_id, wft1_0.name, ep1_0.career_year, ep1_0.created_at, ep1_0.updated_at from employee_post ep1_0 left join work_field_tag wft1_0 on wft1_0.work_field_tag_id=ep1_0.work_field_tag_id join member m1_0 on m1_0.member_id=ep1_0.member_id where wft1_0.work_field_tag_id=1 order by ep1_0.created_at desc, ep1_0.employee_post_id desc limit 0,10;이것을 explain analyze 한다면 Limit: 10 row(s) (cost=1088 rows=10) (actual time=39.1..39.1 rows=10 loops=1) -> Nested loop inner join (cost=1088 rows=1968) (actual time=39.1..39.1 rows=10 loops=1) -> Sort: ep1_0.created_at DESC, ep1_0.employee_post_id DESC (cost=399 rows=1968) (actual time=39..39 rows=10 loops=1) -> Index lookup on ep1_0 using FK_work_field_tag_TO_employee_post (work_field_tag_id=1) (cost=399 rows=1968) (actual time=0.0949..7.91 rows=1968 loops=1) -> Single-row index lookup on m1_0 using PRIMARY (member_id=ep1_0.member_id) (cost=0.25 rows=1) (actual time=0.011..0.011 rows=1 loops=10)이렇게 나오고 성능이 무척 안좋은 것을 볼 수 있었습니다(using filesort 가 직접적인 원인) 근데 문제는 member 에 대한 inner join 을 빼면 -> Limit: 10 row(s) (cost=398 rows=10) (actual time=10.5..10.5 rows=10 loops=1) -> Sort: ep1_0.created_at DESC, ep1_0.employee_post_id DESC, limit input to 10 row(s) per chunk (cost=398 rows=1968) (actual time=10.5..10.5 rows=10 loops=1) -> Index lookup on ep1_0 using FK_work_field_tag_TO_employee_post (work_field_tag_id=1) (cost=398 rows=1968) (actual time=0.0712..6.03 rows=1968 loops=1) 위와 같이 나오면서 성능이 무척 개선된다는 점입니다. 제가 보았을 떄 핵심적인 부분은 10 rows per chunk 입니다. 혹시 10 rows per chunk 같은 키워드는 언제 언제 발생하는지 알 수 있을까요??(왜 member에 대한 join 을 빼면 나타나구, wft1_0 을 left outer join 을 하는 것은 영향이 없는지..)mysql 공식 문서를 계속 뒤져도 발견하지 못했습니다. 강의와 관련 없는 부분이라고도 생각하실 수 있는데 이런 질문 해서 정말 죄송합니다.. 관련해서 블로그 정리한 거 혹시 필요한 정보가 있을 수도 있으니 링크 남겨놓겠습니다...https://velog.io/@dionisos198/Query-DSL-%EC%84%B1%EB%8A%A5-%EA%B0%9C%EC%84%A0-%EB%B0%8F-fetch-join-%EA%B3%A0%EC%B0%B0
-
미해결스프링 부트 - 핵심 원리와 활용
실행하면 오류가 나면서 종료됩니다.
19-Feb-2025 22:14:57.625 SEVERE [main] org.apache.catalina.startup.HostConfig.deployDescriptor 배치 descriptor [C:\Users\cksgh\.SmartTomcat\server\server\conf\Catalina\localhost\ROOT.xml]을(를) 배치하는 중 오류 발생 java.lang.IllegalStateException: 자식 컨테이너를 시작하는 중 오류 발생 at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:602) at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:571) at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:654) at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:635) at org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:1889) at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:123) at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:530) at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:421) at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1629) at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:303) at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:109) at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:389) at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:336) at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:776) at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:772) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1203) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1193) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:145) at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:749) at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:203) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164) at org.apache.catalina.core.StandardService.startInternal(StandardService.java:415) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164) at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:870) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164) at org.apache.catalina.startup.Catalina.start(Catalina.java:761) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:568) at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:345) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:473) Caused by: org.apache.catalina.LifecycleException: 구성요소 [org.apache.catalina.webresources.StandardRoot@77659b30]을(를) 시작하지 못했습니다. at org.apache.catalina.util.LifecycleBase.handleSubClassException(LifecycleBase.java:406) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:179) at org.apache.catalina.core.StandardContext.resourcesStart(StandardContext.java:4121) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:4243) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164) at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:599) ... 37 more Caused by: java.lang.IllegalArgumentException: The main resource set specified [C:\Users\cksgh\Desktop\공부자료\스프링 강의자료\스프링부트 핵심원리와 활용\boot-source-20230228\start\server\build\exploded] is not a directory or war file, or is not readable (it does not exist or permissions to access it are missing) at org.apache.catalina.webresources.StandardRoot.createMainResourceSet(StandardRoot.java:749) at org.apache.catalina.webresources.StandardRoot.startInternal(StandardRoot.java:707) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164) ... 41 more19-Feb-2025 22:14:57.636 INFO [main] org.apache.catalina.startup.HostConfig.deployDescriptor 배치 descriptor [C:\Users\cksgh\.SmartTomcat\server\server\conf\Catalina\localhost\ROOT.xml]의 배치가 [114] 밀리초 내에 완료되었습니다.19-Feb-2025 22:14:57.644 INFO [main] org.apache.coyote.AbstractProtocol.start 프로토콜 핸들러 ["http-nio-8090"]을(를) 시작합니다.19-Feb-2025 22:14:57.937 INFO [main] org.apache.catalina.startup.Catalina.start 서버가 [488] 밀리초 내에 시작되었습니다.http://localhost:8090/19-Feb-2025 22:18:24.376 INFO [Thread-1] org.apache.coyote.AbstractProtocol.pause 프로토콜 핸들러 ["http-nio-8090"]을(를) 일시 정지 중19-Feb-2025 22:18:25.117 INFO [Thread-1] org.apache.catalina.core.StandardService.stopInternal 서비스 [Catalina]을(를) 중지시킵니다.19-Feb-2025 22:18:25.120 INFO [Thread-1] org.apache.coyote.AbstractProtocol.stop 프로토콜 핸들러 ["http-nio-8090"]을(를) 중지시킵니다.19-Feb-2025 22:18:25.127 INFO [Thread-1] org.apache.coyote.AbstractProtocol.destroy 프로토콜 핸들러 ["http-nio-8090"]을(를) 소멸시킵니다.Process finished with exit code 130
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
이거 문제가 될까요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]정상적인건가 했는데 영상의 선생님을 보니 아닌것같아서 질문드립니다.프로젝트 실행후 종료하면 아래 사진과 같이 에러같은 문구가 뜹니다. 프로젝트도 정상적으로 빌드되고 따라하는데 문제도 없으니 문제 없는건가 싶었는데 영상의 선생님을 보니 선생님은 프로젝트를 종료하실때 이런 화면이 안뜨는 것같아 뭔가 잘못된건가 싶습니다.그러다가 아래사진의 Settings -> Build Tools -> Gradle 에서Build and rung using 과 Run tests using을Gradle -> 에서 IntelliJ로 변경 후 빌드 하고 종료하니 아무런 문구가 뜨지 않습니다. 해당 설명은 프로젝트 생성 영상에서 언급하셨던 것으로 생각하는데 그때는 속도차이정도로 밖에 설명을 안하셔서 저는 그냥 딱히 인텔리제이 옵션으로 변경하지 않고 Gradle로 그대로 했었습니다. 그런데 이번에 프로젝트를 실행하고 종료하고 하다보니 오류문구같은 차이가 있다보니 혹시 추후에 문제가 있을까 싶어 질문드려요. 어떠한 차이점일까요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
다대다 관계 1:N, N:1 로 풀기
1. 강의 내용과 관련된 질문인가요? (예/아니오)네2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)네3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)네[질문 내용]왜 주문과 상품은 1:N, N:1로 풀고, 카테고리와 상품은 풀지 않은 건가요? 둘 다 다대다 관계인데 어떤 의미가 있나요?
-
미해결스프링 시큐리티 완전 정복 [6.x 개정판]
WebUtil 관련
WebUtil이 지원하지 않는거 같은데 맞을까요?(WebUtils만 보이네요)
-
미해결스프링 배치
Batch 성능 질문
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.이 강의를 들으면서 프로젝트에 Batch를 도입하려고합니다.Jenkins에서 파라미터로 Spring Batch에 pageNo이라는 인자에 주입하고 Tasklet 인터페이스를 implements한 커스텀 tasklet에서 공공데이터 포털 api를 호출하여 데이터를 가져오고 이를 db에 적재를 하려고 합니다. Job을 1번 실행하면 Step도 1번 실행하는 방식인데 1번 배치 사이클이 끝나면 pageNo을 1 증가해서 다시 배치를 돌리는 방식입니다. 그래서 아래와 같이 2가지 구현을 생각했습니다. Job은 1번 호출하지만 Step을 반복 실행 VS Job을 반복 호출=======================================전자 방식-장점: 메타 테이블에 JobExecution 등 db에 삽입 및 조회가 많이 일어나지 않는다.-단점: 특정 pageNo이 오류가 날 시 몇번째 pageNo에서 오류가 났는 지 확인을 해야하는데 이를 StepExecutionContext에서 디코딩 후 자바 역직렬화를 해야한다.(DB에서 조회만으로 확인하기 힘듦)=======================================후자 방식-장점: DB에서 조회만으로 pageNo이 몇번째에서 오류가 발생했는 지 쉽게 확인 할 수 있다.-단점: DB에 접근이 많다.=======================================제가 직접 느낀바로는 위와 같습니다. 저도 아직 공부한지 얼마 안되어서 잘 모르기에 Chat GPT에게 물어봤습니다. 아래와 같이 Job을 반복 호출하는건 성능상 좋지 않다고 합니다. GPT의 답변이 정답이 아닐 수 있기에 확인도 받고싶고 만약 Step을 반복적으로 호출하는게 더 낫다면 API용 Spring 서버에서 관리자가 로그인하면 이를 StepExecutionContext에서 가져와서 역직렬화 후 브라우저에 보여주는게 더 나은가싶습니다. 선생님께 자문을 구하고싶습니다.
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
테스트 코드 실행에서 URL을 인식 못하면서 500 에러 발생 시 관련 참고 글
https://velog.io/@ghwns9991/%EC%8A%A4%ED%94%84%EB%A7%81-%EB%B6%80%ED%8A%B8-3.2-%EB%A7%A4%EA%B0%9C%EB%B3%80%EC%88%98-%EC%9D%B4%EB%A6%84-%EC%9D%B8%EC%8B%9D-%EB%AC%B8%EC%A0%9C스프링 3.2 부터 uri 관련 매개변수 어노테이션을 잘 인식하지 못한다고 하나 봅니다. 저는 윗 글의 두 번째(-parameters) 방법으로 해결했습니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
엔티티매니저가 각각의 저장소에서 final로 선언될 수 있는 이유
엔티티매니저가 각각의 저장소에서 final로 선언될 수 있는 이유가 궁금합니다. final의 경우 한 번 선언하면, 교체될 수 없는 것 아닌가요? 혹시 관련 자료와 함께 설명을 첨부 해주시면 너무 감사하겠습니다.
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
'soft Delete 시 index 설정' 답변한 내용에서 질문 있습니다.
https://www.inflearn.com/community/questions/1516484해당 게시글의 답변중 아래 문장이 이해가 잘 안갑니다 ㅠ 물론, 삭제된 데이터가 극히 적다면, 위 비용은 딱히 문제가 안될 수도 있긴 합니다.삭제되지 않은 데이터가 훨씬 많다면, 조건에 일치(isDeleted=false)하는 데이터를 빠르게 찾을 수 있으므로, 스캔하는 범위는 어차피 적을테니깐요.하지만 삭제된 데이터가 많아질수록 조건에 일치하는 데이터를 찾기 위해 스캔하는 범위가 길어질 수 있으므로, 인덱스를 걸어둬야 빠르게 조회가 가능합니다!인덱스를 걸지 않았을때 삭제되지 않은 데이터(isDeleted = false)가 훨씬 많다면 스캔하는 범위가 적은 이유를 잘 모르겠습니다..인덱스가 없으면 삭제된 데이터가 많든, 많지 않든 무조껀 풀 스캔을 해서 스캔 범위는 똑같은게 아닌걸까요?또한, 데이터 연속성도 스캔할시 관련이 있는건지 궁금합니다.인덱스가 없을때 where isDeleted = false 쿼리 실행시 id가 4번까지만 스캔해서 스캔 범위가 적은걸까요?ㄸ직전 조건와 같을때 위와 같이 데이터가 흐트러져있다면 풀스캔을 하는 걸까요? 인덱스 공부좀 해야겠네요 흙흙
-
해결됨웹소켓/STOMP 채팅서비스(spring, vue, redis)
질문있습니다!!
container.addMessageListener(listenerAdapter, new PatternTopic("chat")); 해당 코드에서 chat은 redis에서 저장될 key 값인가요??
-
해결됨스프링 시큐리티 OAuth2
AuthenticationEntryPoint 강의 누락 문의
OAuth 2.0 Client Fundamentals 섹터에서ClientRegistrationRepository 이해 및 활용 강의와자동설정에 의한 초기화 과정 강의 사이에AuthenticationEntryPoint 강의가 있어야 할 것 같습니다.강의 자료에서 순서는 그러한데 강의는 없는 것 같아 문의드립니다.
-
미해결스프링 배치
ItemReaderAdapter 종료
ItemReaderAdapter를 사용할 일이 있어서 사용하던 중 조회해온 데이터가 null 일 경우에 배치가 종료가 되어야는데 종료가 안되고 무한히 반복됩니다.. 무엇이 문제일까요??reader(itemReader) .writer(itemWriter) .faultTolerant() .skip(Throwable.class) //모든 예외조건에 대해서 skip 실행 .skipLimit(Integer.MAX_VALUE) .allowStartIfComplete(false) .build();if (객체!= null) { adapter.setTargetObject(this); adapter.setTargetMethod(""); adapter.setArguments(new Object[]{object}); return adapter; } else { return null; } }