전체 글 (43) 썸네일형 리스트형 스레드란? 스레드 스레드란? 정의 하나의 프로세스 내에서, 더 작은 단위들로 각각 독립적으로 실행되며, 각각 제어가 가능한 흐름 CPU 이용의 기본 단위 하나의 프로세스 내에서는 반드시 하나 이상의 스레드가 존재한다. 이 스레드를 메인 스레드라고 한다. 역할 여러개의 작업단위로 구성된 프로그램에서 요청을 동시에 처리하기 위해 필요하다. ex) 1개의 프로세스 내에 2개의 스레드가 존재한다면 이는 2개의 프로세스와 같은 처리속도를 낸다. 모든 스레드는 프로세스의 메모리 공간을 공유하기에 빠름 프로세스보다 경량(lightweight)이어서 프로세스보다 생성과 제거가 용이하다. 프로세스를 생성할 때 메모리 할당에 많은 자원이 필요 구조 스레드는 프로세스 내의 Code, Data, Heap 영역을 다른 스레드와 공유하고,.. 프로세스 프로세스 정의 실행중에 있는 프로그램을 의미 스케줄링의 대상이 되는 작업(task)과 같은 의미 하드디스크의 프로그램 실행 -> 메모리할당 -> 할당된 메모리 공간으로 바이너리코드 업로드 -> 프로세스 전환 프로세스 내부에는 최소 하나의 스레드(Thread)를 가지고 있다 구조 스택, 힙, 데이터, 코드로 구성 스택 데이터를 일시적으로 저장하는 영역 지역변수를 저장, 해당 변수가 범위를 벗어나면 공간 해제됨 호출한 함수의 반환 주소, 반환 값, 매개 변수 등에 사용 값들이 쌓일 때마다 힙이 있는 방향으로 점점 커지며 두 공간이 만나게 되면 메모리가 소진되었다는 뜻 컴파일시에 크기가 결정되어 무한히 할당 할 수 없다 힙 동적으로 메모리를 할당하는데 사용되는 영역 동적 메모리 할당이 발생하면 스택이 있는 위.. 운영체제란? 운영체제란? 정의 운영체제(Operating System)는 제한된 컴퓨터 시스템의 자원들을 효율적으로 관리하며, 사용자가 컴퓨터를 편리하고, 효과적으로 사용할 수 있도록 환경을 제공하는 시스템 소프트웨어 종류 운영체제의 종류에는 Windows 98, Windows 10, UNIX, LINUX, MS-DOS 등 단일 작업 처리 시스템에는 DOS, 다중 작업 처리 시스템에는 Windows, UNIX, LINUX 등이 사용 목적 운영체제의 목적에는 처리능력 향상, 사용 가능도 향상, 신뢰도 향상, 반환 시간 단축 등이 있습니다. 운영체제의 성능 평가 기준 4가지 처리능력 (Throughput) : 일정 시간 내에 시스템이 처리하는 일의 양 반환시간 (Turn Around Time) : 시스템에 작업을 의뢰한.. @Valid @NotEmpty 예외처리중에 DB를 가기전에 예외처리를 해줘야하는 상황이 생각이났다. 게시글에 댓글이나 게시글을 저장하기위해서는 내용이 필수적으로 필요하다 빈값이 들어오면 DB에 접근하기전에 미리 예외를 처리해주어야하는 상황이지 않을까 생각이 들었다. @PostMapping("api/comments/{postId}") public ResponseEntity postComment(@PathVariable Long postId, @Valid @RequestBody CommentRequestDto requestDto) { CommentDto response = commentService.save(requestDto, postId); return ResponseEntity.ok(response); } Controller로 들어.. Error handler(예외처리의 경우) 게시판을 구현하면서 예외처리를 해주어야하는 부분이 있었다. 예를 들어 게시글에 댓글을 다는 경우 게시글의 ID (PK)가 존재 하지 않는경우 httpstatus만 넘어오고 message를 반환하지 않는 상황이 발생했다. ResponseEntity를 사용하여 객체를 응답의 객체를 직접 만들어 반환하여 해결하였다. controller에서 Service로 postid와 댓글을 보낸다. 그다음 Service에서 postId를 가지고 Repository에서 해당 게시글이 있는지 찾는다. 없는경우 Post post = postRepository.findById(postId).orElseThrow( ()-> { System.out.println("a"); return new NotFoundException("포스트가.. IntelliJ 환경변수 설정 스프링으로 게시판을 구현하다가 나도 모르게 application.yml파일에 나의 민감정보를 깃에 푸시해버리고 말았다... 이미 깃에 yml파일이 올라가서 깃이그노어에 뒤늦은 추가를 하였지만 깃 캐시를 삭제하지 않아 이그노어가 동작하지 않았다. git rm -r --cached . git add . git commit -m "커밋메시지" 를 해주고 나서야 깃이그노어가 동작하여 yml파일이 깃에 올라가지 않게되었다. 하지만 이미 올린 기록은 남았다.... 하지만 깃 이그노어가 동작하여 application.yml파일이 제대로 올라가지 않는 상태로 혼자 작업을 한다면 별 불편함이 없겠지만, 만약 협업을 하게된다면? yml파일의 민감정보때문에 파일자체를 공유하는데 어려움이 생길수 있다는 생각을 하게되었다. I.. Dynamic Programming 동적 계획법 (Dynamic Programming) 동적 계획법(Dynamic Programming)이란 복잡한 문제를 간단한 여러 개의 문제로 나누어 푸는 방법을 말한다. 이것은 부분 문제 반복과 최적 부분 구조를 가지고 있는 알고리즘을 일반적인 방법에 비해 더욱 적은 시간 내에 풀 때 사용한다. 여러 개의 하위 문제를 풀고 그 결과를 기록하고 이용해 문제를 해결하는 알고리즘입니다! 즉, 우리가 재귀함수를 풀어나갈 때 많이 했던 함수의 수식화를 시키면 됩니다. F(string) = F(string[1:n-2]) 라고 수식을 정의했던 것 처럼, 문제를 쪼개서 정의할 수 있으면 동적 계획법을 쓸 수 있습니다! 이처럼 문제를 반복해서 해결해 나가는 모습이 재귀 알고리즘과 닮아있습니다! 그러나 다른 점은, 그.. 최단경로 최단경로 최단경로( ex. A에서 B로 가는 최단 경로) 그래프로 표현 각 지점은 노드, 도로는 간선. 다익스트라, 플로이드-워셜 다익스트라 알고리즘 INF = int(1e9) def dijkstra_naive(graph, start): def get_smallest_node(): min_value = INF idx = 0 for i in range(1, N): if dist[i] < min_value and not visited[i]: min_value = dist[i] idx = i return idx N = len(graph) visited = [False] * N dist = [INF] * N visited[start] = True dist[start] = 0 for adj, d in graph[.. 이전 1 2 3 4 5 6 다음 목록 더보기