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) : 중급] 마이크로서비스 아키텍처 기초
반응형
'GD's IT Lectures : 기초부터 시리즈 > 스프링부트(Spring Boot) 기초부터 ~' 카테고리의 다른 글
[스프링 부트(SpringBoot) : 고급] 메시징 및 비동기 처리 (0) | 2023.05.06 |
---|---|
[스프링 부트(SpringBoot) : 고급] 클라우드 네이티브 애플리케이션 개발 (0) | 2023.05.06 |
[스프링 부트(SpringBoot) : 중급] 마이크로서비스 아키텍처 기초 (0) | 2023.05.05 |
[스프링 부트(SpringBoot) : 중급] 성능 최적화 및 모니터링 도구 (0) | 2023.05.05 |
[스프링 부트(SpringBoot) : 중급] 클라우드 환경에서의 배포 (0) | 2023.05.05 |
댓글