분류 전체보기

    [NEXTSTEP] 세 번째, 네 번째 과제를 마무리 하면서 + 후기

    들어가며이번 글에서는 세 번째 미션인 로또 과제, 네 번째 미션인 수강신청을 구현하면서 배웠던 점에 대해 정리하고 후기를 작성하고자 합니다.Cyclic Dependency가 발생하지 않도록 하자1. Cylic Dependency란?Cyclic Dependency는 두 개 이상의 모듈 또는 클래스가 서로에게 의존할 때 발생합니다.의존성은 여러 수준에서 나타날 수 있으며 서로 다른 2개의 클래스가 서로의 import문을 추가했다면 Cyclic Dependency가 발생했다고 볼 수 있습니다.이러한 Cyclic Dependcy는 모놀리식에서 MSA로 분리할 때 애플리케이션 복잡도 증가로 인해 분리가 안 되는 어려움, 순환 참조 문제 등 많은 문제들을 야기합니다.2. Cyclic Dependency가 발생한 예..

    [NEXTSTEP] 두 번째 미션을 마무리 하면서

    들어가며 이번 글에서는 두 번째 미션인 로또 과제를 진행하면서 배웠던 점과 아쉬웠던 점에 대해서 정리하고자 합니다. 배운 점 인스턴스 필드가 3개일 때부터는 리팩터링 해라 연관성이 있는 새로운 클래스로 만드는 것을 고려하기 변수가 3개일 때부터는 별도의 도메인으로 분리해 볼 필요가 있는 객체일 수 있으니 클래스 분리를 고려해봐야 합니다. 정말 필요한 변수인지 고민하고 필요 없다면 제거하는 걸 고민해 볼 것을 추천합니다. 유효성 검사는 생성자에서 하자 개발자마다 유효성 검사를 하는 방법은 다양합니다. ValidatorUtils를 사용해서 구현을 하는 방법이라든가 아니라면 if문으로 유효성을 검사를 하는 방법이라든가.. 하지만 객체가 생성전에 객체가 생성될 수 있는 유효성 검사를 하는 것이 가장 좋은 방법일..

    [NEXTSTEP] 첫 번째 미션을 마무리 하면서

    들어가며 이번 글에서는 자동차 경주 과제를 진행하면서 배웠던점과 느낀 점들에 대해서 정리하고자 합니다. 배운 점 먼저 도메인을 설계하자 Inside-out 방식으로 구현하는 것이 중요합니다. 즉, 1:N 관계일 때 N인 객체를 먼저 테스트하는 것이 TDD 하기에 적합합니다. 테스트가 어려운 메서드는 구조 설계에서 제일 하단으로 옮기자 public class RandomNumberGenerator { private Random random; public RandomNumberGenerator() { this.random = new Random(); } public int generateRandomNumber(int min, int max) { return random.nextInt(max - min + 1..

    [NEXTSTEP] TDD, 클린코드 with Java 18기 시작 (첫 번째 후기)

    들어가며얼마 전부터 NEXT-STEP 교육 기관에서 “TDD, 클린 코드 with Java 18기” 교육 코스를 밟아 나가고 있습니다.해당 교육이 좋다는 평가가 많아 교육을 들을지 말지 고민하는 사람들에게 도움이 될 수 있을 거 같아 제 경험을 포스팅해서 올려봅니다.NEXT-STEP이란?우아한 형제들의 채용과정인 우아한 테크, 우아한 캠프 관련 교육을 주력으로 진행하는 교육 기관이었던거 같습니다.그러던 중 교육 대상을 위부 IT인력으로 확장해서 교육을 진행하고 있습니다.많은 실무자들을 위한 교육이 있는데 교육에 대한 평이 좋아 예전부터 관심이 있었는데 고민을 하다가 이번 기회에 교육을 신청하게 되었습니다.TDD, 클린 코드 with Java 18기저는 TDD 강의를 신청했습니다. 평소에 테스트 코드를 작..

    2023년 회고

    미루기올 한 해 가장 반성해야 할 일은 미루는 습관입니다.(이번 회고도 미루고 미루다 쓰는 회고이니까요 ㅋㅋㅋㅋ…)변명을 하자면 항상 하고 싶은 것이 많아 우선순위를 세우다 보니 그런 거 같습니다.항상 욕심이 많아 목표치를 크게 세우는 것 같은데, 24년도에는 내가 할 수 있는 범위 내에서 목표를 세우는 습관을 가져보려고 합니다.이를 통해 지속적인 성취감을 달성하여 성장하는 데 원동력으로 삼아 보겠습니다.취업졸업을 21년도 3월에 하고 21년도 12월부터 22년도 3월까지 인턴, 이후 22년도 6월에 취업을 했습니다.그토록 원하던 분야의 주니어 개발자가 되었지만 생각보다 해야 할 업무들이 많아 기쁨을 즐길 틈은 없었습니다.현재 E커머스 결제 도메인을 담당하고 있는데 신기하고 재밌는 일도 많았지만 그만큼 ..

    카프카 스키마 레지스트리

    개요스키마의 개념과 유용성카프카와 스키마 레지스트리스키마 레지스트리의 장점스키마 레지스트리 호환성BACKWARD 호환성FORWARD 호환성FULL 호환성정리개요스키마란 정보를 구성하고 해석하는 것을 도와주는 프레임워크나 개념을 의미합니다. 스키마란 개념을 처음 입문하게 되는 계기는 보통 DB를 학습하면서 입니다. DB를 학습하면서 스키마란 데이터베이스의 구조를 정의하고 전반적인 명세와 제약 조건을 기술하는 언어라고 학습하게 됩니다.카프카에서도 스키마란 개념을 활용하여 토픽으로 전송되는 메시지에 대해 미리 스키마를 정의하여 전송함으로서 DB에서 스키마를 활용한 방법과 동일한 효과를 얻을 수 있습니다.카프카에서는 스키마를 활용하기 위해서 스키마 레지스트리라는 개념이 필요합니다. 따라서 이번 글에서는 스키마 ..

    컨슈머의 내부 동작 원리(컨슈머 오프셋, 그룹코디네이터, 스태틱 맴버십,파티션 할당 전략)

    개요컨슈머 오프셋 관리그룹 코디네이터스태틱 멤버십컨슈머 파티션 할당 전략레인지 파티션 할당 전략라운드 로빈 파티션 할당 전략스티키 파티션 할당 전략협력적 스티키 파티션 할당 전략정확히 한 번 컨슈머 동작개요이번 글에서는 카프카의 컨슈머에 대한 동작 원리와 컨슈머 오프셋, 컨슈머들의 파티션 할당 정책과 프로듀서의 정확히 한 번 전송과 결합해 트랜잭션 컨슈머의 내부 동작에 대해서 글을 작성하도록 해보겠습니다.컨슈머 오프셋 관리컨슈머의 동작 중 가장 핵심은 오프셋 관리입니다.컨슈머의 오프셋의 역할은 메시지의 위치를 나타내는것입니다. 이러한 오프셋이 중요한 이유는 컨슈머가 일시적으로 동작을 멈추고 재시작 하는 경우에 새로운 컨슈머가 기존 컨슈머의 역할을 대신하는 경우에 기존 컨슈머의 마지막 메시지 위치부터 새로..

    프로듀서의 내부 동작 원리(파티셔너, 배치)

    파티셔너파티셔너의 라운드 로빈 전략라운드 로빈 전략의 단점을 극복하기 위한 스티키 파티셔닝 전략프로듀서의 배치메시지 전송 방식 정책적어도 한 번 전송(무슨 일이 있어도 적어도 한 번은 전송한다.)최대 한 번 전송(무슨 일이 있어도 한 번만 전송한다.)중복 없이 전송정확히 한 번 전송전송 정책 한 눈에 비교하기 파티셔너프로듀서는 데이터를 전송할 때 send() 메소드를 수행함으로써 프로듀서 → 시리얼 라이저 → 파티셔너를 거쳐 카프 카프카의 Topic으로 전송됩니다.이때 복수개의 Topic중 어떤 Topic으로 메시지 를 전송할 지를 결정해야 하는데 이때 사용하는 것이 파티셔너입니다.파티셔너는 예상치 못한 많은 양의 메시지가 카프카로 들어오는 경우 파티션을 늘릴 수 있는 기능을 제공합니다. 그러나 이러한 ..

    카프카의 내부 동작 원리(리플리케이션,리더, 팔로워, 리더에포크, 컨트롤러,로그)

    카프카 리플리케이션리플리케이션 동작 개요리더와 팔로워복제 유지와 커밋리더와 팔로워의 단계별 리플리케이션 동작리더에포크와 복구컨트롤러컨트롤러의 중요성컨트롤러의 리더 선출 과정로그(세그먼트)로그 세그먼트 삭제로그 세그먼트 컴팩션카프카 리플리케이션고가용성 분산 스트리밍 플랫폼인 카프카는 무수히 많은 데이터 파이프라인중에 정중앙에 위치하는 메인 허브 역할을 합니다.메인 허브 역할을 하는 카프카가 다운되거나 문제가 발생할 경우 정상적으로 동작하지 못한다면 심각한 문제가 발생하게 됩니다.이러한 문제점을 해결할 수 있도록 카프카는 초기 설계 때부터 일시적으로 브로커에서 장애가 발생해도 안정적으로 운영될 수 있도록 리플리케이션을 수행하게 됩니다.이번글에서는 리플리케이션에 대해 살펴보며 추가적으로 리더, 팔로워의 역할과..

    카프카 기본 개념과 구조

    개요이번 글에서는 카프카의 기본 개념과 구조에 대해 포스팅할 계획입니다.카프카의 처리량을 높이기 위해 설계된 분산 시스템, 페이지 캐시, 배치 전송 등에 대해서 살펴보겠습니다.카프카의 기초 용어와 개념용어 정리주키퍼(Zookeeper): 아파치 프로젝트 애플리케이션을 호칭하는 용어. 카프카의 메타데이터 관리 및 브로커의 헬스케어를 담당합니다.카프카(Kafka): 아파치 프로젝트 애플리케이션 이름을 의미합니다.카프카 클러스터(Kafka Cluster): 카프카가 설치된 여러 대의 브로커를 구성하면 카프카 클러스터라고 호칭합니다.브로커(Broker): 카프카 애플리케이션이 설치된 서버 또는 노드를 의미합니다.프로듀서(Producer): 카프카로 메시지를 보내는 역할을하는 클라이언트를 의미합니다.컨슈머(Con..

    카프카의 특징과 장점

    카프카의 특징높은 처리량http 기반으로 이벤트를 ㄹ전달하지만 응답시간은 한 자리수 밀리초로 처리할 만큼 빠르다.순서 보장이벤트 처리 순서가 보장되므로 엔터티 간의 유효성 검사나 동시 수정 같은 무수한 복잡성들이 제거되어 구조가 간결하다.적어도 한 번 전송 방식카프카는 멱등성을 유지한다.이로인해 프토듀서가 같은 데이터를 재손하도 데이터의 변화가 일어나지 않다.전송방식중에 ‘적어도 한 번’이라는 방식이 존재한다. 따라서 이벤트가 중복 발생할 수 있으나 누락 없는 전송이 가능하다.강력한 파티셔닝논리적으로 토픽을 여러 개로 나눌 수 있다.다른 파티션들과의 의존성 없이 처리가 가능하므로 수평적인 확장이 가능하다.자연스러운 백 프레셔 핸들링카프카는 Pull 방식으로 동작한다. Pull 방식의 장점은 자기 자신의 ..

    CHAPTER 13.실전 디자인 패턴

    이번 글에서는해당 챕터에서는 실제 디자인 패턴을 적용하는 방법에 대해서 학습합니다.패턴 카탈로그에 대해 학습한뒤 가장 훌륭한 패턴 카탈로그 저서인 GoF 디자인 패턴의 서술 방식을 살펴봅니다.디자인 패턴에서 사용되는 전문 용어를 살펴봅니다.디자인 패턴을 분류하는 방법들에 대해서 학습합니다.안티 패턴에 대해서 알아봅니다.패턴 카탈로그(GoF 템플릿) 살펴보기패턴 카탈로그는 아래와 같이 이루어져 있습니다.title(제목)Intent(용도)Motivation(동기)Applicablity(적용 대상)Strcture(구조)Participants(구성 요소)Collaboartions(협동)Consequences(결과)Implementation/SampleCode(구현 및 샘플 코드)Know Uses(사용 예)Rel..

    CHAPTER 12.복합 패턴

    복합 패턴이란?문제를 해결하기 위해 개발할 때는 효율적인 코드를 작성하기 위해 디자인 패턴을 고민하고 적용합니다.이때 하나의 디자인 패턴만을 사용하지 않고 여러 패턴을 복합적으로 사용하여 문제에 대한 해결을 시도 하는 것을 복합 패턴이라고 합니다. 복합 패턴 적용하기전략 패턴에서 사용했던 오리 예제를 다시 한 번 사용하여 예제를 진행하겠습니다.이전에는 오리 문제를 전략패턴만 사용해서 적용했지만 이번에는 새로운 문제를 예제 중간에 지속적으로 제안하고 문제 해결을 위한 디자인 패턴을 적용하도록 해보겠습니다.public interface Quackable { public void quack(); }오리가 소리를 내는 행동을 정의하는 Quackable 인터페이스입니다.public class MallardDuck..

    CHAPTER 11.프록시 패턴

    프록시 패턴이란?프록시 패턴의 특정 객체로의 접근을 제어하는 대리인을 제공하는 디자인패턴입니다.프록시 패턴을 사용하면 생성하기 힘든 객체 또는 보안이 중요한 객체와 같이 접근을 제어하는 대리인 객체를 만들 수 있습니다.프록시 패턴을 사용하게 되면 가상 프록시를 사용해서 생성하기 힘든 자원으로의 접근을 제어할 수 있으며 보호 프록시를 사용해서 접근 권한이 필요한 자원의 접근을 제어할 수 있습니다.프록시 패턴의 종류1. 원격 프록시원격 프록시는 원격 개체의 로컬 대변자 역할을 수행하는것을 의미합니다.로컬 대변자란 어떤 메소드를 호출하면 다른 원격 객체에게 그 메소드 호출을 전달해주는 객체를 로컬 대변자라고 합니다.클라이언트 객체는 원격 객체가 가지고 있는 메소드를 호출 하는것처럼 행동합니다. 하지만 실제로로..

    CHAPTER 10.상태 패턴

    상태 패턴 이해를 위한 간단한 문제 제안어릴때 문방구에서 위와 같은 뽑기 기계를 보신 경험이 있을것입니다.뽑기 기계를 만드는 CEO가 작은 컴퓨터 칩을 넣을건데 작은 칩에서 뽑기 기계가 동작할 수 있는 SW시스템을 구성하고 싶다고 의뢰가 들어왔습니다.CEO는 위의 그림과 같은 플로우로 SW를 만들어달라고 요청했습니다.상태를 확인해보면 아래 처럼 4가지의 상태로 구분할 수 있습니다.public class GumballMachine { final static int SOLD_OUT = 0; //알맹이 품절 final static int NO_QUARTER = 1; //동전미 보유 상태 final static int HAS_QUARTER = 2; //동전 보유 상태 final static int SOLD = ..

    CHAPTER 09.반복자 패턴과 컴포지트 패턴

    반복자 패턴 이해를 위한 간단한 문제 제안PancakeHouseMenu라는 식당과 DinerMenu라는 식당이 있습니다. 두 식당은 별개의 식당입니다.우연히 두 식당은 식당을 합치기로 했고 이 과정에서 서로 메뉴를 수정하기 싫어하는 신경전이 펼쳐지게 됩니다. 메뉴 수정이 다른 이유는 아래처럼 PancakeHouseMenu식당과 DinerMenu 식당의 구현 방법이 다르기 때문입니다.public class PancakeHouseMenu implements Menu { ArrayList menuItems; // DinerMenu와 달리 PancakeHouseMenu는 배열을 통해 메뉴를 구현 public PancakeHouseMenu() { menuItems = new ArrayList(); addItem(..

    CHAPTER 08.템플릿 메소드 패턴

    템플릿 메소드 패턴 이해를 위한 간단한 문제 제안우리는 개발을 하다보면 비슷한 메소드에 비슷한 로직을 작성할 때가 있습니다.특히 아래와 같은 상황은 개발자들에게 최적화에 대한 욕망과 갈증을 뿜뿜하게 됩니다.스타버즈 커피 만드는 법물을 끓인다.끓는 물에 커피를 우려낸다.커피를 컵에 따른다.설탕과 우유를 추가한다.스타버즈 홍차 만드는 법물을 끓인다.끓는 물에 찻잎를 우려낸다.홍차를 컵에 따른다.레몬을 추가한다. 두 개의 레시피를 살펴보면 재료만 다르지 행동은 비슷한다는걸 알 수 있습니다.따라서 위의 레시피를 문맥 그대로 코드로 녹여낼 경우 반복적인 코드가 탄생할 것입니다.템플릿 메소드 패턴은 예시처럼 비슷한 로직을 템플릿화 하여 코드의 퀄리티를 높여주는 디자인 패턴입니다. 템플릿 메소드 패턴을 적용해보기위 ..

    CHAPTER 07.어댑터 패턴과 퍼사드 패턴

    어댑터 패턴 이해를 위한 간단한 문제 제안해외 직구를 통해 전자 제품을 구매했다고 가정하겠습니다.각 나라별로 사용되는 어뎁터 소켓이 다르기 때문에 변환기가 필요할 것입니다.일본은 110V를 사용하고 우리나라는 220V를 사용하는것이 예시가 될 수 있습니다.객체지향 코드에서도 위와 같은 비슷한 문제가 발생할 때가 있습니다.객체 인터페이스가 달라서 사용하지 못하는 경우가 예시가 될 수 있습니다.오리 인터페이스에 비슷한 칠면조 객체를 동작하도록 하고 싶은 문제 상황이라 가정해보겠습니다.이럴 경우 어댑터 패턴을 사용해 어떻게 해결하는지 살펴보겠습니다.어댑터 패턴을 사용하여 문제 해결해보기public interface Duck { public void quack(); public void fly(); }먼저 오리..

    CHAPTER 06.커멘드 패턴

    커멘드 패턴 이해를 위한 간단한 문제 제안필자는 고객의 요구사항에 의해서 만능 IOT 리모컨을 만들려고 합니다.리모컨에는 아래와 같은 방식으로 만들려고 해요!그림을 보면 7개의 기능들이 각 슬롯마다 매핑되어야 하는것을 알 수 있습니다.문제는 각 기능들의 공통된 인터페이스가 없다라는 상황입니다.예를 들어 ON의 첫 번째 버튼은 TV의 관련 기능이고 두 번째는 선풍기 전원이라고 가정하겠습니다.TV의 기능 ON에는 TV가 켜진순간 볼륨도 켜져야하고 채널의 최초 번호수도 결정되어야 합니다.선풍기는 ON 되는 순간 방향의 세기가 결정되어야 합니다.이처럼 공통 인터페이스가 없는 경우 위의 사진처럼 여러 클래스가 난잡해지는 문제가 발생합니다.하물며 고객은 나중에 다른 제품이 추가될 수 있게 확장성 있는 개발을 원합니..

    CHAPTER 05.싱글톤 패턴

    1.싱글톤 패턴이란싱글톤 패턴은 클래스 인스턴스를 하나만 만들고, 하나만 만든 인스턴스로의 전역 접근을 제공하는 패턴입니다.싱글톤 패턴 구현public class Singleton { private static Singleton uniqueInstance; // other useful instance variables here private Singleton() {} public static Singleton getInstance() { if (uniqueInstance == null) { uniqueInstance = new Singleton(); } return uniqueInstance; } // other useful methods here }코드를 살펴보겠습니다.먼저 Singleton 클래스의 ..

    CHAPTER 04.팩토리 패턴

    팩토리 패턴 이해를 위한 간단한 문제 제안피자를 만드는 아래와 같은 코드가 있다고 가정해보겠습니다.public class PizzaStore { public Pizza orderPizza(String type) { Pizza pizza; if (type.equals("cheese")) { pizza = new CheesePizza(); } else if (type.equals("pepperoni")) { pizza = new PepperoniPizza(); } else if (type.equals("clam")) { pizza = new ClamPizza(); } else if (type.equals("veggie")) { pizza = new VeggiePizza(); } pizza.prepare();..

    CHAPTER 03.데코레이터 패턴

    데코레이터 패턴 이해를 위한 간단한 문제 제안 2022년 스타버즈 커피는 커피 브랜드를 대표하는 브랜드로 성장해있습니다. 1971년 스타버즈는 지금처럼 회사가 커질줄 몰랐고 메뉴도 지금처럼 많지 않았습니다. 사업을 시작할 무렵에는 아래와 같은 설계 구조로 이뤄져 있습니다. Beverage는 음료를 나타내는 추상클래스입니다. 매장에서 판매되는 모든 음료는 이 클래스의 서브클래스가 됩니다. Beverage의 cost()메소드는 추상 메소드입니다. 서브클레스에서는 이 메소드를 구현해야합니다. Beverage의 description이라는 인스턴스변수는 각 서브클래스에서 설정되며 커피에 대한 설명 정보가 문자열로 저장됩니다. description이라는 변수 정보는 getDescription() 메소드를 통해 정보..

    CHAPTER 02.옵저버 패턴

    옵저버 패턴 이해를 위한 간단한 문제 제안 독자에게 기상 조건인 온도, 습도, 기압 3가지의 변화를 감지하는 시스템을 만들라는 요구사항이 들어옵니다. 위의 3가지 항목들은 실시간으로 갱신되야 합니다. 디스플레이를 손쉽게 추가할 수 있어야 합니다.이 기기는 다른 추가사항 또한 바로 넣을 수 있도록 확장 가능해야 합니다. 요구 사항을 좀 더 자세히 설명해보겠습니다. 저희들이 구현해야하는 것은 WeatherData 객체입니다. 가상 스테이션은 습도, 온도, 기압 센서로부터 데이터를 받습니다. 이때 변경되는 데이터는 실시간으로 받기 때문에 WeatherData객체는 실시간으로 데이터를 변경해줘야합니다. WeatherData객체는 가상 스테이션과 통신해서 기상 데이터를 가져옵니다. WeatherData객체는 디스..

    CHAPTER 01.디자인 패턴 소개와 전략 패턴

    전략 패턴 이해를 위한 간단한 문제 제안 전략패턴을 이해하기 위해 간단한 문제를 먼저 제시해보도록 하겟습니다. “SIMUDuck”이라는 오리 게임을 만들기 위해 오리라는 객체를 정의하고 오리를 상속받아 도메인에 맞는 오리를 생성하는 설계 구조입니다. 이런 설계 상황에서 기획자의 요구에 의해 Duck이라는 객체에 Fly()라는 메소드를 추가 받아야 하는 요구사항이 들어온것입니다. 개발자는 상속을 사용하여 구현한 상태에서 모든 오리는 날수 있다고 생각하여 Fly()라는 메소드를 추가하게 됩니다. 근데 이런 상황에서 만약 모형 오리라는 클래스를 추가하게 되면 날지 못하는 오리들도 날게 되는 기이한? 오류가 발생하게 됩니다. 이처럼 전략패턴은 상속에 대한 부정적인 관점으로 인터페이스 기반 설계와 구현을 지향합니..

    CHATER 00.이 책을 읽는 방법

    이 책을 읽는 이유와 포스팅 하는 이유 이 책은 디자인 패턴에 대해 설명하는 책들입니다. 개인적으로 많은 멘토분들과 동료들이 이 책을 읽으라고 추천을 해주셨습니다. 이 카테고리의 포스팅된 글들은 제가 까먹고 기억하기 위해서 작성하는 목적도 가지고 있지만 구글링을 통해 들어와서 정보를 빠르게 필요로 하신 분들을 위해서이기도 합니다. 이 책의 저자는 에릭 프리먼과 엘리자베스 롭슨입니다. 에릭 프리먼은 월트 디즈니 온라인 CTO를 역임하고 현재는 WickedlySmart에서 책과 동영상 콘텐츠를 창작하는 일을 하는 프로입니다. 또한 헤드 퍼스트 시리즈를 만든 사람 중 한명입니다. 엘리자베스 롭슨은 소프트웨어 엔지니어 저자로서 WickedlySmart의 공동창업자로 예일대학교에서부터 기술적인 분야에 열정을 품고..

    컨테이너 기반(Docker) MySQL 서버 InteliJ 연동 오류 처리

    InteliJ IDE에서 DB 연동 중 아래와 같은 오류가 발생했다. The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server 당시 나의 오류 환경 SpringBatch 테스트를 위한 DB가 필요한 상황이었다. 당시 오류 환경은 아래와 같았다. Local에서 MySQL을 설치한 상태였다. (외부 접근 Port번호 3306 사용중) 컨테이너 Server(MySQL)를 동작시킨 상황이었다.(외부 접근 Port번호 3307:3307) 사용 위의 사진처럼 Port번호를 3307로 설정해도 접근이 안되는 문제가 발생했다. 처음 연동시에는 도커의..

    Spring의 API 예외 처리

    개요 이전 글에서 오류와 예외처리에 대한 설명을 진행했다. https://hyeophyeop.tistory.com/150 이전 글은 BaseController에 대한 설명이었으며 개발자는 편하게 error 페이지를 관리할 수 있다는것이 핵심이었다. 하지만 API의 예외 처리는 다르다. HTML 페이지는 4xx, 5xx 오류 페이지만 있으면 대부분의 오류 문제를 해결할 수 있으나 API는 그렇지 않다. 왜냐하면 API는 각 서버와 연동을 하기 때문에 오류 응답 스펙이 다향하며 JSON 데이터로 응답을해줘야 하기 때문이다. 이 글에서는 복잡한 API 예외 처리를 효율적으로 처리하기 위한 ExceptionResolver에 대햇 설명하며 해당 내부기술이 어떻게 동작하는지와 사용법에 대해 설명한다. Spring의..

    Spring Batch란?

    1.개요(Spring Batch는 왜 등장했는가) 자바 기반의 표준 배치 기술이 존재하지 않기 때문에 등장했다. 자바에는 Network, TCP, UDP, Thread 등 개발에 필요한 기본 기술들이 JSP(Java Specification Request)에 명시되어있다. 하지만 배치와 관련된 기술은 JSR에 명시되어있지 않고 이것이 Spring Batch의 등장 배경이 되었다. 그렇기 때문에 재사용 가능한 자바 기반 배치 아키텍쳐가 필요하게 되었다. 그렇기에 Spring Batch가 등장하였다. Spring Batch는 SpringSource(현재는 Privotal)와 Accenture(경영 컨설팅기업) 두 기업의 합작품이다. Accenture-배치 아키텍쳐를 구현하면서 쌓은 기술적 경험 노하우를 보유..

    Spring의 예외처리와 오류페이지

    예외 처리랑 오류 페이지를 만드는 작업을 왜 해야 하나요? 웹 사이트 이용시 비정상적인 접근을 할 경우 서버에서 오류 페이지를 반환받은 경험이 있을것이다. 위와 같은 상황에서 개발자는 사용자에게 정상적인 요청이 이루어지지 않은 이유를 알려줘야 할 필요가 있다. Spring은 이러한 오류처리를 편리하게 제공한다. 이 글에서는 Spring의 예외 처리와 오류페이지에 대해 설명하며 이러한 동작을 할 때 내부원리의 동작과정에 대해서 설명한다. 스프링의 예외처리는 어떻게 진행되나요? 스프링은 ErrorPage를 자동으로 등록한다. src/main/resources/error 경로의 HTML 파일을 오류 반환 HTML로 설정한다. 파일 이름을 오류 번호대로 해야한다. ex:)300.html, 3xx.html, 40..

    Spring의 필터와 인터셉터

    필터와 인터셉터란? 인증과 보안이 필요한 사이트에서 해당 서비스를 사용할 수 없어야한다. 스프링에서는 인터셉터와 필터를 통하여 검증로직을 작성할 수 있다. 필터는 서블릿 자체의 기술이며 스프링이 서블릿 기반의 기술이기 때문에 필터를 사용할 수 있는것이다. 인터셉터는 스프링 자체의 기술이다. 즉 스프링은 서블릿 기반의 기술이므로 검증을 할 수 있는 수단이 2가지가 있는것이다. 필터와 인터셉터의 흐름 필터와 인터셉터의 전체적인 흐름은 아래와 같다. HTTP요청 -> WAS -> Filter -> Servlet -> Intercepter -> Controller 필터는 서블릿에 도달되기전에 검증로직을 수행한다. 인터셉트는 컨트롤러에 도달하기전에 검증로직을 수행한다. 필터는 아래와 같은 인터페이스를 통해서 구현..