전체 글 83

[Spring] 다양한 요청 매핑(Request Mapping)

다양한 요청 매핑 테스트 환경 1. 로그 출력은 시스템 콘솔 대신 slf4j 로깅 라이브러리 사용 2. view 템플릿 없이 매핑 결과만 테스트하기 위해 RestController사용하여 return값 그대로 화면에 출력 3. 모든 테스트는 Postman 플랫폼으로 테스트 기본 어노테이션 매핑 @RestController public class MappingController { private Logger log = LoggerFactory.getLogger(getClass()); /** * 기본 요청 * 둘다 허용 /hello-basic, /hello-basic/ * HTTP 메서드 모두 허용 GET, HEAD, POST, PUT, PATCH, DELETE */ @RequestMapping(value ..

Spring 2021.08.01

[Java] 간단한 로깅(Logging) 사용 방법

SLF4J 라이브러리를 이용한 로깅 방법 로깅 라이브러리로그 라이브러리는 Logback, Log4J, Log4J2 등등 수 많은 라이브러리가 있는데스프링 부트에서 이것들을 통합해서 인터페이스로 제공하는 것이 바로 SLF4J 라이브러리다. * SLF4J는 인터페이스이고, Logback은 구현체이다. 더 자세한 내용은 아래의 링크를 확인* SLF4J - http://www.slf4j.org * Logback - http://logback.qos.ch 로그 선언// 1번private final Logger log = LoggerFactory.getLogger(getClass());// 2번private static final Logger log = LoggerFactory.getLogger(Xxx.class)..

Java 2021.08.01

[Java] (String, char)배열, 문자열 상호 변환 방법

1. String을 String배열로 변환하는 방법 (문자열 -> 문자열배열) .split("") 2. String배열을 String으로 변환하는 방법 (문자열배열 -> 문자열) Arrays.toString( ) 3. String을 char배열로 변환하는 방법 (문자열 -> 문자배열) .toCharArray( ) 4. char배열을 String으로 변환하는 방법 (문자배열 -> 문자열) String.valueOf( ) new String( ) 테스트 입력 import java.util.Arrays; public class Main{ public static void main(String[] args) { // 테스트 문자열 String str = "ABCDEFG"; // 1. String -> Strin..

Java 2021.07.31

[Algorithm] 원더랜드_프림 알고리즘(최소스패닝트리)

스패닝 트리란 회로가 존재하지 않도록 그래프의 모든정점을 연결하는 트리이다. * 회로가 존재한다. == 사이클이 발생한다. == 출발점에서 시작해서 출발점으로 돌아온다. == 그래프 * 아래의 문제 이미지에서 왼쪽 이미지=그래프 / 오른쪽 이미지=트리 최소 스패닝 트리(MST)는 스패닝 트리를 구성하는 간선들의 가중치의 합이 최소가 되는 트리를 뜻한다. 이번 최소 스패닝 트리 문제는 프림 알고리즘, PriorityQueue을 이용하여 해결 할 것이다. 설명 원더랜드에 문제가 생겼다. 원더랜드의 각 도로를 유지보수하는 재정이 바닥난 것이다. 원더랜드는 모든 도시를 서로 연결하면서 최소의 유지비용이 들도록 도로를 선택하고 나머지 도로는 폐쇄하려고 한다. 아래의 그림은 그 한 예를 설명하는 그림이다. 위의 지..

Algorithm 2021.07.30

[Algorithm] 원더랜드_크루스칼 알고리즘(최소스패닝트리)

스패닝 트리란 회로가 존재하지 않도록 그래프의 모든정점을 연결하는 트리이다. * 회로가 존재한다. == 사이클이 발생한다. == 출발점에서 시작해서 출발점으로 돌아온다. == 그래프 * 아래의 문제 이미지에서 왼쪽 이미지=그래프 / 오른쪽 이미지=트리 최소 스패닝 트리(MST)는 스패닝 트리를 구성하는 간선들의 가중치의 합이 최소가 되는 트리를 뜻한다. 이번 최소 스패닝 트리 문제는 크루스칼 알고리즘,Union&Find DisjointSet을 이용하여 해결 할 것이다. 설명 원더랜드에 문제가 생겼다. 원더랜드의 각 도로를 유지보수하는 재정이 바닥난 것이다. 원더랜드는 모든 도시를 서로 연결하면서 최소의 유지비용이 들도록 도로를 선택하고 나머지 도로는 폐쇄하려고 한다. 아래의 그림은 그 한 예를 설명하는 ..

Algorithm 2021.07.26

[HTTP] 데이터 요청 - HTTP API(REST API)

HTTP API(REST API) HTTP message body에 데이터를 직접 담아서 요청 HTTP API에서 주로 사용, JSON, XML, TEXT 데이터 형식은 주로 JSON 사용 POST, PUT, PATCH HTTP 메시지 바디의 데이터를 InputStream을 사용해서 직접 읽을 수 있다. 먼저 1. 단순한 텍스트 메시지를 HTTP 메시지 바디에 담아서 전송하고 읽어 본 후 2. JSON 형식으로 전송하고 읽어 보자. 1. 단순 TEXT 전송 @WebServlet(name = "requestBodyStringServlet", urlPatterns = "/request-body-string") public class RequestBodyStringServlet extends HttpServl..

HTTP 2021.07.26

[HTTP] 데이터 요청 - POST

POST HTML Form POST 요청 방식은 클라이언트에서 서버로 리소스를 생성하거나 업데이트 하기위해 사용된다. 예) 회원 가입, 상품 주문 등에서 사용하는 방식이다. 특징 - 메시지 바디에 데이터가 들어가기 때문에 컨텐트 타입이 존재한다. -> content-type : application/x-www-form-urlencoded - 메시지 바디에 쿼리 파리미터 형식(GET 방식)으로 데이터를 전달한다 -> username=hello&age=20 예) 아래와 같은 웹 화면에 key(username, age)와 value를 담아서 전송을 하면 웹 브라우저는 다음 형식으로 HTTP 메시지를 만든다. - Request URL : http://localhost:8080/request-param - con..

HTTP 2021.07.25

[HTTP] 데이터 요청 - GET

GET 쿼리 파라미터 GET 요청 방식은 클라이언트에서 서버로 정보를 조회하기 위해 사용된다. GET 요청의 일부로서 메시지 바디 없이, URL의 쿼리 파라미터를 사용해서 데이터를 전달한다. 예) 검색 용어, 날짜 범위, 필터, 페이징, 쿼리를 정의하는 기타 정보 쿼리 파라미터는 URL에 다음과 같이 '?'로 시작하고, 추가 파라미터는 '&'로 구분한다. 예) http://localhost:8080/request-param?username=hello&age=20 서버에서는 'HttpServletRequest'가 제공하는 다음 메서드를 통해 쿼리 파라미터를 편리하게 조회할 수 있다. //단일 파라미터 조회 String username = request.getParameter("username"); //파라..

HTTP 2021.07.25

[HTTP] HTTP 데이터 요청 3가지

* HTTP 요청메시지를 통해 클라이언트에서 서버로 데이터를 요청하는 방법은 세가지로 정리가 된다. 1. GET - 쿼리 파라미터 /url?username=hello&age=20 메시지 바디 없이 URL의 쿼리 파라미터에 데이터를 포함해서 전달 예) 검색, 필터, 페이징등에서 많이 사용하는 방식 - GET 방식 정리 글 - https://cornarong.tistory.com/29?category=997186 [HTTP] 데이터 요청 - GET GET 쿼리 파라미터 GET 요청 방식은 클라이언트에서 서버로 정보를 조회하기 위해 사용된다. GET 요청의 일부로서 메시지 바디 없이, URL의 쿼리 파라미터를 사용해서 데이터를 전달한다. 예) 검색 cornarong.tistory.com 2. POST - HT..

HTTP 2021.07.24

[Algorithm] 친구인가? (Disjoint-Set : Union&Find)

설명 반 학생은 N명이다. 각 학생들의 친구관계를 알고 싶다. 모든 학생은 1부터 N까지 번호가 부여되어 있고, 각각 두 명의 학생은 친구 관계가 번호로 표현된 숫자쌍이 주어진다. 만약 (1, 2), (2, 3), (3, 4)의 숫자쌍이 주어지면 1번 학생과 2번 학생이 친구이고, 2번 학생과 3번 학생이 친구, 3번 학생과 4번 학생이 친구이다. 그리고 1번 학생과 4번 학생은 2번과 3번을 통해서 친구관계가 된다. 학생의 친구관계를 나타내는 숫자쌍이 주어지면 특정 두 명이 친구인지를 판별하는 프로그램을 작성하세요. 두 학생이 친구이면 “YES"이고, 아니면 ”NO"를 출력한다. 입력 첫 번째 줄에 반 학생수인 자연수 N(1

Algorithm 2021.07.24

[Spring] 동시요청 - 쓰레드와 멀티 쓰레드(multi thread)

쓰레드(thread)와 멀티 쓰레드(multi thread) 쓰레드(thread)란? 애플리케이션 코드를 하나하나 순차적으로 실행하는 것은 쓰레드이다. 자바 메인 메서드를 처음 실행하면 main이라는 이름의 쓰레드가 실행된다. 쓰레드가 없다면 자바 에플리케이션 실행이 불가능하다. 쓰레드는 한번에 하나의 코드 라인만 수행한다. 동시처리가 필요하면 스레드를 추가로 생성 해야한다. 멀티 스레드(multi thread)란? 하나의 프로세스 내에서 둘 이상의 스레드가 동시에 작업을 수행하는 것을 의미한다. 단일 요청 - 쓰레드 하나 사용 요청이 하나 들어오면 요청은 새로운 쓰레드를 생성하여 처리하게 된다. 다중 요청 - 쓰레드 하나 사용 첫번째 요청에 의한 기존 쓰레드의 처리가 지연되는 상황이 발생하면 두번째 들..

Spring 2021.07.22

[Spring] 웹 서버 vs 웹 어플리케이션 서버

웹 서버(WS)와 웹 어플리케이션 서버(WAS) 웹 서버 (Web Server) HTTP 기반으로 동작 정적 리소스 제공, 기타 부가기능 정적(파일) HTML, CSS, JS, 이미지, 영상 예) NGINX, APACHE 웹 어플리케이션 서버 (WAS - Web Application Server) HTTP 기반으로 동작 웹 서버 기능 포함 + (정적 리소스 제공 가능) 프로그램 코드를 실행해서 애플리케이션 로직 수행 동적 HTML, HTTP API (JSON) 서블릿, JSP, 스프링 MVC 예) Tomcat, Jetty, Undertow 웹 서버와 웹 어플리케이션 서버의 차이점 간단하게 차이점을 구분하면 사용하는 기능에 따라 나누어진다. 웹 서버(WS) 웹 어플리케이션 서버(WAS) 정적(파일) HTM..

Spring 2021.07.22

[Algorithm] 최대 수입 스케쥴(PriorityQueue)

설명 N개이 기업에서 강연 요청을 해왔다. 각 기업은 D일 안에 와서 강연을 해 주면 M만큼의 강연료를 주기로 했다. 각 기업이 요청한 D와 M를 바탕으로 가장 많을 돈을 벌 수 있도록 강연 스케쥴을 짜야 한다. 단 강연의 특성상 하루에 하나의 기업에서만 강연을 할 수 있다. 입력 첫 번째 줄에 자연수 N(1 50 2 마지막 1일에 할 수 있는 가장 높은 강의를 구한다. 1~3일중에 구한다. 1~3일중에 강의료가 가장 큰 값을 구한다. (30 3 / 40 2 / 30 1 / 20 1) -> 40 2 이렇게 최대(D)부터 최소(D)까지 각각의 최적의 값을 구한 후 다 더하면 된다. 풀이. class Company implements Comparable{ public int pay; public int da..

Algorithm 2021.07.21

[Algorithm] 회의실 배정(Greedy, 그리디)

설명 한 개의 회의실이 있는데 이를 사용하고자 하는 n개의 회의들에 대하여 회의실 사용표를 만들려고 한다. 각 회의에 대해 시작시간과 끝나는 시간이 주어져 있고, 각 회의가 겹치지 않게 하면서 회의실을 사용할 수 있는 최대수의 회의를 찾아라. 단, 회의는 한번 시작하면 중간에 중단될 수 없으며 한 회의가 끝나는 것과 동시에 다음 회의가 시작될 수 있다. 입력 첫째 줄에 회의의 수 n(1

Algorithm 2021.07.20

[Algorithm] 미로의 최단거리 통로(BFS)

설명 7*7 격자판 미로를 탈출하는 최단경로의 길이를 출력하는 프로그램을 작성하세요. 경로의 길이는 출발점에서 도착점까지 가는데 이동한 횟수를 의미한다. 출발점은 격자의 (1, 1) 좌표이고, 탈출 도착점은 (7, 7)좌표이다. 격자판의 1은 벽이고, 0은 도로이다. 격자판의 움직임은 상하좌우로만 움직인다. 미로가 다음과 같다면 위와 같은 경로가 최단 경로의 길이는 12이다. 입력 첫 번째 줄부터 7*7 격자의 정보가 주어집니다. 출력 첫 번째 줄에 최단으로 움직인 칸의 수를 출력한다. 도착할 수 없으면 -1를 출력한다. 풀이 과정. 좌표(1,1)부터 시작해서 상하좌우 0을 확인 후 Queue에 담으면서 진행. 위 그림좌표와 같은 크기의 2차원 확인배열 하나 만든다. 기존배열은 1칸 씩 이동할 때 마다 ..

Algorithm 2021.07.19

[Algorithm] 토마토(BFS활용)

설명 토마토는 아래의 그림과 같이 격자 모양 상자의 칸에 하나씩 넣어서 창고에 보관한다. 창고에 보관되는 토마토들 중에는 잘 익은 것도 있지만, 아직 익지 않은 토마토들도 있을 수 있다. 보관 후 하루가 지나면, 익은 토마토들의 인접한 곳에 있는 익지 않은 토마토들은 익은 토마토의 영향을 받아 익게 된다. 하나의 토마토의 인접한 곳은 왼쪽, 오른쪽, 앞, 뒤 네 방향에 있는 토마토를 의미한다. 대각선 방향에 있는 토마토들에게는 영향을 주지 못한다. 토마토를 창고에 보관하는 격자모양의 상자들의 크기와 익은 토마토들과 익지 않은 토마토들의 정보가 주어졌을 때, 며칠이 지나면 토마토들이 모두 익는지, 그 최소 일수를 구하는 프로그램을 작성하라. 단, 상자의 일부 칸에는 토마토가 들어있지 않을 수도 있다. 입력..

Algorithm 2021.07.17