테스트 코드란?테스트 코드는 작성한 코드가 의도대로 잘 작동하는지 확인하는 코드이다. 테스트 코드는 test 디렉터리에서 작업한다. 테스트 코드 패턴은 여러가지가 있는데 보편적으로 사용되는 패턴은 "given-when-then" 패턴이다. @DisplayName("Save New Pet") @Test public void savePetTest(){ // given : 반려동물을 저장하기 위한 준비 과정 final String name = "BlackCherry"; final int age = 4; final Pet pet = new Pet(name, age); // when : 실제로 저장 final..
스프링 부트 3의 구조스프링 부트는 각 계층이 양 옆의 계층과 통신하는 구조를 가지고 있다. 각 계층은 서로 소통할 수 있지만 다른 계층에 직접적인 영향을 주지는 않는다. 프레젠테이션 계층HTTP 요청을 받아 비즈니스 계층으로 전송하는 역할을 한다. 컨트롤러가 프레젠테이션 계층 역할을 하며컨트롤러는 여러개 존재할 수 있다. 비즈니스 계층비즈니스 로직을 처리하는 계층이다. 프로세스를 구현하기 위한 로직인 서비스가 비즈니스 계층의 역할을 한다. 퍼시스턴스 계층데이터베이스 관련 로직을 처리한다. 데이터베이스에 접근하는 DAO(데이터베이스 계층과 상호작용 하기 위한 객체)객체를 사용할 수 있다. Repository가 퍼시스턴스 계층의 역할을 한다. 스프링 부트 디렉터리 구성main실제 코드를 작성하는 공간. ..
@SpringBootApplicationimport org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublic class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); }}해당 코드가 있는 파일은 자바의 main() 메서드와 같은 역할을 한다. @SpringBootApplication 애너테이션은 스프링부트에 필요한 기본 설정을 해준다. "SpringApplication.run(..
스프링 부트 간단 예제@RestControllerpublic class TestController{ @GetMapping("/test") public String test() { return "Hello World!"; }}TestController.java에 위 코드를 작성하고 SpringBoot를 실행하고웹 브라우저에서 https://localhost:8080/test로 접속하면 Hello world를 확인할 수 있다 localhost인 127.0.0.0은 컴퓨터 네트워크에서 사용하는 루프백 호스트명이며 현재 사용중인 컴퓨터를 의미한다. 8080은 스프링의 포트 번호이고, /test는 @GetMapping이라는 애너테이션으로 메서드와 매핑할 때 스프링 부트에서 설정한 경로이다. 스..
스프링엔터프라이즈 애플리케이션 : 대규모의 복잡한 데이터를 관리하는 애플리케이션 소프트웨어 분야가 발전함에 따라 앤터프라이즈 애플리케이션은 사용자의 많은 요청을 동시에 처리해야 해서버의 성능, 보안, 안정성이 매우 중요하게 되었다. 스프링은 엔터프라이즈 애플리케이션을 위한 개발환경을 제공하여 기능 개발에만 집중할 수 있게 해준다. 스프링 프레임워크는 서버 성능, 안정성, 보안을 높은 수준으로 제공하여 개발자는 기능 개발에 집중할 수 있게 되었다. 스프링 부트스프링은 많은 기능을 제공하는 도구이지만, 설정이 매우 복잡하다는 단점이 있다. 스프링부트는 스프링 프레임워크를 더 쉽고 빠르게 이용할 수 있도록 만들어주는 도구이다. 스프링 프로젝트 설정을 빠르게 할 수 있고, 의존성 세트라고 하는 스타터를 활용..
배낭문제란?배낭 문제는 주어진 제한된 용량의 배낭에 최대한의 가치를 가진 아이템을 넣는 방법을 찾는 문제를 의미한다. n개의 물건의 무게w와 가치 v에 주어질 때, 용량이 k인 배낭의 용량을 초과하지 않고 담을 수 있는 최대의 가치를 찾는 문제이다. 배낭문제의 해결 방법모든 경우 탐색 (brute-force)물건을 담는다/담지 않는다의 경우를 생각하여 2^n의 모든 조합을 탐색하는 방법은 시간 복잡도가 너무 커서 n값이 큰 경우에는 해결할 수 없다. 탐욕적 알고리즘 (Greedy)단위 무게당 높은 가치부터 담는 방법.분할 배낭 문제에서는 효율적으로 동작한다. 동적 프로그래밍 (Dynamic Programming)주어진 아이템과 배냥의 용량을 이용해 가능한 가치의 조합을 계산브랜치 앤 바운드 (Branch..
함수란?함수는 작업을 수행하거나 값을 계산하는 과정을 하나의 블록으로 감싸서 실행 단위로 만들어 놓은 것을 의미한다. function sum(a,b) { return a + b}sum(10,20) 함수를 정의하는 법1. 함수 선언문// 선언문function add(a,b) { return a+b}// 표현식const sum = function(a,b) { return a+b}함수 선언문은 표현식이 아니라 일반 문(statement)로 분류됨.함수 선언으로 어떠한 값도 표현되지 않았으므로 표현식이 아니라 statement로 분류된다. 자바스크립트 엔진은 코드의 문맥에 따라 동일한 함수를 statement가 아니라 표현식으로 해석하는 경우가 있다. 따라서 아래의 경우처럼 변수에 할당할 수 있다. 함수 선언문..
최소 신장 트리신장 트리는 그래프의 모든 정점을 포함하는 트리로, 사이클이 없는 부분 그래프이다. 최소 신장 트리는 신장 트리중에서 간선들의 가중치 합이 가장 작은 트리를 의미한다. 최소 신장 트리는그래프의 모든 정점을 연결사이클이 없는 트리 구조간선의 가중치 합이 최소의 특징을 가진다. 최소 신장 트리를 구하는 방법으로는 크루스칼 알고리즘과 프림 알고리즘이 있다. 이 포스트에서는 프림 알고리즘(Prim's Algorithm)에 대해 다룬다.프림 알고리즘 (Prim's Algorithm)프림 알고리즘은 최소 신장 트리를 구하기 위한 알고리즘이다. 단계적으로 정점을 확장해가면서 동작한다. 프림 알고리즘의 동작 과정[STEP 1] 시작 정점 선택 : 임의의 정점을 하나 선택[STEP 2] 최소 가중치 간선..
최소 신장 트리신장트리는 그래프의 모든 정점을 포함하는 트리로, 사이클이 없는 부분 그래프이다. 최소 신장 트리는 신장 트리중에서 간선들의 가중치 합이 가장 작은 트리를 의미한다. 최소 신장트리는그래프의 모든 정점을 연결사이클이 없는 트리 구조간선의 가중치 합이 최소가 됨의 특징을 가진다. 최소신장트리를 구현하기 위한 알고리즘으로는 크루스칼 알고리즘과 프림 알고리즘이 있다. 이 포스트에서는 크루스칼 알고리즘(Kruskal's Algorithm)에 대해 다룬다. 크루스칼 알고리즘 (Kruskal's Algorithm)크루스칼 알고리즘은 그래프에서 최소 신장 트리를 찾기 위한 대표적인 알고리즘 중 하나이다. 그리디하게 작동하는 알고리즘이다. 크루스칼 알고리즘의 동작 과정[STEP 1] 간선 정렬 하기 :..
자바스크립트의 모든 값은 데이터 타입을 가지고 있으며, 이 데이터 타입은 크게 원시 타입과 객체 타입으로 나눌 수 있다. 원시 타입자바스크립트의 원시 타입은 객체가 아닌 다른 모든 타입을 의미한다. 객체가 아니기 때문에 메서드를 가지지 않는다. ES2022 기준으로 총 7개의 원시 타입이 있다. undefinedundefined는 선언한 후 값을 할당하지 않은 변수 또는 값이 주어지지 않은 인수에 자동으로 할당되는 값이다. null아직 값이 없거나 비어있는 값을 표현 시 사용한다. 다른 원시값들과 다르게 "typeof"로 null을 확인할 시 해당 타입이 아니라 "object"를 반환한다. - undefined와 null은 각각 undefined와 null값만 가질 수 있다. - undefined는 선..