👩🏻‍💻 Programming/SpringBoot 40

Spring과 비동기 처리

동기와 비동기의 차이 먼저 동기와 비동기의 차이를 간단히 이해하자. 동기는 직렬형 작업 처리 모델이다. 작업은 순차적으로 시행되며 하나의 작업이 끝나기까지 다음 작업은 대기하게 된다. 예를 들어 DB에 SQL문을 날려서 데이터를 받아올 때, 데이터를 받아오기까지 다른 작업들은 수행되지 않는다. 비동기는 병렬형 작업 처리 모델입니다. 작업이 종료되지 않은 상태라도 대기하지 않고 다음 작업을 수행한다. 예를 들어 JavaScript의 DOM 이벤트와 타이머 함수, Ajax 요청은 비동기 처리 모델로 동작한다. 디테일한 설명은 이 글을 참고하면 확인할 수 있다. 동기(Syncronous)와 비동기(Asynchronous) 처리, 그리고 Callback 동기(Syncronous)와 비동기(Asynchronous..

Spring과 Filter - Interceptor (2)

이 글은 Spring과 Filter - Interceptor(1)과 이어진다. Spring과 Filter - Interceptor (1) Filter - Interceptor, 쉽게 이해해보자 웹을 개발하다보면 공통적으로 처리해야 할 업무들이 많다. 예를 들어 로그인 관련(세션) 처리, 권한 체크, PC와 모바일 웹의 분기 처리, 페이지 인코딩 등등이 astrid-dm.tistory.com 개념을 좀 더 쉽게 이해해보자 요청에 대한 작업 전 / 후에서 가로챈다고 보면 된다. 필터는 스프링 컨텍스트 외부에 존재하며 스프링과 무관한 자원에 대해 동작한다. 하지만 인터셉터는 스프링의 DispatcherServlet이 컨트롤러를 호출하기 전 / 후로 끼어들기 때문에 스프링 Context 내부에서 Controll..

SpringBoo와 Filter, 그리고 Interceptor (1)

쉽게 이해해보자 - Filter - Interceptor - AOP 웹을 개발하다보면 공통적으로 처리해야 할 업무들이 많다. 예를 들어 로그인 관련(세션) 처리, 권한 체크, PC와 모바일 웹의 분기 처리, 페이지 인코딩 등등이 있다. 이러한 공통 업무들은 하나의 페이지가 아니라 여러 페이지에 공통적으로 적용된다. 공통 업무들의 코드를 모든 페이지에 적용한다면 중복 코드가 많아지게 되고 프로젝트 단위가 커질수록 서버에 부하를 줄 수 있으며, 소스 관리조차 어려워지게 된다. 때문에 공통 코드 부분은 따로 빼서 관리하는 것이 좋다. 이러한 공통 업무를 프로그램 흐름의 앞, 중간, 뒤에 추가해서 자동으로 처리할 수 있는 방법이 크게 3가지가 있다. Filter Interceptor AOP 위 3가지는 각각 다..

Spring Boot와 Validation (1)

Validation이란? 데이터가 부정확(불완전)한지 확인하기 위해서 사용되는 처리이다. 예를들어 Java에서 null값에 대해서 접근하려고 할 때 null pointer exception이 발생 함으로, 이러한 부분을 방지하기 위해 미리 검증하는 과정을 Validation이라고 한다. 단순하게 아래와 같은 코드들도 Validation이라고 할 수 있다. public void run(String account, String pw){ if(account==null||pw==null) return; } 하지만 이렇게 if-else문으로 검증을 하다가는 반복되는 부분이 많아지며, 따로 메소드를 빼더라도 반복문이 많아지는 것은 변함이 없다. SpringBoot에서는 Annotation을 기반으로 Validati..

AOP (Aspect Oriented Programming)

AOP란? Aspect Oriented Programming의 약자로, 관점지향 프로그래밍이라고 불린다. 여러 객체에 공통으로 적용할 수 있는 기능을 구분함으로써 재사용을 높여주는 프로그래밍 기법이다. AOP는 핵심 기능과 공통 기능의 구현을 분리함으로써 핵심 기능을 구현한 코드의 수정 없이 공통 기능을 적용할 수 있게 만들어준다. 다시 말해 핵심 기능의 코드를 수정하지 않으면서 공통 기능의 구현을 추가하는 것이 AOP이다. * 횡단관심 : 로깅, 보안, 트랜젝션 등 다수의 모듈에서 반복적으로 나타나는 부분 예를 들어 C사는 JSON 규격으로 통신을 하는데, A사와 B사는 UTF-8규격을 맞추지 못한다고 가정해보자. 이럴경우 A사와 B사에 C사의 코드를 그대로 적용하면 한글이 깨져서 나올것이다. 이를 해..

IoC(제어의 역전)와 DI(의존성 주입)

핵심 키워드 IoC는 Inversion of Control. 즉, 제어의 역전이라는 뜻이다. DI는 Dependency Injection, 즉, 의존성 주입이라는 뜻이다. 분리해서 이해해도 무방하지만, IoC와 DI모두 비슷한 의미를 가지고있어서 IoC 컨테이너 또는 DI 컨테이너라고 불린다. 요즘은 의존관계 주입에 초점을 맞추어 주로 DI 컨테이너라고 불린다. 둘의 공통적인 핵심 역할은 클라이언트의 코드 변경 없이도 기능이 확장이 가능하다는 특징이 있다. 이 둘을 이해하기 위해서는 아래 키워드들을 순차적으로 이해해야한다. Spring Container : 개발자가 작성한 코드를 스스로 참조한 뒤 알아서 객체의 생성과 소멸을 컨트롤 해줌 Bean : 스프링 컨테이너에서 관리되는 객체 DI : 외부에서 객..

SpringBoot의 Object Mapper

Object Mapper란? Object Mapper는 데이터의 형식을 변환해준다. Java에서는 보통 Jackson databind를 통해 테이터의 형식을 변환해준다. SpringBoot에서 ObjectMapper는 아래 예시와 같이 데이터의 형식을 변환해준다. Text(Json) -> Object Object -> Text(Json) 예를들어 아래와 같이 Controller내부에서 Object를 Json으로 바꿀 수 있다. @PostMapping("/json") public User json(@RequestBody User user){ return user; } /* 이때 Text타입은 API Platform에서 'Json'으로 지정해준다. */ 위 코드는 아래의 과정을 거쳐 Object를 Json으..

GET과 Query Parameter, POST와 Databody

GET과 POST의 차이 의미 CRUD * 멱등성 안정성 * Path Variable * Query Parameter Databody GET 리소스 취득 R O O O O X POST 리소스 생성, 추가 C X X O △ O * 멱등성 : 연산을 여러번 적용하더라도 결과가 달라지지 않음 * Query Parameter : 데이터를 처리하기위해 넘겨주는 여러가지 매개변수이며, 항상 ?가 붙음 [예시 - 아이디가 123인 user의 데이터를 가져온다] /users?id=123 * Path Variable : 데이터를 처리하기위해 URL / URI 경로에 변수를 넣어줌 [예시 - 아이디가 123인 사용자를 가져온다] /users/123 위 표를 해설하자면 아래와 같다. GET 요청 데이터를 읽어들이므로 R(R..

POJO(Plain Old Java Object)와 POJO Framework

POJO란? 순수한 자바 오브젝트를 말한다. 즉, 외부의 종속성이 없는 단순한 자바 객체를 말한다.디자인패턴에 지대한 영향을 준 마틴 파울러는 단순 자바 객체를 쓰라는 말이 폼나지 않는 다는 반응을 들었다. 적당히 'POJO'라 명명하고 POJO를 사용하라 했더니 반응이 좋아서 해당 개념이 굳혀지게 되었다. 예를들어 아래와 같이 Getter, Setter로 구성된 가장 순수한 형태의 기본 클래스를 POJO라고 할 수 있다.public class Book { private String title; private String author; public Book() {} public Book(String title, String author) { this.title = title; this.author ..