2026.04.07
실생활 비유로 설명하자면 백엔드는 레스토랑의 주방과 같음.
손님(USER)은 주방을 직접 보지 못하지만, 웨이터(FRONTEND)를 통해 주문을 하면 주방(BACKEND)에서 만든 요리를 전달 받을 수 있음.
웹 서버를 쉽게 만들어주는 도구 상자임.
일반 Java 로 웹 서버를 만들려면 수 많은 설정과 코드가 필요함.
하지만, Spring Boot 를 사용하면 단 몇 줄로 웹 서버를 구동할 수 있음.
예시 코드임.
@SpringBootApplication
public class MyApp {
public static void main(String[] args) {
SpringApplication.run(MyApp.class, args); // 웹 서버 시작!
}
}
Spring Framework는 기능이 많은 만큼, 개발자가 애플리케이션을 실핸하기 위해 필요한 환경 설정을 하나하나 직접 해줘야 하는 번거로움이 있음.
반면, Spring Boot 는 이러한 스프링의 복잡한 초기 설정을 자동으로 처리해주는 도구임.
💡 요즘 Spring 이라고 한다면 Spring Boot 를 뜻함.
포기하지 않기로 약속해요~!
클래스란 청사진, 설계도, 틀 이라고 말할 수 있음.
💡 클래스는 설계도 라고 이야기할 수 있지만, 설계도 는 실제 그 설계도로 만들어진 완성품이 아니기에, 이 설계도만으로는 무언가를 하기 어려움.
예를 들어서 빵틀이 있다고 해서 빵을 먹을 수 없음. 집 설계도가 있다고 해서 집을 소유하고 있는 것이 아님.
// 클래스 정의 - 틀, 설계도
public class Bread {
String name; // 빵의 이름
int calorie; // 빵의 칼로리
}
Bread 클래스를 만들어줌. (빵틀)
아직 여기에서는 Bread를 만들기 위한 방법을 정의하지 않았음.
// 클래스 정의 - 틀, 설계도
public class Bread {
String name; // 빵의 이름
int calorie; // 빵의 칼로리
// 생성자 정의 - 어떻게 결과물을 만들 것인가에 대한 방법을 '강제'
public Bread(String name, int calorie) {
this.name = name;
this.calorie = calorie;
}
}
이렇게 생성자까지 정의해줘야 빵을 만들 수 있음
생성자는 틀(=클래스)로 어떻게 결과물(=객체)을 만들 것인가에 대한 방법을 강제하는 것임.
Main 클래스에서 만들어보면
public class Main {
public static void main(String[] args) {
Bread newBread = new Bread("모닝빵", 200);
System.out.println(newBread.name);
}
}
new 키워드를 통해서 객체를 생성할 수 있음.
❗️ static 은 꼭 필요한 곳에 알고 쓰자!
인터페이스는 약속이나 규칙을 정의함.
인터페이스에서 중요한 점! 인터페이스가 규격(=명세)이라는 것임. (사용자 입장에서는 내부 구현을 아지 못해도 명세만 알고 있으면 클래스를 사용하는 것에 아무런 지장이 없다는 뜻임.)
마우스를 예시로 인터페이스를 만들어 보겠음
// 마우스 인터페이스 정의
public interface Mouse {
void leftClick(); // 좌클릭
void rightClick(); // 우클릭
void scrollWheel(); // 스크롤휠
}
여기서 마우스는 좌클릭, 우클린, 스크롤휠 기능이 있음.
이걸 로지텍마우스 클래스에서 구현해보면, 이렇게 마우스로서 기본적으로 수행해야하는 기능들을 구현할 수 있음. ****
public class LogitechMouse implements Mouse {
@Override
public void leftClick() {
// 로지텍 마우스 좌클릭 로직 구현
}
@Override
public void rightClick() {
// 로지텍 마우스 우클릭 로직 구현
}
@Override
public void scrollWheel() {
// 로지텍 마우스 스크롤휠 로직 구현
}
}
삼성마우스 클래스도 만들어서 구현해보면
public class SamsungMouse implements Mouse {
@Override
public void leftClick() {
// 삼성 마우스 좌클릭 로직 구현
}
@Override
public void rightClick() {
// 삼성 마우스 좌클릭 로직 구현
}
@Override
public void scrollWheel() {
// 삼성 마우스 좌클릭 로직 구현
}
}
이렇게 각각 다른 마우스라고 하더라도 마우스로서 기본적으로 가지고 있어야하는 기능을 정의해놓는 것임. (implements로 불러올 수 있음)
Main에서 마우스들을 생성하면 이렇게 할 수 있음.

여기서 구현체의 실제 구현 내용보다는 인터페이스 그 자체의 명세가 더 중요함.
즉, Mouse 가 LogitechMouse 인지 SamsungMouse 인지는 사용하는 측에서는 크게 의미있는 내용이 아니라는 뜻임.
LogitechMouse 든, SamsungMouse 든 모두 똑같이 Mouse 타입으로 사용할 수 있음.
→ 이것을 다향성이라고 함.
- 대시로 이어줌._ 언더바로 이어줌.
클라이언트는 요청(Request) 하는 쪽이고 서버는 요청을 받아서 처리하고 응답(Response)을 주는 쪽임.
JSON은 클라이언트와 서버가 통신할 때 사용하는 데이터 양식
JSON은 Key 와 Value 로 이루어 져있음.
{
"이름": "홍길동",
"나이": 30,
"사는곳": "서울",
"개발자인가": true
}
Value는 또 다른 Key/Value가 될 수 있음.
{
"이름": "홍길동",
"나이": 30,
"사는곳": {
"시": "서울시",
"구": "강남구",
"동": "대치동"
}
"개발자인가": true
}
XML이란 헤더와 태그 등의 여러 요소로 가독성이 떨어지고, 불필요한 용량을 잡아먹는다는 단점때문에 잘 사용하지 않음.
<root>
<이름>홍길동</이름>
<나이>30</나이>
<사는곳>
<시>서울시</시>
<구>강남구</구>
<동>대치동</동>
</사는곳>
<개발자인가>true</개발자인가>
</root>
💡 JSON은 사람, 기계 모두 이해하기 쉬우며 용량이 작다!