[내일배움캠프] TIL(2) Spring 입문🌱

Euiyeon Park·2026년 10월 2일

내일배움캠프

목록 보기
2/9
post-thumbnail

2. Spring Data JPA 기본

💚 다양한 요청 처리 방식

@Controller vs @RestController

SSR 방식이 아닌 이상 Spring MVC 패턴에서 Model과 View의 역할을
FE가 처리함에 따라 BE는 데이터만 내려주게 된다. - JSON 형식

  • @Controller : 전통적인 Spring MVC의 컨트롤러, View를 반환하기 위해 사용
  • @RestController : @Controller + @ResponseBody
  • @ResponeBody :
    Controller 메서드가 반환한 Java 객체를 HTTP 응답 Body에 담아서 보내는 어노테이션
    Java 객체 → JSON

✨[참고] @RequesetBody

  • @RequestBody :
    HTTP 요청 Body에 담겨온 데이터를 Java 객체로 변환해서 받는 어노테이션
    JSON → Java객체

✨[참고] HttpMessageConverter와 Jackson라이브러리
Spring에서 JSON ↔ Java 실제 변환 작업은 내부의 HttpMessageConverter가 하고,
JSON 변환에는 기본적으로 Jackson 라이브러리가 사용된다

@RequestMapping

  • @RequestMapping 은 특정 URL 요청을 Controller의 클래스/메서드에 연결해준다.

사용법1

@ResController
@RequestMapping("/users)
public class UserController{
	
    @GetMapping	
    @PostMapping 
    @PutMapping 
    @PatchMapping
    @DeleteMapping
   
}

사용법2

@RestController
public class UserController{
	
    @RequestMapping(value = "/users", method = RequestMethod.GET)
	public void getUser(){
    	...
    }
}

💚 데이터 전달 방식과 어노테이션

클라이언트 → 서버 데이터 전달 방식

데이터 전달 방식어노테이션주요 속성 / 특징예시
쿼리 파라미터(쿼리 스트링)@RequestParamrequired: 필수 여부 지정
defaultValue: 값이 없을 때 기본값 지정
/users?name=kim
경로 변수@PathVariableURL 경로의 값을 변수로 받음/users/1
요청 본문@RequestBody요청 Body의 JSON 등을 Java 객체로 변환JSON Body
폼 데이터@ModelAttribute폼 데이터를 Java 객체에 바인딩HTML Form 데이터
  • @RequestParam은 디폴트가 required=true 이므로 false 설정을 해주지 않으면 필수값

✨[참고] 쿼리 파라미터 vs 경로 변수

  • 쿼리 파라미터(@RequestParam) :
    URL 경로 ? 뒤에 오는 조건값(선택적)
    검색, 필터링, 정렬, 페이징 용도
    예시 : /users?id=1
  • 경로 변수(@PathVariable) :
    URL 경로 자체에 값이 포함되는 필수값
    특정 리소스를 식별하기 위해 사용
    예시 : users/1

💚 DTO를 record로 작성기

record 는 데이터 전달 목적의 객체를 간결하게 만들기 위한 문법으로 DTO의 성질과 부합한다.
또한 record는 내부 필드가 private final이기 때문에 불변을 보장한다.

public record UserRequest(
    String name,
    int age
) { }

위와 같이 record를 작성하면 자바가 자동으로 아래 기능을 만들어준다.

  • 생성자
  • getter 역할 메서드
  • equals()
  • hashCode()
  • toString()

✨[참고] class vs record

구분classrecord
코드 길이비교적 길음매우 간결함
생성자직접 작성 또는 Lombok 사용자동 생성
Getter직접 작성 또는 Lombok 사용자동 생성
Setter작성 가능일반적으로 불가능
값 변경가능생성 후 변경 불가
equals/hashCode직접 작성 또는 Lombok 사용자동 생성
상속가능다른 클래스를 상속할 수 없음
주요 용도일반적인 객체데이터 전달용 객체

💚 Docker

도커는 소프트웨어 개발과 배포를 도와주는 컨테이너 기술로
애플리케이션을 빌드, 배포, 실행하는 과정을 쉽게 관리하게 해준다.

Container

  • 애플리케이션과 그 실행 환경을 함께 패키징하여 어디서든 동일하게 실행될 수 있도록 하는 기술

Docker Image = 게임 CD

  • 코드, 라이브러리, 설정 등을 포함하고 있는 읽기 전용(Read-only) 템플릿 - 변경 불가
  • 실행에 필요한 모든 것을 담고 있는 정적 파일(설계도)
  • ‼️하나의 이미지로 여러 개의 컨테이너를 만들 수 있다.

Docker Container = 실행되고 있는 게임

  • 도커 이미지를 실행(Run)한 상태로 독립된 격리 프로세스
  • 이미지를 실제로 실행한 인스턴스

Docker File

  • 도커 이미지를 생성하기 위한 설정 및 명령어 템플릿 파일
Dockerfile 작성
   ↓
$ docker build
   ↓
Docker Image 생성
   ↓
$ docker run
   ↓
Docker Container 생성 및 실행

데이터베이스

데이터 무결성(Data Integrity)

  • 엔티티 무결성
    • 각 행을 유일하게 식별할 수 있어야 한다.
    • PK는 중복❌, NULL❌
  • 참조 무결성
    • 테이블 간 관계가 올바르게 유지되어야 한다.
    • FK는 실제로 존재하는 PK값을 참조해야 한다.
  • 도메인 무결성
    • 컬럼에 들어가는 값은 정해진 데이터 타입, 범위, 조건을 만족해야 한다.

DROP vs DELTE vs TRUNCATE


3아키텍처 레이어

모든 데이터 클래스는 getter가 필수
스프링 내부적으로 객체를 조작할 때 getter를 사용

영속성 컨텍스트는 트랜잭션 내에서 동작
@Transactional 이 붙이면 그 내부 코드는 트랜잭션으로 관리 및 영속성 컨텍스트가 동작

profile
"개발자는 해결사이자 발견자이다✨" - Michael C. Feathers

0개의 댓글