Spring Boot를 이용한 RESTful API 개발

Spring Boot는 개발자들이 원하는 대로 서비스를 구축하고 실행하기 위한 간단하고 유연한 방법을 제공합니다. Spring Boot는 Java 개발자들이 RESTful API를 빠르게 만들 수 있도록 도와주며, 복잡한 설정 및 라이브러리를 축소할 수 있습니다. 이 기사에서는 Spring Boot를 이용하여 RESTful API를 개발하는 방법에 대해 설명합니다.

Spring Boot와 RESTful 웹 서비스 개념

Spring Boot는 Spring Framework의 한 부분으로, Java 애플리케이션을 더 쉽게 개발할 수 있도록 도와줍니다. RESTful 웹 서비스는 HTTP와 같은 프로토콜을 기반으로 하는 API를 말합니다. RESTful은 Representational State Transfer의 약자로, HTTP를 사용하여 데이터를 전송하는 방식입니다.

RESTful API는 URI(Uniform Resource Identifier)를 사용하여 데이터를 요청하고 응답합니다. 예를 들어, 사용자 정보를 얻으려면 URI에 사용자 ID를 포함하여 요청합니다. 서버는 해당 ID를 기반으로 데이터를 찾아 응답합니다. 이러한 방식으로, RESTful API는 간단하고 유연하며 쉽게 확장할 수 있습니다.

Spring Boot를 활용한 RESTful API 설계 및 구현

Spring Boot를 사용하여 RESTful API를 설계하고 구현하는 방법은 다음과 같습니다.

1. Spring Boot 프로젝트 생성

먼저, Spring Boot 프로젝트를 생성합니다. 이를 위해 Spring Initializr를 사용할 수 있습니다. Spring Initializr는 Spring Boot 프로젝트를 빠르게 생성하는 도구로, 웹 인터페이스를 통해 프로젝트 구성 옵션을 선택할 수 있습니다.

2. 의존성 추가

Spring Boot는 기본적으로 Spring Framework를 사용합니다. 따라서 Spring Framework의 의존성을 추가해야 합니다. 또한, RESTful API를 개발하려면 Spring Boot Starter Web 의존성도 추가해야 합니다.


    org.springframework.boot
    spring-boot-starter

    org.springframework.boot
    spring-boot-starter-web

3. API 엔드포인트 지정

API 엔드포인트는 URI를 통해 데이터를 요청하고 응답합니다. Spring Boot에서는 @RestController 어노테이션을 사용하여 RESTful API를 만듭니다. 또한, @RequestMapping 어노테이션을 사용하여 엔드포인트 URI를 지정합니다.

@RestController
@RequestMapping("/api")
public class ApiController {
    @GetMapping("/users/{id}")
    public User getUser(@PathVariable Long id) {
        // ...
    }
}

4. 데이터 모델링 및 저장소 설정

RESTful API는 데이터를 요청하고 응답합니다. 따라서 데이터 모델링 및 저장소 설정이 필요합니다. Spring Boot에서는 JPA(Java Persistence API)를 사용하여 데이터 저장소를 구성할 수 있으며, 해당 데이터 모델링을 Entity 클래스로 구현합니다.

@Entity
@Table(name = "users")
public class User {
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Long id;

    @Column(name = "username")
    private String username;

    // ...
}

5. 데이터 조회 및 반환

Spring Boot에서는 Repository 인터페이스를 사용하여 데이터 조회 및 반환을 구현합니다.

public interface UserRepository extends JpaRepository {
    // ...
}

6. 데이터 추가, 수정 및 삭제

Spring Boot에서는 Repository 인터페이스를 사용하여 데이터 추가, 수정 및 삭제를 구현합니다.

public interface UserRepository extends JpaRepository {
    void deleteById(Long id);
    // ...
}

7. 에러 처리

RESTful API에서는 에러 처리가 중요합니다. Spring Boot에서는 @ExceptionHandler 어노테이션을 사용하여 예외 처리를 구현합니다.

@RestControllerAdvice
public class ApiExceptionHandler {
    @ExceptionHandler(Exception.class)
    public ResponseEntity handleException(Exception e) {
        // ...
    }
}

8. 보안 처리

RESTful API에서는 데이터 보안이 중요합니다. Spring Boot에서는 Spring Security를 사용하여 보안 처리를 구현합니다.

9. 테스트

RESTful API를 개발할 때는 테스트가 매우 중요합니다. Spring Boot에서는 JUnit과 Mockito를 사용하여 테스트를 구현합니다.

10. 배포

RESTful API를 개발하고 테스트한 후, 배포하기 위해 Spring Boot에서는 Gradle 또는 Maven을 사용합니다.

결론

Spring Boot를 사용하여 RESTful API를 개발하는 방법에 대해 알아보았습니다. Spring Boot는 Java 개발자들이 RESTful API를 쉽게 만들 수 있도록 도와주며, 간단하고 유연한 방법을 제공합니다. RESTful API를 개발할 때는 Spring Boot의 다양한 기능을 활용하여 효율적으로 작업할 수 있습니다.

스프링 시큐리티란?

스프링 시큐리티는 스프링 프레임워크에서 제공하는 보안 프레임워크로, 인증과 인가를 통해 웹 애플리케이션 보안을 구축할 수 있게 해줍니다. 스프링 시큐리티는 다양한 인증 방식을 지원하며, 세션 관리, CSRF 방어, 보안 헤더 추가 등 다양한 보안 기능을 제공합니다.

스프링 시큐리티는 FilterChainProxy를 이용하여 보안 필터 체인을 구성하며, 각 필터는 요청에 대해 인증과 인가를 검사합니다. 스프링 시큐리티는 다양한 인증 제공자(Authentication Provider)를 제공하며, 사용자 데이터베이스, LDAP, OAuth2 등 다양한 인증 방식을 지원합니다.

스프링 시큐리티는 보안 설정을 자바 코드 또는 XML 파일로 작성할 수 있으며, 스프링 부트에서는 자동 설정을 지원하여 보다 쉽게 보안 설정을 구현할 수 있습니다.

Spring Security

JWT의 개념과 구성

JWT(Json Web Token)는 JSON 형태로 인증 정보를 전송하기 위한 개방형 표준입니다. JWT는 Header, Payload, Signature 세 부분으로 구성되어 있으며, Header는 토큰의 유형과 해싱 알고리즘, Payload는 클레임(Claim) 정보, Signature는 토큰의 유효성 검증을 위한 서명 정보를 담고 있습니다.

클레임(Claim)은 JWT에 담긴 정보를 의미하며, Registered Claim, Public Claim, Private Claim으로 구분됩니다. Registered Claim은 JWT에 대한 정보를 담고 있으며, Public Claim은 자유롭게 정의할 수 있는 정보를 담고 있으며, Private Claim은 서비스에서 정의한 정보를 담고 있습니다.

JWT는 인증 및 인가에 대한 정보를 안전하게 전송하기 위해 사용됩니다. JWT는 서버에서 발급되며, 클라이언트에서는 JWT를 저장하여 서버와의 통신 시 인증 정보를 전송합니다.

JWT

안전한 인증 및 인가 구현 방법

스프링 시큐리티와 JWT를 활용하여 안전한 인증 및 인가 구현 방법을 소개합니다.

1. JWT 발급

JWT를 발급하기 위해서는 서버에서 JWT를 생성하고, 클라이언트에게 전송해야 합니다. 스프링 시큐리티에서는 JWT 생성을 위해 io.jsonwebtoken 패키지의 Jwts 클래스를 사용할 수 있습니다.

String token = Jwts.builder()
    .setSubject("user")
    .setIssuedAt(new Date())
    .setExpiration(new Date(System.currentTimeMillis() + 60 * 60 * 1000))
    .signWith(SignatureAlgorithm.HS512, "secret")
    .compact();

위 코드에서 setSubject 메서드는 클레임 중 하나인 sub을 설정하며, setIssuedAt 메서드는 클레임 중 하나인 iat을 설정합니다. setExpiration 메서드는 클레임 중 하나인 exp을 설정하며, 토큰의 만료 시간을 설정합니다. signWith 메서드는 Signature 정보를 설정하며, HS512 알고리즘과 secret 키를 사용하여 서명합니다.

2. JWT 검증

클라이언트에서 JWT를 받아 서버로 전송한 후, 서버에서는 JWT의 유효성을 검증해야 합니다. 스프링 시큐리티에서는 JWT 검증을 위해 io.jsonwebtoken 패키지의 Jwts 클래스를 사용할 수 있습니다.

try {
    Jwts.parser().setSigningKey("secret").parseClaimsJws(token);
    // Valid token
} catch (JwtException e) {
    // Invalid token
}

위 코드에서 setSigningKey 메서드는 Signature 정보를 설정하며, parseClaimsJws 메서드를 통해 토큰을 검증합니다.

3. 스프링 시큐리티 설정

스프링 시큐리티에서 JWT를 사용하기 위해서는 스프링 시큐리티 설정에서 JwtAuthenticationTokenFilter를 등록해야 합니다.

@Override
protected void configure(HttpSecurity http) throws Exception {
    http.csrf().disable()
        .authorizeRequests()
        .antMatchers("/api/authenticate").permitAll()
        .anyRequest().authenticated()
        .and()
        .addFilterBefore(new JwtAuthenticationTokenFilter(), UsernamePasswordAuthenticationFilter.class);
}

위 코드에서 addFilterBefore 메서드를 이용하여 JwtAuthenticationTokenFilter를 등록합니다.

4. JWT 인증

JWT 인증을 위해서는 AuthenticationProvider를 구현해야 합니다. AuthenticationProviderauthenticate 메서드를 구현하여 인증을 처리합니다.

@Component
public class JwtAuthenticationProvider implements AuthenticationProvider {

    @Override
    public Authentication authenticate(Authentication authentication) throws AuthenticationException {
        JwtAuthenticationToken jwtAuthenticationToken = (JwtAuthenticationToken) authentication;
        String token = jwtAuthenticationToken.getToken();

        try {
            Jwts.parser().setSigningKey("secret").parseClaimsJws(token);
            return new JwtAuthenticationToken(token);
        } catch (JwtException e) {
            throw new BadCredentialsException("Invalid JWT token", e);
        }
    }

    @Override
    public boolean supports(Class authentication) {
        return JwtAuthenticationToken.class.isAssignableFrom(authentication);
    }
}

위 코드에서 authenticate 메서드는 JWT 검증을 수행하고, JwtAuthenticationToken을 반환합니다. supports 메서드는 JwtAuthenticationToken을 지원하는지 확인합니다.

5. 인가 처리

인가 처리를 위해서는 WebSecurityConfigurerAdapter를 상속받은 클래스에서 configure 메서드를 오버라이드하여 인가 처리를 구현합니다.

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.csrf().disable()
            .authorizeRequests()
            .antMatchers("/api/authenticate").permitAll()
            .antMatchers(HttpMethod.GET, "/api/users/**").hasRole("USER")
            .antMatchers(HttpMethod.POST, "/api/users/**").hasRole("ADMIN")
            .anyRequest().authenticated()
            .and()
            .addFilterBefore(new JwtAuthenticationTokenFilter(), UsernamePasswordAuthenticationFilter.class);
    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.authenticationProvider(jwtAuthenticationProvider());
    }

    @Bean
    public JwtAuthenticationProvider jwtAuthenticationProvider() {
        return new JwtAuthenticationProvider();
    }
}

위 코드에서 antMatchers 메서드를 이용하여 URL 패턴과 권한을 설정합니다.

6. 사용자 인증

사용자 인증을 위해서는 UserDetailsService를 구현해야 합니다. UserDetailsServiceloadUserByUsername 메서드를 구현하여 사용자 정보를 조회합니다.

@Service
public class UserService implements UserDetailsService {

    @Autowired
    private UserRepository userRepository;

    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        User user = userRepository.findByUsername(username)
            .orElseThrow(() -> new UsernameNotFoundException("User not found with username: " + username));

        return new org.springframework.security.core.userdetails.User(user.getUsername(), user.getPassword(),
                new ArrayList());
    }
}

위 코드에서 loadUserByUsername 메서드는 UserRepository를 이용하여 사용자 정보를 조회하고, UserDetails 객체를 반환합니다.

7. 사용자 등록

사용자 등록을 위해서는 UserRepository를 구현해야 합니다. UserRepository는 사용자 정보를 저장하고 조회하는 메서드를 구현합니다.

public interface UserRepository extends JpaRepository {
    Optional findByUsername(String username);
}

위 코드에서 findByUsername 메서드는 사용자 이름으로 사용자 정보를 조회합니다.

8. 로그인 API

로그인 API를 구현하기 위해서는 AuthenticationManager를 이용하여 인증을 수행해야 합니다.

@PostMapping("/authenticate")
public ResponseEntity authenticate(@RequestBody LoginRequest loginRequest) {
    Authentication authentication = authenticationManager.authenticate(
        new UsernamePasswordAuthenticationToken(loginRequest.getUsername(), loginRequest.getPassword()));

    SecurityContextHolder.getContext().setAuthentication(authentication);
    String token = jwtTokenProvider.createToken(authentication);

    return ResponseEntity.ok(new JwtAuthenticationResponse(token));
}

위 코드에서 authenticationManager는 스프링 시큐리티에서 제공하는 인증 매니저입니다. UsernamePasswordAuthenticationToken을 이용하여 인증 정보를 생성합니다. 인증에 성공하면 JWT 토큰을 생성하여 반환합니다.

9. JWT 토큰 생성

JWT 토큰 생성을 위해서는 JwtTokenProvider 클래스를 구현해야 합니다.

@Component
public class JwtTokenProvider {

    @Value("${jwt.secret}")
    private String secret;

    @Value("${jwt.expiration}")
    private long expiration;

    public String createToken(Authentication authentication) {
        User user = (User) authentication.getPrincipal();

        Date now = new Date();
        Date expiryDate = new Date(now.getTime() + expiration);

        return Jwts.builder()
            .setSubject(user.getUsername())
            .setIssuedAt(now)
            .setExpiration(expiryDate)
            .signWith(SignatureAlgorithm.HS512, secret)
            .compact();
    }
}

위 코드에서 createToken 메서드는 Authentication 객체에서 사용자 정보를 추출하고, JWT 토큰을 생성합니다.

10. JWT 토큰 추출

JWT 토큰 추출을 위해서는 JwtAuthenticationTokenFilter 클래스를 구현해야 합니다.

public class JwtAuthenticationTokenFilter extends OncePerRequestFilter {

    @Autowired
    private JwtTokenProvider jwtTokenProvider;

    @Autowired
    private UserService userService;

    @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
            throws ServletException, IOException {
        String jwt = getJwtFromRequest(request);

        if (StringUtils.hasText(jwt) && jwtTokenProvider.validateToken(jwt)) {
            String username = jwtTokenProvider.getUsernameFromJWT(jwt);
            UserDetails userDetails = userService.loadUserByUsername(username);
            JwtAuthenticationToken authentication = new JwtAuthenticationToken(userDetails, null, userDetails.getAuthorities());
            authentication.setToken(jwt);
            SecurityContextHolder.getContext().setAuthentication(authentication);
        }

        filterChain.doFilter(request, response);
    }

    private String getJwtFromRequest(HttpServletRequest request) {
        String bearerToken = request.getHeader("Authorization");
        if (StringUtils.hasText(bearerToken) && bearerToken.startsWith("Bearer ")) {
            return bearerToken.substring(7, bearerToken.length());
        }
        return null;
    }
}

위 코드에서 doFilterInternal 메서드는 JWT 토큰을 추출하고, 검증하여 인증 정보를 생성합니다. getJwtFromRequest 메서드는 HTTP 요청 헤더에서 JWT 토큰을 추출합니다.

결론

스프링 시큐리티와 JWT를 활용하여 안전한 인증 및 인가 구현 방법을 소개했습니다. JWT를 사용하면 서버와 클라이언트 간의 인증 정보를 안전하게 전송할 수 있으며, 스프링 시큐리티를 이용하여 인증 및 인가 처리를 수행할 수 있습니다. 이를 통해 보다 안전한 웹 애플리케이션을 구현할 수 있습니다.

Spring Security OAuth2는 인증 및 권한 부여를 위한 프레임워크로, 특히 API를 보호하는 데 사용됩니다. 이러한 보안 기능은 모든 유형의 웹 응용 프로그램에서 필수적입니다. 이 글에서는 Spring Security OAuth2를 사용하여 API 인증 방법에 대해 자세히 살펴보겠습니다.

Spring Security OAuth2란 무엇인가?

Spring Security OAuth2는 OAuth 2.0 프로토콜을 기반으로 하는 Spring Security의 구현체입니다. OAuth 2.0은 인증 및 권한 부여를 위한 프로토콜로, 사용자가 서드파티 애플리케이션에 대한 접근 권한을 제어하는 데 사용됩니다.

Spring Security OAuth2는 OAuth2 프로토콜을 구현하는 Java 라이브러리를 제공합니다. 이를 사용하여 웹 응용 프로그램으로부터 인증 및 권한 부여를 처리할 수 있습니다.

API 인증 방법의 중요성

API 인증은 보안의 핵심 요소 중 하나입니다. API를 보호하지 않으면 사용자 정보가 해커에게 노출될 위험이 있습니다. 따라서 API 인증은 모든 웹 응용 프로그램에서 필수적입니다.

Spring Security OAuth2를 이용한 API 인증 방법

Spring Security OAuth2를 사용하여 API 인증을 설정하는 것은 매우 간단합니다. Spring Security OAuth2는 다양한 인증 방법을 제공하며, 다양한 OAuth2 공급자와 통합될 수 있습니다.

예를 들어, OAuth2 클라이언트 인증을 사용하여 API 인증을 설정할 수 있습니다. 이 경우, OAuth2 클라이언트 ID와 시크릿을 사용하여 사용자 인증을 처리하게 됩니다.

以下은 OAuth2 클라이언트 인증을 사용하여 API 인증을 설정하는 예제 코드입니다.

@Configuration
@EnableWebSecurity
@EnableOAuth2Client
public class OAuth2ClientConfiguration extends WebSecurityConfigurerAdapter {

    @Autowired
    private OAuth2ClientContext oauth2ClientContext;

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.antMatcher("/**").authorizeRequests()
            .antMatchers("/", "/login**", "/webjars/**").permitAll()
            .anyRequest().authenticated()
            .and().logout().logoutSuccessUrl("/").permitAll()
            .and().csrf().csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse())
            .and().addFilterBefore(ssoFilter(), BasicAuthenticationFilter.class);
    }

    private Filter ssoFilter() {
        OAuth2ClientAuthenticationProcessingFilter facebookFilter = new OAuth2ClientAuthenticationProcessingFilter("/login/facebook");
        FacebookOAuth2ClientConfigurer facebookConfigurer = new FacebookOAuth2ClientConfigurer();
        facebookConfigurer.clientId("facebook-client-id");
        facebookConfigurer.clientSecret("facebook-client-secret");
        facebookConfigurer.scope("public_profile,email");
        facebookConfigurer.resource("https://graph.facebook.com/v2.12/me");
        facebookFilter.setAuthenticationManager(authenticationManager());
        facebookFilter.setAuthenticationSuccessHandler((request, response, authentication) -> {
            response.sendRedirect("/");
        });
        return facebookFilter;
    }

    @Bean
    public FilterRegistrationBean oauth2ClientFilterRegistration(OAuth2ClientContextFilter filter) {
        FilterRegistrationBean registration = new FilterRegistrationBean();
        registration.setFilter(filter);
        registration.setOrder(-100);
        return registration;
    }

    @Bean
    public OAuth2RestTemplate oauth2RestTemplate(OAuth2ClientContext oauth2ClientContext) {
        return new OAuth2RestTemplate(facebook(), oauth2ClientContext);
    }

    @Bean
    public OAuth2ProtectedResourceDetails facebook() {
        AuthorizationCodeResourceDetails details = new AuthorizationCodeResourceDetails();
        details.setId("facebook");
        details.setClientId("facebook-client-id");
        details.setClientSecret("facebook-client-secret");
        details.setAccessTokenUri("https://graph.facebook.com/oauth/access_token");
        details.setUserAuthorizationUri("https://www.facebook.com/dialog/oauth");
        details.setTokenName("oauth_token");
        details.setAuthenticationScheme(AuthenticationScheme.query);
        details.setClientAuthenticationScheme(AuthenticationScheme.form);
        return details;
    }

    @Bean
    public static PropertySourcesPlaceholderConfigurer propertyPlaceholderConfigurer() {
        return new PropertySourcesPlaceholderConfigurer();
    }
}

OAuth2를 이용한 보안 이슈와 대응 방법

OAuth2를 사용할 때는 보안 이슈에 대해 항상 주의해야 합니다. 예를 들어, OAuth2 클라이언트 ID와 시크릿이 노출될 경우 해커가 악의적인 API 호출을 수행할 수 있습니다.

이러한 보안 문제를 방지하기 위해 OAuth2 토큰을 사용하여 API 호출을 보호할 수 있습니다. OAuth2 토큰은 일정 시간 동안 유효하며, 만료 시간이 지난 토큰으로 API 호출을 수행할 수 없습니다.

OAuth2를 사용할 때는 항상 안전한 방법으로 클라이언트 ID와 시크릿을 관리하고, OAuth2 토큰을 사용하여 API 호출을 보호해야 합니다.

이상으로 Spring Security OAuth2를 사용하여 API 인증 방법에 대해 살펴보았습니다. OAuth2를 사용하여 보안 문제를 방지하고 API 호출을 보호할 수 있습니다. Spring Security OAuth2는 다양한 인증 방법과 통합할 수 있으므로, 다양한 유형의 웹 응용 프로그램에서 사용하기 적합합니다.

Reference : Spring Security OAuth2를 이용한 API 인증 방법



해외뉴스 이슈 순위 Top10 관련 기사 - 2019년 10월 12일 15시 기준


1위 Trump 3.74% 관련 반응

  1. [The Guardian] Rudy Giuliani is Donald Trump’s real secretary of state | Lloyd Green
  2. [The Guardian] Fake views this bad make me thankful for the real thing | Emma Brockes
  3. [The Guardian] 'He has faults, but don't we all?': Trump supporters say he will defeat impeachment
  4. [StarTribune] Louisiana's Democratic governor reaching for primary win
  5. [USA Today] President Trump: Steve Kerr looked 'weak and pathetic' answering questions about NBA and China
  6. [The Guardian] California governor signs ban on private prisons, setting up fight with Trump
  7. [StarTribune] Former Ukraine envoy testifies Trump pushed to oust her
  8. [StarTribune] After static summer, Democratic race enters a chaotic fall
  9. [CNN] New York Times: Giuliani under investigation for Ukraine work
  10. [Reutors] UPDATE 9-U.S. outlines 'Phase 1' trade deal with China, suspends October tariff hike

2위 McAleenan 2.1% 관련 반응

  1. [NBC News] Kevin McAleenan out at Homeland Security
  2. [BBC News] Kevin McAleenan: US Homeland Security chief steps down
  3. [USA Today] Kevin McAleenan quits as acting Homeland Security secretary; Trump to name successor next week
  4. [The Guardian] Acting homeland security secretary steps down
  5. [ABC News] Acting Homeland Security Secretary Kevin McAleenan is out, Trump says in tweet
  6. [StarTribune] McAleenan, acting Homeland Security secretary, stepping down
  7. [CBS News] Kevin McAleenan, Trump's Homeland Security secretary, resigns
  8. [CNN] Kevin McAleenan resigns as acting homeland security secretary

3위 U.S. 1.87% 관련 반응

  1. [The Guardian] Fit in my 40s: am I too old to be practising BMX in the park? | Zoe Williams
  2. [The Guardian] Romesh Ranganathan:?Joker?left me?in need of a lie down. Is The Lion King more my style?
  3. [The Guardian] Sharon Horgan on mean mums and Motherland’s return
  4. [The Guardian] Has the Rooney-Vardy scandal exposed the weakness of tabloids?
  5. [The Guardian] ‘I set up a funeral firm to help people, not to make money’
  6. [The Guardian] Rudy Giuliani is Donald Trump’s real secretary of state | Lloyd Green
  7. [The Guardian] Fake views this bad make me thankful for the real thing | Emma Brockes
  8. [Reutors] Golf: Malnati surges into lead at Houston Open
  9. [Reutors] Rugby-Beard recovers from appendicitis to try and lock in starting spot
  10. [BBC News] NAHT teacher's union to take industrial action

4위 Homeland 1.87% 관련 반응

  1. [CBS News] 10/11/19: CBSN Evening News
  2. [NBC News] Kevin McAleenan out at Homeland Security
  3. [BBC News] Kevin McAleenan: US Homeland Security chief steps down
  4. [USA Today] Kevin McAleenan quits as acting Homeland Security secretary; Trump to name successor next week
  5. [The Guardian] Acting homeland security secretary steps down
  6. [ABC News] Acting Homeland Security Secretary Kevin McAleenan is out, Trump says in tweet
  7. [StarTribune] McAleenan, acting Homeland Security secretary, stepping down
  8. [CBS News] Kevin McAleenan, Trump's Homeland Security secretary, resigns
  9. [CNN] Kevin McAleenan resigns as acting homeland security secretary

5위 Security 1.87% 관련 반응

  1. [CBS News] 10/11/19: CBSN Evening News
  2. [NBC News] Kevin McAleenan out at Homeland Security
  3. [BBC News] Kevin McAleenan: US Homeland Security chief steps down
  4. [USA Today] Kevin McAleenan quits as acting Homeland Security secretary; Trump to name successor next week
  5. [The Guardian] Acting homeland security secretary steps down
  6. [ABC News] Acting Homeland Security Secretary Kevin McAleenan is out, Trump says in tweet
  7. [StarTribune] McAleenan, acting Homeland Security secretary, stepping down
  8. [CBS News] Kevin McAleenan, Trump's Homeland Security secretary, resigns
  9. [CNN] Nearly 30 former State and national security officials call on Pompeo to defend former ambassador to Ukraine
  10. [CNN] First on CNN: Nearly 30 former State and national security officials call on Pompeo to defend former ambassador to Ukraine

6위 Syria 1.64% 관련 반응

  1. [BBC News] Turkey Syria offensive: US builds pressure to halt incursion against Kurds
  2. [Reutors] U.S. troops in Syria came under fire from Turkish positions -Pentagon
  3. [Reutors] U.S. lawmakers press again for stronger Trump action on Turkey
  4. [StarTribune] U.S. outpost in Syria vacated after coming under fire from Turks
  5. [Reutors] U.S. troops in Syria came under fire from Turkish positions - Pentagon
  6. [Reutors] U.S. troops in Syria came under fire from Turkish positions: Pentagon

7위 Kevin 1.4% 관련 반응

  1. [NBC News] Kevin McAleenan out at Homeland Security
  2. [BBC News] Kevin McAleenan: US Homeland Security chief steps down
  3. [USA Today] Kevin McAleenan quits as acting Homeland Security secretary; Trump to name successor next week
  4. [Reutors] NASCAR notebook: Milestone race causes Harvick to reflect on career
  5. [The Guardian] Acting homeland security secretary steps down
  6. [ABC News] Acting Homeland Security Secretary Kevin McAleenan is out, Trump says in tweet
  7. [StarTribune] McAleenan, acting Homeland Security secretary, stepping down
  8. [CBS News] Kevin McAleenan, Trump's Homeland Security secretary, resigns
  9. [CNN] Kevin McAleenan resigns as acting homeland security secretary

8위 Japan 1.4% 관련 반응

  1. [Reutors] Rugby-No shortage of courage but Georgia need to develop threats
  2. [CNN] Typhoon Hagibis is moving quickly toward Japan
  3. [ABC News] Japanese GP in holding pattern at Typhoon Hagibus approaches
  4. [Reutors] One killed in Japan as typhoon approaches, over a million advised to evacuate
  5. [Reutors] Supertyphoon Hagibis gives new wind to Philippine disco band
  6. [Reutors] UPDATE 1-One killed in Japan as typhoon approaches, over a million advised to evacuate
  7. [Reutors] Rugby-'They'd better win', Australia's Cheika lobs first jibe at Jones
  8. [Independent] Typhoon Hagibis latest: First fatality reported as super storm edges closer to Japan
  9. [Reutors] Japan advises hundreds of thousands to evacuate as powerful typhoon approaches
  10. [Independent] Typhoon Hagibis latest: Evacuations ordered and buildings damaged as storm closes in on Japan

9위 Minnesota 1.4% 관련 반응

  1. [StarTribune] Minnesota officials consider removing protections for wolves
  2. [StarTribune] Minnesota Duluth's defense of its championship begins with a 3-2 loss
  3. [StarTribune] Loons likely to disappear from Minnesota due to climate change, new report warns
  4. [StarTribune] Minnesota church is model for new way to help kids in need
  5. [StarTribune] Rape joke flyer on University of Minnesota Morris campus gets attention of President Gable
  6. [StarTribune] Cheer and dance teams have come a long way at the University of Minnesota
  7. [ABC News] Trump rallies in Louisiana in last-minute push for governor's race

10위 Boeing 1.17% 관련 반응

  1. [The Guardian] Boeing removes CEO as chairman amid 737 Max crisis
  2. [Reutors] Boeing board strips CEO of chairman title amid 737 MAX crisis
  3. [Reutors] UPDATE 3-Boeing board strips CEO of chairman title amid 737 MAX crisis
  4. [ABC News] Boeing names new board chairman in setback to CEO
#Trump #McAleenan #U.S. #Homeland #Security #Syria #Kevin #Japan #Minnesota #Boeing #뉴스속보 #뉴스 #이슈링크 #이슈 #실검 #실시간검색어


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


해외뉴스 이슈 순위 Top10 관련 기사 - 2019년 04월 08일 09시 기준


1위 Nielsen 2.07% 관련 반응

  1. [Independent] Kirstjen Nielsen: US Homeland Security secretary resigns, Trump announces
  2. [CBS News] Kirstjen Nielsen resigning as DHS chief after clashes with Trump on immigration
  3. [CBS News] DHS Secretary Kirstjen Nielsen expected to resign
  4. [CBS News] Nielsen's exit comes as Trump eyes "tougher" immigration strategy
  5. [The Telegraph] Kirstjen Nielsen quits as US Homeland Security Secretary
  6. [Reutors] U.S. Homeland Security Secretary Nielsen leaving her position
  7. [ABC News] Department of Homeland Security Secretary Kirstjen Nielsen resigns
  8. [NBC News] Kirstjen Nielsen leaving position as homeland security secretary
  9. [StarTribune] Homeland Security Secretary Nielsen has resigned
  10. [CNN] Trump says DHS Secretary Nielsen leaving

2위 Kirstjen 1.49% 관련 반응

  1. [Independent] Kirstjen Nielsen: US Homeland Security secretary resigns, Trump announces
  2. [CBS News] Kirstjen Nielsen resigning as DHS chief after clashes with Trump on immigration
  3. [CBS News] DHS Secretary Kirstjen Nielsen expected to resign
  4. [The Telegraph] Kirstjen Nielsen quits as US Homeland Security Secretary
  5. [Reutors] U.S. Homeland Security Secretary Nielsen leaving her position
  6. [ABC News] Department of Homeland Security Secretary Kirstjen Nielsen resigns
  7. [NBC News] Kirstjen Nielsen leaving position as homeland security secretary
  8. [StarTribune] Homeland Security Secretary Nielsen has resigned
  9. [CNN] Trump says DHS Secretary Nielsen leaving
  10. [USA Today] Kirstjen Nielsen, the secretary of Homeland Security, is out of the Trump administration

3위 Homeland 1.38% 관련 반응

  1. [Independent] Kirstjen Nielsen: US Homeland Security secretary resigns, Trump announces
  2. [CBS News] DHS Secretary Kirstjen Nielsen expected to resign
  3. [The Telegraph] Kirstjen Nielsen quits as US Homeland Security Secretary
  4. [Reutors] U.S. Homeland Security Secretary Nielsen leaving her position
  5. [ABC News] Department of Homeland Security Secretary Kirstjen Nielsen resigns
  6. [NBC News] Kirstjen Nielsen leaving position as homeland security secretary
  7. [StarTribune] Homeland Security Secretary Nielsen has resigned
  8. [CNN] Trump says DHS Secretary Nielsen leaving
  9. [USA Today] Kirstjen Nielsen, the secretary of Homeland Security, is out of the Trump administration
  10. [BBC News] US Homeland Security chief Kirstjen Nielsen leaves post

4위 Trump 1.26% 관련 반응

  1. [Independent] Kirstjen Nielsen: US Homeland Security secretary resigns, Trump announces
  2. [CBS News] Kirstjen Nielsen resigning as DHS chief after clashes with Trump on immigration
  3. [CBS News] Nielsen's exit comes as Trump eyes "tougher" immigration strategy
  4. [Reutors] U.S. Homeland Security Secretary Nielsen leaving her position
  5. [ABC News] Department of Homeland Security Secretary Kirstjen Nielsen resigns
  6. [CNN] Trump says DHS Secretary Nielsen leaving
  7. [USA Today] Kirstjen Nielsen, the secretary of Homeland Security, is out of the Trump administration
  8. [BBC News] US Homeland Security chief Kirstjen Nielsen leaves post
  9. [NYT] Kirstjen Nielsen Out as Trump’s Homeland Security Secretary
  10. [Sky News] Trump: Homeland security secretary 'leaving her job'

5위 Secretary 1.26% 관련 반응

  1. [Independent] Kirstjen Nielsen: US Homeland Security secretary resigns, Trump announces
  2. [CBS News] Kirstjen Nielsen resigning as DHS chief after clashes with Trump on immigration
  3. [CBS News] DHS Secretary Kirstjen Nielsen expected to resign
  4. [The Telegraph] Kirstjen Nielsen quits as US Homeland Security Secretary
  5. [Reutors] U.S. Homeland Security Secretary Nielsen leaving her position
  6. [ABC News] Department of Homeland Security Secretary Kirstjen Nielsen resigns
  7. [NBC News] Kirstjen Nielsen leaving position as homeland security secretary
  8. [StarTribune] Homeland Security Secretary Nielsen has resigned
  9. [CNN] Trump says DHS Secretary Nielsen leaving
  10. [USA Today] Kirstjen Nielsen, the secretary of Homeland Security, is out of the Trump administration

6위 Security 1.26% 관련 반응

  1. [Independent] Kirstjen Nielsen: US Homeland Security secretary resigns, Trump announces
  2. [CBS News] DHS Secretary Kirstjen Nielsen expected to resign
  3. [The Telegraph] Kirstjen Nielsen quits as US Homeland Security Secretary
  4. [Reutors] U.S. Homeland Security Secretary Nielsen leaving her position
  5. [ABC News] Department of Homeland Security Secretary Kirstjen Nielsen resigns
  6. [NBC News] Kirstjen Nielsen leaving position as homeland security secretary
  7. [StarTribune] Homeland Security Secretary Nielsen has resigned
  8. [CNN] Trump says DHS Secretary Nielsen leaving
  9. [USA Today] Kirstjen Nielsen, the secretary of Homeland Security, is out of the Trump administration
  10. [BBC News] US Homeland Security chief Kirstjen Nielsen leaves post

7위 NCAA 0.8% 관련 반응

  1. [StarTribune] 1st-timers Texas Tech and Virginia face off for NCAA title
  2. [USA Today] College admission scandal is not a nationwide epidemic
  3. [USA Today] Opinion: After last year's crushing disappointment, Virginia feels like team of destiny
  4. [USA Today] 2019 NCAA championship game highlights a new twist
  5. [USA Today] Opinion: Expected Texas Tech-Virginia defensive standoff won't be best of college basketball
  6. [USA Today] NCAA Latest: Texas Tech preaches calm to fanbase in Lubbock
  7. [StarTribune] NCAA fans either jubilant or looking for a way out of Minneapolis
  8. [USA Today] NCAA Latest: Jerome says he was fouled before double-dribble
  9. [ABC News] NCAA Latest: Gardner-Webb win propelled Virginia's run

8위 Cup 0.8% 관련 반응

  1. [The Guardian] Sergio Busquets: ‘The recognition from opponents is the highest praise’ | Sid Lowe
  2. [USA Today] Kyle Busch prevails over older brother Kurt in the Cup Series battle at Bristol Motor Speedway
  3. [Reutors] Deeney's Watford dream of halting Manchester City's 'Grand Slam'
  4. [USA Today] 'Best time of year:' NHL playoff matchups set
  5. [BBC News] African Confederation Cup: Nkana beat Sfaxien in first leg of quarter-final
  6. [USA Today] No Canada: Nation's Stanley Cup drought approaches 26 years
  7. [The Guardian] Watford’s Gerard Deulofeu vented anger at Wembley bench role: Javi Gracia
  8. [BBC News] FA Cup Magic: Manchester City 1-0 Brighton & Watford 3-2 Wolves
  9. [Independent] Watford vs Wolves: Gerard Deulofeu's 'anger' inspired match-winning performance, says Javi Gracia
  10. [The Guardian] Gerard Deulofeu the mouse arrives with a mighty roar for Watford | Simon Burnton

9위 Watford 0.8% 관련 반응

  1. [Reutors] Deeney's Watford dream of halting Manchester City's 'Grand Slam'
  2. [The Guardian] Watford’s Gerard Deulofeu vented anger at Wembley bench role: Javi Gracia
  3. [BBC News] FA Cup Magic: Manchester City 1-0 Brighton & Watford 3-2 Wolves
  4. [Independent] Watford vs Wolves: Gerard Deulofeu's 'anger' inspired match-winning performance, says Javi Gracia
  5. [The Guardian] Gerard Deulofeu the mouse arrives with a mighty roar for Watford | Simon Burnton
  6. [BBC News] FA Cup: Watford 3-2 Wolves (aet) highlights

10위 House 0.69% 관련 반응

  1. [CBS News] DHS Secretary Kirstjen Nielsen expected to resign
  2. [NBC News] Kirstjen Nielsen leaving position as homeland security secretary
  3. [CNN] Trump says DHS Secretary Nielsen leaving
  4. [NBC News] Michael Busch, Maryland's longest-serving House speaker, dies at 72
  5. [Reutors] White House to Democrats seeking Trump tax returns - 'Never'
  6. [StarTribune] Long-serving Maryland House Speaker Michael Busch dead at 72
  7. [The Guardian] Cory Booker raises $5m for White House run, well behind 2020 rivals
  8. [USA Today] Mulvaney: Democrats will 'never' get President Trump's tax returns
  9. [CNN] Nunes sending eight criminal referrals to Attorney General William Barr
  10. [USA Today] White House chief of staff vows that Democrats will 'never' see Donald Trump's tax returns
#Nielsen #Kirstjen #Homeland #Trump #Secretary #Security #NCAA #Cup #Watford #House #뉴스속보 #뉴스 #이슈링크 #이슈 #실검 #실시간검색어


출처 : 이슈링크
https://www.issuelink.co.kr

+ Recent posts