Spring
-
[Spring] ArgumentResolverSpring 2025. 4. 17. 15:29
Spring RequestMappingHandlerAdapter ArgumentResolver ReturnValueHandler 🔥 Spring MVC에서 HTTP 요청을 컨트롤러 메서드에 매핑하고 실행하는 핵심 구성 요소! 🎯 클라이언트 요청을 적절한 컨트롤러 메서드와 연결한 후 이 메서드를 호출하여 결과를 반환하는 역할을 수행한다. ✅ RequestMappingHandlerAdapter @RequestMapping@PostMapping@GetMapping@PutMapping@PatchMappingDeleteMapping Spring MVC에서 클라이언트 요청을 실제 컨트롤러 메서드에 연결하고 실행해주는 핵심 클래스.Client 요청 → DispartcherServlet(프론트..
-
[Spring] HttpMessageConverterSpring 2025. 4. 17. 11:40
SpringHttpMessageConverter우선 순위 🔥 HttpMessageConverter 🎯 View(화면 표시)를 응답하는 것이 아닌, Rest API(HTTP API)로 JSON, TEXT, XML 등의 데이터를 응답 Message Body에 직접 입력하는 경우 HttpMessageConverter를 사용한다. ※ @RestController = @Controller + @ResponseBody 1. SSR → @Controller + View Template → 서버 측에서 화면을 동적으로 그린다.2. CSR → @RestController + Data → 클라이언트 측에서 화면을 동적으로 그린다.3. 실제로는 두가지 기술이 함께..
-
[Spring] 트랜잭션Spring 2025. 4. 17. 11:15
#Transaction💡 Spring 정리: Transaction📘 개념 정리🔥 Transaction트랜잭션(Transaction)은 데이터 베이스 작업의 최소 단위로 여러 개의 작업을 한 번에 처리하거나, 전부 되돌리는 단위이다. ex) 은행 이체 → A 계좌 출금 + B 계좌 입금 = 하나의 트랜잭션 결과: “전부 성공하거나, 전부 실패해야 한다!”✅ 언제 사용하는가? 여러개의 SQL 또는 JPA 연산 등등 하나의 코드 블럭 안에서 동시에 실행 될때, 사용한다. 예를 들어 내용 저장, 이미지 저장, 태그 저장 같은 작업이 동시에 실행되다가 중간에 하나라도 실패하면 트랜잭션 롤백(전체 작업을 취소 한다.) 시켜준다. 비정상적으로 저장된 데이터를 막고..
-
[Spring] 고아 객체Spring 2025. 4. 17. 10:55
Spring 고아객체 🔥 고아 객체 JPA 에서 부모 엔티티와 연관관계가 끊어진 자식 엔티티를 말한다. ※ 계시글에서 댓글 하나를 삭제를 했는데 DB에서 연전히 댓글이 남아있다면....고아 객체(외톨이) 발생!!!📌 고아 객체의 인생 요약 (비극 버전)태어날 땐 Parent 덕분에 존재감 있었음하지만 관계가 끊기자…누구도 참조하지 않음영속성 컨텍스트에서도 잊혀지고결국 DB에서도 삭제됨💀 “그 누구도 관심을 주지 않았다… 그래서 사라졌다.”@Entitypublic class Parent { @OneToMany..
-
[Spring] 영속성 전이 (Cascade)Spring 2025. 4. 17. 10:30
Spring 영속성 전이 🔥 Cascade 🎯 JPA에서 특정 엔티티를 저장, 삭제 등의 작업을 할 때 연관된 엔티티에도 동일한 작업을 자동으로 적용하도록 설정하는 기능 (❗ 영속성 전이는 지연로딩, 즉시 로딩과는 아무 관련이 없다) ✅ why ? 연관된 객체들은 별도로 저장, 삭제하지 않고도 하나의 작업으로 함께 처리 할 수 잇기 때문에 코드가 깔끔해지고 관리가 쉬움 부모 - 자식 관계에서 부모 엔티티만 신경 써도 자식 엔티티들이 함께 관리되니 일관성이 있는 데이터 처리 가능. 옵션설명PERSIST부모 저장 시 자식도 저장REMOVE부모 삭제 시 자식도 삭제MERGE병합(수정)시 자식도 병합DETACH영속성 컨텐스트에서 분리시 자식도 ..
-
[Spring] 지연로딩, 즉시 로딩Spring 2025. 4. 16. 23:11
#LazyLoading #EagerLoading💡 Spring 정리: 지연 vs 즉시 로딩📘 개념 정리 지연 로딩(LAZY)즉시 로딩(EAGER)특징연관된 엔티티는 실제로 접근하는 순간 로딩된다.엔티티를 조회할 때 연관된 엔티티도 즉시 같이 조회코드에서 사용법(fetch = FetchType.LAZY)( fetch = FetchType.EAGER)기본 값사용 @OneToMany , @ManyToMany @ManyToOne, @OneToOne 장점초기 조회 시: 연관된 엔티티를 불러오지 않아서 빠름(불필요한 쿼리 방지)필요한 순간에만 쿼리를 날리므로, 메모리 낭비 방지 & 성능 최적화자주 접근하는 연관 데이터라면: 캐시나 프록시 객체 덕분에 반복 조회 시 효율적지연 로딩은 느린 게 아니라, "필요..
-
[Spring] ProxySpring 2025. 4. 16. 22:20
#프록시 💡 Spring 정리: 프록시📘 개념 정리 Proxy 🎯 JPA에서 엔티티 객체의 지연 로딩(Lazy Loading)을 지원하기 위해 사용하는 대리 객체이다. 🎯 실제 엔티티 객체를 생성하거나 데이터베이스에서 값을 읽어오지 않고도 엔티티의 참조를 사용할 수 있다. 1. 성능향상 진짜 객체를 매번 DB에서 꺼내오면 너무 느리기 때문애 필요할 때만 객체를 생성해서 로딩 해서 효율 UP 2. 연관된 엔티티가 많을 때 특히 유용 회원이 연관된 정보를 한번에 가져오면 속도가 느려진다. 대타로 불려갔다가 그 뒤에 진짜 데이터가 불려온다.(Lazing) 3. 처음에는 느리지만 데이터를 반복 조회할 수록 빨라진다. ..
-
[Spring] 연관관계 유형Spring 2025. 4. 16. 17:01
#연관관계 유형💡 Spring 정리: 연관관계 유형📘 개념 정리관계 유형 설명 예시 실무 사용도 특징/주의점관계 유형설명예시실무 사용도특징/주의점1. @ManyToOne다대일 (N → 1)회원 → 팀✅ 가장 많이 씀외래 키는 Many 쪽에 존재2. @OneToMany일대다 (1 → N)팀 → 회원⛔ 비추주인이 아닌 쪽이 외래 키를 가짐 → 제약 많음3. @OneToOne일대일 (1 ↔ 1)유저 ↔ 프로필✅ 사용함외래 키 위치에 따라 주인 결정4. @ManyToMany다대다 (N ↔ N)학생 ↔ 수업⛔ 거의 안 씀중간 테이블을 별도 엔티티로 만드는 게 실무 표준 ⚠️ 실수 및 주의사항 외래키를 가져야 할 쪽이 누구인가? 소속되는 존재외래 키를 가진다 → 연관관계 주인@JoinColumn 있어..