전체 글 43

Jenkins 사용기(Freestyle project)

기존에는 EC2에 git clone 받고 jar 파일을 만든 뒤 실행시키는 과정을 스크립트로 만들어 실행하는 방법으로 배포를 했다. 하지만 이번에는 Jenkins를 이용한 자동 배포를 시도했고 나름 성공적으로 끝냈기에 이 포스트를 작성한다. 큰 순서는 다음과 같다. 1. Jenkins 서버 가동 및 세팅 2. Jenkins 내 Credential 및 Git, EC2 설정 3. Freestyle project 설정 후 설정 우선 Jenkins는 배포를 위해 이용하는 EC2와 별도의 서버로 운영된다. 나는 네이버 클라우드를 사용해서 Jenkins를 구동시켰다. (현재 신규 가입 회원에게 10만 크레딧을 주는 이벤트를 진행하고 있기 때문에 부담 없이 사용할 수 있었다.) 네이버 클라우드에서 Jenkins 서버..

[스프링 부트 핵심 가이드] 13. 서비스의 인증과 권한 부여

본 게시글은 '스프링 부트 핵심 가이드' 책의 내용을 정리한 것입니다. 저자 : 장정우 출판사 : 위키북스 13.1 보안 용어 이해 13.1.1 인증 인증(Authentication) : 사용자가 누구인지 확인하는 단계 ex) 로그인 13.1.2 인가 인가(Authorization) : 인증을 통해 검증된 사용자가 애플리케이션 내부의 리소스에 접근할 때 사용자가 해당 리소스에 접근할 권리가 있는지를 확인하는 과정 13.1.3 접근 주체 접근주체(Principal) : 애플리케이션의 기능을 사용하는 주체 13.2 스프링 시큐리티 스프링 시큐리티는 애플리케이션의 인증, 인가 등의 보안 기능을 제공하는 스프링의 하위 프로젝트 중 하나이다. 13.3 스프링 시큐리티의 동작 구조 스프링 시큐리티는 서블릿 필터(S..

[스프링 부트 핵심 가이드] 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을 변경하면 같은 내용으로 같이 변..