목록전체 글 (79)
conPig.md
1. Spring Cloud Config란?MSA에서는 서비스가 많아질수록 설정 파일도 함께 늘어난다. 데이터베이스 주소, API 키, 포트 번호처럼 공통으로 사용하는 설정이 여러 서비스에 흩어져 있다면 관리가 어려워지고 변경 실수도 발생하기 쉽다. Spring Cloud Config는 이러한 문제를 해결해 주는 분산 시스템 환경에서 중앙 집중식 구성 관리를 제공하는 프레임워크다. 모든 서비스의 설정을 한 곳(Config 서버)에서 중앙 관리하고, 각 서비스는 시작할 때 Config 서버에서 자신의 설정을 받아온다. 2. Spring Cloud Config 특징설정을 중앙에서 관리환경(dev, test, prod)별 설정 분리Git 또는 파일 시스템을 이용한 설정 저장실행 중인 서비스의 설정 갱신 지원실..
1. MSA에서의 보안모놀리식 애플리케이션은 하나의 서버 안에서 로그인과 인증을 처리하면 된다. 하지만 MSA는 서비스가 여러 개로 분리되어 각각 독립적으로 실행된다. 이때 모든 서비스가 각각 JWT를 검증한다면 다음과 같은 문제가 생긴다.인증 코드 중복JWT 검증 방식이 바뀌면 모든 서비스를 수정해야 함인증 정책을 일관되게 유지하기 어려움그래서 대부분의 MSA에서는 API Gateway를 인증의 관문으로 사용한다. 모든 요청이 거쳐가는 관문에서 토큰을 검증하면, 뒤에 있는 상품/주문 서비스는 인증 로직을 신경 쓰지 않아도 된다. 2. OAuth2란?OAuth2는 토큰을 어떻게 발급할 것인지를 정의한 표준 프로토콜이다. 클라이언트 애플리케이션이 리소스 소유자의 권한을 위임받아 보호된 리소스에 접근할 수..
내 컴퓨터에서는 잘 돌아가는데 서버에서는 안 되는 문제, 개발자라면 한 번쯤 겪는다. 개발 PC에서는 정상적으로 실행되던 프로그램이 테스트 서버나 운영 서버에서는 라이브러리 버전, 운영체제, 실행 환경이 달라 오류가 발생하는 경우가 많다. Docker는 이러한 환경 차이 문제를 해결하기 위해 등장했다. Docker를 사용하면 애플리케이션뿐만 아니라 실행에 필요한 환경까지 하나의 패키지로 묶을 수 있다. 따라서 개발자의 PC, 테스트 서버, 운영 서버 어디에서 실행하든 동일한 환경을 만들 수 있다. 1. Docker란?Docker는 애플리케이션을 컨테이너(Container)라는 독립된 실행 환경으로 패키징하고 실행할 수 있도록 해 주는 컨테이너 플랫폼이다. 애플리케이션을 실행하려면 애플리케이션 코드, 실행..
1. API Gateway API Gateway는 클라이언트와 여러 마이크로서비스 사이의 단일 진입점(Single Entry Point)이다.클라이언트의 요청을 받아 적절한 서비스로 전달하는 Reverse Proxy 역할을 하며, 여러 서비스에서 공통으로 필요한 기능도 함께 처리한다.주요 기능은 다음과 같다.라우팅(Routing): 요청을 적절한 서비스로 전달인증·권한 부여(Authentication / Authorization): JWT 등으로 사용자 인증 및 권한 검증로드 밸런싱(Load Balancing): 여러 서비스 인스턴스에 요청을 분산모니터링·로깅(Monitoring / Logging): 요청·응답 기록과 메트릭 수집요청·응답 변환(Request / Response Transformatio..
MSA에서는 하나의 기능을 여러 서비스가 나누어 담당하기 때문에 서비스 간 호출이 자연스럽게 발생한다. 이 과정에서 다음과 같은 문제가 생기기도 한다.호출하려는 서비스는 어디에 있는가?같은 서비스를 실행하는 여러 인스턴스 중 요청은 어디로 보내야 하는가?호출 대상 서비스에 장애가 발생하면 어떻게 대응해야 하는가?Spring Cloud는 이러한 문제를 해결하기 위해 서비스 디스커버리(Eureka), 로드 밸런싱(FeignClient + Ribbon), 서킷 브레이커(Resilience4j) 등의 기능을 제공한다. 1. 서비스 디스커버리 MSA에서는 서비스 인스턴스가 동적으로 늘어나거나 줄어들고, 컨테이너나 클라우드 환경에서는 서비스가 재배포될 때 IP 주소와 포트가 변경되기도 한다.이러한 환경에서 호출하는..
1. 개발에서 중요한 것은 기능오리엔테이션에서 가장 인상 깊었던 내용은 프레임워크보다 기능 자체를 이해하는 것이 중요하다는 점이었다.Spring Boot로 애플리케이션을 만들더라도 같은 기능은 Node.js, Django, FastAPI 등 다른 프레임워크로도 구현할 수 있다. 중요한 것은 특정 기술을 사용하는 것 자체가 아니라, 어떤 문제를 해결하고 어떤 기능을 제공할 수 있는가다. 예를 들어 비밀번호 암호화나 목록 조회의 페이징처럼 반드시 필요한 기능은 어떤 프레임워크를 사용하더라도 구현해야 한다. 구현 방식은 달라질 수 있지만, 개발자는 요구사항을 이해하고 적절한 기술을 선택해 기능을 완성할 수 있어야 한다. 2. MSA란?MSA(Microservice Architecture)는 하나의 애플리케이션..
로깅, 실행 시간 측정, 보안 검사처럼 여러 기능에 공통으로 들어가는 코드가 있다. 이걸 각 메서드마다 복붙하면 코드가 중복되고, 나중에 고칠 때 모든 메서드를 다 찾아 수정해야 한다. AOP(Aspect Oriented Programming, 관점 지향 프로그래밍)는 이러한 공통 기능(부가기능)을 한 곳으로 모아 관리하는 방법이다.1. AOP의 핵심 아이디어애플리케이션의 코드는 크게 두 종류로 나눌 수 있다.핵심기능(Core Concern): 상품 등록, 폴더 조회처럼 비즈니스 본연의 로직부가기능(Cross-cutting Concern): 로깅, 실행 시간 측정처럼 여러 핵심기능에 걸쳐 반복되는 로직AOP는 부가기능을 별도의 클래스로 분리하고 어디에 적용할지만 지정한다. 그러면 Spring이 지정한 위..
1. 왜 테스트가 필요할까?버그는 늦게 발견할수록 수정 비용이 기하급수적으로 커진다.발견 시점상황개발 중수정이 가장 쉬움QA 테스트관련 기능까지 다시 확인해야 함실서비스(Production)사용자 피해 + 긴급 배포 필요 즉 버그를 빨리 발견할수록 비용과 시간을 크게 절약할 수 있다.보통 개발 과정은 다음과 같은 순서로 진행된다.Develompment → Unit Test → QA Testing → Production 단위 테스트를 작성하면 QA 단계나 운영 환경까지 가지 않고도 문제를 미리 발견할 수 있다. 2. 단위 테스트(Unit Test)단위 테스트는 프로그램을 가장 작은 단위(Unit)로 나누어 각각이 정상 동작하는지 검증하는 테스트다.예를 들면 이런 것들이 있다.로그인 비밀번호 검증회원가입 이..
1. 스프링(Spring Data) 페이징 기능- Spring Data CommonsPageable: 페이지 번호, 페이지 크기, 정렬 정보를 담는 인터페이스PageRequest: Pageable의 구현체 (실제로 이걸 생성해서 씀)Page: 조회 결과 + 전체 개수, 전체 페이지 수 등 메타 정보를 담는 인터페이스Slice: Page보다 가벼운 버전 (전체 개수 카운트 안 함, 다음 페이지가 있는지만 확인)사용 예시public interface MemberRepository extends JpaRepository { Page findByName(String name, Pageable pageable);}Pageable pageable = PageRequest.of(0, 10, Sort.by("id..
1. @Scheduled 기본 사용법@Slf4j(topic = "Scheduler")@Component@RequiredArgsConstructorpublic class Scheduler { @Scheduled(cron = "0 0 1 * * *") // 매일 새벽 1시 public void updatePrice() throws InterruptedException { // 실행할 작업 }}@Component로 등록해서 스프링이 빈으로 관리하게 해야 스케줄러가 동작한다.스케줄링 기능을 켜려면 메인 클래스나 설정 클래스에 @EnableScheduling을 붙여야 한다. 까먹지 말기! 2. cron 표현식 - 6자리 (초 분 시 일 월 요일)스프링의 cron은 유닉스 cron과 달..