전체 글 88

TDD (테스트 주도 개발)

http://www.kyobobook.co.kr/product/detailViewKor.laf?barcode=9788980783052 테스트 주도 개발 시작하기 - 교보문고 Test-Driven Development | 작동하는 깔끔한 코드를 만드는 데 필요한 습관- JUnit 5를 이용한 테스트 주도 개발 안내- 테스트 작성과 설계를 위한 대역- 테스트 가능한 설계 방법 안내- 유지보수하기 좋은 www.kyobobook.co.kr 1. 구현 -> 테스트 ->디버깅, 코드수정이 아닌 테스트 -> 코딩 -> 리팩토링 -> 테스트로 개발. 2. 쉬운 테스트부터 테스트하고 점차 어려운 테스트를 테스트 - 어려운 테스트를 먼저하면 초반에 구현할 것이 많아지기 때문 3. 예외적인 경우에서 정상인 경우로 진행 - ..

프로그래밍/TDD 2021.09.26

쓰레드 상태 및 과정

쓰레드 상태 - NEW : 쓰레드가 생성되고 아직 start()가 호출되지 않은 상태 - RUNNABLE : 실행 중 또는 실행 가능한 상태 - BLOCKED : 동기화블럭에 의해서 일시정지된 상태(lock이 풀릴 때까지 기다리는 상태) - WAITING, TIMED_WAITING : 쓰레드의 작업이 종료되지는 않았지만 실행가능하지 않은(nurunnable) 일시정지상태. TIMED_WAITING은 일시정지시간이 지정된 경우를 의미 - TERMINATED : 쓰레드의 작업이 종료된 상태 쓰레드 과정

프로세스와 쓰레드(이해와 구현)

프로세스 - 프로세스는 실행중인 프로그램으로 프로그램을 실행하면 OS로부터 실행에 필요한 자원(메모리)을 항당받아 프로세스가 된다. 쓰레드 - 프로세스는 프로그램을 수행하는데 필요한 데이터와 메모리 등의 자원 그리고 쓰레드로 구성되어 있으며 프로세스의 자원을 이용해서 실제로 작업을 수행하는 것이 쓰레드이다. 멀티쓰레딩 장점과 단점 - 장점 1. cpu 사용률 향상 2. 자원을 효율적으로 사용 3. 사용자에 대한 응답성 향상 4. 작업이 분리되어 코드가 간결 - 단점 1. 프로세스 내에서 자원을 공유하면서 작업하기 때문에 동기화 문제가 발생할 수 있음 2. 교착상태(두 쓰레드가 자원을 점유한 상태에서 서로 상대편이 점유한 자원을 사용하려고 기다리느라 진행이 멈춰있는 상태)가 발생할 수 있음 쓰레드 구현 방..

타임리프(thymeleaf) 선택 변수 표현식 *{}

선택 변수 표현식 *{} 를 사용해서 데이터를 출력해보자 ${}와의 차이점 Selection expressions are just like variable expressions, except they will be executed on a previously selected object instead of the whole context variables map. 선택 표현식은 전체 컨텍스트 변수 맵 대신 이전에 선택한 객체에서 실행된다는 점을 제외하면 변수 표현식과 같습니다. 컨트롤러에서 데이터를 보내자 @GetMapping("/th-ast") public String thAst(Model model) { Member member = new Member(1, "kim", "contents_etc_11"..

tdd 2.계산기 만들기(빼기)

1. 기능을 검증하는 테스트 코드 작성 @Test void 빼기() { //given //when //then } 2. 메서드의 이름, 파라미터, 정적 메서드, 인스턴스 메서드, 클래스 이름 등을 고민하고 적용하기 - 빼기니깐 메서드 이름을 subtract로 하자 @Test void 빼기() { //given int a = 10; int b = 5; //when int result = Calculator.subtract(a, b); //then Assertions.assertThat(result).isEqualTo(5); } 3. 메서드가 없으므로 메서드를 추가하자 public static int subtract(int a, int b) { return 0; } 4. 테스트를 실행해보자 실패하게 된다 5..

프로그래밍/TDD 2021.09.17

tdd 1.계산기 만들기(더하기)

1. 기능을 검증하는 테스트 코드 작성 import org.junit.jupiter.api.Test; public class CalculatorTest { @Test void 더하기() { //given //when //then } } 2. 메서드의 이름, 파라미터, 정적 메서드, 인스턴스 메서드, 클래스 이름 등을 고민하고 적용하기 - 계산기이니깐 클래스이름을 Calculator로 하자 - 더하기이니깐 메서드 이름을 add로 하자 import org.assertj.core.api.Assertions; import org.junit.jupiter.api.Test; public class CalculatorTest { @Test void 더하기() { //given int a = 10; int b = 20..

프로그래밍/TDD 2021.09.16

타임리프(thymeleaf) map 데이터 출력

map 데이터를 출력하여 보자. 컨트롤러에서 데이터를 보낸다. @GetMapping("/th-map") public String thMap(Model model) { Map score = new HashMap(); score.put("userA", 100); score.put("userB", 90); score.put("userC", 50); model.addAttribute("score", score); return "view/th-map"; } th map userA th:text="${score['userA']}" 이렇게 특정값을 바로 받을 수 있고, th:each 를 통해 반복할 수도 있다. 결과 화면

관계

관계의 정의 관계(Relationship)를 사전적으로 정의하면 상호 연관성이 있는 상태로 말할 수 있다. 이것을 데이터 모델에 대입하여 정의해 보면, “엔터티의 인스턴스 사이의 논리적인 연관성으로서 존재의 형태로서나 행위로서 서로에게 연관성이 부여된 상태”라고 할 수 있다. 관계는 엔터티와 엔터티 간 연관성을 표현하기 때문에 엔터티의 정의에 따라 영향을 받기도 하고, 속성 정의 및 관계 정의에 따라서도 다양하게 변할 수 있다. 엔티티 엔터티란 “업무에 필요하고 유용한 정보를 저장하고 관리하기 위한 집합적인 것(Thing)”으로 설명 인스턴스 인스턴스라는 것은 엔터티의 하나의 값에 해당한다고 정의 관계의 패어링 각각의 엔터티의 인스턴스들은 자신이 관련된 인스턴스들과 관계의 어커런스로 참여하는 형태를 관계..

프로그래밍/DB 2021.09.15