작성일 : 2026-04-07
강의 : 입문 Spring
🍬 오늘 들은 강의
✔️ chapter 1-1 OT - 스프링으로 백엔드 개발 시작하기
✔️ chapter 1-2 스프링을 위한 클래스(Class)와 객체(Object)
✔️ chapter 1-3 스프링을 위한 인터페이스(Interface)
✔️ chapter 1-4 개발환경 구성
✔️ chapter 1-5 꼭 알아야할 기본 개발 용어
✔️ chapter 1-6 라이브러리와 프레임워크
✔️ chapter 1-7 HTTP(1)
✔️ chapter 1-8 HTTP(2)
✔️ chapter 1-9 API 이해하기
✔️ chapter 1-10 Annotation과 Lombok
✔️ chapter 1-11 스프링 프로젝트 시작 & 의존성 관리 (Gradle/Maven)
✔️ chapter 1-12 Servlet 개념
✔️ chapter 1-13 Servlet 기반 영화 추천 API 실습
🕶️ 오늘 배운 핵심 개념
프레임워크는 frame(틀) + work(일하다)의 합성어. 개발자가 틀 안에서 개발하도록 강제한다.
라이브러리는 개발 중 필요한 기능을가져다 쓰는 도구 모음이다. 프레임워크 = 라이브러리들의 모음이라고 볼 수 있고,
그 안에서 라이브러리들이 호환되도록 세팅되어 있다.
| 제어권 | 프레임워크가 내 코드를 호출 | 내가 라이브러리를 호출 |
| 목적 | 전체 구조(frame)를 잡기 위해 | 특정 기능 구현을 위해 |
| 예시 | Spring, Django, Rails | Lombok, Jackson, Guava |
프레임워크 장점 : 코드 일관성 ↑, 팀 협업 편함, 보안 기능 기본 제공, 테스트 환경 통합
프레임워크 단점 : 초기 학습 비용 높음, 버전 호환성 문제, 구조 변경 자유도 낮음
🕶️ 스프링(Spring) 프레임워크
자바(Java) 플랫폼을 위한 오픈 소스 애플리케이션 프레임워크. 핵심은
"개발자는 스프링을 사용하여 비즈니스 로직에 더 집중할 수 있다" 는 것이다.
Spring 사용 전후를 보면 확 와닿는다
BEFORE (Spring 없이 - 소켓 직접 처리)
// 요청 파싱, 헤더 처리, JSON 파싱, 응답 작성... 모두 직접 구현해야 함
public void handleRequest(Socket clientSocket) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
// ... HTTP 요청 파싱, JSON 수동 파싱, 응답 작성 등 수십 줄
}
AFTER (Spring 사용)
@RestController
public class SpringCalculator {
@PostMapping("/api/add")
public Map<String, Integer> add(@RequestBody Map<String, Integer> numbers) {
int result = numbers.get("a") + numbers.get("b");
return Map.of("result", result);
}
}
인프라와 기술적 복잡성은 Spring이 처리 → 개발자는 로직에만 집중!
🕶️ HTTP 상태 코드 (Status Code)
HTTP 요청에 대한 처리 상태를 응답하는 코드. 100 단위 숫자의 의미만 알면 된다!
| 1xx | 정보 (처리 중) | 잘 사용 안 함 |
| 2xx | 성공 | 200 OK, 201 Created, 204 No Content |
| 3xx | 리다이렉션 | OAuth 로그인 시 자주 등장 (카카오, 구글 로그인 등) |
| 4xx | 클라이언트 에러 | 400 Bad Request, 401 Unauthorized, 403 Forbidden, 404 Not Found |
| 5xx | 서버 에러 | 500 Internal Server Error, 503 Service Unavailable |
자주 쓰는 코드 정리:
- 200 OK : 요청 성공
- 201 Created : 새 리소스 생성 성공
- 204 No Content : 성공했지만 응답 데이터 없음 (삭제 성공 시)
- 400 Bad Request : 요청 형식이 잘못됨 (예: GET API에 POST로 요청)
- 401 Unauthorized : 인증 필요 (로그인 안 됨)
- 403 Forbidden : 인증은 됐지만 권한 없음 (일반 유저 vs 관리자)
- 404 Not Found : 리소스 없음 (숨기기 용도로 쓰기도 함)
- 500 Internal Server Error : 서버 내부 오류
🕶️ Annotation
자바 코드에 @로 메타데이터를 추가해 특별한 의미나 동작을 부여하는 것. 복잡한 기능도 어노테이션 하나로 쉽게 사용할 수 있다.
public class LogitechMouse implements Mouse {
@Override // ← 이게 어노테이션! 인터페이스에 없는 메서드면 에러 표시해줌
public void leftClick() { ... }
}
🕶️ Lombok
보일러플레이트 코드(getter/setter/생성자 등 반복 코드)를 어노테이션으로 자동 생성해주는 라이브러리
| @Getter / @Setter | 모든 필드의 getter/setter 자동 생성 |
| @ToString | toString() 자동 생성 |
| @NoArgsConstructor | 기본 생성자 생성 |
| @AllArgsConstructor | 모든 필드를 받는 생성자 생성 |
| @RequiredArgsConstructor | final 필드만 받는 생성자 생성 |
| @Slf4j | 로그용 Logger 객체 자동 생성 |
// Lombok 사용 예시
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class User {
private String name;
private int age;
// getName(), setName(), getAge(), setAge(), 생성자 모두 자동 생성!
}
느낀 점
초반에 배운 내용들이 많이 겹쳐 있어서 정리하며 공부하니 챕터 1은 많이 어렵지 않았다.
Spring 사용 전후 코드 비교가 제일 인상 깊었다. 복잡한 걸 어노테이션 몇 개로 줄일 수 있다는 게 신기했고,
"그래서 스프링을 쓰는구나" 라고 느낄 수 있었다.