알고리즘
단순 탐색(Simple Search)
배열의 요소를 처음부터 끝까지 순차적으로 순회하며 원하는 요소를 찾는 방식.
최악의 경우는 모든 배열을 순회하고 나서야 값을 찾거나 찾지 못할 수 있다.
시간복잡도는 0(n)의 속도를 가짐.
이진 탐색(Binary Search)
Binary Search란 이진 탐색으로서 단순한 선형 탐색(Linear Search)와 달리 절반씩 배열을 줄여나가면서 찾는 탐색 알고리즘.
단, 이진 탐색 알고리즘을 실행하기 위해서는 배열의 요소가 정렬이되어있어야 하는 단점이 있음
시간복잡도는 O(logn)의 속도를 가짐
이진 탐색 과정
1.
배열의 중앙 값(middle index)을 찾습니다.
2.
찾고자하는 값과 중앙값을 비교하여 작으면 왼쪽, 크면 오른쪽의 요소들의 배열의 중앙값을 다시 찾습니다.
3.
현재 중앙값의 요소와 찾고자하는 값을 계속 비교하며 찾을때까지 2번의 과정을 반복합니다.
Spring MVC
•
프로젝트 빌드(mustache, web)
Spring Initializr -> Lombok, Spring Configuration Processor, Spring Web, Mustache, Mysql Driver 추가
•
new.mustache
<form action="/articles" method="post"> // /articles로 포스트 전송
<input type="text" name="title">
<input type="submit">
</form>
Java
복사
•
ArticleController
@Controller
@RequestMapping("/articles")
@Slf4j
public class ArticleController {
@GetMapping("/new")
public String createPage(){
return "new";
}
@PostMapping("")
public String add(ArticleDto articleDto){
log.info(articleDto.getTitle()); //ArticleDto에 title이 들어오면 log에 띄어주기
return "";
}
}
Java
복사
•
ArticleDto
package com.mustache.bbs3.domain.dto;
import lombok.Getter;
@Getter
public class ArticleDto {
private String title;
public ArticleDto(String title) {
this.title = title;
}
}
Java
복사
JPA 연동
1.
starter-data-jpa추가
2.
application.yml에 db설정 정보 추가
3.
application.yml에 jpa설정 정보 추가
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: localhost
username: root
password: 1q2w3e4r
jpa:
hibernate:
ddl-auto: update
Java
복사
4.
Article Entity만들기 → Table이름을 article2로 바꾸는 옵션 추가
@Entity
@Table(name = "article2")
@Getter
@NoArgsConstructor
public class Article {
@Id
private Long id;
private String title;
public Article(String title) {
this.title = title;
}
}
Java
복사
5.
ArticleRepository만들기
6.
1. repository.save() 이용해서 DB에 Insert하기
@PostMapping("")
public String add(ArticleDto articleDto) {
log.info(articleDto.getTitle());
Article savedArticle = articleRepository.save(articleDto.toEntity());
log.info("generatedId:{}", savedArticle.getId());
return "";
}
Java
복사
Bootstrap 적용
부트스트랩은 웹 개발에 있어 보편적으로 널리 쓰이는 구성 요소들을 미리 디자인 해둔 툴킷이다. 다양한 화면 크기에 대응할 수 있는 반응형 웹을 지향하고 있기 떄문에 화면 크기에 따라 유연하게 변화하는 UX/UI를 적용할 수 있다는 장점도 있다.
•
header
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Bootstrap demo</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-Zenh87qX5JnK2Jl0vWa8Ck2rdkQ2Bzep5IDxbcnCeuOxjzrPF/et3URy9Bv1WTRi" crossorigin="anonymous">
</head>
<body>
Java
복사
•
footer
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/js/bootstrap.bundle.min.js"
integrity="sha384-OERcA2EqjJCMA+/3y+gxIOqMEjwtxJY7qPCqsdltbNJuaOe923+mo//f6V8Qbsw3" crossorigin="anonymous"></script>
</body>
Java
복사
조회 기능
1.
Controller에 /articles/{id} 연결한다.
2.
id를 받아서 select해서 Article로 받아오는 기능 —> Model이 수행
3.
Article로 받아온 데이터를 출력하는 화면
@GetMapping("/{id}")
public String selectSingle(@PathVariable Long id, Model model) {
Optional<Article> optArticle = articleRepository.findById(id);
if (!optArticle.isEmpty()) {
// Optional.get() ---> Article
model.addAttribute("article", optArticle.get());
return "show";
} else {
return "error";
}
}
Java
복사
Spring에서 DI해주는 구간
// ArticleRepository는 interface지만 그 구현체(ArticleDao)를 SpringBoot가 넣어준다.
public class ArticleController {
// Spring이 ArticleRepository구현체를 DI (인터페이스 아님)
private final ArticleRepository articleRepository;
public ArticleController(ArticleRepository articleRepository) {
this.articleRepository = articleRepository;
}
Java
복사
list 화면 만들기
///list일때 /일때 모두 list로 가도록
@GetMapping("/list")
public String list() {
return "list";
}
@GetMapping("")
public String index() {
return "redirect:/articles/list";
}