Spring32 [Spring] Spring Boot에서 웹 요청은 어떻게 처리될까? (@Controller, @GetMapping) @Controller@Controller는 스프링 MVC에서 요청을 처리하는 클래스를 의미한다.@Controllerpublic class MainController {} 클라이언트가 요청을 보내면 DispatcherServlet이 적절한 Controller를 찾아 실행한다.@GetMappingGET 요청을 처리하는 메서드를 지정한다.@GetMapping("/")public String index() { System.out.println("index() 메서드 호출됨!");}@GetMapping("/hello")public String hello() { System.out.println("hello() 메서드 호출됨!");} HTTP 주요 응답 코드코드의미200성공201생성 성공400잘못된 요청.. 2026. 8. 5. [Spring] 외래키 외래키(Foreign Key)외래키는 항상 자식(N) 테이블이 가진다.유저(1) │ └──── 게시글(N)@ManyToOneJPA에서는 객체를 직접 참조한다.@ManyToOneprivate Member author; @ManyToOne앞쪽(Many)은 현재 클래스(자식 테이블) 뒤쪽(One)은 멤버 변수(부모 테이블)를 의미한다.JPA와 DB의 패러다임 차이구분JPA데이터베이스참조 방식객체를 직접 참조외래키로 식별관계 표현객체 필드로 다른 객체를 가짐관계(조인)는 행(Row)의 키로 연결식별자(참조) 방식객체 변수(예: Member author)외래키 컬럼(예: author_id)데이터 접근객체 그래프 탐색(계단식 접근 가능)SQL JOIN 필수, 직접 접근 불가상속객체에서 상속(extends) .. 2026. 8. 4. [Spring] 테스트 환경 분리(dev / test) Spring Boot에서는 개발 환경과 테스트 환경의 설정을 분리해서 사용할 수 있다.개발 환경과 테스트 환경이 같은 DB를 사용하면 테스트 중 생성하거나 수정한 데이터가 실제 개발 데이터에 영향을 줄 수 있다. 따라서 보통은 개발 환경(dev) → 파일 기반 DB테스트 환경(test) → 메모리 기반 DB를 사용한다.SpringBootTest는 AssertJ가 기본 포함일반 자바 프로젝트에서는 AssertJ를 사용하려면 build.gradle에 의존성을 추가해야 한다. testImplementation("org.assertj:assertj-core:3.26.3") 하지만 Spring Boot 프로젝트에서는 spring-boot-starter-test에 AssertJ가 포함되어 있기 때문에 별도로 추가할.. 2026. 8. 4. [Spring] BaseEntity와 @MappedSuperclass BaseEntity를 사용하는 이유대부분의 엔티티에는 공통 필드가 존재한다.id생성일(createdDate)수정일(modifiedDate)모든 엔티티마다 동일한 코드를 작성하면 중복이 발생한다.그래서 공통 속성을 BaseEntity에 모아두고 상속해서 사용한다.@MappedSuperclass@MappedSuperclass는 공통 속성을 여러 엔티티에서 재사용하기 위한 어노테이션이다.실제 테이블과 매핑되지 않고, 상속받는 엔티티의 테이블에 컬럼으로 포함됨공통으로 사용되는 필드(예: 생성일시, 수정일시 등)를 한 곳에서 관리할 수 있음엔티티 클래스에서 @MappedSuperclass가 적용된 클래스를 상속받아 사용상속 관계 매핑이 아닌 단순히 공통 속성을 재사용하는 용도로 사용@Entity 어노테이션과 함께.. 2026. 8. 4. [Spring] 더티 체킹(Dirty Checking) 트랜잭션(Transaction)트랜잭션은 하나의 작업을 안전하게 처리하기 위한 실행 단위이다.트랜잭션이 시작되면 JPA는 조회한 엔티티를 영속성 컨텍스트에서 관리한다.이후 엔티티의 상태를 계속 추적하다가 트랜잭션이 종료되는 시점에 변경된 내용을 데이터베이스(DB)에 반영한다.더티 체킹(Dirty Checking)JPA에서는 트랜잭션 안에서 영속 상태의 엔티티 값만 변경해도 DB에 자동으로 UPDATE SQL이 실행된다.이 기능을 더티 체킹 이라고 한다.즉, 개발자가 save()를 직접 호출하지 않아도 JPA가 변경 사항을 감지하여 자동으로 저장해 준다.기존 방식게시글을 수정한 후 다시 저장해야 했다. public void modify(Post post, String title, String body){ .. 2026. 8. 4. [Spring] @Component, @Transactional, JPA Auditing @Component@Component는 스프링이 관리하는 객체(Bean)로 등록하는 기본 어노테이션이다.스프링은 @Component가 붙은 클래스를 자동으로 Bean으로 등록하고 관리하며, 필요한 곳에 의존성 주입(DI)을 해준다.@Componentpublic class MyComponent {}@Service, @Repository 등은 내부적으로 @Component를 포함하고 있다.따라서 서비스 클래스에는 @Component보다 역할이 명확한 @Service를 사용하는 것이 가독성이 좋다.의존성 주입(DI)객체를 주입하는 방식은 크게 두 가지로, 필드 주입(@Autowired)과 생성자 주입이 있다.두 방식 모두 의존성 주입(DI)을 위한 방법이지만, 객체가 연결되는 시점이 다르다.@Autowired.. 2026. 7. 31. 이전 1 2 3 4 5 6 다음