Spring & Java
JPA 심화 본문

Query Methods란 무엇이며 어떻게 학습 하는게 좋을까요 ?
< JPA 쿼리 참고 사이트 >
https://docs.spring.io/spring-data/jpa/reference/jpa/query-methods.html
@OneToMany, @ManyToOne 어노테이션
JPA @OneToMany, @ManyToOne 으로 연관관계 관리하기

스프링을 이용하면서 자주 쓰는 JPA에 대해서 오늘은 학습 자료를 적어 볼까 합니다.. 평소에는 강의만 졸졸 쫓아 어떤 원리로 어떤 기능들이 호출 되고 사용 되는지 줄줄 치다가 이제부터는 어떤 학습 자료를 가지고 공부하는게 맞는지 고민 하다가 이렇게 글을 작성해 봅니다.
일단, 기술이나 핵심 키워드들을 하나하나 떠올리면서 작성하고 말하는게 공부 자료에 도움이 된다는 제 공부 스타일이 조금씩 먹혀 들어 가는 것 같아 뿌듯 하네요.
첫번째로 @OneToMany, @ManyToOne 어노테이션 관계를 설명 해볼까 합니다.
1:N , N:1 관계를 설정하는 어노테이션이 바로 @OneToMany, @ManyToOne 입니다.
이게 찾아 보니까 안쓰는 프로젝트가 없을 정도로 굉장히 기본적이고 필수적이라는 사실에 저도 이번에 한번 써보기로 결심 했습니다.
우선! Schedule 3 Layer Architecure 설계로 스케줄 api를 흐름 설계를 따라 만들어 봣습니다.

이렇게 흐름상 설계를 하다보니 기본 스케줄 CRUD 흐름은 맞췃는데 다음이 중요해졌습니다.
이렇게 만들어 보고 나서 다음 과정인 " 댓글 달기 " 과제를 떡 하고 받았는데 뇌가 녹아 내리는 기분이였습니다.
근데 정말 놀라운건 제가 어떻게 코드를 짜야 되는지 이제는 이해를 했다는거에요.
기본 부모 자식 뭐 논리가 있고.. 설계를 하는데 있어서 흐름상 중요하다 뭐 이론은 알겠는데 실제로 코드를 짜볼려고 하니까 이게 뭐랄까 ㅋㅋ.. 어디서부터 어떻게 만들어야 코딩이 되는지 손이 안올라가더라구요 그래서

아래 이미지 처럼 화면을 분할하고 코드를 또 따라 쳐보면서 오류를 쫓아가보자! 이런 핵심 학습 방향이 잡혔습니다.
지금 보면 @ManyToOne 어노테이션 보이죠 ? 이게 엔티티들은 서로 다양한 연관관계를 맺을 수 있다네요 그래서 따로 중간에 1:N , N:1 관계로 분해 해보기로 결심 했습니다.
제 시나리오는 이렇습니다. 사용자가 글을 작성하고 댓글을 달 수 있도록 하는 흐름 설계 입니다. 하지만 User는 아직 만들지 못했어요 지금 제가 만든건 schedules랑 comment 뿐입니다.
단방향 상대 엔티티에 @OneToMany가 없는 경우를 생각해 @ManyToOne으로 자식 엔티티는 컬럼을 만들게 되면 자동으로 Comment를 생성하게 되고 그것을 관리하는 기능을 할 수 있도록 자식에게 어노테이션을 선언 했다고 보면 무방 할 것 같습니다.
아무튼 1차적으로 어노테이션 코드 흐름설계로 부모 밑에 자식이 부모에게 연결하여 그 자식의 흐름을 설계 하는데까지는 공부를 완료 했지만 아직 갈 길이 1만리 입니다.
3 Layer Architecture(Controller, Service, Repository)를 적절히 적용했는지 확인해 보고, 왜 이러한 구조가 필요한지 작성해 주세요.
Controller > Service, > Repository
클라이언트의 요청 (Request)을 받아, 응답 ( Response)을 반환 하는 역할을 합니다.
사용자의 요청을 받아 Service에 전달합니다.
3 Layer Architecture는 코드의 가독성, 유지보수성, 확장성을 극대화 하기 위한 구조로 사용하지 않을 이유가 전혀 없는 방식 입니다.
제 코드는 전반적으로 위 흐름 설계 중점으로 만들어졌으며 적절히 사용 될수 있는 3 Layer Architecture 할 수 있겠습니다.
@RequestParam, @PathVariable, @RequestBody가 각각 어떤 어노테이션인지, 어떤 특징을 갖고 있는지 작성해 주세요.
@RequestParam : 어노테이션을 사용하면 쿼리 매개변수 또는 폼데이터를 컨트롤러의 메서드 인수에 바인딩 할 수 있습니다.
기본적으로 필수 값은 ( required = true ) 입니다.
여러 값을 리스트로 받을 수도 있습니다.
@PathVariable : URL 경로의 일부를 메서드 매개변수에 바인딩할 때 사용합니다.
RESTful API 자원의 식별자를 URL 경로의 일부로 포함시킬때 주로 사용됩니다.
URL경로 일부를 변수로 받아올 때 유용합니다.
@RequestBody : HTTP 요청에 담긴 JSON을 객체로 변환해 받을 때 사용 합니다.
POST, PUT, PATCH 요청에서 자주 사용됩니다.
( "key" : "value" )
'숙련 Spring' 카테고리의 다른 글
| 숙련 Srping 요점 정리 (0) | 2026.01.06 |
|---|---|
| 심화 스프링 Bean & IoC (0) | 2026.01.05 |
| 심화 스프링 Ioc / DI (1) | 2026.01.05 |
| 자바 심화 숙련 Spring (0) | 2026.01.05 |
| Spring Boot 베이직반 - 5 ( IoC / Dl / Bean ) (0) | 2026.01.02 |