티스토리 뷰
1.계획
Spring 입문 학습 자료 학습
주특기 주차 과제 제출
자바 ORM 표준 JPA 프로그래밍 영상 학습
2.배운점
HTTP 메세지

- Client 와 Server 간 Request, Response 는 HTTP 메시지 규약을 따름
- HTTP 메시지는 웹 서비스 개발자(백엔드, 프론트 개발자)에게 매우 중요한 내용!!
[HTTP(HyperText Transfer Protocol) 메시지]

Request
헤더 (headers)
HTML <form> 태그로 요청 시
> Content type: application/x-www-form-urlencoded
AJAX 요청시
> Content type: application/json
본문(Body)
GET 요청 시: (보통) 없음
POST 요청 시: (보통) 사용자가 입력한 폼 데이터
> ex) name=홍길동&age=20
Response
상태줄: API 요청 결과 (상태 코드, 상태 텍스트)
> ex) HTTP/1.1 404 Not Found
헤더(Header)
Content type
Response 본문 내용이 HTML 인 경우
> Content type: text/html
Response 본문 내용이 JSON 인 경우
> Content type: application/json
https://developer.mozilla.org/ko/docs/Web/HTTP/Messages
HTTP 메시지 - HTTP | MDN
HTTP 메시지는 서버와 클라이언트 간에 데이터가 교환되는 방식입니다. 메시지 타입은 두 가지가 있습니다. 요청(request)은 클라이언트가 서버로 전달해서 서버의 액션이 일어나게끔 하는 메시지
developer.mozilla.org
@RestController = @Controller + @ResponseBody
> 컨트롤러의 역할을 하면서 응답값을 json형태로 전달해주는 녀석
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Arrays;
import java.util.List;
@RestController
@RequestMapping("/hello/rest")
public class HelloRestController {
@GetMapping("/json/string")
public String helloHtmlString() {
return "<html><body>Hello @ResponseBody</body></html>";
}
@GetMapping("/json/list")
public List<String> helloJson() {
List<String> words = Arrays.asList("Hello", "Controller", "And", "JSON");
return words;
}
}
강의 학습내용으로 들어갑니다.
JPA를 왜 사용해야하는가?
-SQL 중심적인 개발에서 객체 중심으로 개발
-생산성
> 저장: jpa.persist(member)
조회:Member member = jpa.find(memberId)
수정:member.setName("변경할 이름")
삭제:jpa.remove(member)
-유지보수
> 기존에 필드 변경시 모든 SQL을 수정해야했지만, JPA를 사용하면 필드만 추가하면된다함
-패러다임 불일치 해결
1.JPA와 상속
2.JPA와 연관관계
3.JPA와 객체 그래프 탐색
4.JPA와 비교하기
-성능
-데이터 접근 추상화와 벤더 독립성
-표준
jpa 사용해봤던 간단한 crud
public class JpaMain {
public static void main(String[] args) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");
EntityManager em = emf.createEntityManager();
EntityTransaction tx = em.getTransaction();
tx.begin();
try {
// Member member = new Member();
// member.setId(2L);
// member.setName("HelloB"); 저장할때
// em.remove 삭제
// Member findMember = em.find(Member.class, 1L);
// findMember.setName("HelloJpa"); .set
// List<Member> findMembers = em.createQuery("select m from Member m", Member.class)
// .setFirstResult(1)
// .setMaxResults(10)
// .getResultList() 페이지네이션 가능 1-10까지만 검색해와 !
List<Member> findMembers = em.createQuery("select m from Member m", Member.class) // Member.class < 두번째 인자는 엔티티 객체를 말하는것.
.getResultList();
for (Member findMember : findMembers) {
System.out.println("findMember = " + findMember.getName());
}
tx.commit();
} catch (Exception e) {
tx.rollback();
} finally {
em.close();
}
emf.close();
}
}
JPQL
-JPA는 SQL을 추상화한 JPQL이라는 객체 지향 쿼리 언어 제공
-SQL과 문법 유사, SELECT, FROM, WHERE, GROUP BY, HAVING, JOIN을 지원
-JPQL은 엔티티 객체를 대상으로 쿼리 (Member.class < 엔티티 클레스를 가르키는거)
-SQL은 데이터베이스 테이블을 대상으로 쿼리함
> 테이블이 아닌 객체를 대상으로 검색하는 객체 지향 쿼리이며 SQL을 추상화해서 특정 데이터베이스 SQL에 의존하지 않고 JPQL을 한마디로 정의하면 객체 지향 SQL
3.코멘트
상황에 따라 사용해야하는 어노테이션이 달라서 적절하게 사용해주어야 한다는점과 jpa는 간단해보이지만 내부적인 흐름을 모르면 큰일?난다는점. 항상 이야기하지만 열심히하자..(회사에서는 열심히하는 사람보다 잘하는사람이 필요하다던데)
10.4일 마무리..!
'개발 > TIL' 카테고리의 다른 글
| 10.8 dto, builder (0) | 2022.10.08 |
|---|---|
| 10.5 Entity (0) | 2022.10.05 |
| 9.30 Spring Container, DI (0) | 2022.10.01 |
| 9.29 알고리즘 (0) | 2022.09.29 |
| 9.28 클래스 (0) | 2022.09.28 |
- Total
- Today
- Yesterday
- .jks
- joinfetch
- ajax
- querydsl
- JWT토큰
- badrequest
- JPQL
- DTO
- this
- method
- wil
- DI
- EC2
- POI
- 환경세팅
- 풀텍스트
- Spring
- 항해99
- IOC
- instance
- java
- 알고리즘
- 코드해석
- 김영한
- EntitiyManagerFactory
- python
- ssl
- backoffice
- JPA
- 협업
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |