inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

172만명의 커뮤니티!! 함께 토론해봐요.

beforeEach를 추가했음에도 afterEach가 필요한 이유

해결됨

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 강의 마지막에 beforeEach 메소드를 추가하여 매번 객체를 생성하게 되잖아요. 그러면 굳이 afterEach() 메소드로 매번 clear할 필요가 없다고 생각했었는데 afterEach() 메소드를 주석 처리하면 오류가 나더라고요. 제 생각엔 MemoryMemberRepository의 store 변수가 static이기 때문에 beforeEach() 메소드로 매번 객체를 새로 생성하더라도 static 변수는 새로 생기지 않고 기존의 것이 계속 공유되고 있기 때문에 afterEach()가 필요한 거 아닐까 싶은데 제가 정확히 이해한 게 맞는지, 제 생각에 오류가 있는지 궁금합니다.

  • java
  • spring
  • mvc
  • spring-boot
11 1 댓글 2 좋아요 3 조회수 598

궁금한점 있습니다

미해결

자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]

안녕하세요 강사님 궁금한것이 있어서 질문 남깁니다 public void returnBook(String bookName) { UserLoanHistory targetHistory = this.userLoanHistories.stream () .filter(history -> history.getBookName().equals(bookName)) .findFirst() .orElseThrow(IllegalAccessError::new); //findFist()는 옵셔널로 반홚나다 targetHistory.doReturn(); } 이 로직에서 만약 한 책을 빌렸다가 반납하면 그 히스토리를 반납완료 상태로 만들어주고 끝내고 다시 그 책을 빌리려고 한다면 새로운 히스토리를 만들어서 List에 저장할텐데 그럼 다시 그책을 반납할 경우 findFirst()를 해서 그 히스토리를 찾아왔을때 이미 반납된 책을 다시 반납하는 행위가 되는것이 아닌건지 궁금해서 질문 드립니다!

  • java
  • spring
  • aws
  • mysql
  • spring-boot
  • jpa
wjddjs21 댓글 1 좋아요 2 조회수 271

프로메테우스 기본 설정

해결됨

스프링 부트 - 핵심 원리와 활용

안녕하세요. 현재 서비스중인 사이트에 액츄에이터 적용중에 있습니다! 웹에서는 /actuator/prometheus 접근은 되는데 프로메테우스 화면에서 보면 상태가 down이고 에러가 납니다. URL 링크 연결은 잘돼요.. 스프링 시큐리티쪽에서 별도로 처리를 해줘야되는건지... 예측되는 부분이 있을까요?

  • spring
  • spring-boot
  • prometheus
  • grafana
hungryo 댓글 2 좋아요 0 조회수 845

수업자료 문의

미해결

실습으로 배우는 프로메테우스 (Prometheus Stack)

혹시 수업자료 통합본이 해당 강의에 있는지 문의드립니다!

  • kubernetes
  • prometheus
서준영 댓글 1 좋아요 0 조회수 200

의존성조언에서 UserService의 login은 Clock에 의존하는지 모르지 않나요?

미해결

Java/Spring 주니어 개발자를 위한 오답노트

의존성 조언 두번째 방법에서 문제점이 UserService.login은 여전히 의존성이 감춰져있다. 위와 마찬가지로 Userservice.login을 테스트할 때 clock에 의존하고 있는지 알 수 없다. 이거였는데 세번 째 방법도 UserService를 사용하는 메서드는 login(user)만 남겨서 user가 Clock에 의존하는지 모르지 않나요? 아까 맥도날드 예제에서는 인터페이스를 사용하면 일을 시킨다고 설명하셨는데 이것도 인터페이스를 사용해서 일을 시키는거니 이렇게 구현하면 내부에서 clockHolder를 사용해도 외부에서 몰라도 되나요?

  • java
  • spring
  • 객체지향
  • 소프트웨어-테스트
seiyoung an 댓글 2 좋아요 0 조회수 472

prometheus stack이 설치가 안되네요..

해결됨

실습으로 배우는 프로메테우스 (Prometheus Stack)

prometheus stack 의 Status가 crashLoopBackOff에서 fail처리 되네요.. describe는 crash난 상태로밖에 안보여서 logs로 봤는데요. n="(version=2.37.0, branch=HEAD, revision=b41e0750abf5cc18d8233161560731de05199330)" ts=2023-09-11T14:52:47.219Z caller=main.go:540 level=info build_context="(go=go1.18.4, user=root@0ebb6827e27f, date=20220714-15:13:18)" ts=2023-09-11T14:52:47.219Z caller=main.go:541 level=info host_details="(Linux 3.10.0-1160.90.1.el7.x86_64 #1 SMP Thu May 4 15:21:22 UTC 2023 x86_64 prometheus-prometheus-stack-kube-prom-prometheus-0 (none))" ts=2023-09-11T14:52:47.219Z caller=main.go:542 level=info fd_limits="(soft=1048576, hard=1048576)" ts=2023-09-11T14:52:47.219Z caller=main.go:543 level=info vm_limits="(soft=unlimited, hard=unlimited)" ts=2023-09-11T14:52:47.229Z caller=query_logger.go:90 level=error component=activeQueryTracker msg="Error opening query log file" file=/prometheus/queries.active err="open /prometheus/queries.active: permission denied" panic: Unable to create mmap-ed active query log goroutine 1 [running]: github.com/prometheus/prometheus/promql.NewActiveQueryTracker({0x7ffc61beb568, 0xb}, 0x14, {0x3959980, 0xc000a65950}) /app/promql/query_logger.go:120 +0x3d5 main.main() /app/cmd/prometheus/main.go:597 +0x64df 이런형태의 에러가 나옵니다..

  • kubernetes
  • prometheus
Hyeonghwan Kwon 댓글 3 좋아요 0 조회수 933

kube-proxy metric설정에 관한 질문입니다.

미해결

실습으로 배우는 프로메테우스 (Prometheus Stack)

약간 헷갈리는 부분이 있어서 질문올립니다. kube-proxy에대한 metric을 수집하는 부분을 보고 있습니다. ( 4.7 8:00 - 9:00 ) annotations: prometheus.io/scrape: "true" prometheus.io/port: "10249" 이런것과 같이 해당 conatiner에서 이와같은 annotations를 달면, prometheus에서 kube-api-server를 통해 해당 정보가 있는지를 파악하고 해당 IP, port를 target으로 설정한다. 여기까지는 잘 이해가 된것 같습니다. ( 혹시 틀린게 있다면 알려주세요.. ) 그런데, kube-proxy같은 경우는 수집이 안되는것이, <container_ip>:10249 로 application 단에서는 준비가 다되었지만, 접근을 할수가 없어서 DOWN상태로 수집을 못한다. 이렇게 이해했습니다. 그래서, metricsBindAddress: 0.0.0.0:10249 이렇게 설정을 하게되면, any ip대역에서 10249 포트로 넘어오는 것에 대해서는 해당 kubeproxy의 10249로 연결을 해주는 설정을 해준다. 0.0.0.0:10249 -> <kube-proxy-ip>:10249 이렇게 port-forwarding으로 해주고, 그래서 접근이 가능하니, 이미 준비가 되어있는 metrics 정보를 얻을 수 있고, 그래서 Prometheus에서 정해진 metrics를 얻을 수 있다. 이렇게 이해를 했는데,.. 맞는건가요?? 헷갈리기 시작하네요.. 감사합니다.

  • kubernetes
  • prometheus
Hyeonghwan Kwon 댓글 1 좋아요 0 조회수 416

핀포인트 질문

미해결

스프링 부트 - 핵심 원리와 활용

pinpoint docker 받아서 docker compose로 실행해봤는데요. 기본으로 제공되는 quickapp에서 api 요청을 계속해서 날려도 핀포인트 웹 컨트롤러에서 초반에 2~3건정도만 기록될 뿐, 추가적인 api 성공기록이 남질 않더라구요. 원래 그런건가요? 다른 api 요청도 보내봤는데 아예 기록에 안남습니다

  • spring
  • spring-boot
  • prometheus
  • grafana
sujeng98 댓글 2 좋아요 0 조회수 437

사용자 정의 함수 방언 등록

해결됨

자바 ORM 표준 JPA 프로그래밍 - 기본편

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 사용자 정의함수를 db에 등록시켜놓은 다음에 jpql로 사용을 해보니 따로 방언을 등록하지 않아도 사용이 가능합니다. List<String> str = em.createQuery("select create_prefix(m.username) from Member m", String.class).getResultList(); create_prefix는 직접 등록한 함수입니다. 수업에서는 방언으로 사용자 정의 함수를 등록해야지 적용이 된다고 하는데 이 경우 왜 작동되는지 알고싶습니다.

  • java
  • jpa
준영 댓글 2 좋아요 1 조회수 874

@Autowired와 @Transactional으로 EntityManager주입 받기

미해결

실전! 스프링 데이터 JPA

@Autowired로 EntityManager를 주입받을때 여러 쓰레드가 동시에 접근하면 동시성 문제가 발생합니다. 하지만 @Transactional 을 추가해준다면 //1 @Repository @RequiredArgsConstructor @Transactional public class AutowiredRepository { private final EntityManager em; } //2 @Repository public class PersistenceContextRepository { @PersistenceContext private EntityManager em; } @PersistenceContext 처럼 Transaction에 의해 쓰레드간 동시성 문제를 해결해준다 고 생각하는데 맞게 생각한건지 궁금합니다. 두가지 방법 다 EntityManager를 호출 할때마다 Proxy를 통해 EntityManager를 생성하여 Thread-Safe를 보장해준다라고 볼수 있는 건가요?? 답변주시면 정말 감사하겠습니다.

  • java
  • spring
  • spring-boot
  • jpa
코딩먹는하마 댓글 1 좋아요 1 조회수 622

프로메테우스 그라파나 스프링부트 여러개 연동

미해결

스프링 부트 - 핵심 원리와 활용

스프링부트 api 서버가 여러개 있을때 그라파나에서 각각 서버 모니터링 하고 싶은데 이럴땐 어떻게 하나요?

  • spring
  • spring-boot
  • prometheus
  • grafana
sujeng98 댓글 1 좋아요 0 조회수 1001

톰캣 오류

미해결

스프링 부트 - 핵심 원리와 활용

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 05-Sep-2023 22:30:29.170 INFO [main] org.apache.catalina.startup.Catalina.start 서버가 [94] 밀리초 내에 시작되었습니다. Connected to server [2023-09-05 10:30:29,513] Artifact Gradle : hello : server-0.0.1-SNAPSHOT.war (exploded): Artifact is being deployed, please wait... [2023-09-05 10:30:29,550] Artifact Gradle : hello : server-0.0.1-SNAPSHOT.war (exploded): Error during artifact deployment. See server log for details. [2023-09-05 10:30:29,551] Artifact Gradle : hello : server-0.0.1-SNAPSHOT.war (exploded): com.intellij.javaee.oss.admin.jmx.JmxAdminException: com.intellij.execution.ExecutionException: D:\inflearn\boot-source-20230228\start\server\build\libs\exploded\server-0.0.1-SNAPSHOT.war not found for the web module. 톰캣을 run하면 위처럼 성공했다는 메시지와 실패했다는 메시지가 둘다 나오고 서버는 실행중인대 페이지들은 전부 404에러가 뜹니다. 근대 메시지대로 libs폴더안에 수동으로 exploded폴더를 만들고 빌드했던 war파일을 넣어주면 정상 작동합니다. 이건 톰캣서버가 자동으로 해주어야 하는대 왜 안되는 걸까요? jdk17.0.5 gradle7.5입니다

  • spring
  • spring-boot
  • prometheus
  • grafana
ZEROTOONE 댓글 2 좋아요 0 조회수 1850

penJDK 64-Bit Server VM warning: Options -Xverify:none and -noverify were deprecated in JDK 13 and will likely be removed in a future release. 오류

미해결

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. OpenJDK 64-Bit Server VM warning: Options -Xverify:none and -noverify were deprecated in JDK 13 and will likely be removed in a future release. 이러한 오류가 뜨는데, 실행하는데는 문제가 없습니다. 이 오류를 고쳐야 할 것 같은데, 어떻게 고쳐야할까요?

  • java
  • spring
  • mvc
  • spring-boot
댓글 1 좋아요 0 조회수 380

실무에서 사용자 정의 함수를 많이 사용하나요?

해결됨

자바 ORM 표준 JPA 프로그래밍 - 기본편

실무에서 DB방언을 상속받아 사용자 정의 함수를 등록해서 사용하는 경우가 많은지 궁금합니다!

  • java
  • jpa
spacebar 댓글 1 좋아요 0 조회수 366

안녕하세요 강사님 이전 재고 관리 강의와 차이에 대해 궁금합니다.

미해결

실습으로 배우는 선착순 이벤트 시스템

쿠폰 생성 발급 로직도 컬럼에 쿠폰의 개수를 지정해놓으면 이전 강의랑 똑같은 거 같은데 왜 이번 강의는 쿠폰 엔티티를 새로 생성해서 그 개수를 체크하는 건지 궁금합니다. 이전 컬럼에 개수를 두어 관리하는 거랑 지금처럼 엔티티를 생성하는 방식의 차이점이 너무 궁금해요 항상 감사합니다.

  • java
  • docker
  • spring-boot
  • kafka
  • redis
진짜 잘하고싶다 댓글 2 좋아요 0 조회수 583

쿠폰 카운트를 Redis에 의존하고 있는데요

미해결

실습으로 배우는 선착순 이벤트 시스템

만약 Redis에 장애가 발생한다면 2차 장치로 DB Count에 의존할 수 밖에 없는걸까요? 실무에선 어떻게 대응하시는지 궁금합니다!

  • java
  • docker
  • spring-boot
  • kafka
  • redis
목동 개발자 댓글 2 좋아요 4 조회수 1075

MySQL 사용에 대한 조언 질문있습니다.

해결됨

Java/Spring 주니어 개발자를 위한 오답노트

안녕하세요 주니어 개발자 길라잡이가 되주셔서 감사합니다. fulltext index에 대해서 질문이 있습니다. 임계점이 올경우 튜닝으로도 해결할 수 없는 문제라고 말씀해주셨는데요 경험담이라고 해주셨는데 그 경험담을 듣고 싶어서 질문을 남겨봅니다. 공식 문서에서 찾아보니까 https://dev.mysql.com/doc/refman/8.0/en/innodb-fulltext-index.html#innodb-fulltext-index-deletion 동시 경합이 발생할 수 있다고 작성이 되어있는데 이 문제로 발생한건가요 ? 아니면 다른 인덱스와 다르게 인덱스 용량 때문에 발생한 문제이신건가요 ? FULLTEXT INDEX의 한계 검색을 해도 다 좋은점만 나오더라구요..

  • java
  • spring
  • 객체지향
  • 소프트웨어-테스트
티벳로보 댓글 2 좋아요 0 조회수 887

prometheus operator의 service discovery에 대한 부분 질문드립니다.

미해결

실습으로 배우는 프로메테우스 (Prometheus Stack)

질문 답변을 제공하지만, 강의 비용에는 Q&A는 포함되어 있지 않습니다. 다만 실습이 안되거나, 잘못된 내용의 경우는 알려주시면 가능한 빠르게 조치하겠습니다! 안녕하세요. prometheus operator 부분을 공부하다가 궁금한 점이 있어 질문드립니다. 기존 prometheus에서는 servicediscorvey를 통해 target 정보를 작성하는 것으로 아는데(파일 형태) operator에서도 service discovery가 존재하는 건지 궁금합니다. service discovery가 있다면 어떻게 확인을 할 수 있을지(어디에 존재하는지,), operator에서도 똑같이 target 정보가 입력되는건지.. 알려주세요!

  • kubernetes
  • prometheus
  • operator
리78 댓글 1 좋아요 0 조회수 532

프로메테우스 다운받은 후 실행이 안되는것 같습니다.

미해결

스프링 부트 - 핵심 원리와 활용

프로메테우스 다운받아 압축해제 후 prometheus-2.42.0.windows-amd64\prometheus.exe 실행시켯는데, 커맨드창이 잠깐 보였다가 사라지네요. 순식간에 사라집니다. 아래 화면이 나오지 않은데.. 혹시 무슨 문제가 있을까요.. 윈도우10 64비트 환경이에요. 아, 그리고 http://localhost:9090 으로 접속하니깐 아래 와 같은 로그인창이 떠요.

  • spring
  • spring-boot
  • prometheus
  • grafana
원데이 댓글 1 좋아요 0 조회수 790

JPA 최적화 강의 수강 후, 개인 프로젝트 수행하면서 생긴 질문입니다.

해결됨

실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화

안녕하세요. JPA 최적화 강의를 수강하고, 개인적으로 DDD를 책으로 공부해본 후에 개인 토이 프로젝트를 진행하던 중, 뜻밖에 의문이 생겼는데 여쭐 곳이 없어서 이렇게 질문 올리게 되었습니다. 맨 땅에 헤딩으로 이런저런 강의, 책, 다른 분들의 소스를 참고 하려다보니 여러 개념이 뒤섞여서 혼동이 옵니다.. ㅠㅠ 현재 프로젝트에서는 크게 에그리거트를 CUSTOMER, EXTERNAL, SECURITYMEDIA 3개로 나누어 설계했는데요. 강의에서도, 책에서도 DOMAIN 계층에 있는 서비스는 해당 도메인에 대한 순수한 CRUD를 수행하는 것으로 보았습니다. DDD 책에서는 여러 에그리거트가 필요로 하는 기능을 구현할 때는 도메인 서비스로 구현하라고 이야기 했구요. 처음에는 책에서 조언하는 대로 도메인 서비스로 구현해보고자 하다가, 좀처럼 구현이 안되어서 다른 분들이 구현한 소스를 참조하다 보니 application(응용)영역을 FACADE라는 상위 계층을 두는 것을 방식을 알게 되었습니다. 소스를 따라가보니 각 애그리거트의 DOMAIN 영역에 있는 서비스를 주입하여, 각 도메인 영역에 있는 서비스를 적절히 호출하기에 책에서 본 도메인 서비스와 같은 역할을 하겠구나 하여,, 해당 프로젝트 구성 방식을 따라 개발해보기로 했습니다. 그런데 개발을 하다보니,, 참조하는 소스에서 메소드 단위의 트랜잭션의 적용을 facade 영역이 아닌, 도메인 영역의 서비스 구현체에서 하는 것을 알게 되었습니다. 제가 개발하고자 기능은 여러 애그리거트를 생성, 변경하는 하나의 행위가 하나의 트랜잭션으로 묶여야 하는데 말이죠. 이러한 이유 때문에 현재 소스는 FACADE에서는 하나의 도메인 영역의 서비스를 주입하여 하나의 메소드를 호출하도록 되어있고, 도메인 영역에 있는 해당 서비스의 구현체에서 여러 애그리거트의 서비스, 레포지토리를 주입받아 하나의 메소드에서 트랜잭션 단위로 수행하도록 구현되어있습니다.. @Service @RequiredArgsConstructor public class SecurityMediaFacade { private final SecurityMediaService securityMediaService; public SecurityMediaInfo.Main registerOtp(SecurityMediaCommand.RegisterSecurityMediaRequest req) { //디지털otp 발급 // 디지털 otp 발행 return securityMediaService.issueSecurityMedia(req, SecurityMediaType.DIGITAL_OTP); } ... } public interface SecurityMediaService { public SecurityMediaInfo.Main issueSecurityMedia(SecurityMediaCommand.RegisterSecurityMediaRequest req, SecurityMediaType type); ... } @Slf4j @Service @RequiredArgsConstructor public class SecurityMediaServiceImpl implements SecurityMediaService { private final CustomerReader customerReader; private final SecurityMediaStore securityMediaStore; private final TokenStore tokenStore; private final ExternalClientService externalClientService; @Override @Transactional public SecurityMediaInfo.Main issueSecurityMedia(SecurityMediaCommand.RegisterSecurityMediaRequest req, SecurityMediaType type) { // 요청고객 찾기 Customer customer = customerReader.findCustomerByRnn(req.getRnn()); SecurityMedia newOtp = null; if(!customer.existActiveSecurityMedia()) { // otp 신규 SecurityMedia initOtp = req.toEntity(SecurityMediaType.DIGITAL_OTP, customer); newOtp = securityMediaStore.store(initOtp); // 토큰 발급 요청 Token newToken = externalClientService.getToken(customer, newOtp); newOtp.addToken(newToken); tokenStore.store(newToken); } return new SecurityMediaInfo.Main(newOtp); } 위에는 프로젝트의 구성인데.. 첫 단추부터 잘못 끼운 것도 같아서 시작 단계인 지금에서라도 좀 개선을 해보려고 하는데요. 사실 도메인 서비스가 제가 의도로 하는 여러 애그리거트의 서비스 기능을 묶어서 하는 건지 아무리 읽어봐도 혼선이 옵니다. 혹시 DDD 책에서 이벤트라는 개념이 나오는데 도메인 서비스가 아니라, 이 이벤트를 통해 다른 애그리거트의 응용 서비스를 호출하도록 핸들링 하는게 올바른 방법일까요? 지금과 같은 구조를 유지해도 된다면.. facade 영역의 메소드를 트랜잭션으로 묶고, 각 도메인 계층의 서비스들에서 선언된 해당 도메인에 대한 crud 메소드를 적절히 호출해가면서 facade 영역에서 비즈니스 로직을 처리해도 될까요? 너무 글이 장황하고 기네요.. ㅠㅠ 혹시 도움을 주신다면 너무나도 감사드리겠습니다.

  • java
  • spring
  • spring-boot
  • jpa
인생은회전목마 댓글 1 좋아요 0 조회수 510

인기 태그

인프런 TOP Writers

주간 인기글