본문 바로가기
GD's IT Lectures : 기초부터 시리즈/스프링부트(Spring Boot) 기초부터 ~

[스프링 부트(SpringBoot) : 중급] 중급 실전 예제

by GDNGY 2023. 5. 5.

10. 중급 실전 예제

여기서는 중급 수준의 웹 애플리케이션, RESTful API를 사용한 모바일 애플리케이션 백엔드, 그리고 마이크로서비스 기반 애플리케이션 개발을 포함한 다양한 실전 예제를 다룹니다.

 

10.1. 중급 수준의 웹 애플리케이션

중급 수준의 웹 애플리케이션에서는 다음과 같은 기능을 구현해 봅니다.

  • 사용자 인증 및 인가
  • 게시판 기능
  • 파일 업로드 및 다운로드
  • 페이징 처리

예제 코드

@Controller
public class BoardController {
    // 게시판 서비스
    @Autowired
    private BoardService boardService;

    // 게시판 목록 조회
    @GetMapping("/boards")
    public String getBoardList(Model model,
                               @RequestParam(value = "page", defaultValue = "1") int page) {
        Page<Board> boardPage = boardService.getBoardList(PageRequest.of(page - 1, 10));
        model.addAttribute("boardPage", boardPage);
        return "boards/list";
    }

    // 게시판 상세 조회
    @GetMapping("/boards/{id}")
    public String getBoardDetail(@PathVariable Long id, Model model) {
        Board board = boardService.getBoardById(id);
        model.addAttribute("board", board);
        return "boards/detail";
    }
}

 

10.2. RESTful API를 사용한 모바일 애플리케이션 백엔드

RESTful API를 사용하여 모바일 애플리케이션과 통신하는 백엔드를 구축합니다. 다음과 같은 기능을 구현해 봅니다.

  • 사용자 가입 및 인증
  • 데이터 CRUD 작업
  • 데이터 페이징 처리
  • API 버전 관리

예제 코드

@RestController
@RequestMapping("/api/v1/users")
public class UserController {
    @Autowired
    private UserService userService;

    // 사용자 가입
    @PostMapping("/signup")
    public ResponseEntity<?> signup(@RequestBody UserDto userDto) {
        userService.createUser(userDto);
        return ResponseEntity.ok().build();
    }

    // 사용자 인증
    @PostMapping("/signin")
    public ResponseEntity<?> signin(@RequestBody LoginRequest loginRequest) {
        String token = userService.authenticateUser(loginRequest);
        return ResponseEntity.ok(new JwtResponse(token));
    }
}

 

10.3. 마이크로서비스 기반 애플리케이션 개발

마이크로서비스 기반의 애플리케이션을 개발하며, 서비스 디스커버리, 로드 밸런싱, API 게이트웨이 등의 개념을 실습합니다. 

 

예제 코드

// 서비스 디스커버리 클라이언트
@Autowired
private DiscoveryClient discoveryClient;

// 로드밸런서를 사용한 서비스 호출
@Autowired
private RestTemplate restTemplate;

@GetMapping("/api/orders/{id}")
public ResponseEntity<Order> getOrder(@PathVariable Long id) {
    List<ServiceInstance> instances = discoveryClient.getInstances("order-service");
    if (instances.isEmpty()) {
        throw new RuntimeException("No available order-service instances");
    }
    ServiceInstance serviceInstance = instances.get(0);
    String url = serviceInstance.getUri().toString() + "/orders/" + id;

    ResponseEntity<Order> response = restTemplate.getForEntity(url, Order.class);
    return response;
}

 

API 게이트웨이 구성을 위해 Zuul 또는 Spring Cloud Gateway를 사용하여 요청을 프록시 처리하고 필터를 구현합니다.

 

예제 코드 (Zuul을 사용한 경우)

@Configuration
public class ZuulConfig extends ZuulFilter {
    @Override
    public String filterType() {
        return "pre";
    }

    @Override
    public int filterOrder() {
        return 1;
    }

    @Override
    public boolean shouldFilter() {
        return true;
    }

    @Override
    public Object run() throws ZuulException {
        RequestContext ctx = RequestContext.getCurrentContext();
        HttpServletRequest request = ctx.getRequest();

        String token = request.getHeader("Authorization");
        if (token == null || !validateToken(token)) {
            ctx.setSendZuulResponse(false);
            ctx.setResponseStatusCode(HttpStatus.UNAUTHORIZED.value());
        }
        return null;
    }

    private boolean validateToken(String token) {
        // 토큰 검증 로직
        return true;
    }
}

 

이러한 예제를 통해 스프링 부트 중급 과정의 다양한 주제를 실습하며 학습할 수 있습니다. 스프링 부트를 사용하여 다양한 애플리케이션을 개발하는 데 도움이 될 것입니다.

 

 

 

2023.05.05 - [프로그래밍/스프링부트(Spring Boot) 기초부터 ~] - [스프링 부트(SpringBoot) : 중급] 마이크로서비스 아키텍처 기초

 

[스프링 부트(SpringBoot) : 중급] 마이크로서비스 아키텍처 기초

9. 마이크로서비스 아키텍처 기초 9.1. 마이크로서비스 아키텍처 소개 마이크로서비스 아키텍처는 소프트웨어 시스템을 작고 독립적인 서비스로 분리하여 개발, 배포, 운영하는 방식입니다. 이

gdngy.tistory.com

 

반응형

댓글