

build.gradle


→ 실행 결과

✅ 생성된 Test 클래스의 위치 확인.
✅ 자동으로 생성된 테스트 클래스의 이름은 “테스트 대상 클래스+Test”로 자동 생성
@Test : 테스트 메서드임을 나타냄. 실행 가능
@BeforeEach : 각 메서드 전에 실행됨을 나타냄.
@BeforeAll : 현재 클래스의 모든 메서드보다 먼저 실행되어야하는 메서드 표시.
@AfterAll : 현재 클래스의 모든 메서드보다 나중에 실행되어야하는 메서드 표시.
@RepeatedTest : 메서드 반복 호출을 함을 표시.
@DisplayName : 사용자 지정 표시 이름을 선언. -> @Test 랑 같이쓰세요
…
→ 테스트 메서드 및 Life Cycle을 잘 이해하고 있어야. 우아하게 활용할 수 있다.
CI/CD란?
- CI/CD는 애플리케이션 개발 단계를 자동화하여 애플리케이션을 더욱 짧은 주기로 고객에게 제공하는 방법입니다.
참고 : https://www.redhat.com/ko/topics/devops/what-is-ci-cd
1.간단하게 만드세요.
2.엣지 케이스 테스트
엣지 케이스란,
알고리즘이 처리하는 데이터의 값이 알고리즘의 특성에 따른 일정한 범위를 넘을 경우에 발생하는 문제를 가리킨다.
예를 들면 fixnum이라는 변수의 값이 -128 ~ 127의 범위를 넘는 순간 문제가 발생하는 경우가 있을 수 있다.
3.버그를 수정하기 전에 테스트 작성
4.설명이 포함된 이름 사용
5.한 번에 하나의 요구 사항 테스트
TDD : http://clipsoft.co.kr/wp/blog/tddtest-driven-development-%EB%B0%A9%EB%B2%95%EB%A1%A0/

-> 스레드 부분을 스택이라 부르는 이유 : 스택이랑 같은 구조를 띄어서 LIFO : 젤 마지막에 들온거 젤 먼저 나감.
...
int main(void){
func1(); // func1() 호출
return 0;
}
void func1(){
func2(); // func2() 호출
}
void func2(){
}
...
함수 호출에 의한 스택 프레임의 변화.


실행 단계 살펴보기
→ Stack 자료구조! Last-In, First-Out
참고 : http://www.tcpschool.com/c/c_memory_stackframe
psvm을 실행하며 시작.싱글 쓰레드 : 메인 쓰레드가 종료하면 프로세스도 종료.
멀티 쓰레드 : 실행 중인 쓰레드가 하나라도 있다면, 프로세스 미종료.
-> 메인쓰레드가 비워졌다더라도 다른 쓰레드가 작업 중이면 종료 안됨.
→ 잘못된 처리로, 계속 돌고있는 쓰레드가 하나라도 있다면…? ☠️ 프로그램이 끝나지 않음.... 무한굴레,.? process kill 로 강제로 프로세스를 죽여야할 수도 있음.
⌨️ 코드로 쓰레드를 확인 할 수 있다 ⁉️
public class Main {
public static void main(String[] args) {
System.out.println(Thread.currentThread().getName());
}
}
⌨️ 코드로 쓰레드를 만들 수 있다 ⁉️
두 방법 모두 쓰레드를 통해 작업하고 싶은 내용은 run() 메소드에 작성하면 된다.
public class ImplementRunnable implements Runnable{
@Override
public void run() {
System.out.println("Implement Runnable : " + Thread.currentThread().getName());
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.getStackTrace();
}
System.out.println("- Implement Runnable End -" );
}
}
...
public class ExtendThread extends Thread{
@Override
public void run() {
System.out.println("Extend Thread : " + getName()); // 현재 실행 중인 쓰레드의 이름을 반환.
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.getStackTrace();
}
System.out.println("- Extend Thread End -" );
}
}
→ 실행 코드
...
public class Main {
public static void main(String[] args) {
System.out.println(Thread.currentThread().getName());
Thread implementRunnable = new Thread(new ImplementRunnable());
implementRunnable.start();
ExtendThread extendThread = new ExtendThread();
extendThread.start();
}
}
🎤 수석 Java 소프트웨어 개발자가 알려주는 10분컷 Java Thread Code 랩 코딩
💻 컴퓨터가 동시에 처리할 수 있는 최대 작업 수는 CPU 코어(core) 수와 같다.
→ 스레드의 개수가 코어의 수보다 많을 경우, 스레드를 어떤 순서로 동시성을 실행할 것인가 결정하는 스레드 스케줄링.
자바의 스레드 스케줄링은 우선 순위(Priority) 방식과 순환 할당(Round-Robin) 방식 사용.
기본 메커니즘은 Queue 구조를 가짐
- 우선 순위 방식 : 우선 순위가 높은 스레드가 실행 상태를 더 많이 가지도록 스케줄링.
: 1~10까지 값을 가질 수 있으며, 기본은 5.
- 순환 할당 방식
: 시간 할당량(Time Slice)을 정해서 하나의 스레드를 정해진 시간만큼 실행.
혼자 독점하지 않기 위해서 시간을 컷해서 골고루 작업들이 돌아갈 수 있도록 시간을 자르는 방법 : 타임 슬라이스



공부해야할 것! Object 클래스 코드로 돌아보기
생활코딩 강의 듣기 : https://opentutorials.org/course/1223/6241
🤔 아니,.. 왜이렇게 멀티 스레드, 멀티 스레드 호들갑들이야…?
바로 바로!!
스레드는 잘 다루면 매우 효율적이지만,
동기화가 무슨 문제가 있나?
: 스레드를 잘 다루면 좋은데 스레드 간섭과 메모리 어쩌고 문제를 겪을 수 있음. 스레드가 여러개면 데이터에 접근할 수 있는 스레드도 여러개라는 뜻. 공유되는 데이터 때메 heap에서 문제가 생길 수 있음.
-> 내가 원하지 않는 이상한 결과가 나올 수도 있음.

→ 자료 출처
두 개 이상의 스레드가 동일한 리소스에 액세스하려고 시도하고 Java 런타임이 하나 이상의 스레드를 느리게 실행하거나 심지어 실행을 일시 중단할 때 발생하는 스레드 경합을 일으킬 수 있다.
-> ? 어떻게 해결할 수 있는지 알아야함.
➕동시성 VS 병렬성 미리 알아보기 : 추가 공부 따로해야함.
참고 : https://seamless.tistory.com/42
✋ LAN vs WAN
LAN (Local Area Network)
WAN (Wide Area Network)
- 서로 떨어져 있는 LAN 사이를 전용선 등으로 연결한 광역 네트워크를 말한다.

LAN을 통해 건물의 네트워크에 접속하거나 자원을 공유할 수 있다.
- WIFI 공유기를 통해 노트북이나 핸드폰으로 인터넷에 연결하는것도 LAN
- WIFI 공유기를 통해 컴퓨터에서 프린터에 연결하는것도 LAN

-> 좁은 공간의 네트워크





WAN을 통해 멀리 떨어져 있는 LAN 사이를 연결할 수 있다.

우리나라는 1982년 5월에 미국에 이어 세계에서 두번째로 인터넷 연결을 한 나라 라는 사실!