Spring Cloud로 개발하는 마이크로서비스 애플리케이션_Microservice와 Spring Cloud의 소개_1
·
공부/Spring
Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA) 소프트웨어 아키텍처 Software Architecture 발전 과정 1960 ~ 1980년대 - 메인 프레임 하드웨어 중심. 하드웨어의 사양이나 성격에 맞춰서 서비스 구축 하드웨어가 고가였기 때문에 서비스의 기능을 수정하기 어려웠음 Fragile : 깨지기 쉬운 시스템 1990 ~ 2000년대 - 분산 Robust, Distributed. 시스템이 안정화 됨 분산 덕분에 서비스의 변화가 발생하더라도 안전성있고 성능이 높은 서비스를 유지 가능 2010 ~ 현재 Resilient(탄력적), Cloud Native 시스템은 로컬 → 클라우드로 이전 확장성과 안전성이 더욱 강화. 지속적인 개선 및 변경 사항이 생겨도 시스템을 탄력적으로 운영..
RESTful Web Service 개발 - Java Persistence API 사용_3
·
공부/Spring
Spring Boot를 이용한 RESTful Web Services 개발 게시물 관리를 위한 Post Entity 추가와 초기 데이터 생성 사용자가 작성할 수 있는 게시물 관련 Entity를 만들어보자. 사용자는 여러 개의 게시글을 작성할 수 있으며, 아예 작성을 하지 않을 수도 있다. 반대로 게시글은 사용자가 없으면 생성되지 못한다. 즉 User가 필수 데이터, Post가 옵셔널 데이터라고 생각하면 된다. Post.java 생성 ... public class Post { @Id @GeneratedValue private Integer id; private String description; @ManyToOne(fetch = FetchType.LAZY) @JsonIgnore private Users us..
RESTful Web Service 개발 - Java Persistence API 사용_2
·
공부/Spring
Spring Boot를 이용한 RESTful Web Services 개발 Spring Data JPA를 이용한 Entity 설정과 초기 데이터 생성 application.yml jpa 로그를 볼 수 있도록 설정을 해주자. 난 설정되어있었다. spring: jpa: show-sql: true User.java @Entity public class User { @Id @GeneratedValue private Integer id; ... } @Entity : 이 어노테이션을 붙여주면 해당 클래스의 이름으로 클래스 필드에 있는 정보들을 기반으로 데이터베이스 테이블을 생성한다. @Id : 레코드를 구분하기 위한 기본키 설정. 여기선 id가 기본키가 된다. @GeneratedValue : 자동 생성되는 키 값이란..
RESTful Web Service 개발 - Java Persistence API 사용_1
·
공부/Spring
Spring Boot를 이용한 RESTful Web Services 개발 Java Persistence API 개요 JPA Java Persistence API의 약자 자바 ORM 기술에 대한 API 표준 명세 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스 인터페이스이기 때문에 클래스 내부에는 메서드 선언 밖에 없고 기능을 사용하려면 구현체를 만들어야한다. EntityManager를 통해 CRUD 처리 Spring Data JPA Spring Module JPA를 추상화한 Responsitory 인터페이스 제공 JPA 사용을 위한 Dependecy 추가와 설정 JPA 라이브러리 추가 build.gradle 스프링 프로젝트를 생성했을 때 dependecies에서 JPA와 h2를 추가했다면 buil..
RESTful Web Service 개발 - Spring Boot API 사용
·
공부/Spring
Spring Boot를 이용한 RESTful Web Services 개발 Level3 단계의 REST API 구현을 위한 HATEOAS 적용 HATEOAS란? Hypermedia As the Engine Of Application State의 약자 현재 리소스와 연관된(호출 가능한) 자원 상태 정보를 제공 Level 0 REST API라고는 볼 수 없고 단순히 웹이나 특정한 네트워크를 통해서 컴퓨터 자원을 의미없이 전달해주는 단계 HTTP를 사용하지만 웹의 매커니즘을 사용하진 않음 모든 요청을 단일 엔드 포인트에 보낸다. Level 1 요청이 개별 리소스와 통신 약속 리소스(ex: uri)를 확보하고 해당 리소스에 응답함 Level 2 리소스와 HTTP 요청 메서드를 사용함 일반적인 프로젝트에서 구현하는..
RESTful Web Service 개발 - RESTful Service 기능 확장
·
공부/Spring
Spring Boot를 이용한 RESTful Web Services 개발 유효성 체크를 위한 Validation API 사용 Validation API에는 두 가지 API가 존재한다. JDK에 포함된 Validation API Hibernate Validation API Hibernate는 자바에서 어플리케이션을 개발할 때 사용하는 API 자바의 객체와 데이터베이스의 엔티티를 매핑해주는 프레임워크 제공 이번 포스팅에서는 JDK에 포함된 Validation API만 사용해보자. Hibernate Validation API는 추후에 사용.. JDK에 포함된 Validation API 스프링부트 2.3 버전 이상 시에는 gradle에 validation을 따로 추가해줘야한다. build.gradle imple..
RESTful Web Service 개발 - User Service API 구현_2
·
공부/Spring
Spring Boot를 이용한 RESTful Web Services 개발 HTTP Status Code 제어 GET Method와 POST Method OK 응답 코드 구분하기 UserController.java 수정 @PostMapping("/users") public ResponseEntity createUser(@RequestBody User user) { User savedUser = service.save(user); URI location = ServletUriComponentsBuilder.fromCurrentRequest() .path("/{id}") .buildAndExpand(savedUser.getId()) // {id}에 값 지정 .toUri(); // uri 형태로 변환 retur..
RESTful Web Service 개발 - User Service API 구현_1
·
공부/Spring
Spring Boot를 이용한 RESTful Web Services 개발 User Service API 구현 User 도메인 클래스 생성 User.java 생성 (com.example.restfulwebservice) @Data @AllArgsConstructor public class User { private Integer id; private String name; //private Date joinDate; Date 클래스 미사용 private LocalDateTime joinDate; } 강의에선 joinDate의 타입을 Date로 지정하였지만 나는 LocalDateTime으로 지정했다. UserDaoService.java 생성 Dao는 DB와 관련된 코드, Service는 비즈니스 로직을 작성..
RESTful Web Service 개발 - Spring Boot로 개발하는 RESTful Service
·
공부/Spring
Spring Boot로 개발하는 RESTful Service Spring Boot 개요 Spring Boot 스프링 기반의 단독 실행 가능한 어플리케이션을 개발하기 위한 플랫폼 상용화 가능한 수준의 어플리케이션을 만들 수 있음 spring 보다 spring boot를 사용하면 최소한의 설정만으로 플랫폼과 서드 파티 라이브러리 등을 사용할 수 있음 spring boot에 Tomcat, Jett나 Undertow 웹 어플리케이션 서버가 내장되어 있어 별도로 설치하지 않아도 된다. 실행에 필요한 많은 API들이 spring boot에 'starter'라는 컴포넌트를 통해 쉽게 사용할 수 있음. 실행에 필요한 다양한 설정을 auto configuration으로 자동으로 설정할 수 있다. 상용화와 관련된 통계, ..
RESTful Web Service 개발 - WEB Service 개발 방법 SOAP과 REST의 이해
·
공부/Spring
Spring Boot를 이용한 RESTful Web Services 개발 WEB Service 개발 방법 SOAP과 REST의 이해 Web Service & Web Application Web Service World Weid Web(WWW)를 통해 이기종 간의 통신 서비스를 제공한다. 네트워크를 통해 특정한 서버의 포트를 열어 놓고, 클라이언트의 요청을 받은 HTML, JSON, XML, images 등과 같은 웹 문서를 제공한다. 웹 서비스는 WWW, Internet, HTTP의 기술을 사용하는 웹을 통해 특정한 도메인의 문제를 해결하기 위한 Web Application을 뜻하기도 한다. 즉, 네트워크 상에서 서로 다른 종류의 컴퓨터들 간에 상호작용하기 위한 소프트웨어 시스템이다. Web Servic..
[Java] 인텔리제이 자바의 정석 Properties 파일 저장하기
·
공부/Java
연관 게시글 [Java] 인텔리제이 argument로 txt 파일 읽어오기 인텔리제이 agrs로 txt 파일 읽어오기 자바의 정석 책으로 Properties 실습 하던 도중 PropertiesEx2 예제에서 txt 파일을 args를 통해 읽어오는 실습에서 콱 막히고 말았다. 인텔리제이에서 agrs 설정은 물 devhan.tistory.com 인텔리제이 자바의 정석 Properties 파일 저장하기 이전 실습은 파일 읽어오기였다면 이번 실습은 파일에 내용을 저장해보자. 이 또한 처음 설정해보는건데 그래도 파일 읽어오기 한 번 설정해봤다고 저장하는 방법은 좀 더 쉽게 설정했다. 1. 파일 생성하기 실습 코드를 보면 일반 txt 파일과 xml 파일, 총 두 개가 필요하므로 원하는 경로에 파일 두 개를 만들어준..
[Java] 인텔리제이 argument로 txt 파일 읽어오기
·
공부/Java
인텔리제이 agrs로 txt 파일 읽어오기 자바의 정석 책으로 Properties 실습 하던 도중 PropertiesEx2 예제에서 txt 파일을 args를 통해 읽어오는 실습에서 콱 막히고 말았다. 인텔리제이에서 agrs 설정은 물론 외부 txt 파일을 어떻게 읽어와야하는지 몰랐기 때문이다. 자바의 정석 책에는 인텔리제이 설정법이 나와있지 않아 여기저기 검색해보며 방법을 찾았다. 1. 텍스트 파일 만들기 윈도우면 편하게 우클릭으로 새 텍스트 파일을 생성할 수 있지만 나는 mac을 사용하기 때문에 터미널에서 텍스트 파일을 생성해주었다. (물론 그냥 인텔리제이에서 간단하게 생성해도 된다.) cd 명령어로 프로젝트 폴더로 이동한다. cat > 파일명.txt 입력 내용 입력 command + z로 빠져나오기 ..
MAC에서 CentOS 6.6 VirtualBox로 설치하기
·
공부/기타
갑자기 리눅스?! 방통대 이번 학기에 유닉스 시스템을 수강하는데 아무래도 설치하면서 직접 해보면 점수를 더 잘 받을 수 있을 거 같아서 직접 설치해보려한다! 강의에는 윈도우 환경에서 설치하는 방법 밖에 없어 직접 여기저기서 찾아보면서 설치했다. 일단 CentOS를 설치하기 전에 필요한 준비물은 VirtualBox이다. VirtualBox는 가상 머신 소프트웨어로 하나의 물리적 컴퓨터에 추가로 가상의 머신을 만들고 운영체제를 설치한다. 즉, 하나의 컴퓨터로 여러 개의 운영체제를 돌릴 수 있도록 도와주는 소프트웨어이다. 리눅스를 설치하게 되면 기존 운영체제는 '호스트 운영체제', 리눅스는 '게스트 운영체제'가 된다. 강의에서는 VirturalBox에서 설치해보니 이상현상이 발생하여 VMWare로 설치하기를 ..
Query DSL - 정렬, 페이징, 집합
·
공부/JPA
Query DSL게시글은 대부분 인프런의 김영한님의 강의인 '실전! Query DSL' 기반으로 내용을 정리했습니다. 정렬 정렬 기준은 다음과 같다. 회원 나이 내림차순(desc) 회원 이름 오름차순(asc) 단, 회원 이름이 없으면 마지막에 출력한다. @Test public void sort() { em.persist(new Member(null, 100)); em.persist(new Member("member5", 100)); em.persist(new Member("member6", 100)); List result = queryFactory .selectFrom(member) .where(member.age.eq(100)) .orderBy(member.age.desc(), member.usern..
Query DSL - 결과 조회
·
공부/JPA
Query DSL게시글은 대부분 인프런의 김영한님의 강의인 '실전! Query DSL' 기반으로 내용을 정리했습니다. 결과 조회 fetch() : List 조회, 데이터가 없으면 빈 List 반환 fetchOne() : 단 건 조회 결과가 없으면 : null 결과가 둘 이상이면 : NonUniqueResultException 발생 fetchFirst() : limit(1).fetchOne() fetchResults() : 페이징 정보 포함, total count 쿼리 추가 실행 fetchCount() : count 쿼리로 쿼리 변경해서 count 수 조회 fetchResults fetch, fetchOne, fetchFirst의 경우는 굳이 실행 안해봐도 어떻게 나오는지 알테니 fetchResults부터..