
이진 탐색이진 탐색은 정렬된 상태의 데이터에서 원하는 값을 찾아내는 알고리즘이다. 데이터의 중앙값과 찾고자 하는 값을 비교한다.이진 탐색은 탐색 대상이 매번 절반으로 줄어들기 때문에 시간 복잡도는 O(logN)이다. 이진 탐색의 동작 원리는 다음과 같다.배열이나 리스트를 정렬한다.배열이나 리스트의 중간 값을 선택한다.중간 값이 목표 값보다 크면 왼쪽 절반을 탐색하고, 중간 값이 목표 값보다 크면 오른쪽 절반을 탐색한다.중간 값과 목표 값이 같을 때까지 탐색한다.예를 들어보자정렬된 배열(arr) : [1, 3, 5, 7, 9, 11, 13]목표 값 : 9먼저 left는 0, right는 6로 시작한다.(시작 인덱스0, 가장 끝 인덱스 6)public class BinarySearchMain { pub..

상황 : thymeleaf로 개발 중 html파일과 css파일을 분리한 후 발생한 에러 html 파일에 css를 넣으니 html 파일이 너무 길어졌다. 그래서 css파일을 분리했다. 공통적으로 resources 폴더 밑에 존재하고 html 파일은 templates 폴더 밑에, css 파일은 static/css/ 폴더 밑에 위치하는 구조이다.그래서 html 파일에서 css 파일을 읽어올 수 있도록 하기 위해 다음과 같이 설정 해주었다.근데 서버를 실행하면 html 파일은 인식해도 css 파일은 인식을 못했다. 👉 수정 전 코드 👉 수정 후 코드 원인 : css 파일의 경로 문제였다. spring boot는 정적 리소스 파일(css, js, 이미지)을 제공할 때 static, public, resourc..

상황 : spring 프로젝트 시에 thymeleaf로 화면을 구성하고 서버를 올렸다. 그리고 localhost:8080/{내 html 파일 이름}.html을 하니 whitelabel error page를 마주하게 되었다. 해결일단 확인할 것은 다음과 같다. build.gradleimplementation 'org.springframework.boot:spring-boot-starter-thymeleaf'implementation 'org.springframework.boot:spring-boot-starter-web' applicaton.yml# Thymeleaf 설정spring: thymeleaf: prefix: classpath:/templates/ suffix: .h..

약간의 사견이 들어있는 글입니다.💼 @Component@Component 어노테이션은 Spring Context에 Bean(빈)을 추가하는 방식이다. 스프링 컨텍스트에 빈을 추가하는 것은 스프링이 관리해야 하는 객체를 인식하게 하는 것이다.즉, 스프링 컨텍스트에 빈을 추가해야 스프링이 객체를 볼 수 있게된다.(그 후 객체 간의 의존성 설정이라던지 메소드 호출이라던지 다양한 기능을 수행할 수 있다.) 그 방법 중 하나가 @Component 어노테이션을 사용하는 것이다. 간단히 과정을 설명하면@Component@Getter@Setterpublic class Parrot { private String name;} // Parrot.class@Configuration@ComponentScan(basePa..
🙆♂️ 동일성(Identity)동일성은 두 객체가 메모리 상에서 같은 객체인지 비교하는 개념이다. 즉, 동일성은 두 객체가 메모리에서 동일한 위치를 참조하는지 의미한다."==" 연산자를 사용하여 비교한다.즉, "==" 연산자는 객체의 참조(레퍼런스)를 비교한다. 객체의 값이 같아도 항상 true를 반환하는 것은 아닌 것이다.대신 기본 타입에 대해서는 "==" 연산자를 사용하면 값을 비교한다.public static void main(String[] args) { Coffee coffee1 = new Coffee(100); Coffee coffee2 = new Coffee(100); System.out.println(coffee1 == coffee2); // false} 두 Coffee..
🎯 JPA의 ID 생성 전략JPA는 직접 할당과 자동 할당을 통해 ID를 생성한다. 먼저, 직접 할당 방식은 @Id 어노테이션을 사용한다. 이 때 다른 어노테이션은 함께 사용하지 않고 기본키를 할당한다.데이터베이스가 아니라 애플리케이션에서 기본 키를 직접 할당한다.@Id@Column(name = "ID")private String id; 기본 키 직접 할당 전략은 em.persist()로 엔티티를저장하기 전에 기본 키를 직접 할당한다.Book book = new Book();book.setId("id1"); // 기본 키 직접 할당em.persist(); 그럼 기본키를 직접 할당하지 않고 데이터베이스에서 생성하주는 값을 사용하려면 어떻게 매핑해야 할까?데이터베이스마다 기본 키를 생성하는 방식이 다르기 ..

🖨 자바에서의 객체 복사자바에서의 객체 복사는 얕은 복사와 깊은 복사가 존재한다. 둘의 차이를 알아보자사용할 예제는 다음과 같다. import java.util.Objects;class Book { private String name; // 책 이름 private Author author; // 저자 public Book(String name, Author author) { this.name = name; this.author = author; } public Book shallowCopy() { // 얕은 복사 return new Book(this.name, this.author); } public Book deepCopy() { // 깊은 복사 Author copiedAuthor = new ..
📗 내 코드@Entity@Getter@NoArgsConstructor(access = AccessLevel.PROTECTED)@AllArgsConstructor(access = AccessLevel.PRIVATE)@Builder(access = AccessLevel.PRIVATE)public class Book { ... } Book 엔티티 코드를 살펴보자. 도서 관련 백엔드 서비스이므로 당연히 Book 엔티티는 존재한다.여기서 살펴볼 것은@NoArgsConstructor(access = AccessLevel.PROTECTED) 👆 이 부분이다. 왜 사용했나?정말 솔직하게 말하면 이 프로젝트 이전 팀 프로젝트에서 팀원 분이 베이스 코드 작성 시에 위처럼 코드를 작성하셨다.그 때는 내가 맡은 부분에만 ..

👻 Servlet(서블릿)Servlet(서블릿)은 Java 언어를 기반으로 하는 웹 애플리케이션 개발을 위한 기술로, 클라이언트의 요청에 따라 동적으로 서버에서 처리하는 자바 클래스이다. 서블릿은 동적 웹페이지를 만들 때 사용되는 자바 기반의 웹 애플리케이션 프로그래밍 기술이며 HTTP 프로토콜을 통해 클라이언트의 요청을 받고, 자바 코드를 통해 동적인 웹 페이지를 생성하거나 데이터를 처리해서 응답을 반환해준다. 서블릿 이전에는?서블릿 이전의 초기 웹은 단순히 정적인 HTML 문서를 클라이언트에게 제공하는 방식이었다.사용자가 서버에 HTML 파일을 요청하면 👉 서버는 해당 HTML 문서를 그대로 전송한 것이다.이를 통해 웹 페이지를 표시할 수는 있었지만, 사용자 맞춤형 데이터나 동적인 컨텐츠는 제공할..

📖 Index(인덱스)Index(인덱스)란 데이터베이스 테이블의 검색 속도를 향상시키기 위한 자료구조이다. 사전의 색인과 같다. 인덱스를 사용하면 데이터베이스에서 원하는 정보(레코드, 튜플)를 빠르게 조회할 수 있다.인덱스는 튜플의 주소라고 생각하면 쉽다. (인덱스에 키를 대응시키고 튜플에 값을 대응시켜보자)또한 인덱스는 정렬되어 있다. 인덱스를 이루는 자료구조인덱스를 구현하기 위한 자료구조로 대표적인 것은 B-Tree와 해시 테이블이다. 1️⃣ B(Balanced)-Tree 인덱스B-Tree는 데이터베이스의 인덱싱 알고리즘 가운데 가장 먼저 도입되고 가장 일반적으로 사용되는 알고리즘으로 트리 구조를 따른다.(트리구조 : 루트 노드, 브랜치 노드, 리프 노드로 구성되는 형태)트리의 리프 노드가 실제 데..
- Total
- Today
- Yesterday
- @ConfigurationProperties
- 티스토리챌린지
- ddl-auto
- 생성자
- 오블완
- N+1문제
- Optional
- checkedException
- 이진탐색
- @Spring
- null
- @NoArgsConstructor
- @Value
- Spring
- springboot
- 자바
- 동등성
- JPA
- Java
- 백준
- lowerBound
- 유효성 검사
- uncheckedException
- 메인메소드
- Thymeleaf
- StreamAPI
- upperBound
- 일급컬렉션
- NPE
- id생성전략
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |