
✅ 빌드 시스템: Gradle과 Maven의 차이점?
그레이들과 메이븐은 둘 다 자바에서 널리 사용하는 빌드 관리 도구. 작성한 소스코드를 사용자가 사용할 수 있는 형태로 바꿔주는 ‘빌드’라는 과정을 관리 및 자동화하는 도구를 ‘빌드 관리 도구’라함.
이
의존성 내려받기, 코드 패키징, 컴파일, 테스트 실행 등이 해당 과정에 포함되어 있음. 최근에는 그레이들을 메이븐보다 많이 사용하는 추세.
build.gradle 파일을 수정하여 만들 수 있음
//build.gradle 파일
plugins {
id 'java'
id 'org.springframework.boot' version '3.2.0'
id 'io.spring.dependency-management' version '1.1.0'
}
group = 'org.example'
version = '1.0'
sourceCompatibility = '17'
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
test {
useJUnitPlatform()
}
plugins : 프로젝트에 사용할 플러그인인 스프링부트 플러그인org.springframework.boot: 프로젝트에 사용할 스프링부트 플러그인spring.dependency-management: 스프링의 의존성을 자동으로 관리group : 프로젝트 설정할 때 기본값인 그룹이름과 버전이 입력됨. 추가로 자바 소스 컴파일 시 사용할 자바 버전을 입력repositories: 의존성을 받을 저장소 지정.dependencies: 프로젝트를 개발하며 필요한 기능의 의존성을 입력spring-boot-starter-web: 웹 관련 기능을 제공spring-boot-starter-test: 테스트 기능 제공초기설정

⇒ 포스트맨을 활용하여 API 개발을 만들고, 웹 브라우저에서 테스트하기 위한 작업을 간소화할 수 있음.

정의: 여러 사람의 데이터를 한 군데에 모아놓고 여러 사람이 사용할 목적으로 관리하는 데이터 저장소.
MySQL, 오라클, 포스트그레SQL: 데이터베이스X, 데이터베이스를 관리하기 위한 시스템의 이름
클라이언트에서 DB를 조작하기 위한 언어로 DB 관리 시스템에 데이터 요청 → DB 관리 시스템은 DB에서 데이터를 꺼내 응답.클라이언트(웹 브라우저) ↔ DBMS ↔ 데이터베이스
SQL의 문제점:
위의 SQL의 문제점 해결을 위해 NoSQL 등장.
https://: 서버의 443번 포트를 사용하기 위한 입력백엔드 개발에 필요한 모든 코드를 직접 작성하면 오랜 시간이 걸리기 때문에, 현업에서는 다른 사람(단체)가 만든 라이브러리와 프레임워크를 가져와 사용하게됨.
💡 요약
배포 방법
CI/CD: 빌드부터 배포의 방법을 자동화하는 것을 말함.
@ 기호를 사용하면 JDK 1.5버전부터 사용 가능.| 애너테이션 이름 | 설명 |
|---|---|
@Override | 선언된 메소드가 오버라이드됨 |
@Deprecated | 더 이상 사용되지 않음 |
@SuppressWarnings | 컴파일 경고를 무시함 |
✅ 스프링부트의 주요 특징
스프링은 모든 기능의 기반을 ‘제어의 역전(IoC)’과 ‘의존성 주입(DI)’에 두고 있음.
IoC란?
Inversion of Control의 줄인 표현. 제어의 역전은 다른 객체를 직접 생성하거나 제어하는 것이 아니라 외부에서 관리하는 객체를 가져와 사용하는 것을 말함.
public class A{
b = new B();
}
//스프링 컨테이너가 객체를 관리하는 방식
public class A{
private B b;
//이렇게 코드에서 객체를 생성하지 않고, 어딘가에서 받아온 객체를 b에 할당
}
DI란?
Dependency Injection의 줄인 표현으로 의존성 주입을 의미. 즉, 어떤 클래스가 다른 클래스에 의존한다는 의미. @Autowired 라는 애너테이션은 스프링 컨테이너에 있는 빈이라는 것을 주입하는 역할.
public class A{
//A에서 B를 주입받음
@Autowired
B b;
}
즉, 스프링은 클래스 A에서 B 객체를 쓰고 싶은 경우 객체를 직접 생성하는 것이 아니라 스프링 컨테이너에서 객체를 주입받아 사용함.
스프링 컨테이너란?
@Autowired 같은 애너테이션을 사용해 빈을 주입받을 수 있게 DI를 지원하기도 함.빈이란?
스프링 컨테이너가 생성하고 관리하는 객체. 앞의 코드의 B가 빈.
스프링은 빈을 스프링 컨테이너에 등록하기 위해 XML 파일 설정, 애너테이션 추가 등의 방법을 제공함. ⇒ 빈을 등록하는 여러 가지 방법이 존재함.
예) MyBean이라는 클래스에 @Component 애너테이션을 붙이면 MyBean 클래스가 빈으로 등록됨. 이후 스프링 컨테이너에서 이 클래스를 관리함. 이때 빈의 이름은 클래스 이름의 첫 글자를 소문자로 바꾸어 관리함.
```java
@Component
public class MyBean {
}
```
⇒ 쉽게 스프링에서 제공해주는 객체라고 생각하기!
AOP(Aspect Oriented Programming): 관점 지향 프로그래밍으로, 프로그래밍에 대한 관심을 핵심 관점, 부가 관점으로 나누어서 관심 기준으로 모듈화하는 것을 의미함.
예) 계좌이체, 고객관리 프로그램
로깅 로직-지금까지 벌어진 일을 기록하기 위한 로직과 여러 데이터를 관리하기 위한 데이터베이스 연결 로직이 포함됨
핵심 관점 - 계좌 이체, 고객 관리 로직
부가 관점 - 로깅, 데이터베이스 연결 로직
⇒ 위의 프로그램의 로직에 AOP 관점을 적용하면, 부가 관점에 해당하는 로직을 모듈화해 개발할 수 있게해줌. 따라서 프로그램의 확장과 변경에도 유연하게 대응
import org.springframework.web.bind.annotation.*;
@RestController
public class TestController {
@GetMapping("/test")
public String test(){
return "Hello world!";
}
}
⇒ 사용자가 /test GET 요청을 하면 “Hello world!” 문자열을 반환해줌
@GetMapping 이라는 애너테이션으로 메서드와 매핑할 때 스프링부트에서 설정한 경로| 스타터 | 설명 |
|---|---|
spring-boot-starter-web | SpringMVC를 사용해 RESTful 웹 서비스를 개발할 때 필요한 의존성 모음 |
spring-boot-starter-test | 스프링 애플리케이션을 테스트하기 위해 필요한 의존성 모음 |
spring-boot-starter-validation | 유효성 검사를 위해 필요한 의존성 모음 |
spring-boot-starter-actuator | 모니터링을 위해 애플리케이션에서 제공하는 다양한 정보를 제공하기 쉽게하는 의존성 모음 |
spring-boot-starter-data-jpa | ORM을 사용하기 위한 인터페이스의 모음인 JPA를 더 쉽게 사용하기 위한 의존성 모음 |


⇒ 자바 17의 주요 변화 내용
텍스트 블록: 텍스트를 작성하려면 \n를 추가해야하지만, “””로 감싼 텍스트를 사용해 여러 줄의 텍스트 표현 가능
formatted() 메소드: 값을 파싱하기 위해 제공.
String textBlock17 = """
{
"id": %d
"name": %s,
}
""".formatted(2, "juice")
레코드
record Item(String name, int price) {
//이러면 파라미터가 private final로 정의됨)
}
Item juice = new Item("juice", 3000);
juice.price();
패턴 매칭
타입 확인을 위해 사용하던 instanceof 키워드를 조금 더 쉽게 사용하게 해줌.
자료형에 맞는 case 처리
switch-case문으로 자료형에 맞게 case를 처리할 수 있음
@SpringBootApplication 이해하기import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class SpringBootDeveloperApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootDeveloperApplication.class, args);
}
}
SpringApplication.run() 메소드는 애플리케이션을 실행함
@SpringBootConfiguration
스프링부트 관련 설정을 나타내는 애너테이션. @Configuration 을 상속해서 만든 애너테이션.
@ComponentScan
사용자가 등록한 빈을 읽고 등록하는 애너테이션. @Component 라는 애너테이션을 가진 클래스들을 찾아 빈으로 등록하는 역할을 함.
| 애너테이션명 | 설명 |
|---|---|
@Configuration | 설정 파일 등록 |
@Repository | ORM 매핑 |
@Controller, @RestController | 라우터 |
@Service | 비즈니스 로직 |
@EnableAutoConfiguration
스프링부트에서 자동구성을 활성화하는 애너테이션. 즉, 스프링부트 서버가 실행될 때 스프링부트의 메타 파일을 읽고 정의된 설정들을 자동으로 구성하는 역할을 수행.
@RestController 는 라우터 역할을 하는 애너테이션. 해당 애너테이션이 있어야 클라이언트의 요청에 맞는 메소드를 실행할 수 있음.
프레젠테이션, 비즈니스, 퍼시스턴스 계층이 존재하며 서로 통신하며 프로그램 구성

프레젠테이션 계층
HTTP 요청을 받고 비즈니스 계층으로 전송하는 역할을 함. 컨트롤러가 프레젠테이션 계층의 역할을 하며 스프링부트 내에 여러 개가 존재할 수 있음.
비즈니스 계층
모든 비즈니스 로직(= 서비스를 만들기 위한 로직)을 처리. 즉, 웹 사이트에서 벌어지는 모든 작업을 처리함. 서비스가 비즈니스 계층의 역할을 함.
퍼시스턴스 계층
모든 데이터베이스 관련 로직을 처리함. 이 과정에서 DB에 접근하는 DAO 객체를 사용할 수 있음. 리포지토리가 퍼시스턴스 계층의 역할을 함.

- static 디렉토리: JS, CSS, 이미지와 같은 정적 파일을 넣는 용도
- application.yml 파일: 스프링부트 서버가 실행되면 자동으로 로딩되는 파일로 데이터베이스의 설정 정보, 로깅 설정 정보 등이 들어갈 수 있음.



