본문 바로가기
spring boot

스프링부트(spring boot) 기본기 다지기

by zzingni 2025. 5. 27.

 

※ 아래 영상을 참고하여 학습하였습니다.

 

스프링 vs 스프링부트


 

스프링부트 : 스프링 프레임워크에서 제공해주는 프로젝트 

 

스프링(스프링 프레임워크) : 자바에서 가장 많이 사용되는 프레임워크

의존성 주입(DI Dependency Injection), 제어역전(IOC< Inversion of Control), 관점 지향 프로그래밍(AOP)이 가장 중요한 요소이다. 

 

 

스프링 프레임워크의 대표적 모듈


- Spring JDBC

- Spring MVC

- Spring AOP

- Spring ORM

- Spring Test

- Spring Expression Language(SpEL)

 

 

스프링 부트가 나오게 된 이유


스프링은 다양한 기능을 제공하고 있지만, 그 기능을 사용하기 위한 설정에 많은 시간이 걸림

예) Transaction Manager, Hiberante Datasource, Entity Manager, Session Factory 등

 

▶ 스프링 부트는 자동설정(AutoConfiguration)을 이용

▶  어플리케이션을 개발하면서 사용되는 디펜던시들은 호환되는 버전으로 관리해줘야 함

이런 복잡도를 줄이기 위해 스프링 부트는 SpringBoot-Starter를 제공하여 자동으로 호환되는 버전을 관리.

 

 

스프링 부트 프로젝트의 starter dependency


spring-boot-starter-web-service : SOAP 웹 서비스

spring-boot-starter-web : RESTful 응용 프로그램

spring-boot-starter-test : 단위 테스트, 통합 테스트

spring-boot-starter-jdbc : 기본적인 JDBC

spring-boot-starter-security : 스프링 시큐리티 (인증, 권한)

spring-boot-starter-data-jpa : Spring Data JPA (Hibernate)

spring-boot-starter-cache : 캐시

 

 

Controller와 RestController의 차이


 

한마디로 말해, 응답방식에 차이가 있다.

 

@Controller : 주로 JSP나 Thymeleaf 같은 뷰(View)를 반환할 때 사용, 데이터를 응답하려면 메서드에 @ResponseBody를 따로 붙여야 한다.

@RestController : 내부적으로 @Controller + @ResponseBody가 결합된 형태로, 메서드에서 바로 JSON이나 XML 형태의 데이터를 응답하는 데 특화되어 있다.

 

즉, 웹 페이지를 보여줄 땐 @Controller, REST API처럼 데이터를 주고받을 땐 @RestController를 사용한다.

 

 

API(Application Programming Interface)


응용 프로그램에서 사용할 수 있도록 다른 응용 프로그램을 제어할 수 있게 만든 인터페이스를 뜻함. API를 사용하면 내부 구현 로직을 알지 못해도 정의되어 있는 기능을 쉽게 사용할 수 있음.

 

REST(Representational State Transfer)


자원의 이름으로 구분하여 해당 자원의 상태를 교환하는 것을 의미. REST는 서버와 클라이언트의 통신 방식 중 하나이다.

HTTP URI(Uniform Resource Identifier)를 통해 자원을 명시하고 HTTP Method를 통해 자원을 교환하는 것

HTTP Method : Create, Read, Updete, Delete

 

REST 특징

 

▶ Server-Client 구조

자원이 있는 쪽이 Server, 요청하는 쪽이 Client. 클라이언트와 서버가 독립적으로 분리되어 있어야 함

 

▶ Stateless

요청 간에 클라이언트 정보가 서버에 저장되지 않음. 서버는 각각의 요청을 완전히 별개의 것으로 인식하고 처리

 

▶ Cacheable 구조

HTTP 프로토콜을 그대로 사용하기 때문에 HTTP의 특징인 캐싱 기능을 적용. 대량의 요청을 효율적으로 처리하기 위해 캐시를 사용

 

REST API


REST 아키텍처의 조건을 준수하는 어플리케이션 프로그래밍 인터페이스를 뜻함. 최근 많은 API가 REST API로 제공되고 있음.

일반적으로 REST 아키텍처를 구현하는 웹 서비스를 RESTful 하다고 표현한다.

 

REST API 특징

 

REST 기반으로 시스템을 분산하여 확장성과 재사용성을 높임. HTTP 표준을 따르고 있어 여러 프로그래밍 언어로 구현할 수 있음.

 

REST API 설계 규칙

 

▶ 웹 기반의 REST API를 설계할 경우에는 URI를 통해 자원을 표현해야 함.

https://thinkgroud.studio/member/586

Resource : member

Resource id : 589

 

▶ 자원에 대한 조작은 HTTP Method(CRUD)를 통해 표현해야 함

URI 에 행위가 들어가면 안 됨. HEADER를 통해 CRUD를 표현하여 동작을 요청해야 함.

 

▶ 메시지를 통한 리소스 조작

HEADER를 통해 content-type을 지정하여 데이터를 전달. 대표적 형식으로는 HTML, XML, JSON, TEXT가 있음.

 

 

 

실습


 

 

src/java/studio.aroundhub.onehourproject 밑에 member 패키지 생성 후 controller, repository, service 생성

controller 에서 요청 들어오면 service로 전달 후, service는 repository로 전달해서 repository는 데이터베이스와 통신

 

spring:
  application:
    name: one-hour-project

  h2:
    console:
      enabled: true
      path: /h2-console

  datasource:
    url: jdbc:h2:~/test
    driver-class-name: org.h2.Driver
    username: sa
    password:

  jpa:
    database-platform: org.hibernate.dialect.H2Dialect
    hibernate:
      ddl-auto: create-drop
    properties:
      hibernate:
        format_sql: true
        show_sql: true

server:
  port: 8090

 

application.yml을 위와 같이 수정한다.

 

 

package studio.aroundhub.onehourproject.member.repository.entity;


import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import lombok.*;

@Entity
@NoArgsConstructor
@AllArgsConstructor(access = AccessLevel.PRIVATE)
@Builder
@Getter
public class Member {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY) // 데이터 들어오면 자동으로 index 값 증가
    private Long index;

    private String id;

    private String name;

    private String phoneNumber; // jpa에서 phone_number로 변환
}

 

entity 파일 작성한 후 http://localhost:8090/h2-console 주소에 접속하여 db 확인.

 

package studio.aroundhub.onehourproject.member.repository;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import studio.aroundhub.onehourproject.member.repository.entity.Member;

@SpringBootTest
public class MemberRepositoryTest {

    @Autowired // Member 객체를 사용하기 위해 빈 객체 끌어옴
    private MemberRepository memberRepository;

    @Test
    public void crudTest() {
        Member member = Member.builder()
                .id("flature")
                .name("플래처")
                .phoneNumber("010-0000-0000")
                .build();

    // create test
    memberRepository.save(member); // JpaRepository 상속받아서 save나 findById 사용 가능.

    // get test
    Member foundMember = memberRepository.findById(1L).get();

    }
}

 

기타 필요한 코드들을 수정하고, test/java/studio/aroundhub/onehourproject/member/repository 에 MemberRepositoryTest 테스트파일 작성

 

 

크롬에서 Talend Api Tester 확장 프로그램을 설치하고 http://localhost:8090/join 주소를 입력하고 BODY 부분에 보낼 데이터를 작성한다.

 

Response로 200 success가 날아온다.

 

 

데이터베이스에도 정상적으로 저장된 것을 확인할 수 있다.

 

후기

 


 

1.  Join 부분부터 진행속도가 너무 빨라서 하나도 못 알아들었다...

개인공부를 열심히 해야겠다.....

 

2. Talend Api Tester 너무 편하다....최고.....

'spring boot' 카테고리의 다른 글

[Spring Boot] CRUD 개념 정리 + 실습 예제 코드  (1) 2025.04.05