Dev 226

[SpringBoot] Main클래스에서 내장톰캣 실행시키기

[SpringBoot] 외장톰캣에서 SpringMVC 구현하기[SpringBoot] 외장톰캣으로 WAS 띄우기 with IntelliJ(무료버전) SpringBoot는 내장톰캣을 사용한다. SpringBoot가 내장톰캣을 사용하면서 간편해진 점을 알아보기 위해 우선, SpringBoot 이전에 사용했던 외장톰lordofkangs.tistory.com 지난 포스팅에는 외장톰캣을 활용한 SpringMVC를 구현해보았다. 개발자가 작성한 코드가 WAR로 압축되고 톰캣WAS로 배포된 뒤, WAS서버가 실행되어야 했다. 서버의 실행주체는 외장톰캣이다. 발상을 바꾸어, 어차피 톰캣도 JAVA언어로 구현되어있는데 톰캣을 라이브러리로 만들고 개발자가 톰캣설정 및 실행을 하는 코드를 구현하여 main 메소드로 실행시키면..

Dev/SPRING 2023.04.02

[SpringBoot] 외장톰캣에서 SpringMVC 구현하기

[SpringBoot] 외장톰캣으로 WAS 띄우기 with IntelliJ(무료버전) SpringBoot는 내장톰캣을 사용한다. SpringBoot가 내장톰캣을 사용하면서 간편해진 점을 알아보기 위해 우선, SpringBoot 이전에 사용했던 외장톰캣 방식에 대해서 알아보겠다. 외장톰캣 방식이란? 개발 lordofkangs.tistory.com 지난 포스팅에서 IntelliJ에서 외장톰캣을 띄어 보았다. 이제 해당 환경에서 SpringMVC를 구현해보겠다. SprinMVC 구현 톰캣은 서블릿(Servlet)을 사용한다. 서블릿의 정의는 아래 포스팅을 참고바란다. [ JSP ] Servlet 이란? Servlet이란 Server Application Let의 줄임말이다. Let은 조각을 의미하니 서버의 조..

Dev/SPRING 2023.04.02

[SpringBoot] 외장톰캣으로 WAS 띄우기 with IntelliJ(무료버전)

SpringBoot는 내장톰캣을 사용한다. SpringBoot가 내장톰캣을 사용하면서 간편해진 점을 알아보기 위해 우선, SpringBoot 이전에 사용했던 외장톰캣 방식에 대해서 알아보겠다. 외장톰캣 방식이란? 개발자가 작성한 코드는 war파일로 WAS의 webapps 영역에 배포되어 풀린다. WAS가 외부에 있어 war파일로 압축한 뒤, 배포를 하는 방식이 외장톰캣 방식이다. 외장톰캣으로 WAS 띄우기(IntelliJ 무료버전) - explodedWar War파일은 explodedWar 방식을 사용한다. explodedWar는 압축된 War가 아닌 압축이 풀린 디렉토리 형태이다. 압축이 아니므로 변화에 대응한 성능이 좋지만 용량 문제가 있을 수 있다. build.gradle을 살펴보자. //war 풀..

Dev/SPRING 2023.04.02

[MODERN JAVA] 람다(Lambda)의 활용 - Predicate, Consumer, Function

[MODERN JAVA] 람다(Lambda)의 활용 - 실행 어라운드 패턴 [MODERN JAVA] 람다(Lambda)란? 파라미터로 값이 아닌 '코드'를 넘겨야 하는 순간이 있다. 이때 사용하는 기술이 '동적 파라미터화'이다. '람다'가 등장하기 전에는 동적 파라미터화는 무겁게 구현되었 lordofkangs.tistory.com 지난 포스팅에서는 람다가 사용되는 패턴을 알아보았다. 이번 포스팅에서는 자바API의 함수형 인터페이스 몇 가지를 알아보겠다. 함수형 인터페이스는 동적파라미터를 구현하기 위한 그릇이다. 동적 파라미터란, 파라미터 인수로 '코드(Code)'를 넘기는 기술로 일회적이거나 로직이 계속 변경되는 경우에 사용된다. Predicate Predicate는 참,거짓을 Return하는 함수형 인..

Dev/JAVA 2023.03.15

[OOP] 데커레이터 패턴( Decorator Pattern )

디자인 패턴이란? 객체지향설계 과정에서 발생하는 문제들을 해결하기 위한 패턴(Pattern) 문제 상황 기본 기능이 있고 옵션 기능이 여러 개일 때, 기본 기능 + 옵션 기능의 조합은 여러 가지이다. 예를 들어, 내비게이션이 있다. 내비게이션의 기본기능은 도로표시이다. 옵션 기능으로 교통량 표시, 날씨 표시, 메시먼지 표시가 있다고 해보자. 메인 기능 1가지에 옵션 기능 3가지가 있으므로, 총 9가지 조합이 생긴다. 문제는 이를 단순 상속으로 구현하려고 하면 9가지를 전부 클래스로 만들어야 한다는 것이다. 단순하게 부모로부터 기능을 상속받는 구조는 조합의 개수에 따라 구현해야하는 클래스 개수를 기하급수적으로 증가시킨다. 그래서 이런 문제를 해결하기 위한 디자인 패턴이 있으니, 그것이 데코레이터 패턴이다...

Dev/OOP 2023.03.11

[MODERN JAVA] 람다(Lambda)의 활용 - 실행 어라운드 패턴

[MODERN JAVA] 람다(Lambda)란? 파라미터로 값이 아닌 '코드'를 넘겨야 하는 순간이 있다. 이때 사용하는 기술이 '동적 파라미터화'이다. '람다'가 등장하기 전에는 동적 파라미터화는 무겁게 구현되었다. 1) 구현객체 넘기기 Lis lordofkangs.tistory.com 지난 포스팅에서는 람다의 개념을 알아보았다. 이번 포스팅에서는 람다가 활용되는 예를 알아보겠다. 람다가 활용되는 대표적인 예는 '실행 어라운드 패턴'이다. 실행어라운드패턴 파일처리는 자원을 열고(OPEN) 자원을 처리하고(PROCESS) 자원을 닫는 과정(CLOSE)을 반복한다. 이를 순환패턴이라 한다. 그렇다면 파일을 처리하는 코드는 자원을 설정(SetUp)하고 자원을 처리(Process)하고 자원을 정리(CleanU..

Dev/JAVA 2023.03.08

[MODERN JAVA] 람다(Lambda)란?

파라미터로 값이 아닌 '코드'를 넘겨야 하는 순간이 있다. 이때 사용하는 기술이 '동적 파라미터화'이다. '람다'가 등장하기 전에는 동적 파라미터화는 무겁게 구현되었다. 1) 구현객체 넘기기 List result1 = getFilteredApples(apples,new ColorPredicate()); // new ColorPredicate() 구현객체 넘기기 List result2 = getFilteredApples(apples,new ColorPredicate()); // new ColorPredicate() 구현객체 넘기기 위와 같이, '코드'를 포함한 구현객체를 파라미터로 넣는 방법이 있고 2) 익명클래스 사용 //Runnable 익명클래스 넘기기 Thread t = new Thread(new R..

Dev/JAVA 2023.02.14

[MODERN JAVA] 동작 파라미터화 - Comparator,Runnable,Callable

[MODERN JAVA] 동작 파라미터화 - 익명 클래스(Anonymous Class) [MODERN JAVA] 동작 파라미터화 - 전략 디자인 패턴 ( Strategy Pattern ) 변화에 대처 가능한 코드를 짜려면 어떻게 해야할까? 컴파일에 결정되는 코드가 아닌 런타임에 결정되는 코드를 짜야 한다. 대표 lordofkangs.tistory.com 지난 포스팅에서 동적파라미터화를 구현하기 위해 익명클래스를 이용해보았다. 이번 포스팅에서는 익명클래스를 사용하여 동적파라미터화를 구현한 대표적인 예시들을 알아보겠다. Comparator List 클래스는 sort 메소드를 갖는다. List 자료구조 안 객체를 정렬하는 메소드인데, 정렬 기준이 되는 '소스'를 파라미터로 넘기는 동적 파라미터화가 구현되어 있..

Dev/JAVA 2023.01.25

[MODERN JAVA] 동작 파라미터화 - 익명 클래스(Anonymous Class)

[MODERN JAVA] 동작 파라미터화 - 전략 디자인 패턴 ( Strategy Pattern ) 변화에 대처 가능한 코드를 짜려면 어떻게 해야할까? 컴파일에 결정되는 코드가 아닌 런타임에 결정되는 코드를 짜야 한다. 대표적으로 동작 파라미터화(behavior parameterization)이 있다. 많은 데이 lordofkangs.tistory.com 지난 포스팅에 이어 동작 파라미터화에 대해서 알아보겠다. '동작 파라미터화'란 메소드의 파라미터로 값이 아닌 '코드(Code)'를 넘기는 기술이다. 이전 포스팅에서는 인터페이스를 만들고 구현클래스를 생성하여 동작 파라미터화를 구현했다. 하지만 매번 구현클래스를 생성하는 것도 낭비이다. 단 한 번 파라미터로 코드를 넘기기 위해, 클래스를 생성하는 것은 메..

Dev/JAVA 2023.01.16

[OOP] 추상 팩토리 패턴(Abstract Factory Pattern)

디자인 패턴이란? 객체지향설계 과정에서 발생하는 문제들을 해결하기 위한 패턴(Pattern) 문제 상황 결합도를 낮추기 위해 인터페이스를 사용하지만 구현객체를 생성(new)하는 과정에서 결합이 발생할 수 밖에 없다. 이때 new 객체 생성 권한을 Factory 클래스에게 넘겨주므로써 객체 간 결합도를 낮출 수 있다. 서버에 특정 파일을 배포, 백업, 삭제하는 프로그램을 만든다고 가정해보자. Deploy, Backup, Remove는 모두 각각의 Machine 객체와 결합되어진다. 이같은 구조는 소스중복으로 이어지고 기능이 추가될 경우 유지보수에도 좋지 못하다. 그래서 도입된게 바로, 인터페이스이다. Machine 인터페이스로 인하여 결합도는 낮아졌지만 아직도 조금의 결합도가 있다. public class..

Dev/OOP 2022.11.13