프로퍼티 파일을 이용한 프로퍼티 설정
1. 프로퍼티 파일을 이용한 프로퍼티 설정 스프링은 외부의 프로퍼티 파일을 이용해서 스프링 빈을 설정하는 방법을 제공하고 있다. 예를 들어 다음과 같은 db.properties 파일이 있다고 하자. 1 2 3 4 db.driver=com.mysql.jdbc.Driver db.url...
1. 프로퍼티 파일을 이용한 프로퍼티 설정 스프링은 외부의 프로퍼티 파일을 이용해서 스프링 빈을 설정하는 방법을 제공하고 있다. 예를 들어 다음과 같은 db.properties 파일이 있다고 하자. 1 2 3 4 db.driver=com.mysql.jdbc.Driver db.url...
1. 프로필 개발을 진행하는 동안에는 실제 서비스 목적으로 운영중인 DB를 이용할 수는 없다. 개발하는 동안에는 개발용 DB를 따로 사용하거나 개발 PC에 직접 DB를 설치해서 사용한다.
1. @RequestBody로 JSON 요청 처리 지금까지 응답을 JSON으로 변환하는 것에 대해 살펴봤다. 이제 반대로 JSON 형식의 요청 데이터를 자바 객체로 변환하는 기능에 대해 살펴보자. POST방식이나 PUT방식을 사용하면 name=이름&age=17과 같은 쿼리 ...
웹 페이지에서 Ajax를 이용해서 서버 API를 호출하는 사이트가 많다. 이들 API는 웹 요청에 대한 응답으로 HTML 대신 JSON이나 XML을 사용한다.
1. 간단한 웹 어플리케이션의 구성 요소 간단한 웹 어플리케이션을 개발할 때 사용하는 전형적인 구조는 다음 요소를 포함한다. 프론트 서블릿 컨트롤러 + 뷰 서비스 DAO
1. 컨트롤러 익셉션 처리하기 다음은 ID가 존재할 때의 출력 결과 화면이다. 없는 ID를 경로변수로 사용하면 다음 그림처럼 MemberNotFountException이 발생한다.(회원 데이터가 존재하지 않을 경우 MemberDetailController가 익셉션을 발생시키도록 구...
1. @PathVariable을 이요한 경로 변수 처리 다음은 ID가 10인 회원의 정보를 조회하기 위한 URL이다 http ://localhost:8080/sp5-chap14/members/10
1. 날짜를 이용한 회원 검색 기능 회원 가입 일자를 기준으로 검색하는 기능을 구현하면서 몇 가지 스프링 MVC의 특징을 설명할 것이다. 이를 위해 MemberDao 클래스에 selectByRegdate() 메서드를 추가한다.
사용자 편의를 위해 아이디를 기억해 두었다가 다음에 로그인할 때 아이디를 자동으로 넣어주는 사이트가 많다 이 기능을 구현할 때 쿠키를 사용한다.
1. 로그인 처리를 위한 코드 준비 이 페이지에서는 세션에 관한 내용을 설명한다. 로그인 기능을 이용해서 이 내용을 설명할 것이므로 로그인과 관련된 몇 가지 필요한 코드를 작성한다. 먼저 로그인 성공 후 인증 상태 정보를 세션에 보관할 때 사용할 AuthInfo 클래스를 다음과 같...
1. 인터셉터 예를 들어 인터셉터가 없는 웹에서 로그인하지 않은 상태에서 비밀번호를 변경한다고 “http.://localhost:8080/edit/changePassword” 주소에 들어간다면 비밀번호 변경 폼이 출력될 것이다. 로그인 하지 않았는데 변경 폼이 출력되는 것은 이상하...
1. 커맨드 객체의 값 검증과 에러 메시지 처리 폼 값 검증과 에러 메시지 처리는 어플리케이션을 개발할 때 놓쳐서는 안 된다.
1. Bean Validation을 이용한 값 검증 처리 @Valid 애노테이션은 Bean Validation 스펙에 정의되어 있다. 이 스펙은 @Valid 애노테이션뿐만 아니라 @NotNull, @Digits, @Size 등의 애노테이션을 정의하고 있다. 이 애노테이션을 사용하면...
1. < spring:message> 태그 사용하는 이유 사용자 화면에 보일 문자열은 JSP에 직접 코딩한다. 예를 들어 로그인 폼을 보여줄 떄 ‘아이디’, ‘비밀번호’ 등의 문자열을 다음과 같이 뷰 코드에 직접 삽입한다.
1. 커맨드 객체 1.1 커맨드 객체를 이용해서 요청 파라미터 사용하기 step2.jsp가 생성하는 폼은 다음 파라미터를 이용해서 정보를 서버에 전송한다. email name password confirmPassword
1. 요청 매핑 애노테이션을 이용한 경로 매핑 웹 어플리케이션을 개발하는 것은 다음 코드를 작성하는 것이다. 특정 요청 URL을 처리할 코드 처리 결과를 HTML과 같은 형식으로 응답하는 코드
1. 모델 1.1 Model을 통해 컨트롤러에서 뷰에 데이터 전달하기 컨트롤러는 뷰가 응답화면을 구성하는데 필요한 데이터를 생성해서 전달해야 한다. 이때 사용하는 것이 Model이다. 다음은 그 예이다
스프링 MVC는 웹 요청을 처리하기 위해 다양한 구성 요소를 연동하는데 이 페이지에서는 핵심 구성 요소에 대해 살펴보도록 하자.
스프링을 사용하는 여러 이유가 있지만 한 가지 이유를 꼽자면 스프링이 지원하는 웹 MVC 프레임워크 때문이다.
1. 트랜잭션 처리 두 개이상의 쿼리를 한 작업으로 실행해야 할 때 사용하는 것이 트랜잭션(transaction)이다. 트랜잭션을 여러 쿼리를 논리적으로 하나의 작업으로 묶어준다. 한 트랜잭션으로 묶인 쿼리 중 하나라도 실패하면 전체 쿼리를 실패로 간주하고 실패 이전에 실행한 쿼리...
1. JdbcTemplate을 이용한 쿼리 실행 스프링을 사용하면 DataSource나 Connectionm Statement, ResultSet을 직접 사용하지 않고 JdbcTemplate을 이용해서 편리하게 쿼리를 실행할 수 있다.
자바에서는 JDBC API를 사용하거나 JAP, MyBatis와 같은 기술을 사용해서 DB연동을 처리한다. 이 페이지에서는 JDBC를 위해 스프링이 제공하는 JdbcTemplate의 사용법을 설명한다.
1. 프로젝트 준비 pom.xml파일에는 다음과 같이 aspectjweaver 의존을 추가한다. 이 모듈은 스프링이 AOP를 구현할 때 사용하는 모듈이다. 1 2 3 4 5 6 7 8 9 10 11 12 <dependencies> <dependency> ...
자동 주입과 함께 사용하는 추가 기능이 컴포넌트 스캔이다. 컴포넌트 스캔은 스프링이 직접 클래스를 검색해서 빈으로 등록해주는 기능이다. 설정 클래스에 빈으로 등록하지 않아도 원하는 클래스를 빈으로 등록할 수 있으므로 컴포넌트 스캔 기능을 사용하면 설정 코드가 클게 줄어든다.
1. 컨테이너 초기화와 종료 스프링 컨테이너는 초기화와 종료라는 라이프사이클을 갖는다.
1. 자동 주입이란? 스프링이 자동으로 의존하는 빈 객체를 주입해주는 기능이 있다. 이를 자동 주입이라고 한다. 스프링에서 의존 자동 주입을 설정하려면 @Autowired 애노테이션이나 @Resource 애노테이션을 사용하면 되는데 이 페이지에서는 @Autowired 애노테이션의 ...
1. 두 개 이상의 설정 파일 사용 스프링을 이용해서 어플리케이션 개발하다보면 적게는 수십 개에서 많게는 수백여 개 이상의 빈을 설정하게 된다. 설정하는 빈의 개수가 증가하면 한 개의 클래스 파일에 설정하는 것보다 영역별로 설정 파일을 나누면 관리하기 편해진다. 스프링은 한 개 이...
앞선 포스팅 DI에서 의존이 무엇인지, DI를 이용해 의존 객체를 주입하는 방법에 대해 알아봤다. 그리고 객체를 생성하고 의존 주입을 이용해서 객체를 서로 연결해주는 조립기에 대해서 살펴봤다. 위의 내용을 정리한 이유는 스프링이 DI를 지원하는 조립기이기 때문이다.
1. Annotation이란? Spring에서는 Annotation을 많이 사용합니다. Annotation의 역할은 아래와 같습니다. JAVA에서 Annotation이라는 기능이 있습니다. 사전상으로 주석의 의미이지만 JAVA에서는 주석 이상의 기능을 가지고 있습니다. Ann...
1. 의존이란? DI는 ‘Dependency Injection’의 약자로 우리말로는 ‘의존 주입’이라고 번역한다. 여기서 말하는 의존은 객체 간의 의존을 의미한다. 이해를 돕기 위해 회원 가입을 처리하는 기능 을 구현한 다음의 코드를 보자
1. 스프링(Spring)이란? 1.1 스프링의 개념
1. 다익스트라(Dijkstra) 알고리즘 다익스트라 알고리즘은 그래프에서 한 정점(노드)에서 다른 정점까지의 최단 경로를 구하는 알고리즘 중 하나이다. 이 과정에서 도착 정점 뿐만 아니라 모든 다른 정점까지 최단 경로로 방문하여 각 정점까지의 최단 경로를 모두 찾게 된다. 매번 ...
1. 플로이드-워셜(Floyd-Warshall) 알고리즘이란? 모든 최단 경로를 구하는 알고리즘
1. Sieve of Erathosthenes, 에라토스테네스의 체 고대 그리스의 수학자 에라토스테네스가 만들어 낸 소수를 찾는 방법이다. 이 방법은 마치 체로 치듯이 수를 걸러낸다고 하여 ‘에라토스테네스의 체’라고 부른다.
1. 최대공약수(GCD) 두 정수 a,b의 공약수는 a의 약수이자 b의 약수인 정수이다. 최대공약수(GCD, Great Common Divisor)는 가장 큰 공약수를 말한다. GCD(a,b,c) = GCD(GCD(a,b), c) 세 수, 그 이상 N개의 숫자의 최대공약수는 ...
1. Binary Search이란? 이진 탐색이란 데이터가 정렬돼 있는 배열에서 특정한 값을 찾아내는 알고리즘이다. 배열의 중간에 있는 임의의 값을 선택하여 찾고자 하는 값 X와 비교한다. X가 중간 값보다 작으면 중간 값을 기준으로 좌측의 데이터들을 대상으로, X가 중간 값보다 ...
1. Greedy Alogorithm이란? Greedy는 ‘탐욕스러운, 욕심 많은’이란 뜻이다. 탐욕 알고리즘은 말 그대로 선택의 순간마다 당장 눈앞에 보이는 최적의 상황만을 쫓아 최종적인 해답에 도달하는 방법이다. 탐욕 알고리즘은 최적해를 구하는 데에 사용되는 근사적...
1. 누적합(Prefix Sum)이란? 누적합은 말 그대로 구간의 누적합을 구하는 문제입니다. 일반적으로 사용되는 배열에 값을 저장하고 지정된 인데스부터 하나씩 더해가는 방식은 최악의 경우 $O(n^2)$의 시간복잡도를 갖기 때문에 입력의 범위가 클 때 사용할 수 없습니다. 하지만...
1. Kanpsack Problem이란? 도둑이 보석가게에 배낭을 메고 침입했다. 배낭의 최대 용량은 W이며, 이를 초과해서 보석을 담으면 배낭이 찢어질 것이다. 각 보석들의 무게와 가격은 알고 있다. 배낭이 찢어지지 않는 선에서 가격 합이 최대가 되도록 보석을 담는 방법은?
1.Dynamic Programming이란?
1. Web3.0이란? Web 3.0은 인공지능과 블록체인을 기반으로 맞춤형 정보를 제공하고 데이터 소유를 개인화하는 3세대 인터넷입니다. 기존에 사용하던 서비스에서 인공지능을 통해 개인 맞춤형 정보를 얻고, 블록체인을 통해 개인의 정보 소유 및 보안을 강화하는 지능형 웹 기술이다.
1. MVC 패턴이란? MVC란 Model-View-Controller의 약자로 애플리케이션을 세 가지 역할로 구분한 개발 방법론이다. 아래의 그림처럼 사용자가 입력을 담당하는 View를 통해 요청을 보내면 해당 요청을 Controller가 받고, Controller는 Model을...
1. 이진 트리 순회 트리 순회에는 전위 순회(preoder), 중위 순회(inorder), 후위 순회(postorder)가 있다.
1. 우선순위 큐, Prority Queue 1.1 우선순위 큐란? 큐(Queue)는 먼저 들어오는 데이터가 먼저 나가는 FIFO(First In First Out)형식의 자료구조이다. 우선순위 큐(Priority Queue)는 먼저 들어오는 데이터가 아니라, 우선 순위가 높은 데...
1. ctags란? ctags란 프로그램이 소스코드의 태그(전역번수 선언, 함수 정의, 매크로 선언)들의 Database(tags file)를 생성하는 Unix 명령어이다.
1. ZNS란? Zoned Namespace의 약자로, Namespace를 Zone 단위로 나눠 사용하는 기술을 말한다.
서비스 프락시 종류
1. Service란
1. HashSet 클래스 HashSet 클래스 정렬 방법을 소개하기 전에 HashSet 클래스에 대해 간단하게 알아보자.\ HashSet 클래스는 AbstractSet 클래스를 확장하고 Set 인터페이스를 구현한 클래스이다. 중복 값이 저장되지 않는다. 삽입 순서가 ...
1. DevOps DevOps는 애플리케이션과 서비스를 빠른 속도로 제공할 수 있도록 조직의 역량을 향상시키는 문화, 철학, 방식 및 도구의 조합이다. 기존의 소프트웨어 개발 및 인프라 관리 프로세스를 사용하는 조직보다 제품을 더 빠르게 혁신하고 개선할 수 있다. 이러한 빠른 속도...