🌠 @Schduling Java 에서 스케쥴링을 구현하는 방법 중 가장 일반적인 방법은 Spring Framework의 @Scheduling 어노테이션을 사용해서 일정한 시간 혹은 간격으로 또는 특정 시간에 코드가 실행되도록 설정이 가능하다 이를 사용하면 간단한 방법으로 메서드를 주기적으로 실행할 수 있는것이다. 🌠 @Scheduling 사용방법 1. ApplicationClass 에 @EnableScheduling 추가 @EnableScheduling @SpringBootApplication public class HomauraApplication { public static void main(String[] args) { SpringApplication.run(HomauraApplication.cla..
프로젝트를 진행하다보면 Service는 Interface 로 만들고 구현은 ServiceImpl에 하는 것을 본적이 있을것이다. 왜 굳이 바로 구현을 하지 않고 다른곳에 구현을 하는 것일까? 결론부터 말하자면 이는 객체지향의 설계 5 원칙중 하나인 OCP를 실현하기 위해서이다 ▶ 그럼 OCP 란 무엇일까? 간단하게 말해보자면 개방-폐쇄 원칙으로써 확장에 대해 열려있고 수정에는 닫혀 있어야한다는 뜻으로 개발 작업을 하다보면 수많은 모듈이 생성된다. 근데 그 하나의 모듈이 완벽할수 있을까? 혹여 완벽하다 하더라도 수정을 피하기는 어렵다하지만 수정을 하다보면 연관되어 있는 모든 모듈을 줄줄이 고쳐야 한다면 그것이 좋은 개발이라고 할 수 있을까? 이에 개발 - 폐쇄 원칙에 따라 시스템의 구조를 올바르게 리펙토링..
두개를 비교하기 이전에 무엇인지 부터 알아보자 Entity Entity는 실제 DataBase의 테이블과 1 : 1로 매핑되는 클래스로써, DB의 테이블 내에 존재하는 컬럼만을 속성으로 가지고 있다. Entity 클래스는 상속을 받거나 구현체여서는 안되며, 테이블 내에 존재하지 않는 컬럼을 가져서도 안된다 DTO DTO(Data Transfer Object)는 데이터 전송 객체라는 의미를 가지고 있다. 즉, 각 계층간 데이터 교환을 위한 객체이다 ▶ 분리한 이유 1. Entity의 보호 이게 굉장히 큰 이유중 하나라고 볼 수 있다. entity를 사용자에게 노출하게되면 원하지 않는 상황에서 자원의 속성이 변경될 가능성이 있다. 그리고 엔티티를 UI 계층에 노출하는 것은 테이블 설계를 화면에 공개하는 것이..
NoArgsConstructor 설명은 간단하다 파라미터가 없는 생성자를 만드는것으로 객체를 생성할 때에도 인자를 넣어주지 않아도 된다. ※ 하지만 필드에 final 의 객체가 있는경우 에러가 발생한다. AllArgsConstructor 이것또한 설명은 간단하다 파라미터로 모든 인자를 받는것이다. 객체를 생성할때 변수의 순서대로 값을 입력해주면 된다. RequiredArgsConstructor 위에서 말했던 NoArgsConstructor의 단점 final 값의 에러에 대응하는것으로 final 한 값을 인자로 넣어줄수 있다. ※ 단 final 이 아닌 다른 값은 넣을수 없다. Reference https://devmoony.tistory.com/194 [Spring] Lombok 생성자 @NoArgsCo..
1. @Controller Spring MVC 의 대표 어노테이션 Controller 는 View 를 반환하기 위해 사용하는 어노테이션이다 순서 Clinet 는 URI 형식으로 웹 서비스에 요청을 보낸다 DispatcherServlet이 요청을 처리할 대상을 찾는다(존재의 유무) HandlerAdapter를 통해 요청을 위임하게 되고 그 요청은 Controller 로 가게 되는것이다. Controller 는 요청을 처리한 후에 ViewName 을 반환하게 된다 DispatcherServlet은 ViewResolver를 통해 ViewName에 해당하는 View를 찾아 사용자에게 반환한다 View 네임을 통해 결과적으로 ViewResolver 에서 이름을 통해 렌더링 되면서 사용자에게 화면을 보여주게 된다...
Request 와 Response 이글을 찾아보는것은 개발을 접한지 얼마 안된 사람일수 있다. 이것을 추리 할 수 있을 정도로 개발을 시작하면 빠르게 만날수 있고 모르면 개발이 어려워지는 중요한 개념이다. HTTP 의 특징 Request(요청) / Response(응답) 클라이언트에서 Request 를 서버에게 보낸다 서버에서 Response 를 클라이언트에게 보낸다 Stateless 상태를 유지하지 않는다는 특성으로 HTTP 통신은 독립적이기 때문에 과거의 통신에 대한 내용은 전혀 알수 없다 따라서 모든 통신에는 필요한 모든 정보를 담아 요청을 하게 된다는 것을 알수 있다. Request 메세지의 구조는 크게 세부분으로 구성되어있다. 1. Start line 요청의 첫번째 줄 이며 이또한 세부분으로 나..
1. 정적 리소스를 제공하는 방법 정적 리소스란, 고정된 HTML 파일, CSS, JS, 이미지, 영상 등을 제공한다 주로 웹 브라우저에서 요청을 한다. 2. HTML 페이지를 제공하는 방법 동적으로 필요한 HTML 파일을 생성해서 전달한다. 그럼 웹 브라우저는 동적으로 생성된 HTML 파일을 해석해서 읽은 후 사용자에게 보여주는 역할을 한다. 3. HTTP API를 제공하는 방법 HTML 이 아닌 데이터를 전달하는 경우 주로 JSON 이 많이 사용되며 다양한 시스템에서 호출하고는 한다 다양한 시스템은 서버에서 데이터만 전달하고 UI 화면이 필요하면 클라이언트가 별도로 처리하는것을 말한다 웹 클라이언트 to 서버 - 흔히 알고 있는 웹은 자바스크립트를 통해 동적으로 서버에게 API 요청또한 진행할수 있다..
데이터를 받은 서버에서 처리해야 하는 업무가 무엇일까? 웹 애플리케이션 서버 직접 구현한다면 우리는 무엇을 만들어 주어야 하는가? 우리가 어떠한 형태의 데이터를 전송 받았다. 예를 들어 이렇게 생겼다고 생각해보자 그렇다면 우리는 받은 데이터를 이제 알맞게 조작을 해서 전달을 해주어야 한다. 그럼 알맞게 조작을 할때 서버가 해야 할일은 아래와 같다. 왼쪽의 사진은 서버에서 받은 데이터를 가공하는 과정이다 초록색으로 칠한 부분인 비즈니스 로직을 제외한 나머지 작업이 너무 많았다. 이는 굉장히 비효율적이다 때문에 우리는 비즈니스 로직만을 다루고자 나머지 과정을 지원해주는 서블릿이라는 것이 나타났다. 서블릿 ▶ 서블릿 코드 사용법 서블릿을 사용하기 위해 코드를 작성하는 방법은 매우 간단하다. 해당 클래스에 서블..
서블릿을 호출하는건 도데체 누구? 기본적인 요청과 응답의 과정이다. 그림에 보이는 연결이 되고 서블릿을 호출하는 과정에서 도데체 누가 Servlet 을 호출하는것일까? 그것이 바로 쓰레드라는 녀석이다. 쓰레드의 역할 애플리케이션 코드를 하나하나 순차적으로 실행하는것이 쓰레드이다 자바 Main 메서드를 처음 실행하면 main이라는 이름의 쓰레드가 실행된다 쓰레드가 없다면 자바 애플리케이션 실행이 불가능하다 쓰레드는 한번에 하나의 코드 라인만이 수행 할 수있다 "동시 처리"가 필요하다면 쓰레드를 추가로 생성한다. 단일 요청과 다중 요청("동시 처리") ▶ 단일 요청 단 한개의 요청만 생기고 쓰레드를 할당하여 서블릿을 호출하고 응답한다. 이는 굉장히 알기 쉬운 예제라고 생각한다. ▶ 다중 요청 우리는 서비스를..
웹서버 ( Web Server ) HTTP 기반으로 동작하는 서버 정적 리소스를 제공하며, 기타 부가기능 또한 제공합니다 정적 리소스란? HTML, CSS, JS, 이미지, 영상 등을 뜻한다 대표적인 웹 서버로는 NGINX 와 APACHE 라는 것이 있다. 웹 애플리케이션 ( WAS ) HTTP 기반으로 동작한다 웹 서버 기능을 포함하고 정적 리소스 또한 제공하고 있다 프로그램 코드를 실행해서 어플의 로직을 수행할 수 있다는 것이다. 동적 HTML, HTTP API(JSON) 서블릿, JSP, 스프링 MVC 대표적인 WAS 로는 톰캣과 Undertow 등이 있다. 굉장히 비슷하면서도 다른 이 두가지의 차이가 뭘까? 웹 서버는 정적 리소스(파일), WAS는 애플리케이션 로직이다. 하지만 두개의 경계는 모호..