#Day51Spring Boot 문법 총정리 &

D0-$ANG ₩0N·2026년 1월 12일
post-thumbnail

1. Controller Layer (요청/응답 처리)

클라이언트(React, Postman)의 요청을 받는 최전방이다.

핵심 어노테이션
@RestController: 해당 클래스가 REST API 컨트롤러임을 명시. (JSON 반환)

비교: @Controller는 주로 HTML(View)을 반환할 때 사용.

@RequestMapping("/api"): 공통 URL prefix를 설정.

요청 메서드 매핑


@GetMapping("/posts")       // 조회 (READ)
@PostMapping("/posts")      // 생성 (CREATE)
@PutMapping("/posts/{id}")  // 수정 (UPDATE - 전체)
@PatchMapping("/posts/{id}")// 수정 (UPDATE - 일부)
@DeleteMapping("/posts/{id}")// 삭제 (DELETE)
데이터 받기 (Input Handling)
Query String (?name=spring&age=20)
public String search(@RequestParam String name, @RequestParam int age) { ... }
java
Path Variable (/posts/1)
public String getOne(@PathVariable Long id) { ... }
JSON Body ({ "title": "hello", "content": "world" })
public String create(@RequestBody PostDto postDto) { ... }

2. Service Layer (비즈니스 로직)

실제 업무 로직(데이터 가공, 트랜잭션 관리)을 담당한다.

@Service: 해당 클래스가 비즈니스 로직을 담당하는 빈(Bean)임을 명시.

@Transactional: 메서드 실행 중 예외가 발생하면 자동 롤백(Rollback), 성공하면 커밋(Commit) 처리.


@Service
@Transactional(readOnly = true) // 기본적으로 읽기 전용 (성능 최적화)
public class PostService {


    @Transactional // 쓰기 작업이 필요한 곳에만 따로 붙임
    public void createPost(Post post) {
        // ...
    }
}

3. Repository & Entity (데이터 접근)

DB와 대화하는 계층이다.

Entity (DB 테이블 매핑)

@Entity // JPA가 관리하는 객체
@Table(name = "posts") // 테이블 이름 지정 (생략 시 클래스 이름)
public class Post {
    @Id @GeneratedValue(strategy = GenerationType.IDENTITY) // PK & Auto Increment
    private Long id;
    
    @Column(nullable = false, length = 500)
    private String title;
}

Repository (JPA)
JpaRepository<Entity, ID타입>만 상속받으면 기본적인 CRUD 메서드(save, findById, findAll, delete)가 자동 생성된다.

public interface PostRepository extends JpaRepository<Post, Long> {
    // 쿼리 메서드 (이름만으로 쿼리 생성)
    List<Post> findByTitleContaining(String keyword);
}

4. DI (의존성 주입) & 설정

스프링의 핵심인 객체 관리 방법이다.

빈(Bean) 등록
@Component: 일반적인 컴포넌트 등록.

@Configuration + @Bean: 외부 라이브러리(WebClient 등)를 빈으로 등록할 때 사용.


@Configuration
public class WebConfig {
    @Bean
    public WebClient webClient() {
        return WebClient.create();
    }
}

생성자 주입 (권장 방식)
@Autowired 필드 주입보다 생성자 주입을 사용하는 것이 테스트와 불변성 유지에 좋다. (final 키워드 사용 가능)


@Service
@RequiredArgsConstructor // Lombok: final 필드에 대한 생성자 자동 생성
public class PostService {
    private final PostRepository postRepository;
    // (생성자 코드가 자동으로 만들어짐)
}

5. 예외 처리 (Exception Handling)

컨트롤러 전역에서 발생하는 예외를 한 곳에서 잡는다.

@RestControllerAdvice: 모든 컨트롤러의 예외를 가로챔.

@ExceptionHandler(예외클래스.class): 특정 예외가 발생했을 때 실행할 메서드 지정.

profile
Change Up

0개의 댓글