재인
수강평 작성수
-
평균평점
-
블로그
전체 2#카테고리
- 백엔드
#태그
- 백엔드
![[2주차] 인프런 워밍업 클럽 Backend](https://cdn.inflearn.com/public/files/blogs/85d71284-9396-4518-a8d1-42c81c998112/11880cfe-ddf6-40af-99c0-f59d587c97eb.png?w=260)
2024. 10. 13.
0
[2주차] 인프런 워밍업 클럽 Backend
2주차 학습 내용 스프링 Profile서버 마다 다른 상수 값을 쓰는 방법이다. annotation 종류@Entity테이블과 매핑되는 엔티티임을 명시 @MappedSupperclass객체의 공통 매핑정보 필요 시 해당 어노테이션을 사용한 추상클래스를 만들고 상속받아서 사용한다 @Idpk임을 명시GeneratedValue : pk 생성 전략을 선택한다 @Component스프링이 처음 실행되며 컴포넌트 스캔을 진행하는데 해당 어노테이션이 사용된 것들을 찾아서 인스턴스를 만들어 준다 @PostConstruct스프링 실행되어 모든 빈들이 등록된 이후 수행되는 메서드를 위한 어노테이션 @CreatedDate현재 시간을 필드에 넣어주는 어노테이션@Column(nullable = false, updatable = false) 로 설정해준다 @UpdatedDate수정 시간을 필드에 넣어주는 어노테이션updatable 속성은 디폴트가 true이다 @OneToManyFetchType.LAZY 를 사용하는게 좋다→ Eager는 N+1문제가 생김, 성능 이슈CasecadeType.ALL영속성을 지키기 위해 싱크를 맞춰줌 미션API 문서를 Postman을 이용해 작성해 본게 처음인데, 같이 미션 하는 분들의 자료를 참고하며 진행하니 많은 도움이 되었다. 진행 중에 부딪힌 두가지 이슈가 있었다.먼저 양방향 연관관계에 대해 JPA를 사용해 개발해본 경험이 없어서 어려웠다.매핑테이블을 따로 두었기 때문에 N:M -> 1:N, M:1로 쪼개고1:N 설정 시 FK는 N쪽에 두고, FK 설정할 필드 값을 위해 ManyToOne을 사용해 1쪽에 구현했다.다만 h2에서 테이블 조회시 FK 설정이 보이지 않아, 이 부분은 추가로 확인할 예정이다.추가로 유저 테이블명을 user로 해두었는데, h2 db 2.x.x 버전에서 user 키워드가 예약어로 지정되어있어 오류가 났다.해당 부분이 예약어가 아님을 명시하는 속성을 application.yml에 추가하였다. 회고저번주 회고에 미션이나 발자국을 미리 작성해보고자 했는데, 그렇게 하지 못해서 아쉽다.끝까지 포기하지 않도록 틈틈히 스터디를 진행하고자 한다. referencehttps://mag1c.tistory.com/434https://hudi.blog/spring-data-jpa-auditing-create-update-date/https://velog.io/@jinee/TIL-Postman으로-API문서-만들기-l4k5mj31rlhttps://siyoon210.tistory.com/27https://mag1c.tistory.com/434
백엔드
・
백엔드
![[1주차] 인프런 워밍업 클럽 Backend](https://cdn.inflearn.com/public/files/blogs/8d148734-6af3-417b-ada7-ed862171a52d/11880cfe-ddf6-40af-99c0-f59d587c97eb.png?w=260)
2024. 10. 06.
0
[1주차] 인프런 워밍업 클럽 Backend
1주차 학습 내용 프레임워크 vs 라이브러리 vs APIAPI와 라이브러리의 차이는?구현로직의 유무이다.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 MapperMyBatisJdbcTemplateORMJPA (Java Persistence API)Hibernate ORM이란, 객체(Object)와 DB의 테이블을 자동으로 연결(Mapping)시켜 RDB 테이블을 객체 지향적으로 사용하게 해주는 기술이다.개발자가 직접 쿼리를 작성하지 않아 생산성이 향상되고, 구체적인 DBMS에 대한 의존성이 줄어드는 장점이 있지만불가피하게 작성해야하는 쿼리가 존재할 수 있고, 잘못 구현된 경우 속도 저하가 있을 수 있다. JPA의 영속성 컨텍스트JPA에서 어플리케이션과 DB 사이에서 엔티티를 관리하는 임시 메모리, 버퍼 같은 개념이다.1차 캐시 역할쓰기 지연 : insert/update 문을 모아뒀다가 트랜잭션이 종료될때 일괄 수행더티 체킹 : 영속성 컨텍스트 내의 데이터 변화를 감지하여 트랜잭션이 종료될때 자동으로 update 문을 수행 미션요리를 자주하기도 하고, 요새 흑백요리사도 재밌길래 레시피 공유로 주제를 선택했다. 레시피 공유 외에 어떤 기능이 유용할까 생각해보다, 가격별/재료별로 레시피를 추천해주는 기능이 있으면 좋겠다는 생각이 들었다.그래서 재료 테이블에 가격을 넣고, 레시피별로 들어가는 재료의 가격을 산정하기 위해 재료의 양을 저장할 수 있게 했다.레시피의 가격을 저장하는 방법도 있지만, 만약 사용자가 가지고 있는 재료라면 필요 금액에서 제외될 수 있도록 하기위해 따로 저장하지 않고 실시간으로 계산하려고 한다. 회고개인적으로 바쁜 일이 많아 커리큘럼에 따라 공부하지 못해서 아쉬웠다.미션도 발자국도 마감 임박시점에 진행하게되어서 다음주부턴 하루전을 목표로 진행해 보고자 한다 ! referencehttps://velog.io/@tjdud0123/API-vs-라이브러리-vs-프레임워크https://blog.doctornow.co.kr/tech/layered-architecturehttps://hoehen-flug.tistory.com/47#ORM(Object%20Relational%20Mapping)%EC%9D%B4%EB%9E%80%3F-1https://hyeonproject.medium.com/path-parameter%EC%99%80-query-parameter%EC%97%90-%EB%8C%80%ED%95%B4%EC%84%9C-%EC%83%9D%EA%B0%81%ED%95%B4%EB%B3%B4%EA%B8%B0-143660b839c9https://velog.io/@haileeyu21/Session-RESTful-API-%EB%9E%80-Path-parameters-Query-string
백엔드




