개발 지식 기록 40

[스프링 부트 핵심 가이드] 12. 서버 간 통신

본 게시글은 '스프링 부트 핵심 가이드' 책의 내용을 정리한 것입니다. 저자 : 장정우 출판사 : 위키북스 최근 마이크로서비스 아키텍처(MSA)의 사용이 많아지고 있다. MSA는 애플리케이션이 가지고 있는 기능(서비스)이 하나의 비즈니스 범위만 가지는 형태이다. 각 애플리케이션은 자신이 가진 기능을 API로 외부에 노출하고, 다른 서버가 그러한 API를 호출해서 사용할 수 있게 구성되므로 각 서버가 다른 서버의 클라이언트가 되는 경우도 많다. RestTemplate과 WebClient는 다른 서버로 웹 요청을 보내고 응답을 받을 수 있게 도와준다. 12.1 RestTemplate이란? RestTemplate은 스프링에서 HTTP 통신 기능을 손쉽게 사용하도록 설계된 템플릿이다. 이를 통해 RESTful ..

[스프링 부트 핵심 가이드] 11. 액추에이터 활용하기

본 게시글은 '스프링 부트 핵심 가이드' 책의 내용을 정리한 것입니다. 저자 : 장정우 출판사 : 위키북스 스프링 부트 액추에이터는 HTTP 엔드포인트나 JMX(Java Management Extensions, 실행 중인 애플리케이션의 상태를 모니터링하고 설정을 변경할 수 있게 해주는 API)를 활용해 애플리케이션을 모니터링하고 관리할 수 있는 기능을 제공한다. 11.1 프로젝트 생성 및 액추에이터 종속성 추가 책에서 실습을 위해 구성한 프로젝트 설정은 다음과 같다. groupId : com.springboot artifactId : actuator name : actuator Developer Tools : Spring Configuration Processor Web : Spring Web + Swa..

[스프링 부트 핵심 가이드] 10. 유효성 검사와 예외 처리

본 게시글은 '스프링 부트 핵심 가이드' 책의 내용을 정리한 것입니다. 저자 : 장정우 출판사 : 위키북스 10.1 일반적인 애플리케이션 유효성 검사의 문제점 검증 로직이 각 클래스별로 분산돼 있어 관리가 어렵다. 검증 로직에 중복이 많아 여러 곳에 유사한 기능의 코드가 존재할 수 있다. 검증해야 할 값이 많다면 검증하는 코드가 길어진다. 이러한 문제로 코드가 복잡해지고 가독성이 떨어지게 된다. 이러한 문제 해결을 위해 자바 진영에서는 Bean Validation이라는 데이터 유효성 검사 프레임워크를 제공한다. 유효성 검사를 위한 로직을 DTO 같은 도메인 모델과 묶어서 각 계층에서 사용하면서 검증 자체를 도메인 모델에 얹는 방식으로 수행한다. 또한 어노테이션을 사용한 검증이기에 코드의 간결함도 유지할 ..

[스프링 부트 핵심 가이드] 09. 연관관계 매핑

본 게시글은 '스프링 부트 핵심 가이드' 책의 내용을 정리한 것입니다. 저자 : 장정우 출판사 : 위키북스 9.1 연관관계 매핑 종류와 방향 연관관계 매핑 종류 One To One : 일대일(1:1) One To Many : 일대다(1:N) Many To One : 다대일(N:1) Many To Many :다대다(N:M) 데이터베이스에서는 두 테이블의 연관관계를 설정하면 외래키를 통해 서로 조인해서 참조하는 구조로 생성되지만 JPA는 엔티티 간 참조 방향을 설정할 수 있다. 단방향 : 두 엔티티의 관계에서 한쪽의 엔티티만 참조하는 형식 양방향 : 두 엔티티의 관계에서 각 엔티티가 서로의 엔티티를 참조하는 형식 연관관계가 설정되면 한 테이블에서 다른 테이블의 기본값을 외래키로 갖게 된다. 외래키를 가진 테..

[스프링 부트 핵심 가이드] 08. Spring Data JPA 활용

본 게시글은 '스프링 부트 핵심 가이드' 책의 내용을 정리한 것입니다. 저자 : 장정우 출판사 : 위키북스 8.1 프로젝트 생성 책에서 실습을 위해 구성한 프로젝트 설정은 다음과 같다. groupId : com.springboot artifactId : advanced_jpa name : advanced_jpa Developer Tools : Lombok, Spring Configuration Processor Web : Spring Web SQL : Spring Data JPA, MariaDB Driver + 6장에서 작성한 자바 파일들 8.2 JPQL JPA에서 사용할 수 잇는 쿼리를 의미한다. 테이블이나 칼럼의 이름을 사용하는 SQL과 달리 JPQL은 매핑된 엔티티의 이름과 필드를 사용한다는 것이 ..

[스프링 부트 핵심 가이드] 06. 데이터 베이스 연동

본 게시글은 '스프링 부트 핵심 가이드' 책의 내용을 정리한 것입니다. 저자 : 장정우 출판사 : 위키북스 6.1 MariaDB 설치 이 책은 MariaDB를 사용하여 실습한다. 설치 부분은 필요한 부분만 언급하고 넘어가려 한다. ※ 책에서 설치한 MariaDB 설치 환경 MariaDB server Version : MariaDB Server 10.6.5 Operation System : Windows Architecture : x86_64 Package Type : MSI Package ※ 실무에서는 보안상 root 패스워드를 사용하지 않지만, 실습용이기에 root 계정을 사용함 ※ [Use UTF8 as default server's character set] 체크!! 문자 인코딩 방식을 UTF-8을..

[스프링 부트 핵심 가이드] 05. API를 작성하는 다양한 방법

본 게시글은 '스프링 부트 핵심 가이드' 책의 내용을 정리한 것입니다. 저자 : 장정우 출판사 : 위키북스 5.1 프로젝트 설정 이번 장에서 실습할 프로젝트는 groupId는 'com.springboot'로 설정하고 name과 artifactId는 'api'로 설정 컨트롤러 패키지를 만든 후 다음과 같이 컨트롤러 클래스를 작성한 후 그 안에 메서드를 작성한다. @RestController @RequestMapping("/api/v1/put-api") public class XXClass{ } //XX대신 실습할 HTTP 방식을 넣자 5.2 GET API 만들기 GET API는 웹 애플리케이션 서버에서 값을 가져올 때 사용하는 API이다. 5.2.1 @RequestMapping으로 구현하기 @Request..

[스프링 부트 핵심 가이드] 04. 스프링 부트 애플리케이션 개발하기

본 게시글은 '스프링 부트 핵심 가이드' 책의 내용을 정리한 것입니다. 저자 : 장정우 출판사 : 위키북스 4.1 프로젝트 생성 4.1.1 인텔리제이 IDEA에서 프로젝트 생성하기 ▶ [New Project] 클릭 ▶ [Spring Initailizr] 선택 후 설정 Name : 프로젝트의 이름을 설정 Location : 프로젝트를 생성할 위치를 설정 Language : JVM 상에서 동작하는 언어를 선택 Type : 빌드 툴을 선택. Groovy와 Kotlin은 gradle script를 작성할 때 어떤 언어를 사용할지의 차이 Group : 이 프로젝트를 정의하는 고유한 식별자 정보인 그룹을 설정 Artifact : 세부 프로젝트를 식별하는 정보를 기입. 보통 Name을 변경하면 같은 내용으로 같이 변..

[스프링 부트 핵심 가이드] 03. 개발 환경 구성

본 게시글은 '스프링 부트 핵심 가이드' 책의 내용을 정리한 것입니다. 저자 : 장정우 출판사 : 위키북스 책에서 구성한 개발 환경 Windows 10 64-bit 인텔리제이(IntelliJ) Ultimate JDK 11(1.8 버전 이상) 스프링 부트 2.5.6~2.5.8 MariaDB 10.6.5 메이븐(Maven) 이번 글에서는 전체 설치 과정을 다 적지 않고 JDK 환경변수 설정하는 부분과 인텔리제이 설치 시 옵션 선택하는 부분에 대해서만 작성한다. 자바 JDK 설치 시 환경변수 설정 JDK를 다운 받으면 환경변수를 추가해야 한다. (.msi파일로 자바를 설치하면 자동으로 환경변수에 추가된다고 한다.) 환경변수를 추가하기 위해서 우선 [제어판] → [시스템 및 보안] → [시스템] 으로 이동한다...

[스프링 부트 핵심 가이드] 02. 개발에 앞서 알면 좋은 기초 지식

본 게시글은 '스프링 부트 핵심 가이드' 책의 내용을 정리한 것입니다. 저자 : 장정우 출판사 : 위키북스 2.1 서버 간 통신 애플리케이션 하나에 여러 기능을 넣어 개발하지 않고, 애플리케이션을 기능별로 나눠서 개발하는데 이를 '마이크로서비스 아키텍쳐(MSA; Microservice Architecture)'라고 한다. 이렇게 기능별로 구분해서 독립적인 애플리케이션을 개발하게 되면 각 서비스 간에 서로 통신해야 하는 경우가 발생한다. 이러한 통신을 '서버 간 통신' 이라고 한다. 서버 간 통신은 한 서버가 다른 서버에 통신을 요청하는 것을 의미하고, 한 대는 서버, 다른 한 대는 클라이언트가 되는 구조이다. 다양한 통신 방식이 존재하지만 가장 많이 사용되는 방식은 HTTP/HTTPS 방식이다. 2.2 ..