전체 글 88

트랜잭션 이해

트랜잭션 여러 읽기/쓰기를 논리적으로 하나로 묶는 것 업무 처리를 위한 논리적인 작업 단위 반영은 commit, 반영하지 않을려면 rollback ACID(atomicity, consistency, isolation, durability : 원자성, 일관성, 고립성, 지속성) 데이터베이스 트랜잭션이 안전하게 수행된다는 것을 보장하기 위한 성질을 가리키는 약어 원자성(Atomicity) 트랜잭션과 관련된 작업들이 부분적으로 실행되다가 중단되지 않는 것을 보장하는 능력 자금 이체는 성공할 수도 실패할 수도 있지만 보내는 쪽에서 돈을 빼 오는 작업만 성공하고 받는 쪽에 돈을 넣는 작업을 실패해서는 안된다. 일관성(Consistency) 트랜잭션이 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태..

프로그래밍/DB 2021.09.05

Spring과 Spring Boot 차이점

Spring - Transaction Manager, Hibernate Datasource, Entity Manager, Session Factory와 같은 설정을 하는데에 어려움이 많이 있음. - 최소한의 기능으로 Spring MVC를 사용하여 기본 프로젝트를 셋팅하는데 개발자에게 너무 많은 시간이 걸림. Spring Boot - 자동설정(AutoConfiguration)을 이용하여 어플리케이션 개발에 필요한 모든 내부 디펜던시를 관리함. - 내장형 톰캣(Embed Tomcat)을 가지고 있기 때문에 별도의 톰캣을 설치할 필요가 없음. - 독립적으로 실행 가능한 jar로 배포 가능. - xml 설정을 하지 않아도 됨. 한마디로 Spring에서 어렵게 설정하던 것들을 Spring Boot가 알아서 관리해..

타임리프(thymeleaf) th:each, 변수 표현식: ${...}

th:each 는 반복이다. ${..} 는 변수 표현식이다. 1. th:each="member : ${members}" 반복하면서 members에 값들을 가지고 온다. 2. th:text="${member.값} 반복에서 받은 member 값을 text로 보여준다. Members No 이름 내용 1 이름 내용 Member 클래스는 public class Member { private int number; private String name; private String contents; public Member() { } public Member(int number, String name, String contents) { this.number = number; this.name = name; this.co..

타임리프(thymeleaf)

타임리프(thymeleaf)를 사용하기 위해서는 1. dependencies에 implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' 를 추가해 줘야한다. dependencies { implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' implementation 'org.springframework.boot:spring-boot-starter-web' compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springf..

동적 프로그래밍(Dynamic programming)

동적 프로그래밍(Dynamic programming) - 하위의 작은 문제들을 풀고, 이를 이용해서 더 큰 문제를 풀어나가는 방법 - 일반적으로 주어진 문제를 풀기 위해서, 문제를 여러 개의 하위 문제(subproblem)로 나누어 푼 다음, 그것을 결합하여 최종적인 목적에 도달하는 것 - 동적 계획법은 계산 횟수를 줄일 수 있다. 특히 이 방법은 하위 문제의 수가 기하급수적으로 증가할 때 유용 - 동적 계획 알고리즘은 최단 경로 문제, 행렬의 제곱 문제 등의 최적화에 사용 그리디 알고리즘 비교 - 동적 프로그래밍은 가능한 모든 방법을 고려해야 한다는 단점 - 그리디 알고리즘은 항상 최적해를 구해주지는 않지만, 다행히 Minimum Spanning Tree(최소 신장 트리 문제) 등의 여러 문제에서 그리..

백준 알고리즘 15829번 자바

https://www.acmicpc.net/problem/15829 15829번: Hashing APC에 온 것을 환영한다. 만약 여러분이 학교에서 자료구조를 수강했다면 해시 함수에 대해 배웠을 것이다. 해시 함수란 임의의 길이의 입력을 받아서 고정된 길이의 출력을 내보내는 함수로 정 www.acmicpc.net 이 문제는 모듈러 연산 법칙을 알아야 한다. 1. (a + b) mod n = {(a mod n) + (b mod n)} mod n 2. (a - b) mod n = {(a mod n) - (b mod n)} mod n 3. (a * b) mod n = {(a mod n) * (b mod n)} mod n 이 식을 보고 모듈러 연산 법칙 중 3번만 선택해서 문제를 풀면 틀린다.. 3번만 이용하게..

TDD (테스트 주도 개발)_책

http://www.kyobobook.co.kr/product/detailViewKor.laf?barcode=9788980783052 테스트 주도 개발 시작하기 - 교보문고 Test-Driven Development | 작동하는 깔끔한 코드를 만드는 데 필요한 습관- JUnit 5를 이용한 테스트 주도 개발 안내- 테스트 작성과 설계를 위한 대역- 테스트 가능한 설계 방법 안내- 유지보수하기 좋은 www.kyobobook.co.kr 아직 다 읽어 보진 못했지만 테스트를 먼저하는 개발 습관을 들여야겠다. 챕터 2~3의 주요 내용으로는 - 눈으로만 보지말고 직접 따라해 볼 것. - 구현 -> 테스트 ->디버깅, 코드수정이 아닌 테스트 -> 코딩 -> 리팩토링 -> 테스트로 개발. - 쉬운 테스트부터 테스트하..

프로그래밍/TDD 2021.09.02

스프링 부트 연동 (mysql, mybatis)

https://github.com/seongjindev/mybatis_pratice GitHub - seongjindev/mybatis_pratice: 스프링 부트와 마이바티스 연습 스프링 부트와 마이바티스 연습. Contribute to seongjindev/mybatis_pratice development by creating an account on GitHub. github.com https://start.spring.io/ 접속 후 Build : Gradle Language : Java Spring Boot : 2.5.4 Dependencies : Spring Web, Thymeleaf, Lombok, MyBatis Framework, MySQL Driver 으로 설정 후 프로젝트 오픈 목표 마..

HTTP 헤더2

모든 개발자를 위한 HTTP 웹 기본 지식 강의를 듣고 간단하게 정리한 내용 및 추가로 알게 된 내용입니다. 캐시 캐시들은 일반적으로 GET에 대한 응답만을 캐싱한다 캐시가 없으면 데이터가 변경되지 않아도 네트워크를 통해 데이터를 다운받아야 한다. 비싼 네트워크 사용량을 줄일 수 있다. 로딩 속도가 빨라진다. 캐시 시간 초과 캐시 유효시간이 초과하면, 서버를 통해서 캐시를 갱신한다. 검증 헤더 추가 기존 데이터가 변경되거나 변경되지 않을 수 있음. 변경되면 캐시를 갱신해야하지만 변경되지 않으면 기존 캐시를 재사용하는게 이득임. 따라서 검증 헤더를 추가해 준다. 요청 할 때 최종 수정한 시간을 보내서, 서버에서 최종 수정 시간을 체크하여 차이가 있으면 데이터를 보내고 차이가 없으면 304 Not Modif..

탐욕 알고리즘(Greedy)

탐욕 알고리즘 각각의 단계에서 최적의 수를 찾는다 각 단계에서 국소 최적해를 찾음으로써 최종적으로 전역 최적해를 구하게 된다 그리디 알고리즘은 100% 최적해를 보장해주지 않는다 예시) 동전 문제 가지고 있는 동전이 500, 100, 50, 10, 5, 1 이 있고, 거스름돈이 789원일 때 가장 적은 동전을 주는 방법은? 1. 가장 가치가 있는 동전을 먼저 계산하고 다음 가치 있는 동전을 선택하고 계속 반복한다 500원이 가장 크므로 500을 1개 선택한다 2. 500원 1개, 100원 2개, 50원 1개, 10원 3개, 5원 1개, 1원 4개가 정답이 된다. 단점으로 그리디 알고리즘은 100% 최적해를 보장해주지 않는다 예시) 물건1 - 크기 40, 가격 10000 물건2 - 크기 30, 가격 600..