싱글코어가 아니라 멀티코어라면, 어떻게 동기화가 이뤄질까요? 싱글코어 멀티코어 공통점 Lock(한 번에 하나의 쓰레드만이 접근할 수 있도록 공유 자원을 잠그는 역할) 사용 -> 여러 개의 쓰레드가 동시에 접근하는 경우에 발생할 수 있는 데이터 불일치 문제를 방지 차이점 캐시 일관성 유지 필요 -> 캐시 프로토콜 사용 특징 - 락 없는 동기화 기법을 사용하는 것이 더욱 효율적인 경우가 있음 - 멀티코어에서 락은 하드웨어적으로 구현되는 것이 보편적 ex.원자적 연산(atomic operation), 메모리 배리어(memory barrier) 원자적 연산(Atomic Operation) 여러 개의 쓰레드/프로세스에서 동시에 공유 변수에 접근할 때, 해당 변수를 수정하는 연산을 원자적으로 처리 즉,하나의 연산이..
동기화란 다중 스레드나 다중 프로세스 환경에서 공유 자원에 대한 접근을 조절하기 위해 사용되는 기술 임계 구역이란? 다른 프로세스와 공유하는 데이터에 접근하고 그 데이터를 갱신할 수 있는 코드 영역을 말한다. 경쟁 상태가 발생할 수 있으므로 멀티프로세스 환경에서 둘 이상의 프로세스가 동시에 접근하지 않도록 보장해주어야 한다. 임계구역 문제 해결방법 1. 임계 영역엔 동시에 하나의 프로세스만 접근한다. 2. 여러 요청에도 하나의 프로세스의 접근만 허용한다 3. 임계 구역에 들어간 프로세스는 빠르게 나와야한다 Race Condition 경쟁상태 또는 경쟁조건. 멀티스레드 환경에서 쓰레드들이 코드영역, 데이터 영역과 같은 공유자원에 접근할 때, 타이밍이나 순서 등이 결과값에 영향을 줄 수 있는 상태를 말한다...
1.@RequestBody를 했을때 내부 변수에다가 뭐라 적어줘야 하는가? //음식 등록 @PostMapping("/foods") public void saveFood(@RequestBody Food food){ foodService.saveFood(food); } -> @RequestBody 어노테이션은 HTTP 요청 바디에서 전달되는 데이터의 타입을 지정해주는 역할을 한다. Food 객체를 요청 바디에서 전달 food 파라미터로 받아온다 foodService의 uploadFood() 메서드를 호출 food 객체를 전달 2. 등록시 왜 RequestBody를 쓰는가? -> 음식 등록을 위해 HTTP POST 요청을 보낼 때, 요청 바디에 음식 정보를 담아 보내야 하므로 이때, Spring에서는 @Req..
REST(Representational State Transfer)ful API : REST형식의 API 자원(resource)의 표현(representation) 에 의한 상태 전달 *API란? API란 "Application Programming Interface"의 약자 응용 프로그램이 다른 응용 프로그램과 상호 작용할 수 있도록 인터페이스를 제공하는 소프트웨어 기술 API는 소프트웨어 컴포넌트 간의 상호 작용을 가능하게 하며, 프로그래머가 응용 프로그램을 개발할 때 다른 프로그램의 기능을 활용할 수 있도록 해준다. REST 구성 HTTP URI(Uniform Resource Identifier)를 통해 자원(Resource)을 명시하고, HTTP Method(POST, GET, PUT, DELET..
@Controller Spring MVC에서 컨트롤러를 선언하는데 사용됩니다. Spring Framework에서 해당 클래스를 컨트롤러로 인식하고, DispatcherServlet이 요청을 받으면 해당 컨트롤러를 호출한다. 이때, @RequestMapping을 사용하여 요청 URL과 컨트롤러 메서드를 매핑시킨다. 특징 해당 Annotation이 선언된 클래스는 Spring이 관리하는 Bean으로 등록됩니다. @RequestMapping이 선언된 메서드는 요청 URL과 매핑되며, 해당 URL로 요청이 들어오면 해당 메서드가 호출됩니다. 컨트롤러 메서드에서는 비즈니스 로직을 수행하고, 결과를 Model객체에 담아 View에 전달합니다. View는 결과를 사용자에게 출력하는 역할을 수행한다. *비지니스 로직이..
Controller : 번역된 요구사항을 Service에 전달 => Service에서 전달된 값을 다시 클라이언트에 반환 Service : 비지니스 로직을 수행 : 요청을 대응하기 위한 서비스 = 사용자가 요청하는 기능을 수행하는 로직 = User Request를 만족/에 맞는 대응/처리하기 위한 구현 => 사용자에게 요청을 받아서 컨트롤러가 전달해주면, 수 레파지토리 repository는 Service에서 나온 결과값을 데이터베이스나 다른 데이터 소스에서 데이터를 저장, 수정, 삭제, 검색하는 역할 DB의 관리를 처리하는 계층이다. https://velog.io/@hyundong_kk/Spring%EC%8A%A4%ED%94%84%EB%A7%81%EC%9D%98-3%EA%B3%84%EC%B8%B5
Entity: DAO와 DB 테이블 매핑하는 객체 Entity 클래스는 실제 DataBase의 테이블과 1 : 1로 매핑되는 클래스 DB의 테이블내에 존재하는 컬럼만을 속성(필드)으로 가져야 한다. 외부에서 getter 메소드를 이용하지 않도록 필요한 로직 구현 객체의 불변성을 보장해야 하기에 setter 메서드를 지양하고 생성자(constructor) 또는 Builder을 사용 request, response 클래스로 사용 X * request, response 클래스로 사용 X 이유 - SRP 원칙 위배 SRP(Single Responsibility Principle)은 클래스나 모듈은 하나의 책임만 가져야 한다는 원칙입니다. Request나 Response 클래스는 HTTP 요청이나 응답에 대한 정..
DDD(Domain Driven Design) : 도메인 주도 설계 소프트웨어가 다루는 도메인과 비즈니스 로직을 중심으로 설계하는 방식 -> 소프트웨어 시스템에서 사용되는 모든 개념과 동작을 도메인 모델로 표현 : 도메인 우선 순위 -> 도메인 쪼갬 -> (도메인 기반 ERD) -> 도메인 단위로 클래스 다이어그램 -> 전체적으로 고도화 *도메인이란? 사용자가 받는 서비스의 큰 단위 장점 - 비즈니스 로직에 중점을 둬서 개발할 수 있다. -> 요구사항 변경에 대흥 용이 - 도메인 모델이 비즈니스 요구사항을 명확하게 표현하고, 이해하기가 쉽기 때문에 의사소통이 원활해짐 - 비즈니스 로직이 중심이 되기때문에 코드의 유지보수와 확장성이 높아짐 단점 - 복잡한 비즈니스 도메인 모델을 구현하는 것이 어렵다. 사용..
프로세스란? 프로그램이 메모리에 올라왔을때 프로세스라고 한다. 프로세스 생성과 종료 *생성 부모프로세스: 다른 프로세스를 생성한 프로세스 자식프로세스: 생성된 프로세스 *종료 부모 프로세스가 종료될 경우 그 프로세스의 모든 후손들을 연쇄적으로 종료시킨 후 종료 - 자발적 종료 : 프로세스가 명령을 모두 수행 후 코드 마지막에 exit() 시스템 콜을 추가해 운영체제에 자신이 종료됨을 알리는 방식 - 비자발적 종료 : 부모 프로세스가 abort() 함수를 통해 자식 프로세스의 수행을 강제로 종료하는 것이다. 부모프로세스와 자식프로세스 - 프로세스와 자식 프로세스는 독립적인 주소 공간을 갖는 경우 - 프로세스와 자식 프로세스는 독립적인 주소 공간을 공유하는 경우(자원을 공유) : Copy On Write C..
단기, 중기, 장기 스케쥴러 장기 스케쥴러 디스크에서 새로운 프로세스를 가져와 준비 상태로 만들어 놓는 역할만 수행 시작 프로세스중 어떤것을 ready queue로 보낼지 결정 프로세스에 memory(및 각종자원)을 주는 문제 메모리에 올라가는 프로그램 수를 제어 중기 스케쥴러 실행 가능한 프로세스를 선택하여 메모리에 로드 메모리 관리와 같은 중요한 운영 체제 리소스의 할당을 관리 ex. 페이지 교체 알고리즘이 있습니다. 단기 스케쥴러: 어떤 프로세스를 대기상태로 보낼지, cpu를 할당할지 정함 어떤 process를 다음번에 running 시킬지를 결정 프로세스에 cpu를 주는 문제. 충분히 빨라야한다. 즉, 단기 스케줄러의 실행 빈도가 높습니다. 단기 스케줄러는 이벤트가 발생할 때마다 호출됩니다. 실행..