[SpringBoot] MSA 구조 구현에 필요한 기술들
·
SpringBoot
모놀리식 구조로 구현한 SpringBoot 프로젝트를 MSA 구조로 리팩토링하게 되었다. 그 과정에서 어떤 기술들이 필요했는지에 작성해보겠다.MSA란?`Microservices Architecture`의 약자로, 마이크로서비스 아키텍처를 의미한다.  이는 소프트웨어 개발에서 시스템을 여러 개의 독립적인 서비스들로 구성하는 접근 방식을 말한다. 각 서비스는 특정한 기능을 수행하며, 서로 독립적으로 배포, 확장 및 관리될 수 있다. MSA의 특징1. 독립적인 배포: 각 서비스는 독립적으로 배포될 수 있으며, 이는 시스템의 다른 부분에 영향을 미치지 않고도 개별 서비스를 업데이트하거나 확장할 수 있게 한다. 2. 독립적인 확장: 특정 서비스에 대한 수요가 증가하면, 해당 서비스만 확장할 수 있어 리소스를 효율..
[SpringBoot] AWS EC2, Nginx를 사용한 SpringBoot 서버 리버스 프록시 설정
·
SpringBoot
이번에는 Nginx를 사용해서 간단하게 배포한 스프링부트 서버의 리버스 프록시 설정을 해보겠다. AWS EC2 프리티어 인스턴스 두 개를 사용해서 실습하였다. 스프링부트는 ubuntu 인스턴스, Nginx는 Amazon Linux 인스턴스이다. 먼저 Nginx에 대해 알아보도록 하자.Nginx란?Nginx는 높은 동시 접속 처리에 특화된 비동기 이벤트 기반 구조의 웹 서버 소프트웨어다.  처음에는 웹 서버로 개발되었지만, 이후에는 리버스 프록시, 메일 프록시, 범용 TCP/UDP 프록시 등으로 활용될 수 있게 확장되었다. Nginx는 동시 접속 처리 성능이 뛰어나며, 다양한 모듈을 통해 기능을 확장할 수 있다.  또한, Apache 웹 서버와 같이 널리 사용되며, 특히 동적 콘텐츠가 적고, 정적 콘텐츠의..
[SpringBoot] CoolSMS를 통해 프로젝트에 휴대폰 인증 기능 구현[2]
·
SpringBoot
Redis휴대폰번호로 도착한 인증번호를 잠시 저장할 공간이 필요하지만 MySQL과 MariaDB와 같은 RDBMS를 사용하는 것은 비효율적이라 생각했다.  그래서 방법을 찾아보던 중, Redis에 대해 알게 되었다. `Redis`는 고성능의 키-값 저장소로 사용되는 오픈 소스 인메모리 데이터 구조 서버다.  Redis는 Remote Dictionary Server의 약자로, 주로 빠른 데이터 접근 속도와 높은 처리량이 필요한 응용 프로그램에서 사용된다. Redis의 특징1. `인메모리 데이터 저장` : Redis는 모든 데이터를 메모리에 저장하고, 필요에 따라 디스크에 백업한다. 이로 인해 매우 빠른 데이터 접근이 가능하다. 2. `다양한 데이터 구조` : Redis는 문자열, 리스트, 셋, 해시, 정렬..
[SpringBoot] CoolSMS를 통해 프로젝트에 휴대폰 인증 기능 구현[1]
·
SpringBoot
프로젝트에 무분별한 회원가입을 방지하기 위해 휴대폰 인증 기능을 도입하게 되었다. `CoolSms`라는 문자발송대행 서비스를 찾아 구현하게 되었다. https://coolsms.co.kr/ 세상에서 가장 안정적이고 빠른 메시지 발송 플랫폼 - 쿨에스엠에스손쉬운 결제 전용계좌, 신용카드, 계좌이체 등 국내 결제 뿐만 아니라 해용신용카드로 한번의 카드번호 등록으로 자동충전까지 지원합니다. 전용계좌, 신용카드, 계좌이체 등 다양한 결제 방식coolsms.co.kr준비회원가입 후, API Key 관리로 들어가 새로운 API KEY를 발급받는다.build.gradle 의존성 추가implementation 'net.nurigo:sdk:4.3.0'application.properties 설정 추가coolsms.api..
[SpringBoot] AWS EC2, Jenkins를 사용해 깃허브 웹훅 연결하기
·
SpringBoot
저번 게시글에서 ec2 linux 인스턴스에서 젠킨스를 설치하는 것까지 해보았다.  이번에는 깃허브 웹훅과 젠킨스를 연결해볼 것이다.  추후 CI/CD 구현을 할 때 필요하다.  흐름도는 다음과 같다.1. 코드 변경사항을 레포지토리에 커밋하면 깃허브 웹훅이 젠킨스에 신호를 보낸다.  2. 신호를 받은 젠킨스는 파이프라인 빌드를 시작한다.젠킨스를 설치하지 않았다면 이전 게시글을 보고오면 된다.https://l0o0lv.tistory.com/53 [SpringBoot] AWS EC2 Amazon Linux 인스턴스에 젠킨스 설치하기AWS EC2에 젠킨스를 설치해보겠다.설치 과정과 설치 중 발생한 오류 해결에 대한 글이다.(Windows 환경, Amazon Linux 인스턴스 사용)AWS EC2 인스턴스 생성..
[SpringBoot] AWS EC2 Amazon Linux 인스턴스에 젠킨스 설치하기
·
SpringBoot
AWS EC2에 젠킨스를 설치해보겠다.설치 과정과 설치 중 발생한 오류 해결에 대한 글이다.(Windows 환경, Amazon Linux 인스턴스 사용)AWS EC2 인스턴스 생성보안 그룹보안 그룹을 먼저 생성해보자.AWS EC2 대시보드의 네트워크 및 보안 - 보안그룹으로 가서 보안그룹 생성을 눌러준다.  이름을 설정해주고, 인바운드 규칙을 다음과 같이 설정해준다.  그 후 인스턴스 생성 시 기존 보안그룹 선택 - 만들어둔 보안 그룹을 선택해주면 된다.  이제 본격적으로 인스턴스를 생성해보자.인스턴스 생성AWS EC2 대시보드에서 인스턴스 시작 버튼을 눌러주자. region은 서울로 변경해주었다.이름, AMI 설정인스턴스의 이름과 Amazon Machine Image를 선택해준다.  나는 Amazon ..
[SpringBoot] CloudType으로 간단하게 SpringBoot 서버 배포하기
·
SpringBoot
`2024/11/12 현재 프리티어로 CloudType 배포 시 하루에 한 번 무조건 서버가 종료되도록 바뀌었습니다!! 이 점 유의해주세요.` 프로젝트를 하면서 내가 짠 코드를 프론트와 통합하게 되었다. 나는 내 로컬 주소가 프론트에서 접속이 될 거라 생각했고 그 주소로 통신을 시도했다. 하지만 로컬 주소는 특별한 설정이나 터널링 같은 방법을 사용해야 외부에서 내 주소로 접속을 할 수 있다. 그래서 프론트에서 내 로컬로 접속을 시도했을 때 에러가 떴다. 막막하던 와중 클라우드 컴퓨팅 에 대해 알게 되었고, AWS와 네이버 클라우드 플랫폼을 찾을 수 있었다. 그런데 클라우드 서비스를 처음 접해본지라 진입장벽이 높아 서버를 배포하는데 어려움이 있었다. 그러다 주위에서 간단하게 배포할 수 있는 CloudTyp..
[Spring Boot] WebSocket을 활용한 실시간 쪽지 기능 구현(2)
·
SpringBoot
저번 게시글에서 WebSocketConfig, WebSocketHandler를 구성했다. 이제 쪽지 기능을 구현해보겠다.구현UserEntitypackage com.example.SignServer.Entity;import com.example.SignServer.Dto.UserDto;import lombok.*;@Entity(name = "user")@NoArgsConstructor@AllArgsConstructor@ToString@Getter@Setter@Builderpublic class UserEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) // 회원번호 자동생성 private Long id; //회원번호 pr..
[Spring Boot] WebSocket을 활용한 실시간 쪽지 기능 구현(1)
·
SpringBoot
현재 진행중인 캡스톤 프로젝트에서 웹소켓을 활용해서 실시간 쪽지 기능을 구현하고자 하였다.  실시간 채팅과 쪽지 둘 중 고민하였으나 프로젝트의 컨셉에 실시간 쪽지가 맞다고 생각하였다. 이제 웹소켓을 사용해서 쪽지 기능을 구현하면서 고민했던 것들을 기록해보겠다.웹소켓이란 무엇인가?`웹소켓(WebSocket)`은 인터넷에서 실시간으로 양방향 통신을 가능하게 하는 기술이다. 일반적인 HTTP 프로토콜은 클라이언트에서 서버로 요청을 보내고, 서버가 그 요청에 응답하는 '요청-응답' 방식이다. 하지만 웹소켓은 서버와 클라이언트 간에 지속적인 연결이 유지되어 양방향으로 데이터를 주고받을 수 있다. 지속적인 연결이 포인트다. 웹소켓을 사용하면 서버 역시 클라이언트에게 실시간 정보를 푸시할 수 있으며, 채팅 애플리케이..
[Spring Boot] DB 데이터가 생성될 때 칼럼의 초깃값 설정
·
SpringBoot
투표 커뮤니티 개발 중 유저 회원가입 시 값을 입력하지 않고 초깃값을 설정해야 하는 컬럼이 존재했다.  그래서 `@ColumnDefault`로 초깃값 설정을 하려 했지만 데이터 삽입시 null 값으로 입력되는 문제가 발생했다.  이에 대한 해결과정을 써보겠다. @ColumnDefaultJPA 엔티티의 필드에 대한 기본값을 설정하는데 사용된다.  이 어노테이션은 테이블 스키마 생성 시, 해당 필드에 대한 DDL(Data Definition Language)을 생성하는데 영향을 미친다. 이 어노테이션을 사용하면 특정 필드가 null인 경우에 데이터베이스에 기본값을 할당할 수 있다. 이는 엔티티가 처음 저장되는 시점에만 적용되며, 이후 엔티티가 수정되는 경우에는 적용되지 않는다.하지만 나의 경우 ColumnD..