국내뉴스 이슈 순위 Top10 관련 기사 - 2023년 06월 10일 07시 기준


1위 트럼프 4.43% 관련 반응

  1. [뉴시스] '기밀 유출' 트럼프 피소에…'적과의 동침' 나선 美공화 대선주자들
  2. [뉴시스] 트럼프, 외국 핵·군사정보 등 보유…'최고 기밀' 상당수(종합2보)
  3. [뉴시스] 트럼프, 외국 핵·군사정보 사택 보유…'최고 기밀' 상당수(종합)
  4. [SBS뉴스] 미 법무, 트럼프 기밀 유출 사건 기소장 공개…37개 혐의 적용
  5. [뉴시스] '트럼프 기소' 스미스 특검 "빠른 재판 추진"
  6. [뉴시스] 美법무부, 트럼프 공소장 공개…37개 혐의 적용
  7. [파이낸셜뉴스] 미 연방검찰, 트럼프 기밀유출 기소...침실·욕실 등에도 기밀문건 널려
  8. [뉴시스] [속보]트럼프 기밀 유출 공소장 공개…37개 혐의 적용
  9. [동아닷컴] 바이든, 트럼프 기소에 “노코멘트…법무부 독립성 존중”
  10. [동아닷컴] ‘기밀유출’ 트럼프 공소장 봉인해제…불법 보관 등 37개 혐의

2위 우크라 1.85% 관련 반응

  1. [뉴시스] 자포리자 때렸다…우크라 대반격의 서막(영상)
  2. [동아닷컴] 푸틴 “우크라 반격 시작됐지만 어떤 목표도 달성 못해”
  3. [뉴시스] 푸틴 "우크라 반격 시작됐지만 어떤 목표도 달성 못해"
  4. [뉴시스] 美, 우크라에 포탄·미사일 등 2.7조원 규모 군사지원

3위 법무부 1.48% 관련 반응

  1. [뉴시스] 美법무부, 트럼프 공소장 공개…37개 혐의 적용
  2. [동아닷컴] 바이든, 트럼프 기소에 “노코멘트…법무부 독립성 존중”
  3. [뉴시스] 바이든, 트럼프 기소에 "노코멘트…법무부 독립성 존중"

4위 공소장 1.11% 관련 반응

  1. [뉴시스] 美법무부, 트럼프 공소장 공개…37개 혐의 적용
  2. [뉴시스] [속보]트럼프 기밀 유출 공소장 공개…37개 혐의 적용
  3. [동아닷컴] ‘기밀유출’ 트럼프 공소장 봉인해제…불법 보관 등 37개 혐의

5위 삼성 1.11% 관련 반응

  1. [이투데이] '삼성 동맹' LGD, 불황 터널 뚫고 3년 만에 흑자 전환할까
  2. [동아닷컴] 삼성-LG전자 연구원 모여 창업… “기술로 피부 관리 더 간편하게”[허진석의 ‘톡톡 스타트업’]

6위 중국 1.11% 관련 반응

  1. [구글 뉴스] 중국동포 여행사 베트남 팸투어로 안전한 해외여행길을 제공한다
  2. [파이낸셜뉴스] [Dr. J’s 중국을 보는 색다른 시선] 美中간의 묘한 화해무드, 美는 선거에 中은 경기에 답이?
  3. [동아닷컴] “블링컨 美국무장관, 18일 중국 방문해 고위 관료 면담”
  4. [뉴시스] "블링컨 美국무장관, 18일 중국 방문해 고위 관료 면담"

7위 일본 1.11% 관련 반응

  1. [뉴시스] 일본 경제계 '남성 편중' 깨지나…"투자자들, 여성 임원 선호"
  2. [뉴시스] 박기태 반크 단장 "영어 '일본해' 표기 '동해'로 수정 활동..日언론 나를 쌈닭 취급"[문화人터뷰]
  3. [구글 뉴스] [에디터픽] 러시아 "일본, 적대행위 고조시키고 있어"…푸틴 "내달 벨라루스 전술핵 배치 시작" / YTN

8위 서울 1.11% 관련 반응

  1. [파이낸셜뉴스] 서울 동북권 뉴타운으로 변신.. 이문·휘경뉴타운 재정비 속도
  2. [동아닷컴] 전국 구름 많거나 흐리고 가끔 비…서울 19~28도, 부산 19~26도
  3. [동아닷컴] “내 인생 바꿔준 BTS, 고생 많았어!”… ‘아미’로 물든 보랏빛 서울

9위 바이든 1.11% 관련 반응

  1. [뉴시스] 바이든 미 대통령 "미국 반대하는 베팅 말라" 주문
  2. [동아닷컴] 바이든, 트럼프 기소에 “노코멘트…법무부 독립성 존중”
  3. [뉴시스] 바이든, 트럼프 기소에 "노코멘트…법무부 독립성 존중"
  4. [동아닷컴] 바이든 “美경제에 反하는 베팅 말라” 中겨냥 재차 경고

10위 드라마 1.11% 관련 반응

    #트럼프 #우크라 #법무부 #공소장 #삼성 #중국 #일본 #서울 #바이든 #드라마 #뉴스속보 #뉴스 #이슈링크 #이슈 #실검 #실시간검색어


    출처 : 이슈링크
    이슈링크 앱 다운로드
    NewsLink App Download


    커뮤니티 실시간 검색어 순위 Top10 관련 반응 - 2023년 06월 10일 07시 기준


    1위 블루아카 2.03% 관련 반응 모음

    1. [루리] (블루아카) 피자먹는 호시노냥 /코하루냥을 발견한 미카냥
    2. [루리] (블루아카) 선생 고민상담 해주는 마리
    3. [루리] (블루아카) 만쥬는 영양만점.manhwa
    4. [루리] (블루아카) 머리 잘라주는 아리스(스포
    5. [루리] (블루아카) 가장 야생동물같은 토끼
    6. [루리] (블루아카) 코유키 메모리얼의 비밀
    7. [루리] (블루아카) 새삼 정츠키가 미친캐긴하다
    8. [루리] (블루아카) 항아리겜 핸폰으로 3분대까지 줄여왔음
    9. [루리] (블루아카) 일섭스포 주딱이 새로 왔대!
    10. [루리] (블루아카) 또 도망쳤다
    11. [루리] (블루아카) 심령사진
    12. [루리] (블루아카,일섭스포) 카야 더 고통받게 하는방법
    13. [루리] (블루아카) 선을 넘는 선생
    14. [루리] (블루아카) 선생님의 허리를 부숴버린 하스미
    15. [루리] (블루아카) 한섭 특 이틀 남은 상황에서 4000등대도 방심못함
    16. [루리] (블루아카) 마리가 약간 그런 게 있다? 남자들의 도전욕, 정복욕을 자극함
    17. [루리] (블루아카) 스포]난 카야 그래도 목적은 정당할 줄 알았는데
    18. [루리] (블루아카) 아니 스벌 이게되네
    19. [루리] (블루아카) 항아리가 이런 게임이구나
    20. [루리] (블루아카) 25.1층 입주합니다

    2위 리버풀 0.81% 관련 반응 모음

    1. [펨코] [속보- Sports Zone] 케프렌 튀랑 to 리버풀, 시간 문제.
    2. [펨코] [르 파리지앵 - 벤자민 콰레즈] 리버풀, 튀랑측과 회담 예정 / 릴리앙 튀랑은 리버풀행을 강력하게 원합니다.
    3. [펨코] [벤자민 콰레즈] 리버풀, 케프렌 튀랑과 새 시즌을 함께 하길 희망.
    4. [펨코] [SPORTS ZONE] 리버풀, 튀랑과의 합의 그리 멀지 않았습니다
    5. [펨코] [벤 제이콥스] 리버풀, 튀랑&코네 영입 문의.
    6. [펨코] 나 튀랑인데 리버풀 팬들아 걱정 마라.
    7. [펨코] [벤 제이콥스] 리버풀의 튀랑과 코네 링크는 사실 리버풀은 두 선수 모두 문의했으며 주시하세요

    3위 중국 0.68% 관련 반응 모음

    1. [엠팍] 최근 중국상황 뇌피셜
    2. [루리] 중국 역사상 최악의 황제를 뽑으라면 반드시 들어가는 인물
    3. [보배] 중국 대만 전쟁 언제 일어날까
    4. [보배] W독일 퇴역 조종사, 중국군 훈련 참여 ‘파문’
    5. [엠팍] 이재명 중국대사한테 훈시 받은 것 반응 최악이네요
    6. [펨코] 아무리 봐도 이재명은 중국대사하고 걍 경제 무역 얘기만 할려고 했나 보다
    7. [엠팍] 중국 , 싱하이밍 '베팅’ 발언 논란에 “한중관계 현 상황 한국 책임”

    4위 튀랑 0.68% 관련 반응 모음

    1. [펨코] [SNS] 난 케프렌 튀랑 영입 존나 확신함.
    2. [펨코] [속보- Sports Zone] 케프렌 튀랑 to 리버풀, 시간 문제.
    3. [펨코] [르 파리지앵 - 벤자민 콰레즈] 리버풀, 튀랑측과 회담 예정 / 릴리앙 튀랑은 리버풀행을 강력하게 원합니다.
    4. [펨코] 튀랑은 솔직히 이 팀 관심있는거야 다 아는 사실이고.. 진전 됐는지가 궁금한건데
    5. [펨코] [벤자민 콰레즈] 리버풀, 케프렌 튀랑과 새 시즌을 함께 하길 희망.
    6. [펨코] [SPORTS ZONE] 리버풀, 튀랑과의 합의 그리 멀지 않았습니다
    7. [펨코] [벤 제이콥스] 리버풀, 튀랑&코네 영입 문의.
    8. [펨코] 나 튀랑인데 리버풀 팬들아 걱정 마라.
    9. [펨코] [벤 제이콥스] 리버풀의 튀랑과 코네 링크는 사실 리버풀은 두 선수 모두 문의했으며 주시하세요

    5위 버튜버 0.68% 관련 반응 모음

    1. [루리] (버튜버) 이세계아이돌 카카오웹툰 표지 공개.jpg
    2. [루리] (버튜버) 고소공포증인 난 이거 못 보겠다
    3. [루리] (버튜버) 애니메이트쪽 콜라보카페 좀 여유로워졌나
    4. [루리] (버튜버,사사) 새벽은 꼬모 그리는시간
    5. [루리] (버튜버) 사쿠라 미코 두장
    6. [루리] (버튜버) 이 방송, 음주 없습니다
    7. [루리] (버튜버) 분노 게이지는 여전한 아메
    8. [루리] (버튜버) 홀로 틱톡 보는데

    6위 드라마 0.61% 관련 반응 모음

    1. [인벤] BL드라마 찍은 남배우 결혼소식에 드라마 팬들의 악플세례
    2. [인티] 완벽하게 분석당한 K-드라마 술자리.gif
    3. [펨코] 스압) 최신드라마 속 해병대 출신 주인공들끼리 오고 가는 대화
    4. [펨코] 전세 사기로 보는 최고의 드라마 결말
    5. [클량] BL드라마 찍은 남배우 결혼소식에 드라마 팬들의 악플세례
    6. [루리] 해리포터 드라마 헤르미온느 흑인캐스팅한다니...
    7. [루리] 해리포터 드라마에 흑르미온느나오면 없는셈 쳐야지

    7위 미국 0.61% 관련 반응 모음

    1. [이토] 미국 인건비 수준에 깜짝 놀란 한국인
    2. [엠팍] 속보) 도날드 트럼프, 미국 핵 기밀문서를 집에 은닉한 행위로 기소
    3. [루리] 한국인보다도 더 김치를 많이 먹는 미국인...
    4. [펨코] 미국이 두려워한다는 한중일 공동체…의 진실
    5. [엠팍] 후쿠시마 방류하면 해류 타고서 미국 서해안으로 가는거군요
    6. [보배] 미국 명문 의대에 입학이 불허된 이유
    7. [펨코] 미국 현지에서 평가하는 우승 배당률
    8. [펨코] 글버지는 미국 사람이라서 미국 시간으로 계산해야 된다
    9. [인티] 제니 춤추는 부분 미국에서 반응 좋나봐

    8위 일본 0.54% 관련 반응 모음

    1. [이토] 한국 경찰 "코스프레"하던 일본인 근황ㄷㄷ
    2. [인티] "일본 요리는 맛에 비해 너무 과대평가돼 있다"는 교수
    3. [와고] 한국이랑 일본 선호하는 얼굴이 다르다네
    4. [뽐뿌] 은하영웅전설 애장판 (일본현지)
    5. [루리] 일본의 장사천재
    6. [엠팍] 트와이스 사나 미나 모모 일본어 멘트
    7. [이토] 은하영웅전설 애장판 (일본현지)
    8. [엠팍] 일본에도 군사쿠데타가 발생한 적이 있네요
    9. [보배] 일본관료놈들 의 대화
    10. [펨코] 국민은행 글로벌통합증거금하면 원화로 일본주식 살 수 있음

    9위 한국 0.54% 관련 반응 모음

    1. [펨코] 한국인 UFC 선수 최근 몸 상태 공개 ㄷㄷㄷㄷ
    2. [이토] 한국 경찰 "코스프레"하던 일본인 근황ㄷㄷ
    3. [이토] 미국 인건비 수준에 깜짝 놀란 한국인
    4. [와고] 한국이랑 일본 선호하는 얼굴이 다르다네
    5. [펨코] 환율 보면 한국장은 계속 달릴 거 같긴 한데
    6. [루리] 한국인보다도 더 김치를 많이 먹는 미국인...
    7. [루리] 입다물면 미인인 한국캐릭터
    8. [루리] 한국이 독재정권을 몰아낸다고 꿘충을 너무 오래 방치한듯
    9. [보배] 한국인들의 스포츠 즐기는 종특
    10. [엠팍] 중국 , 싱하이밍 '베팅’ 발언 논란에 “한중관계 현 상황 한국 책임”
    11. [인티] 겉모습만 봤을 때 한국인인거 딱 티나는 요소가 뭐가 있을까
    12. [인티] 이번에 오랜만에 한국들어갔을때 가장 놀란점
    13. [펨코] 한국인들의 스포츠 즐기는 종특

    10위 하블리 0.54% 관련 반응 모음

    1. [와고] 하블리 저 발언은 다 철구의 염보성에 대한 스탠스 때문임
    2. [와고] 하블리에게) 철구가 부르거든 합방 해주지말아라
    3. [와고] 와 근데 하블리 생각할수록 웃기네 어캐 윤호한다 ㅇㅈㄹ을하지
    4. [와고] 하블리랑 결혼하면 재밌긴 할듯ㅋ
    5. [와고] 근데 YB 하블리 자숙런 모꿀몬 멘탈런임? 염보도 제주런 한다며
    6. [와고] 하블리는 또 장기휴방인가

    #블루아카 #리버풀 #중국 #튀랑 #버튜버 #드라마 #미국 #일본 #한국 #커뮤니티 #이슈링크 #이슈 #실검 #실시간검색어


    출처 : 이슈링크
    이슈링크 앱 다운로드
    NewsLink App Download


    커뮤니티 인기 게시글 순위 Top100 관련 반응 - 2023년 06월 10일 07시 기준

    1. [보배드림] 정준영 승리 단톡방 멤버 로이킴 근황
    2. [뽐뿌] 짧은치마입고 총질하는 태국 여자
    3. [루리웹] 건강의 척도 허벅지
    4. [이토랜드] 국내 교도소 최장수 사형수 최근 모습
    5. [INVEN] 혜자 제육덮빵 샌드위치
    6. [82COOK] 화려한거 갖고싶어요
    7. [더쿠] 인터넷 MBTI 검사중 가장 정교하다는 테스트
    8. [오늘의유머] 미스코리아 진 손정은 아들 캐허접합니다
    9. [와이고수] 철구라인이 죽을 수밖에 없는 이유..
    10. [SLRClub] 배구선수 이다영 비키니 수영복.JPG
    11. [MLBPARK] 대한민국 한반도 지뢰 상황.jpg
    12. [에펨코리아] 한국인 UFC 선수 최근 몸 상태 공개 ㄷㄷㄷㄷ
    13. [웃긴대학] (노분노주의)부산 길거리 묻지마 폭행
    14. [보배드림] Sex.com 문닫았네 헐이다
    15. [이토랜드] 한국 경찰 "코스프레"하던 일본인 근황ㄷㄷ
    16. [SLRClub] 발가벗고 달려드는 육덕女 ㄷㄷㄷ
    17. [인스티즈] 돌발성 난청오고 악플 때문에 건강 많이 악화됐었다는 유튜버.jpg
    18. [이토랜드] 미국 인건비 수준에 깜짝 놀란 한국인
    19. [웃긴대학] 테이의 먹성이 세상에 알려지게 된 계기
    20. [보배드림] 의외로 꽤 많다는 사람들.JPG
    21. [와이고수] 모꿀몬 << 알다가도 모르겠네
    22. [와이고수] 라클에서 마토는 독이다,
    23. [이토랜드] 나영석 피디가 넷플릭스 자본수준에 깜짝 놀랐다는 프로
    24. [클리앙] 장사 천재 마사장.JPG
    25. [루리웹] 딸에 달려든 개 발로 찼는데 견주가 고소한 사건
    26. [와이고수] 모꿀몬 다시보기 보는데 방송 시작하자마자 울고있네
    27. [와이고수] 혜로로 슬슬 마음에 안드네 ㄹㅇ
    28. [MLBPARK] 병자호란이 일어난 이유.jpg
    29. [루리웹] 할머니 심문하는 방법
    30. [이토랜드] 혐주의) 안타까운 해외 교통사고
    31. [와이고수] 졈니 요즘라클 ㅈ같을만함
    32. [뽐뿌] 노키드존이 늘수밖에 없는 이유 ㄷㄷ
    33. [보배드림] 이서진이 연애 안하는 이유..
    34. [와이고수] 사과머리 goat
    35. [MLBPARK] 최근 중국상황 뇌피셜
    36. [와이고수] 하블리 저 발언은 다 철구의 염보성에 대한 스탠스 때문임
    37. [와이고수] 속보) 쭈디 결국 과즙세연한테 따임 ㅠㅠ
    38. [와이고수] 졈니 방송보다보면
    39. [와이고수] 랑e 클라스는 합방하면 나오잖아 -ㅂ-ㅋㅋㅋ
    40. [와이고수] 스타BJ 사실 이분이 제일 예쁨
    41. [와이고수] 여겜비들 연애하는거 ㄹㅇ 이해안가지않냐?
    42. [82COOK] 지인과 주량차이가 너무 큰경우
    43. [인스티즈] "일본 요리는 맛에 비해 너무 과대평가돼 있다"는 교수
    44. [SLRClub] 국민차 그랜저
    45. [와이고수] 아무리 잘생겨도 비호감일수 있다는 걸 증명한 두명
    46. [와이고수] 스타여캠 와꾸 7황 뽑아줌 (현역)
    47. [와이고수] 하블리에게) 철구가 부르거든 합방 해주지말아라
    48. [와이고수] 방송본적은 없고 와고글만 보는데 비호감처럼 느껴지는 스타여캠
    49. [웃긴대학] 노르웨이의 시골 터널에 철문이 있는 이유
    50. [뽐뿌] 길고양이들은 죽을때 어디로 가는걸까요
    51. [와이고수] 시즌스1기 사진
    52. [뽐뿌] 죽고 죽이는 지히철 노선도
    53. [와이고수] 모꿀몬 낙타 오기전까진 행복했지
    54. [와이고수] 졈아가 스타만 하니까 슬슬풍이
    55. [와이고수] 근데 12제자 컨텐츠는 왜접은거임?
    56. [클리앙] 핏블리 사업접고 인도로 떠난다네요
    57. [웃긴대학] 31살 유부남, 와이프에겐 비밀인 tmi.jpg
    58. [루리웹] 천안함 사건 발생하고 이명박 발언은 진짜 어메이징하네
    59. [에펨코리아] 예전부터 치열했던 스타크래프트 난제.jpg
    60. [82COOK] 오늘 토요일 이따 먹을거
    61. [와이고수] 와 근데 하블리 생각할수록 웃기네 어캐 윤호한다 ㅇㅈㄹ을하지
    62. [SLRClub] 일찐녀와 사귄 썰.manhwa
    63. [에펨코리아] 게으르고 딸딸이 많이치는 놈들에게.jpg
    64. [MLBPARK] 유아인 죽일려고 저러는지…
    65. [와이고수] 차세대 뽀누나 누가 될꺼 같냐?
    66. [와이고수] 한국이랑 일본 선호하는 얼굴이 다르다네
    67. [에펨코리아] [유퀴즈] 여자 가수들 역대급 황금기였다는 2008년 가요계 상황 ㄷㄷㄷ.JPG
    68. [와이고수] 졈니는 나이 들고 얼굴 늙어지면 인기 없어질 상임
    69. [와이고수] 졈니 연애 걸리면 충격일거 같긴함
    70. [이토랜드] 화재시 고층빌딩에서 탈출하는 방법
    71. [와이고수] 난 걍 염보성이 역겨움 스타판에서 먹고사는애가 스타는 줫도 연습안하는거봐 ㅋㅋ
    72. [웃긴대학] 크크크 감도를 10배로 만들어주마!!!
    73. [이토랜드] 경기도 안좋은데.... 너무 비싸다!
    74. [루리웹] 유게이 이 시발새1끼들아
    75. [인스티즈] 잘 살았지만 못 살았다는 이서진 어린시절.jpg
    76. [와이고수] YB풍낙수 중훈이 까마귀가 다 빨아가잖아
    77. [인스티즈] 센과 치히로의 행방불명 5년 후 팬아트.jpg
    78. [와이고수] 솔직히 yb까진 낙수 얘기해도 되는데
    79. [웃긴대학] 탈옥수가 집에 찾아옴 ㄷㄷ
    80. [이토랜드] 은모
    81. [와이고수] 내가 삐삐 너무 많이 홍보하고 다녔나
    82. [와이고수] 넷플 어제 나온 사냥개들 재밌냐?
    83. [인스티즈] 어제 찍은 것 같은 아이브 안유진 애기 때 사진.jpg
    84. [와이고수] 모꿀몬은 yb 탈출해야 됨
    85. [와이고수] 스타여캠 역대로치면 실물은 뽀요밍이 원탑
    86. [와이고수] 졈니가 1황이지 외모는
    87. [와이고수] 졈니 소통 달달하네
    88. [와이고수] 외국에선 성형수술 하는거 ㄹㅇ 병1신으로 봄
    89. [와이고수] YB vs 보신대 엔트리 예상
    90. [인스티즈] 배우 최우식이 맥도날드 빅맥 먹는 방법.jpg
    91. [와이고수] 스타판 와꾸 사황 (반박불가)
    92. [와이고수] 혜로로 이쁘다<<< 걍 제일 이해안감
    93. [인스티즈] 몸에서 운동하라고 보내는 신호
    94. [에펨코리아] 할머니 심문하는 방법
    95. [와이고수] 동빠 소리소문없이 사라지길래 방송접은줄 알앗더니
    96. [MLBPARK] 부산 택시기사도 착해지는 곳
    97. [웃긴대학] 실수로 다른 게임대회 신청한 철권 프로게이머.jpg
    98. [와이고수] 올타임 스타BJ 비주얼 원탑
    99. [와이고수] 이러면 이제 모꿀몬이 보신대전 져도 뭐라 할 수 있겠냐?
    100. [인스티즈] 성심당 5천원 고기한쌈 샌드위치.jpg



    출처 : 이슈링크
    이슈링크 앱 다운로드
    NewsLink App Download

    스프링 부트 애플리케이션의 고급 통합 테스트란?

    스프링 부트는 애플리케이션 개발을 위한 많은 기능을 제공합니다. 그 중에서도 테스트 기능은 개발자들에게 매우 중요합니다. 테스트를 통해 개발자들은 코드 버그를 찾고 수정할 수 있으며, 애플리케이션의 안정성과 성능을 높일 수 있습니다.

    스프링 부트 애플리케이션의 고급 통합 테스트는 애플리케이션의 모든 레이어를 테스트하는 것입니다. 이는 애플리케이션의 모든 컴포넌트들이 올바르게 상호작용하는지 확인하고, 전체 시스템이 예측한 대로 동작하는지 검증합니다.

    스프링 부트 애플리케이션의 고급 통합 테스트는 다양한 방법으로 수행될 수 있습니다. 이 글에서는 스프링 부트 애플리케이션의 고급 통합 테스트를 위한 환경 구축, 다양한 테스트 방법, 그리고 테스트 실행 및 관리 방법에 대해 알아보겠습니다.

    통합 테스트를 위한 스프링 부트 애플리케이션 환경 구축

    스프링 부트 애플리케이션의 고급 통합 테스트를 위해서는 적절한 테스트 환경을 구축해야 합니다. 이를 위해서는 다음과 같은 작업이 필요합니다.

    1. 테스트 자원 관리

    스프링 부트 애플리케이션의 고급 통합 테스트를 위해서는 테스트 데이터베이스, 테스트용 외부 서비스, 그리고 테스트용 파일 시스템 등의 테스트 자원을 관리해야 합니다.

    이를 위해서는 스프링 부트에서 제공하는 @TestPropertySource 어노테이션을 사용하여 테스트용 프로퍼티를 지정할 수 있습니다. 또한, @DirtiesContext 어노테이션을 사용하여 테스트가 실행될 때마다 컨텍스트를 새로고침하여 테스트 환경을 초기화할 수 있습니다.

    2. 테스트용 데이터베이스 생성

    스프링 부트에서는 @DataJpaTest 어노테이션을 사용하여 테스트용 데이터베이스를 생성할 수 있습니다. 이를 사용하면 메모리나 임시 파일을 이용한 데이터베이스를 생성하고, 테스트가 끝나면 자동으로 삭제할 수 있습니다.

    3. 테스트용 외부 서비스 모의

    스프링 부트에서는 @MockBean 어노테이션을 사용하여 외부 서비스를 모의(mock)할 수 있습니다. 이를 통해 외부 서비스의 응답을 조작하거나, 특정 상황에서 예외를 발생시킬 수 있습니다.

    4. 테스트용 파일 시스템 구성

    스프링 부트에서는 @TempDir 어노테이션을 사용하여 테스트용 파일 시스템을 생성할 수 있습니다. 이를 사용하면 테스트가 실행될 때마다 임시 폴더를 생성하고, 테스트가 끝나면 폴더를 자동으로 삭제할 수 있습니다.

    스프링 부트 애플리케이션의 다양한 통합 테스트 방법

    스프링 부트 애플리케이션의 고급 통합 테스트를 위해서는 여러 가지 테스트 방법을 사용할 수 있습니다. 이 글에서는 다음과 같은 방법을 살펴보겠습니다.

    1. MockMvc를 이용한 컨트롤러 테스트

    스프링 부트에서는 MockMvc를 이용하여 컨트롤러를 테스트할 수 있습니다. MockMvc는 웹 애플리케이션을 모의해서 HTTP 요청과 응답을 검증할 수 있는 기능을 제공합니다.

    @RunWith(SpringRunner.class)
    @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
    public class UserControllerTest {
    
        @Autowired
        private WebApplicationContext context;
    
        private MockMvc mockMvc;
    
        @Before
        public void setup() {
            this.mockMvc = MockMvcBuilders
                    .webAppContextSetup(this.context)
                    .apply(springSecurity())
                    .build();
        }
    
        @Test
        public void testGetUser() throws Exception {
            mockMvc.perform(get("/users/1"))
                    .andExpect(status().isOk())
                    .andExpect(jsonPath("$.id").value(1))
                    .andExpect(jsonPath("$.name").value("John"))
                    .andExpect(jsonPath("$.email").value("john@example.com"));
        }
    }

    2. TestRestTemplate을 이용한 HTTP 통합 테스트

    스프링 부트에서는 TestRestTemplate을 이용하여 HTTP 요청을 보내고 응답을 검증할 수 있습니다. TestRestTemplate은 실제 HTTP 클라이언트와 같이 동작하며, 내부적으로는 RestTemplate을 사용합니다.

    @RunWith(SpringRunner.class)
    @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
    public class UserControllerIntegrationTest {
    
        @Autowired
        private TestRestTemplate restTemplate;
    
        @Test
        public void testGetUser() {
            ResponseEntity response = restTemplate.getForEntity("/users/1", User.class);
    
            assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK);
            assertThat(response.getBody()).isEqualTo(new User(1L, "John", "john@example.com"));
        }
    }

    3. 컨테이너 테스트

    스프링 부트에서는 @SpringBootTest 어노테이션을 이용하여 컨테이너 테스트를 수행할 수 있습니다. 이를 이용하면 실제 애플리케이션을 실행해보고, HTTP 요청을 보내고 응답을 검증할 수 있습니다.

    @RunWith(SpringRunner.class)
    @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
    public class UserControllerIT {
    
        @Autowired
        private TestRestTemplate restTemplate;
    
        @LocalServerPort
        private int port;
    
        @Test
        public void testGetUser() {
            ResponseEntity response = restTemplate.getForEntity("http://localhost:" + port + "/users/1", User.class);
    
            assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK);
            assertThat(response.getBody()).isEqualTo(new User(1L, "John", "john@example.com"));
        }
    }

    4. WireMock을 이용한 외부 서비스 모의

    스프링 부트에서는 WireMock을 이용하여 외부 서비스를 모의할 수 있습니다. WireMock은 HTTP 요청을 가로채서 원하는 응답을 반환하거나, 요청을 검증할 수 있는 기능을 제공합니다.

    @RunWith(SpringRunner.class)
    @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
    public class UserServiceTest {
    
        @Autowired
        private UserService userService;
    
        @Autowired
        private WireMockServer wireMockServer;
    
        @Before
        public void setup() {
            wireMockServer.stubFor(get(urlEqualTo("/users/1"))
                    .willReturn(aResponse()
                            .withHeader("Content-Type", "application/json")
                            .withBody("{"id":1,"name":"John","email":"john@example.com"}")));
        }
    
        @Test
        public void testGetUser() {
            User user = userService.getUser(1L);
    
            assertThat(user.getId()).isEqualTo(1L);
            assertThat(user.getName()).isEqualTo("John");
            assertThat(user.getEmail()).isEqualTo("john@example.com");
    
            wireMockServer.verify(getRequestedFor(urlEqualTo("/users/1")));
        }
    }

    스프링 부트 애플리케이션의 고급 통합 테스트 실행 및 관리 방법

    스프링 부트 애플리케이션의 고급 통합 테스트를 실행하고 관리하기 위해서는 다음과 같은 방법을 사용할 수 있습니다.

    1. Gradle 또는 Maven을 이용한 테스트 실행

    스프링 부트에서는 Gradle 또는 Maven을 이용하여 테스트를 실행할 수 있습니다. 이를 위해서는 test 태스크를 실행하면 됩니다.

    ./gradlew test
    mvn test

    2. IntelliJ IDEA를 이용한 테스트 실행

    IntelliJ IDEA에서는 테스트를 실행하고 결과를 확인할 수 있습니다. 이를 위해서는 Run 메뉴에서 All Tests 또는 특정 테스트 클래스 또는 메소드를 선택하면 됩니다.

    3. CI/CD 파이프라인에서의 테스트 실행

    스프링 부트 애플리케이션의 고급 통합 테스트를 CI/CD 파이프라인에서 실행할 수 있습니다. 이를 위해서는 CI/CD 도구에서 Gradle 또는 Maven을 이용하여 테스트를 실행하고, 결과를 확인할 수 있습니다.

    4. 테스트 리포트 생성

    스프링 부트에서는 Surefire 플러그인을 이용하여 테스트 리포트를 생성할 수 있습니다. 이를 위해서는 다음과 같은 명령을 실행하면 됩니다.

    ./gradlew test jacocoTestReport
    mvn test jacoco:report

    이를 실행하면 build/reports/tests/index.html 또는 target/site/jacoco/index.html 파일에서 테스트 결과 및 커버리지 정보를 확인할 수 있습니다.

    결론

    스프링 부트 애플리케이션의 고급 통합 테스트는 애플리케이션의 안정성과 성능을 높이는 중요한 역할을 합니다. 이를 위해서는 적절한 테스트 환경을 구축하고, 다양한 테스트 방법을 활용할 수 있어야 합니다. 또한, 테스트를 실행하고 관리하는 방법을 알아야 하며, 테스트 리포트를 생성하여 테스트 결과 및 커버리지 정보를 확인할 수 있습니다. 이 글에서는 스프링 부트 애플리케이션의 고급 통합 테스트를 위한 환경 구축, 다양한 테스트 방법, 그리고 테스트 실행 및 관리 방법에 대해 살펴보았습니다.

    스프링 부트와 웹소켓을 활용한 GraphQL 서브스크립션 구현

    GraphQL

    스프링 부트와 웹소켓을 이용하여 GraphQL 서브스크립션을 구현하는 방법에 대해 알아보겠습니다. GraphQL 서브스크립션은 실시간 데이터를 처리해야하는 상황에서 유용하게 사용됩니다. 이 기능은 GraphQL 스키마에서 subscription 타입으로 정의되어 있으며, 클라이언트가 구독을 생성하면 서버가 해당 데이터의 변경 사항을 실시간으로 알려줍니다. 이를 통해 클라이언트는 웹소켓 연결을 통해 서버와 실시간으로 데이터를 주고받을 수 있습니다.

    이번 글에서는 GraphQL 서브스크립션의 개념과 사용, 스프링 부트와 웹소켓을 통한 구현 방법, 주의할 점과 문제 해결 방법에 대해 알아보겠습니다.

    GraphQL 서브스크립션의 개념과 사용

    GraphQL 서브스크립션은 GraphQL 스키마에서 subscription 타입으로 정의됩니다. 이 타입은 일반적인 Query와 Mutation과 같은 구조를 가지고 있지만, 클라이언트는 해당 subscription 타입을 구독하고 있으면, 서버에서 해당 타입에 대한 변경 사항이 발생하면 이를 실시간으로 전달받을 수 있습니다.

    예를 들어, 실시간 채팅 애플리케이션을 구현한다고 가정해보겠습니다. 이 애플리케이션에서는 사용자가 메시지를 입력하면 다른 사용자들에게 이를 실시간으로 전달해야합니다. 이를 위해 GraphQL subscription을 사용할 수 있습니다. 사용자가 메시지를 입력하면 서버에서 해당 메시지를 받아들이고, 해당 메시지를 구독하고 있는 모든 클라이언트들에게 메시지를 전달합니다. 이를 통해 모든 클라이언트들은 서버와 실시간으로 데이터를 주고받을 수 있습니다.

    GraphQL 서브스크립션은 이외에도 다양한 실시간 데이터 처리에 유용하게 사용될 수 있습니다. 예를 들어, 주식 시장에서 주식 가격이 변경될 때마다 클라이언트들에게 이를 실시간으로 전달하는 기능을 구현할 수 있습니다. 이를 통해 클라이언트들은 시장 상황을 실시간으로 파악하고, 이에 따른 전략을 수립할 수 있습니다.

    스프링 부트와 웹소켓을 통한 GraphQL 서브스크립션 구현 방법

    스프링 부트와 웹소켓을 이용하여 GraphQL 서브스크립션을 구현하기 위해서는 몇 가지 준비 작업이 필요합니다. 먼저, 스프링 부트 프로젝트를 생성하고, GraphQL 스키마를 작성해야합니다. 이후에는 웹소켓과 GraphQL 서브스크립션을 구현할 코드를 작성하면 됩니다.

    프로젝트 생성

    먼저, 스프링 부트 프로젝트를 생성합니다. 이를 위해 https://start.spring.io/ 에 접속하여 프로젝트 설정을 진행합니다. 여기에서는 Gradle 기반의 프로젝트를 생성하도록 하겠습니다.

    Spring Initializr

    의존성 추가

    프로젝트를 생성한 후, 의존성을 추가해야합니다. 이를 위해 build.gradle 파일에 다음과 같이 의존성을 추가합니다.

    implementation 'com.graphql-java-kickstart:graphql-spring-boot-starter:11.2.0'
    implementation 'com.graphql-java-kickstart:graphql-java-tools:11.0.0'
    implementation 'com.graphql-java-kickstart:graphql-java-tools-async:11.0.0'
    implementation 'org.springframework.boot:spring-boot-starter-websocket'

    위 의존성을 추가하면 GraphQL 스키마 정의를 위한 graphql-java-tools와, GraphQL 서버를 구현하기 위한 graphql-spring-boot-starter가 추가됩니다. 또한, 웹소켓을 사용하기 위한 spring-boot-starter-websocket 의존성도 추가됩니다.

    GraphQL 스키마 작성

    의존성을 추가한 후, GraphQL 스키마를 작성해야합니다. GraphQL 스키마는 .graphql 파일 형태로 작성됩니다. 이번 예시에서는 다음과 같은 스키마를 작성하겠습니다.

    type Query {
      hello: String
    }
    
    type Subscription {
      greeting: String
    }
    
    schema {
      query: Query
      subscription: Subscription
    }

    위 스키마에서는 Query 타입과 Subscription 타입을 정의합니다. Query 타입은 hello 필드를 가지며, 해당 필드를 호출하면 "world" 문자열을 반환합니다. Subscription 타입은 greeting 필드를 가지며, 해당 필드를 구독하면 "Hello, world!" 문자열을 1초마다 반복해서 반환합니다.

    GraphQL 서버 구현

    GraphQL 스키마를 작성한 후, 이를 구현하기 위한 코드를 작성해야합니다. 이를 위해 다음과 같이 GraphQLConfig 클래스를 작성합니다.

    @Configuration
    public class GraphQLConfig {
    
      @Autowired
      private GreetingPublisher greetingPublisher;
    
      @Bean
      public GraphQLSchema schema() {
        return new GraphQLSchemaGenerator()
            .withOperationsFromSingleton(greetingResolver(), Greeting.class)
            .withSubscriptionFromPublisher(Greeting.class, greetingPublisher)
            .generate();
      }
    
      @Bean
      public GreetingResolver greetingResolver() {
        return new GreetingResolver();
      }
    
      @Bean
      public GreetingPublisher greetingPublisher() {
        return new GreetingPublisher();
      }
    }

    위 코드에서는 GraphQL 스키마를 생성하는 GraphQLSchemaGenerator를 사용합니다. 이 때, withOperationsFromSingleton 메소드를 사용하여 GreetingResolver 클래스를 singleton으로 등록하고, withSubscriptionFromPublisher 메소드를 사용하여 Greeting 클래스를 구독하고 있는 구독자(GreetingPublisher)를 등록합니다. 이를 통해 greeting 필드를 구독하면 GreetingPublisher에서 반환하는 값을 실시간으로 받을 수 있습니다.

    
    public class GreetingPublisher implements Publisher {
    
      private final List&lt;Subscriber

    스프링 클라우드 컴포넌트를 활용한 마이크로서비스 아키텍처 구현 방법

    마이크로서비스 아키텍처는 최근에 많은 기업에서 적용하고 있는 방식 중 하나입니다. 이는 하나의 큰 애플리케이션을 작은 서비스 단위로 쪼개어 각각의 서비스를 독립적으로 관리하고 운영하는 것입니다. 이를 통해 개발과 배포의 효율성을 높일 수 있으며, 유지보수 및 확장성 측면에서도 매우 유리합니다. 이번에는 이러한 마이크로서비스 아키텍처를 구현하는 대표적인 프레임워크인 스프링 클라우드 컴포넌트에 대해 알아보겠습니다.

    스프링 클라우드 컴포넌트란?

    스프링 클라우드 컴포넌트는 스프링 프레임워크 기반으로 구현된 마이크로서비스 아키텍처를 구현하기 위한 다양한 라이브러리와 프레임워크의 집합체입니다. 이를 통해 마이크로서비스 아키텍처를 구현하는 데 필요한 공통적인 문제들을 해결할 수 있습니다. 스프링 클라우드 컴포넌트는 다양한 서비스 디스커버리, 로드밸런싱, 서킷브레이커, 분산 추적 등의 기능을 제공합니다.

    스프링 클라우드 컴포넌트는 다양한 라이브러리와 프레임워크의 조합으로 이루어져 있습니다. 이 중에서도 대표적인 것은 다음과 같습니다.

    • 스프링 클라우드 넷플릭스: 서비스 디스커버리, 로드밸런싱, 서킷브레이커 등의 기능을 제공합니다.
    • 스프링 클라우드 쿠버네티스: 쿠버네티스를 이용한 마이크로서비스 배포 및 관리를 위한 라이브러리입니다.
    • 스프링 클라우드 스트림: 메시지 기반의 마이크로서비스 아키텍처를 구현하기 위한 라이브러리입니다.

    이 외에도 다양한 스프링 클라우드 컴포넌트가 있으며, 이를 조합하여 필요한 마이크로서비스 아키텍처를 구현할 수 있습니다.

    마이크로서비스 아키텍처의 장단점

    마이크로서비스 아키텍처를 적용하면 다음과 같은 장점을 얻을 수 있습니다.

    • 유연성: 작은 단위의 서비스로 쪼개어 개발, 배포, 운영, 확장, 유지보수 등을 쉽게 할 수 있습니다.
    • 확장성: 필요에 따라 서비스 단위로 쉽게 확장할 수 있습니다.
    • 독립성: 각 서비스는 독립적으로 운영되기 때문에 한 서비스의 장애가 전체 시스템에 영향을 끼치지 않습니다.
    • 기술적 다양성: 각 서비스는 독립적으로 개발, 배포, 운영되기 때문에 기술적으로 다양한 기술 스택을 적용할 수 있습니다.

    하지만 마이크로서비스 아키텍처를 구현하는 것은 다음과 같은 단점도 있습니다.

    • 복잡성: 서비스 단위로 쪼개어 개발, 배포, 운영, 통합 등을 관리하기 위해서는 복잡한 구성과 운영이 필요합니다.
    • 통합: 각 서비스는 독립적으로 운영되기 때문에 서비스 간의 통합이 필요합니다.
    • 분산 시스템의 문제점: 분산 시스템의 문제점인 네트워크 불안정성, 서비스 장애 등이 발생할 수 있습니다.

    스프링 클라우드 컴포넌트를 활용한 마이크로서비스 아키텍처 구현 방법

    스프링 클라우드 컴포넌트를 활용하여 마이크로서비스 아키텍처를 구현하는 방법은 다음과 같습니다.

    1. 스프링 부트 애플리케이션 생성

    먼저 스프링 부트 애플리케이션을 생성합니다. 이를 위해 Spring Initializr를 이용하거나, CLI(Command Line Interface)를 이용하여 직접 생성할 수 있습니다.

    @SpringBootApplication
    public class MyApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(MyApplication.class, args);
        }
    }

    2. 스프링 클라우드 컴포넌트 의존성 추가

    스프링 클라우드 컴포넌트를 사용하기 위해서는 의존성을 추가해야 합니다. 이를 위해 build.gradle 파일에 다음과 같이 의존성을 추가합니다.

    dependencies {
        implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'
        implementation 'org.springframework.cloud:spring-cloud-starter-netflix-hystrix'
    }

    3. 서비스 디스커버리 설정

    스프링 클라우드 컴포넌트를 이용하여 서비스 디스커버리를 설정합니다. 이를 위해 application.yml 파일에 다음과 같이 설정합니다.

    spring:
      application:
        name: my-service
    eureka:
      client:
        serviceUrl:
          defaultZone: http://localhost:8761/eureka/

    4. 서비스 구현

    서비스를 구현합니다. 이를 위해 RestController를 이용하여 API를 구현합니다.

    @RestController
    public class MyController {
    
        @GetMapping("/hello")
        public String hello() {
            return "Hello World!";
        }
    }

    5. 서킷브레이커 설정

    서킷브레이커를 설정합니다. 이를 위해 HystrixCommand를 이용하여 각각의 서비스를 호출합니다.

    @HystrixCommand(fallbackMethod = "fallback")
    public String callService() {
        RestTemplate restTemplate = new RestTemplate();
        return restTemplate.getForEntity("http://my-service/hello", String.class).getBody();
    }
    
    public String fallback() {
        return "Fallback";
    }

    6. 서비스 간의 통신

    서비스 간의 통신을 구현합니다. 이를 위해 RestTemplate을 이용하여 API를 호출합니다.

    RestTemplate restTemplate = new RestTemplate();
    String result = restTemplate.getForEntity("http://my-service/hello", String.class).getBody();

    7. 서비스 배포

    서비스를 배포합니다. 이를 위해 Docker를 이용하여 각각의 서비스를 컨테이너로 만들고, Kubernetes를 이용하여 배포합니다.

    docker build -t my-service:1.0 .
    docker run -d -p 8080:8080 my-service:1.0
    kubectl apply -f my-service.yaml

    구현 시 고려해야 할 사항과 해결책

    마이크로서비스 아키텍처를 구현할 때는 다음과 같은 고려 사항이 있습니다.

    1. 서비스 디스커버리

    서비스 디스커버리는 서비스 간의 통신을 위해 필요한 기능입니다. 스프링 클라우드 컴포넌트에서는 Netflix Eureka를 이용하여 서비스 디스커버리를 구현할 수 있습니다.

    2. 로드밸런싱

    로드밸런싱은 트래픽을 분산시켜 서비스의 가용성을 높이는 기능입니다. 스프링 클라우드 컴포넌트에서는 Netflix Ribbon을 이용하여 로드밸런싱을 구현할 수 있습니다.

    3. 서킷브레이커

    서킷브레이커는 서비스 간의 통신에서 발생할 수 있는 장애를 처리하는 기능입니다. 스프링 클라우드 컴포넌트에서는 Netflix Hystrix를 이용하여 서킷브레이커를 구현할 수 있습니다.

    4. 분산 추적

    분산 추적은 여러 서비스 간의 통신에서 발생하는 문제를 추적하는 기능입니다. 스프링 클라우드 컴포넌트에서는 Zipkin을 이용하여 분산 추적을 구현할 수 있습니다.

    5. 서비스 메시지 큐

    서비스 메시지 큐는 서비스 간의 비동기적인 통신을 구현하는 기능입니다. 스프링 클라우드 컴포넌트에서는 RabbitMQ, Kafka 등의 메시지 큐를 이용하여 서비스 메시지 큐를 구현할 수 있습니다.

    결론

    이번 글에서는 스프링 클라우드 컴포넌트를 이용하여 마이크로서비스 아키텍처를 구현하는 방법에 대해 알아보았습니다. 스프링 클라우드 컴포넌트는 서비스 디스커버리, 로드밸런싱, 서킷브레이커, 분산 추적 등의 기능을 제공하여 마이크로서비스 아키텍처를 구현하는 데 매우 유용합니다. 하지만 이를 구현할 때는 다양한 고려 사항이 있으며, 이를 고려하여 구현하여야 합니다.

    + Recent posts