카테고리 없음

[TIL] Spring 시작하기

mooncommit 2026. 4. 7. 23:17

작성일 : 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 사용 전후 코드 비교가 제일 인상 깊었다. 복잡한 걸 어노테이션 몇 개로 줄일 수 있다는 게 신기했고,

"그래서 스프링을 쓰는구나" 라고 느낄 수 있었다.