1. 부트스트랩 적용하기부트스트랩(Bootstrap)간단한 웹 페이지를 만들기 위해 프로젝트를 생성한 뒤, HTML을 편리하게 개발하기 위해 부트스트랩을 적용했다.부트스트랩(Bootstrap)은 웹 사이트를 쉽게 만들 수 있도록 도와주는 HTML, CSS, JS 프레임워크다. 하나의 CSS로 휴대폰, 태블릿, 데스크탑까지 다양한 기기에서 작동한다. 또, 다양한 기능을 통해 웹 사이트를 제작, 유지, 보수할 수 있다.3학년 1학기 웹프레임워크개발 강의에서 Django를 배울 때 함께 배운 적이 있는데, 이걸 사용하면 백엔드(?)스러운 딱딱한 화면도 그럴싸하게 변한다. CSS 말고 JS도 적용할 수 있어 간단하게 움직이는 웹 페이지를 만들 수 있다. 부트스트랩 공식 사이트에서 파일을 다운받고 압축을 풀어 사..
전체 글
https://www.acmicpc.net/problem/29704다양한 난이도의 문제 N개가 주어지고, 앞으로 T일의 제출 기한이 남아있다. 제출 기한 내에 문제를 제출하지 못하면 문제마다 정해진 벌금을 내야 한다. 혜민이는 하루에 한 문제만 해결할 수 있고, 가능한 적은 금액의 벌금을 내려고 한다. 문제를 해결하는 데 소요되는 일수와 그 문제를 제출 기한 내에 해결하지 못할 경우 내야 하는 벌금이 주어질 때, 혜민이가 내야 하는 벌금의 최소 금액을 구하는 문제다. 문제 탐색하기- 문제에서 구해야 하는 최종 정답은 무엇인지 탐색한 과정- 그 정답을 구하기 위해 어떻게 코드를 구현해야 할지 고민한 과정- 문제에 들어오는 범위를 파악하며 어떤 알고리즘을 쓸 수 있을지 고민해 가는 과정ex. 가능한 시간 복..
1. HTTP 응답스프링(서버)에서 응답 데이터를 만드는 방법은 크게 3가지로 나눌 수 있다.정적 리소스ex. 웹 브라우저에 정적인 HTML, CSS, JS를 제공할 때 사용한다.뷰 템플릿 사용ex. 웹 브라우저에 동적인 HTML을 제공할 때 사용한다.HTTP 메시지 사용HTTP API를 제공하는 경우에는 HTML이 아니라 데이터를 전달해야 하므로, HTTP 메시지 바디에 JSON 같은 형식으로 데이터를 실어 보낸다. 아래에서 하나씩 알아보자. 정적 리소스스프링 부트는 classpath의 다음 디렉토리에 있는 정적 리소스를 제공한다./static, /public, /resources, /META-INF/resources src/main/resources는 리소스를 보관하는 곳이면서 classpath의 시..
1. HTTP 요청기본, 헤더 조회RequestMappingRequestHandler가 동작하는 애노테이션 기반의 스프링 Controller는 다양한 파라미터를 지원한다. 기본값과 헤더값을 꺼내는 방법을 알아보자.Locale우선순위가 가장 높은 Locale 정보(현재 시스템에 설정된 국가 및 언어 설정)를 조회한다.우선순위나 처리 방법은 LocaleResolver 참고@RequestHeader MultiValueMap headerMap모든 HTTP header를 MultiValueMap 형식으로 조회한다.@RequestHeader("host") String host특정 HTTP 헤더를 조회한다.속성필수 값 여부: required / 기본 값 속성: defaultValue@CookieValue(value ..
https://www.acmicpc.net/problem/23978효석이는 영일 코인을 매도해 K원 이상을 현금화하려고 한다. 효석이는 자신이 정한 N개의 날짜에 코인의 가격을 급상승시키고, 처음 코인의 가격이 오른 날부터 매일 한 개씩 매도할 계획이다. 효석이가 정한 날짜에 영일 코인은 X원으로 오르고, 그 후 0원이 될 때까지 하루에 1원씩 가격이 낮아진다. 코인의 가격이 너무 크게 오르면 의심을 살 수 있기 때문에 최소 금액으로 상승시켜 현금화를 하려고 한다. 마지막 가격 상승 이후 코인의 가격이 0이 될 때까지, K원 이상 현금화할 수 있는 가장 작은 정수 X를 구하는 문제다. 문제 탐색하기- 문제에서 구해야 하는 최종 정답은 무엇인지 탐색한 과정- 그 정답을 구하기 위해 어떻게 코드를 구현해야 ..
저번 섹션까지 서블릿과 관련한 프로젝트는 마무리됐다. 이후 스프링 MVC를 집중적으로 학습하기 위해 새로운 스프링 프로젝트를 생성한다. 1. 프로젝트 생성 및 기초 작업이때 뷰 템플릿 엔진으로 JSP 대신 Thymeleaf를 사용하기 때문에 Packaging을 War 대신 Jar로 선택해야 한다.Jar를 사용하면 항상 내장 서버(톰캣 등)를 사용하고, webapp 경로도 사용하지 않는다. 내장 서버 사용에 최적화돼 있는 기능이라, 최근에는 스프링 부트 사용 시 주로 이 방식을 사용한다.War는 WAS를 별도로 설치하고, 그곳에 빌드된 파일을 넣을 때 사용한다. 물론 내장 서버도 사용 가능하지만, 주로 외부 서버에 배포하는 목적으로 사용한다. Welcome 페이지 만들기스프링 부트에 Jar를 사용하면 스..
🐛이슈- 발생한 오류 copy & paste- 오류가 발생한 상황 간략히 설명오늘 하루 예산을 조회하는 API와 오늘부터 말일까지의 날짜별 하루 예산을 조회하는 API에서 오류가 생겼었다.구체적인 오류8월 12일에 배포 서버의 swagger에서 테스트한 결과, 원래대로면 12일부터 31일까지의 하루 예산만 나와야 했지만, 10일과 11일의 하루 예산까지 조회되는 문제가 발생했다.로컬 서버의 swagger 테스트 결과는 정상적으로 나오는 것까지 확인했다.상황CICD 파이프라인이 돌아간 마지막 날짜는 8월 10일이었다. 날짜가 수상하게 들어맞는다는 생각이 들어서, DayBudgetService가 스프링 빈으로 등록될 때 or 배포가 진행될 때 날짜가 고정돼버려서 생긴 문제가 아닐지 의심하게 됐고, 해당 코..
1. 스프링 MVC 전체 구조저번 섹션에서 직접 만든 MVC 프레임워크와 스프링 MVC 구조를 비교해보자.전체적으로 보면 구조가 매우 비슷하다. 객체들 이름만 바꾸고, 기능을 확장하면 거의 똑같이 볼 수 있다.FrontController → DispatcherServlethandlerMappingMap → HandlerMappingMyHandlerAdapter → HandlerAdapterModelView → ModelAndViewviewResolver 메서드 → ViewResolver InterfaceMyView class→ View Interface DispatcherServlet 구조 살펴보기스프링 MVC도 프론트 컨트롤러 패턴으로 구현돼 있다. 그 프론트 컨트롤러가 바로 DispatcherServ..