스터디 노트
-
REST API의 개념과 설계 방법스터디 노트 2023. 10. 24. 11:40
REST는 Representational State Transfer의 약자로 HTTP 프로토콜을 이용하며 별도의 Transport 전송 계층 없이 간편하게 데이터를 주고 받을 수 있는 인터페이스 규약입니다. HTTP 프로토콜의 간결한 기능들과 범용적으로 사용되고 있는 현 상황 덕분에 굉장히 자연스럽게 패러다임으로 자리잡았습니다. 그렇다보니 많은 서비스에서 REST를 활용한 REST API를 사용하고, 이러한 REST 환경에서의 아키텍쳐 설계를 RESTful이라고 부르며 이젠 없어서는 안될 존재가 되었습니다. REST API의 구성요소는 다음과 같습니다. - 리소스(Resource) : 리소스는 HTTP URI로 표현을 합니다. - 행위(Verb) 리소스에 대한 행위는 HTTP 메소드로 표현합니다. - 표..
-
Spring MVC Component의 동작구조(그림주의)스터디 노트 2023. 10. 23. 13:25
안녕하세요. 오늘은 웹 개발의 기본 중의 기본인 Spring MVC 컴포넌트의 동작 구조에 대해 간략하게 설명을 해볼까 합니다. 우선 스프링 프레임워크는 제공되는 컴포넌트들이 매우 긴밀하게 연관이 되어 있습니다. 이들 컴포넌트는 HandlerMapping, HandlerAdapter, ModelAndView, ViewResolver, DispatchServlet이 그것입니다. 다음은 해당 컴포넌트들의 동작 구조에 대한 설명입니다. 참고로 첨부된 그림은 제 손으로 그린 그림이다보니, 육안으로 구별이 많이 힘드실 수도 있습니다.. 1. 클라이언트에서 전송된 모든 HTTP 요청 메시지는 가장 먼저 DispatcherServelet이 받아 처리합니다. 2. DispatcherServlet은 요청 메시지의 요청 ..
-
HTTP Status Code스터디 노트 2023. 10. 20. 15:17
HTTP 프로토콜을 사용하다 보면 응답 메시지를 활용하게 되는데, 거기에는 HTTP 프로토콜의 버전과 상태 코드등이 포함되어 있습니다. 여기서 HTTP Status Code는 해당 Request에 대한 Response의 상태값을 말합니다. 즉, 클라이언트는 이 상태코드에 따라 적절한 응답 메시지 내용을 처리할 수 있게 됩니다. 일반적으로 HTTP Status Code는 다섯 가지로 구분을 하며, 해당 숫자의 첫 번째 자리는 대분류를 나타내고 그 다음 두 번째와 세 번째는 상세 분류 코드입니다. 다음은 대분류 다섯 가지에 대한 설명입니다. 📌 1xx 임시 응답을 의미합니다. 요청은 성공적으로 받았으나 서버에서 계속 작업이 진행중인 것을 말합니다. 이럴 경우에는 메시지 바디 없이 상태 라인과 헤더로만 구성되..
-
스프링 빈, 자바 빈, DTO, VO의 차이점과 불변객체(Immutable Object)스터디 노트 2023. 10. 20. 13:19
1. 스프링 빈 스프링 빈은 객체와 이름, 클래스 타임 정보가 스프링 컨테이네로 관리되는 객체를 말합니다. 2. 자바 빈 기본 생성자가 선언되어야 하고, Getter/Setter 팬으로 클래스 내부 속성에 접근이 가능해야 하며 java.io.Serializable을 구현하고 있어야 합니다. 참고로 스프링 빈과 자바 빈은 혼동이 생길 수 있는데 자바 빈은 스프링 빈이 될 수 있어도, 그 반대는 불가능합니다. 3. DTO(Data Transfer Object) 소프트웨어 사이에 데이터를 전달하는 객체를 의미합니다. 특히 내부에 비즈니스 로직이 없는 것을 권장하며 Getter 메소드 정도는 허용할 수 있습니다. 4. VO(Value Object) 특정 데이터를 추상화해 데이터 표현을 하는 객체를 의미하며 eq..
-
Transaction이 뭐길래?스터디 노트 2023. 10. 19. 13:25
개발을 하다보면 늘 듣는 말이 있습니다. '트랜잭션 관리를 잘 해야 해!' 대체 트랜잭션이 무엇이길래 우리는 트랜잭션 관리를 해야만 하는 걸까요? 📌 트랜잭션(Transaction)이 대체 뭐길래? 그럼 트랜잭션이라는게 대체 뭘까요? 트랜잭션의 사전적 의미는 '데이터베이스의 상태를 변화시키기 위한 수행 작업의 단위, 즉 더 이상 쪼갤 수 없는 최소 작업 단위를 말한다'입니다. 그래서 트랜잭션의 최종 단계는 'commit'또는 'rollback' 중 하나가 되어야 합니다. 만약 비즈니스 처리가 모두 성공한다면? 트랜잭션의 결과는 'commit'의 성공이 되어야 합니다. 만약 비즈니스 처리가 중간에 실패한다면? 트랜잭션의 결과는 'rollback'으로 실패되어야 합니다. 즉, 비즈니스 로직이 실행 중 어떠한..
-
@RequiredArgsConstructor 가 하는 일스터디 노트 2023. 10. 18. 16:55
Lombok 라이브러리는 정말 강력하지요. Lombok을 통해 우리는 반복적으로 작성하는 보일러코드들에게서 자유로워질 수 있었습니다. 최근에 Lombok의 @RequiredArgsConstructor에 대해 스터디 할 일이 생겼었습니다. 대체 얘는 왜 어떻게 코드를 이처럼 간편하게 만들어 줄 수 있는걸까요? 해당 애노테이션의 설명글을 참고해보면 이 애노테이션이 하는 일을 알 수 있습니다. 1. 필수 인수를 사용해 생성자를 생성합니다. 2. 여기서 말하는 필수 인수는 @NonNull과 같은 제약조건 또는 final field를 말합니다. 이처럼 해당 애노테이션을 사용하면 불필요하게 생성자를 만들어 줄 필요가 없으며, 이를 통해 Component들에선 보다 간편하게 주입방식을 구현할 수 있게 됩니다. @Re..
-
스프링 빈 스코프에 대하여스터디 노트 2023. 10. 18. 16:19
빈 스코프에 대하여 정리를 해보겠습니다. 일반적으로 Java에서 객체는 개발자가 new 키워드로 생성한 하나의 객체를 말하며, 이 객체에 유효한 레퍼런스가 없어지면 그 객체는 가비지 컬렉터에 의해 소멸되게 됩니다. 즉, 하나의 객체가 new를 통해 인스턴스가 생성되고 사용되고 레퍼런스가 없어저 GC에 의해 제거되기까지를 객체의 생명주기라고 말합니다. 그럼 스프링을 활용하면 객체 생명 주기는 어떻게 변할까요? 우선 스프링의 경우 ApplicationContext를 활용해 빈 객체를 생성하고 소멸시키게 됩니다. 이때 스프링에 의해 빈 객체를 생성하는 시점부터 객체 소멸의 시간까지를 그 객체의 생명주기, 즉 스프링의 빈 스코프라고 합니다. 스코프 설정에 따라 스프링 빈이 생성되는 시점과 소멸되는 시점이 결정되..
-
@RestControllerAdvice에 대하여스터디 노트 2023. 10. 18. 14:04
Spring Boot를 사용하면 기본적으로 에러를 처리하는 BasicErrorController라는 녀석이 있습니다. 이 컨트롤러는 Spring Boot를 사용하던 중 error가 발생할 경우 produces Type이 text/html일 경우 errorHtml이 호출됩니다. 여기서 RequestMapping의 produces는 contentType을 나타내는 속성입니다. 기본적으로 Spring Boot를 활용하면 별도의 에러 페이지 설정 없이도 error ModelAndView를 활용할 수 있습니다. 다만 우리가 직접 예외를 핸들링하고 싶을땐, Controller를 만들어 errorHtml() 메소드와 error()메소드를 직접 재정의하여 사용하면 됩니다. 하지만 url이 외부에 노출되기 때문에 에러 ..