[1주차] 인프런 워밍업 클럽 Backend
1주차 학습 내용
프레임워크 vs 라이브러리 vs API
API와 라이브러리의 차이는?
구현로직의 유무이다.
API는 호출을 위한 수단으로 구현 로직을 알 수 없다
라이브러리는 구현 로직이 존재한다
예를 들어 라이브러리를 통해 빵을 만들 수 있다면 API는 빵을 만들어 달라! 라고 요청하는 것이다
라이브러리와 프레임워크의 차이는?
응용프로그램의 흐름 주도권을 누가 가지고 있는지이다.
라이브러리는 개발자가 흐름 주도권을 가지고 라이브러리를 호출한다.
하지만 프레임워크의 경우 프레임워크가 흐름 주도권을 가지며 프레임워크의 규칙을 따라 개발해야한다.
MVC 패턴
소프트웨어 아키텍쳐 디자인 패턴의 한 종류이다.
궁극적으로는 사용자 인터페이스로부터 비즈니스 로직을 분리함으로써 MVC 간의 결합도를 낮추며 유지보수를 용이하게 하기 위함이다.
레이어드 아키텍쳐 (Controller-Service-Repository)
실무에서 위와 같은 MVC 패턴으로 개발하다 보면 여러문제에 부딪힌다고 한다.
따라서 좀 더 세분화된 소프트웨어 아키텍처인 레이어드 아키텍처를 주로 사용한다.
HTTP & REST API
클라이언트에서 서버로 데이터를 전달하는 방법은 3가지 이다
Query parameter, HTTP Request Body, Path variable
왼쪽이 Query parameter, 오른쪽이 Path variable을 사용한 방법이다
필수로 요구되는 값과 관련있을때는 Path variable을, 옵션일 경우엔 Query parameter 를 사용하는게 좋겠다.
ORM (Object Relational Mapping)
데이터들이 프로그램이 종료되어도 사라지지 않고 어떤 곳에 저장되는 개념을 영속성(Persistence)라고 한다.
이를 위해 Java에서 지원해주는 JDBC가 있지만, 이는 개발자가 하나하나 매핑해주어야하는 번거로움이 있다.
이를 해소하고자 아래와 같은 Persistence Framework 가 존재한다.
SQL Mapper
MyBatis
JdbcTemplate
ORM
JPA (Java Persistence API)
Hibernate
ORM이란, 객체(Object)와 DB의 테이블을 자동으로 연결(Mapping)시켜 RDB 테이블을 객체 지향적으로 사용하게 해주는 기술이다.
개발자가 직접 쿼리를 작성하지 않아 생산성이 향상되고, 구체적인 DBMS에 대한 의존성이 줄어드는 장점이 있지만
불가피하게 작성해야하는 쿼리가 존재할 수 있고, 잘못 구현된 경우 속도 저하가 있을 수 있다.
JPA의 영속성 컨텍스트
JPA에서 어플리케이션과 DB 사이에서 엔티티를 관리하는 임시 메모리, 버퍼 같은 개념이다.
1차 캐시 역할
쓰기 지연 : insert/update 문을 모아뒀다가 트랜잭션이 종료될때 일괄 수행
더티 체킹 : 영속성 컨텍스트 내의 데이터 변화를 감지하여 트랜잭션이 종료될때 자동으로 update 문을 수행
미션
요리를 자주하기도 하고, 요새 흑백요리사도 재밌길래 레시피 공유로 주제를 선택했다.
레시피 공유 외에 어떤 기능이 유용할까 생각해보다, 가격별/재료별로 레시피를 추천해주는 기능이 있으면 좋겠다는 생각이 들었다.
그래서 재료 테이블에 가격을 넣고, 레시피별로 들어가는 재료의 가격을 산정하기 위해 재료의 양을 저장할 수 있게 했다.
레시피의 가격을 저장하는 방법도 있지만, 만약 사용자가 가지고 있는 재료라면 필요 금액에서 제외될 수 있도록 하기위해 따로 저장하지 않고 실시간으로 계산하려고 한다.
회고
개인적으로 바쁜 일이 많아 커리큘럼에 따라 공부하지 못해서 아쉬웠다.
미션도 발자국도 마감 임박시점에 진행하게되어서 다음주부턴 하루전을 목표로 진행해 보고자 한다 !
reference
https://velog.io/@tjdud0123/API-vs-라이브러리-vs-프레임워크
https://blog.doctornow.co.kr/tech/layered-architecture
https://hoehen-flug.tistory.com/47#ORM(Object%20Relational%20Mapping)%EC%9D%B4%EB%9E%80%3F-1
https://velog.io/@haileeyu21/Session-RESTful-API-%EB%9E%80-Path-parameters-Query-string
댓글을 작성해보세요.