Programming
-
REST API (스프링 기반 REST API 개발 - 1)Programming/Spring 기반 REST API 2021. 1. 1. 15:48
1. REST - 시스템 제각각의 독립적인 진화를 보장하기 위한 방법 - REST API : REST 아키텍쳐 스타일을 따르는 API 2. self-descriptive messages - 메시지 스스로 메시지에 대한 설명이 가능해야 한다. - 서버가 메시지를 바꾸더라도 클라이언트는 대응 가능 (메시지에 해석하는 방법이 있기 때문에) - 확장 가능한 커뮤니케이션 -> HAL의 링크 데이터에 profile 링크를 추가 (아직 여러 브라우저들이 헤더에 추가하는 방법 이해를 잘 못함) 3. HATEOAS - 링크를 통해 애플리케이션 상태 변화가 가능해야 한다. - 링크 정보를 동적으로 바꿀 수 있다. -> HAL을 통해 링크를 정의 인프런 백기선님 '스프링 기반 REST API 개발’ 강의를 듣고 정리한 내용..
-
스프링 JPA (스프링 데이터 JPA - 7)Programming/Spring Data JPA 2021. 1. 1. 15:48
- @EnableJpaRepositories 스프링 부트를 사용하지 않을 때는 @Configuration과 같이 사용 1. 엔티티 저장하기 - save()호출되면 현재 상태에 따라 persist, merge가 호출됨 Transient상태이면 persist - (create) Detached상태이면 merge - (update, 없으면 create) - Transient인지 Detached인지 어떻게 판단? 엔티티의 @Id프로퍼티를 찾아서 null이면 Transient 상태로 판단함 - EntityManager.persist() 메소드에 넘긴 객체를 Persistent 상태로 변경 - EntityManager.merge() 메소드에 넘긴 객체의 복사본을 만들고, 그 복사본을 다시 Persistent 상태로..
-
스프링 데이터 Common - Web (스프링 데이터 JPA - 6)Programming/Spring Data JPA 2021. 1. 1. 15:47
1. 스프링 Converter - PostController.java @RestController public class PostController { @Autowired PostRepository postRepository; @GetMapping("/posts/{id}") public String getPost(@PathVariable Long id) { Optional byId = postRepository.findById(id); Post post = byId.get(); return post.getTitle(); } } @RestController public class PostController { @GetMapping("/posts/{id}") public Post getPost(@PathVa..
-
스프링 데이터 Common - 2 (스프링 데이터 JPA - 5)Programming/Spring Data JPA 2021. 1. 1. 15:47
1. 커스텀 리포지토리 만들기 - 스프링 데이터 리포지토리 인터페이스에 기능을 추가하거나 기본 기능을 덮어쓸 수 있음 1) 커스텀 리포지토리 인터페이스 정의 public interface PostCustomRepository { List findMyPost(); void delete(T post); } 2) 인터페이스 구현 클래스 만들기 (기본 접미어는 Impl) public class PostCustomRepositoryImpl implements PostCustomRepository { @Autowired EntityManager entityManager; @Override public List findMyPost() { return entityManager.createQuery("SELECT p F..
-
스프링 데이터 Common - 1 (스프링 데이터 JPA - 4)Programming/Spring Data JPA 2021. 1. 1. 15:47
1. Repository - 기본적으로 제공하는 기능 테스트 @RunWith(SpringRunner.class) @DataJpaTest class PostRepositoryTest { public static final String STRING = "31"; @Autowired PostRepository postRepository; @Test @Rollback(false) public void curdRepository() { // Given Post post = new Post(); post.setTitle("Title1"); assertThat(post.getId()).isNull(); // When Post newPost = postRepository.save(post); // Then assert..
-
JPA 프로그래밍 - 2 (스프링 데이터 JPA - 3)Programming/Spring Data JPA 2021. 1. 1. 15:46
1. Entity 상태 - Transient : JPA가 모르는 상태 - Persistent : JPA가 관리중인 상태 (1차 캐시, Dirty Checking, Write Behind, ...) - save - Detached : JPA가 더이상 관리하지 않는 상태 - return 한 경우 - Removed : JPA가 관리하긴 하지만 삭제하기로 한 상태 save()를 호출한다고 바로 DB에 반영되는 것이 아님, JPA가 판단하여 DB에 반영 2. Cascade 엔티티의 상태 변화를 전파 시키는 옵션 Parent - Child 구조를 만들고 양방향 관계를 만듬 - Post.java cascade를 통해 상태 변화시 저장된 Comment에게 전파하겠다는 설정을 함 @Entity public class P..
-
JPA 프로그래밍 - 1 (스프링 데이터 JPA - 2)Programming/Spring Data JPA 2020. 4. 30. 19:03
1. 개요 (기본) - 의존성 추가 (spring data JPA와 관련된 빈들이 모두 등록됨) org.springframework.boot spring-boot-starter-data-jpa - application.properties 추가 spring.datasource.url=jdbc:postgresql://localhost:5432/springdata spring.datasource.username=hongchan spring.datasource.password=pass spring.jpa.hibernate.ddl-auto=create //update, validate // 개발할 때는 create, 이후에는 validate 사용을 권장! // update는 스키마 수정 시 지저분해질 수 있는 우..
-
관계형 데이터베이스와 ORM (스프링 데이터 JPA - 1)Programming/Spring Data JPA 2020. 4. 30. 18:26
1. JDBC - 관계형 데이터베이스와 자바의 연결 고리 - 기본적으로 자바 안에 들어있어서, 각 디비에 맞는 드라이버만 추가하면 됨 - 아래는 postgreSQL 드라이버를 의존성에 추가한 부분 org.postgresql postgresql 42.2.10 - 도커를 사용하여 디비 실행 (스프링 부트 포스팅 참고) - URL 정보, 인증 정보가 필요함 public class Application { public static void main(String[] args) throws SQLException { String url = "jdbc:postgresql://localhost:5432/springdata"; String username = "hongchan"; String password = "pas..