🚀 Spring Boot로 회원가입 & 유저 조회 API 만들기 (feat. Postman)

2025. 5. 29. 21:35Java/SpringBoot

Spring Boot + Postman 실습 + 설계 구조 + CS 개념까지 한 번에!


✅ 개요

이 글에서는 Spring Boot를 사용해 간단한 회원가입 API와 유저 조회 API를 개발하고,
Postman을 통해 실제 요청을 보내 테스트하는 실습을 정리합니다.

또한, 이 프로젝트를 통해 백엔드 개발에서 꼭 알아야 할 **설계 구조, 계층 분리, CS 개념(HTTP, REST, DTO, DI 등)**도 함께 정리해 실무와 면접 대비에 모두 도움이 되도록 구성했습니다.


🧱 전체 설계 구조

📌 계층 구조

 
Controller → Service → Repository → Database ↑ DTO (Request)
계층설명역할
Controller UserController HTTP 요청 처리, DTO 수신
Service UserService 비즈니스 로직 처리
Repository UserRepository JPA를 통한 DB 접근
Entity User DB 테이블과 매핑되는 자바 객체
DTO UserRequest 클라이언트 → 서버 데이터 전달용 객체
 

📌 전체 흐름 요약

  1. 클라이언트가 POST /users 요청을 보냄
  2. UserController가 @RequestBody로 DTO를 받음
  3. UserService가 DTO를 바탕으로 Entity 생성 및 저장
  4. UserRepository가 DB에 저장
  5. 저장된 결과를 다시 반환

📌 주요 애노테이션 정리

애노테이션역할
@RestController JSON 기반 REST 컨트롤러 지정
@PostMapping, @GetMapping HTTP 메서드 매핑
@RequestBody JSON → Java 객체 자동 변환
@Entity JPA에서 DB 테이블과 매핑할 클래스
@Id, @GeneratedValue PK 설정 및 자동 증가 전략
@Service, @Repository 스프링 컴포넌트로 등록
@RequiredArgsConstructor 생성자 기반 의존성 주입 자동 생성
 

🛠️ 기능 요약

기능설명
POST /users 이름과 이메일로 유저 등록
GET /users 전체 유저 목록 조회
도구 Spring Boot, IntelliJ, Postman
 

📦 코드 구현

1️⃣ User 엔티티

@Entity
@Getter
@NoArgsConstructor
public class User {

    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;
    private String email;

    public User(String name, String email) {
        this.name = name;
        this.email = email;
    }
}

2️⃣ UserRepository

@Repository
public interface UserRepository extends JpaRepository<User, Long> {
    User findByEmail(String email);
}​

3️⃣ UserService

@Service
@RequiredArgsConstructor
public class UserService {

    private final UserRepository userRepository;

    public User saveUser(String name, String email) {
        User user = new User(name, email);
        return userRepository.save(user);
    }

    public List<User> getAllUsers() {
        return userRepository.findAll();
    }

    public User getUserByEmail(String email) {
        return userRepository.findByEmail(email);
    }
}

4️⃣ UserController

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

    private final UserService userService;

    @PostMapping
    public User createUser(@RequestBody UserRequest request) {
        return userService.saveUser(request.getName(), request.getEmail());
    }

    @GetMapping
    public List<User> getAllUsers() {
        return userService.getAllUsers();
    }
}

5️⃣ UserRequest DTO

@Getter
public class UserRequest {
    private String name;
    private String email;
}

🧪 Postman 테스트

✅ POST /users

  • URL: http://localhost:8080/users
  • Method: POST
  • Headers:
    • Content-Type: application/json
  • Body (raw/JSON):

👇 아래는 제가 Postman에서 직접 테스트해본 화면이에요!


※ 위 이미지에는 JSON 요청 바디와 서버 응답이 잘 보이죠?
→ 회원가입할 때 실제 데이터를 어떻게 보내는지 감 잡을 수 있어요.
POST/users

✅ GET /users

  • URL: http://localhost:8080/users
  • Method: GET
  • 응답 예시:
GET/users

 


💡 백엔드 면접 대비 CS 개념

개념설명
REST API 자원(리소스)을 URI로 표현하고, HTTP 메서드로 조작
DTO vs Entity DTO는 계층 간 데이터 전달용, Entity는 DB 매핑용
DI(의존성 주입) 스프링이 객체 간 의존성을 자동으로 주입
JPA SQL 없이 자바 객체로 DB를 조작하는 ORM 기술
HTTP 상태코드 200 OK, 201 Created, 400 Bad Request, 500 Error 등
JSON 백엔드-프론트 통신용 경량 포맷
단일 책임 원칙 (SRP) 클래스는 하나의 책임만 가져야 함