전체 글 669

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

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

SPRING/Spring Boot 2023.04.02

MacBook에서 한영키 및 대소문자 전환 윈도우랑 맞추기

MacOs에서 가장 적응 안 되는 부분은 한/영 및 대소문자 전환이다. Capslock을 누르면 한/영 전환이 되고 길게 누르면 대소문자 전환이 된다. 이런 방식은 우리에게 익숙치 않으니, 윈도우와 동일하게 바꾸어 보자. 버전정보 : macOS Ventura 13 1. 한/영 전환 '이전 입력 소스 선택'은 '한/영 전환'을 의미한다. 한/영 전환은 Ctrl + SpaceBar 로 설정되어 있다. 이를 right command( 한/영 전환키 위치 )로 바꾸려고 한다. 하지만 눌러보면 command키로 설정이 안 됨을 확인할 수 있다. 그래서 외부프로그램 도움을 받아야 한다. Karabiner-ElementsA powerful and stable keyboard customizer ..

CS/IT지식 2023.03.31

[알고리즘] BFS(Breadth-First Search) 탐색 알고리즘이란?

그래프란 노드(Node)가 있고 노드를 연결한 간선(Edge)이 있는 자료구조이다. 그래프를 완전탐색하는 기본적인 알고리즘은 DFS와 BFS이다. 탐색을 하려면 우선 자료구조가 정의되어야 한다. 그래프(Graph)는 두 가지 방식으로 표현된다. 1. 인접행렬( 2차원 배열 ) 2. 인접리스트 ( 리스트 ) 행렬은 '인덱스'가 있다. 인덱스는 랜덤엑세스를 가능하게 하여, 특정노드에 접근하는 속도가 빠르다. 하지만 배열구조로 쓰레기값이 들어있는 공간도 유지를 해야하기에 메모리낭비가 심하다. 인접리스트방식은 리스트 자료구조를 이용한다. '연결' 방식의 자료구조인 만큼, 특정 노드를 시작으로 인접노드를 순회하는 경우 유리하다. '인덱스'가 아닌 '주소'로 인접노드에 접근하니 메모리 낭비도 적다. 그러나 랜덤엑세..

[알고리즘] DFS(Depth-First Search) 탐색 알고리즘이란?

그래프란 노드(Node)가 있고 노드를 연결한 간선(Edge)이 있는 자료구조이다. 그래프를 완전탐색하는 기본적인 알고리즘은 DFS와 BFS이다. 탐색을 하려면 우선 자료구조가 정의되어야 한다. 그래프(Graph)는 두 가지 방식으로 표현된다. 1. 인접행렬( 2차원 배열 ) 2. 인접리스트 ( 리스트 ) 행렬은 '인덱스'가 있다. 인덱스는 랜덤엑세스를 가능하게 하여, 특정노드에 접근하는 속도가 빠르다. 하지만 배열구조로 쓰레기값이 들어있는 공간도 유지를 해야하기에 메모리낭비가 심하다. 인접리스트방식은 리스트 자료구조를 이용한다. '연결' 방식의 자료구조인 만큼, 특정 노드를 시작으로 인접노드를 순회하는 경우 유리하다. '인덱스'가 아닌 '주소'로 인접노드에 접근하니 메모리 낭비도 적다. 그러나 랜덤엑세..

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

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

JAVA/Modern JAVA 2023.03.15

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

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

OOP/Design Pattern 2023.03.11

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

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

JAVA/Modern JAVA 2023.03.08

코드에 혼란을 느끼는 이유(2)

코드에 혼란을 느끼는 이유(1) 코드를 보다보면 혼란에 빠질 때가 있다. 개발자가 코드를 보며 혼란에 빠지는 경우는 3가지이다. 1. 지식의 부족 2. 정보의 부족 3. 처리능력의 부족 지식의 부족 2 2 2 2 2 T n 여기서 T가 무엇을 의 lordofkangs.tistory.com 지난 포스팅에서 개발자가 코드를 보며 혼란을 느끼는 이유 3가지를 정리했다. 1. 지식의 부족 2. 정보의 부족 3. 처리능력의 부족 이번 포스팅에서는 3가지 원인을 사람의 인지과정을 통해서 정리해보려고 한다. 사람의 인지과정 사람의 기억은 장기기억과 단기기억이 있는데 새로운 데이터는 단기기억에 저장된다. 단기기억은 임시로 저장되는 공간으로 저장공간이 적어 RAM과 같다. 반복되는 단기기억은 데이터가 아닌 정보가 되어 ..

코드에 혼란을 느끼는 이유(1)

코드를 보다보면 혼란에 빠질 때가 있다. 개발자가 코드를 보며 혼란에 빠지는 경우는 3가지이다. 1. 지식의 부족 2. 정보의 부족 3. 처리능력의 부족 지식의 부족 2 2 2 2 2 T n 여기서 T가 무엇을 의미하는지 아는가? 해당 언어의 '지식'이 있는 사람이라면 쉽게 대답할 수 있겠지만 '지식'이 없는 사람이라면 대답 할 수 없다. 이처럼 코딩 중 어려움을 겪는 첫 번째 이유는 '지식'이 없어서이다. 정보의 부족 public class BinaryCalculator{ public static void main (Integer n){ System.out.println(Integer.toBinaryString(n)); // Integer.toBinaryString(n) ? } } JAVA 문법의 '지..

[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..

JAVA/Modern JAVA 2023.02.14