본문 바로가기

웹 백엔드/패스트캠퍼스) 백엔드시그니처

패스트캠퍼스) 백엔드시그니처 Course 3 : 웹 개발 입문과 DB

728x90
반응형

[Ch 01. Web과 HTTP 통신에 대해서 알아보기]

1. WEB 개론

  • Web이란 무엇인가?
    • Web(월드 와이드 웹, WWW)은 인터넷에 연결된 컴퓨터를 통해 정보를 공유하는 글로벌 네트워크.
    • 주요 구성 요소:
      • 웹사이트(Web Site): Google, Naver와 같은 검색 엔진이나 플랫폼.
      • 사용자 인터페이스(User Interface): 브라우저(Chrome, Safari), 스마트워치, IPTV 등.
      • API (Application Programming Interface): 예를 들어 Kakao의 Open API를 사용하여 데이터를 활용할 수 있음.
  • 예시:
    • Google에 검색어를 입력하면 결과를 볼 수 있는 것처럼, 웹사이트는 사용자와 상호작용하는 창구가 됩니다.
    • Chrome 브라우저에서 www.example.com에 접속하면 서버에서 데이터를 받아와 사용자 화면에 표시.

2. REST API 개론

  • REST(Representational State Transfer)는 네트워크 아키텍처의 한 스타일로, HTTP 기반에서 자원(Resource)을 전송하는 방식을 정의.
    • 클라이언트/서버 구조: 클라이언트(사용자)는 요청을 보내고 서버는 응답을 보냄.
    • Stateless: 서버는 이전 요청의 상태를 저장하지 않음.
    • 캐싱: 클라이언트는 서버의 응답을 저장해서 성능을 최적화할 수 있음.
  • REST API의 활용:
    • 예를 들어, 쇼핑몰 API를 이용해서 제품 목록을 가져오거나 특정 제품의 세부 정보를 요청.

3. Spring Boot와 Spring Web 소개

  • Spring Boot란?
    • Java 기반의 프레임워크로, 쉽게 웹 애플리케이션을 개발할 수 있도록 도움.
    • XML 설정 없이 간단한 설정만으로 어플리케이션을 실행 가능.
    • 대규모 프로젝트에 필요한 보안, 모니터링 기능 등을 제공.
  • 예시:
    • Spring Boot를 사용해 RESTful API를 개발하고, 사용자 정보를 CRUD(Create, Read, Update, Delete) 방식으로 관리.

User 클래스 (DTO)

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    private Long id;
    private String name;
    private String email;
}

 

UserController

import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.ArrayList;
import java.util.List;

@RestController
@RequestMapping("/users")
public class UserController {

    private List<User> users = new ArrayList<>();

    // Constructor with some dummy data
    public UserController() {
        users.add(new User(1L, "John Doe", "john@example.com"));
        users.add(new User(2L, "Alice", "alice@example.com"));
    }

    // GET: 특정 ID의 유저 정보 가져오기
    @GetMapping("/{id}")
    public ResponseEntity<User> getUserById(@PathVariable Long id) {
        return users.stream()
                .filter(user -> user.getId().equals(id))
                .findFirst()
                .map(user -> new ResponseEntity<>(user, HttpStatus.OK))
                .orElse(new ResponseEntity<>(HttpStatus.NOT_FOUND));
    }

    // POST: 새로운 유저 생성
    @PostMapping
    public ResponseEntity<User> createUser(@RequestBody User newUser) {
        newUser.setId((long) (users.size() + 1)); // ID를 자동 증가
        users.add(newUser);
        return new ResponseEntity<>(newUser, HttpStatus.CREATED);
    }

    // PUT: 특정 ID의 유저 정보 수정
    @PutMapping("/{id}")
    public ResponseEntity<User> updateUser(@PathVariable Long id, @RequestBody User updatedUser) {
        return users.stream()
                .filter(user -> user.getId().equals(id))
                .findFirst()
                .map(existingUser -> {
                    existingUser.setName(updatedUser.getName());
                    existingUser.setEmail(updatedUser.getEmail());
                    return new ResponseEntity<>(existingUser, HttpStatus.OK);
                })
                .orElse(new ResponseEntity<>(HttpStatus.NOT_FOUND));
    }

    // DELETE: 특정 ID의 유저 삭제
    @DeleteMapping("/{id}")
    public ResponseEntity<Void> deleteUser(@PathVariable Long id) {
        boolean removed = users.removeIf(user -> user.getId().equals(id));
        if (removed) {
            return new ResponseEntity<>(HttpStatus.NO_CONTENT); // 204 No Content
        } else {
            return new ResponseEntity<>(HttpStatus.NOT_FOUND);
        }
    }
}
728x90
반응형