Just Do IT!
스파르타코딩클럽 내일배움캠프 15일차 본문
오늘 일과 간단 요약
- 프로젝트 발제
- 와이어프레임 제작 및 팀 회의
- S.A. 작성 (팀원 전부)
- 프로세스, 스레드, 비동기 특강
팀 프로젝트 회의
드디어 대망의 프로젝트 주제가 나왔는데!
생각보다 더 어려운 것 같아서 당황했다....ㅋㅋㅋㅋㅋ
지급된 강의나, 이틀동안 진행한 특강을 보면 회원가입-로그인 과정과 firbase를 이용하는 점, 그리고 SPA 로 페이지 제작하는 등 으로 예상하고 있었는데,
예상은 맞긴 한데....조금 더 어려운 버전이랄까.
뉴스 피드라니.
사실 내가 내 손으로 그런 플랫폼을 만든다고 상상도 해본적 없었어서 조금 더 당황스러웠던 것 같다.
더군다나 이제 2주, 아니 첫 프로젝트까지 합치면 3주밖에 지나지 않았는데 너무 어려운거 아닌가 싶었는데
내가 바꿀수 있는 것도 아니고 어차피 닥친 일이니 열심히 해봐야겠다..ㅎㅎ
그래서 바로 팀 회의를 시작했는데,
우선 각자 와이어 프레임과 주제를 생각해보자고 해서 오전 시간에는 내내 와이어프레임을 만들고 주제를 생각하느라
바빴다.
점심 먹기 전에 주제를 정했는데, 팀원들께 감사하게도 내 와이어프레임이 선정되어서(?)
그걸로 가기로 하고 주제는 <영화>로 정했다.
평소에 나도 영화를 좋아하기도 하고, 영화 리뷰글을 올리는 플랫폼을 만들어보기로 했다.
2런우연2 S.A.
보다 자세한 S.A.는 팀장님 블로그에 있으니까 링크를 걸어두었다.
아래는 내가 제작한 와이어 프레임.







내가 처음 와이어프레임을 제작할 때,
벨로그와 브런치에서 영감을 많이 받았다.
처음에는 벨로그 메인 페이지에서 보이는 트랜딩 형식으로 메인 페이지를 짜고 싶었는데,
문득 브런치처럼 슬라이드 형식으로 오는 게 더 예뻐보여서 급하게 바꾸고
내 글 리스트 목록이나 글 작성하는 건 방명록 부분에서 디자인을 따왔다.
너무 심플해서 어쩌나 싶었는데, 다행히 조원분들이 괘찮다고 해주셨다.ㅎㅎ
그리고 이건 내가 대충 끄젹어본 폴더 구조.

우리 조는 앞서 말한 것처럼 <영화 리뷰 하기> 여서,
로그인을 하고 영화에 대한 감상평을 남길 수 있는 플랫폼으로 하기로 했다.
구현해야 할 기능들은 다음과 같다.
기능 | Method | Request | Response |
로그인 | Post | 로그인한 메인페이지 조회 | |
회원가입 | Post | google연동, github연동, 회원데이터 수집 | |
게시물 작성 | Post | 글작성 | |
목록 전체 조회 | Get | 게시물 불러오기 | |
내 게시물 조회 | Get | 게시물 불러오기 | |
수정 | Put | 내 게시물 수정 | |
삭제 | delete | 내 게시물 삭제 | |
프로필 수정 | Post | 프로필 사진 변경 | |
배포하기 | Post |
역시, 기초 프로젝트였던 1주차보다 구현해야 할 기능들이 훨씬 많다.
이외에 필수 기능을 구현하고 난 뒤에 시간이 남으면 할 선택 기능들은,
- 좋아요 기능
- 사진 업로드 기능 (이건 필수로 해야 할지 고민)
이다.
이것들은 추후에 시간이 남는다면 고민해보기로 했다.
그리고 각자 기능별로 담당해서 월요일 저녁에 다시 모여서 회의를 하기로 했다.
- 로그인 회원가입 - 정서연
- 게시물 조회 - 이태언
- 게시물 작성 - 조희현
- 게시물 수정,삭제 - 서재희
- 프로필 수정 - 이순재
이렇게 각자 맡은 부분이 다르고, 나도 회의가 끝나고 로그인/회원가입 쪽을 구현하기 위해서 공부하기 시작했다.
저녁에는 특강이 있었기에...그렇게 많은 걸 하지는 못했지만...ㅠ
월요일까지니까 부지런히 공부해야겠다.
프로세스, 스레드, 비동기 특강
매주 금요일마나 CS 특강이 있는데,
솔직히 말하면 나는 한 번 듣고는 전부 이해하지 못해서 주말에 다시 듣거나 구글링을 하는 편이다.
그래서 TIL에 수업을 들으면서 적은 내 필기를 올려두지만,
실제로는 조금 더 공부해야 하기 때문에...ㅎ 추후에 더 추가될 수도 있다.
오늘 배운 부분도 예시로 들어주셔서 쉽게 이해는 했으나 중간에 연결 불안정인지 나 혼자 노트북에서 렉이 걸려서,
한번 놓쳐버리니까 진도를 따라잡을수가 없어서 울며 겨자먹기로 다시 공부해야 한다...ㅠㅠ
CS 공부는 면접에서 필수라던데, 지금부터 열심히 해야 하는데 내 생각보다 난이도가 어려워서 고민이다.
이렇게 특강 듣고 구글링해서 부족한 부분 다시 복습하다보면 익숙해지겠지...(제발 그러기를)
오늘도 수업 들으면서 정리한 부분을 적어둔다.
프로세스
- 정의
- 메모리에 적재되어 실행되고 있는 프로그램의 "인스턴스"
- 인스턴스 : 설계된 것을 r바탕으로 구현된 구체적인 실체
- 붕어빵 틀(설계된 것, 클래스)과 붕어빵(인스턴스)이 보통 예시로 많이 사용된다)
- 운영체제로부터 시스템자원을 할당받은 작업의 단위
- 시스템 자원: CPU 시간, 실행되기 위해 필요한 독립된 메모리 영역
- 메모리에 적재되어 실행되고 있는 프로그램의 "인스턴스"
- 특징
- 프로세스는 독립된 메모리를 할당 받는다
- 프로세스 주소 공간 : 메모리를 관리하기 위해 공간들을 구조로 관리하는데 이를 프로세스 주소 공간이라고 부른다
- 프로세스 주소 공간은 Code, Data, Stack, Heap 으로 구성된다
- Code : 코드 자체를 구성하는 메모리 영역 (프로그램 명령)
- Data : 전역 변수, 정적변수 등
- Stack : 지역변수, 함수 매개변수, 리턴 값 (임시 메모리 영역)
- Heap : 동적 할당 시 사용 (mew(), malloc() 등)
- 기본적으로 프로세스마다 최소 1개의 스레드(메인 스레드)를 갖는다
스레드
- 정의
- 프로세스 내에서 프로세스의 자원을 이용하는 여러 실행 흐름의 단위
- 특징
- 스레드는 프로세스 내의 Code, Data, Heap 영역은 다른 스레드와 공유하고 Stack 영역은 따로 할당받는다
- 프로세스와 해당 프로세스 내의 다른 스레드와 자원과 공간을 공유하면서 사용
멀티 프로세스
- 정의
- 하나의 프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 하나의 작업을 처리하도록 하는 것
- 장점
- 여러 개의 자식 프로세스 중 하나에 문제가 발생하면 그 자식 프로세스만 죽는 것 이상으로 다른 영향을 끼치지 않는다
- 단점
- 문맥 교환 (context switching)에서의 오버 헤드
- 문백 교환 과정에서 캐쉬 메모리 초기화 등 무거운 작업이 진행되고 많은 시간이 소모되는 등의 오버헤드가 발생
- 프로세스 간 통신 기법 (IPC, Inter Process Communication)
- 프로세스는 각 독립된 메모리 영역을 할당받았기 때문에 하나의 프로그램에 속하는 프로세스들 사이의 변수를 공유할 수 없다.
- 따라서 IPC라는 방법을 사용해야 하며 이는 어렵고 복잡한 통신 방법이다
- 문맥 교환 (context switching)에서의 오버 헤드
멀티 스레드
- 정의
- 하나의 프로그램을 여러 개의 스레드로 구성하고 각 스레드가 하나의 작업을 처리하도록 하는 것
- 장점
- 프로세스에 비해 메모리 공간과 시스템 자원 소모가 줄어들게 된다
- 스레드 간 통신시, data, heap 메모리 영역을 통해 데이터를 주고 받으므로 통신 방법이 간단하다
- context switching 시 PCB 및 캐시 메모리를 비울 필요가 없기 때문에 비용이 적고 더 빠르다
- 단점
- 서로 다른 스레드가 Data, Heap 영역 등을 공유하기 때문에 어떤 스레드가 다른 스레드에서 사용중인 변수나 자료구조에 접근하여 엉뚱한 값을 읽어오거나 수정할 수 있다.
- 즉, 자원 공유 동기화 문제가 발생한다
하나의 스레드에 문제가 생기면 전체 프로세스에 영향을 받는다
제어권
: 자신(함수)의 코드를 실행할 권리 같은 것
제어권을 가진 함수는 자신의 코드를 끝까지 실행한 후, 자신을 호출한 함수에게 돌려준다
동시성
: 함수 A와 함수 B가 동시에 진행되는 것(처럼 보이는 것)
그러기 위해서는 다른 함수 B의 결과값에 의존하는 지가 중요하다
블로킹 vs 논블로킹 (제어권이 누구한테 있는가)
- 블로킹
- 함수 A가 함수 B를 호출한 뒤 함수 B의 리턴값이 올 때까지 기다린 후 진행되는 것
- 즉, 제어권을 넘겨주는것
- 논블로킹 non-blocking
- 함수 A가 함수 B를 호출한 뒤, 함수 B의 작업 여부와 상관없이 진행되는 것
- 즉, 제어권을 넘겨주지 않는 것
동기 vs 비동기 (호출되는 함수의 작업 완료 여부를 신경쓰는가)
- 동기
- 함수 A와 함수 B를 호출할 때, 함수 A가 함수 B의 리턴값을 계속 확인하면서 신경쓰는것
- 비동기
- 함수 A와 함수 B를 호출할 떄, 함수 A가 함수 B의 작업 완료 여부는 신경쓰지 않는것
- 함수 A와 함수 B를 호출할 떄, 함수 A가 함수 B의 작업 완료 여부는 신경쓰지 않는것
짧은 일기
아무래도 프로젝트가 시작하고 구현해야할 기능을 나열해보니까,
갑자기 부담스러워졌다(?)
이걸 우리가 다 할 수 있을까...하는 걱정도 되고?
특강을 듣고 바로 이걸 적용해보려니 쉽지가 않다.
그래도 저녁에 슬랙 공지를 보니까,
월요일에 새로운 강의도 지급되고 프로젝트 발표날도 다음주 금요일이 아닌 그 다음주 월요일로 미뤄져서
조금 더 공부하고 구현할 시간이 생겨서 다행이다.
약간 걱정했는데...ㅋㅋㅋ
그리고 튜터님이 특강에서 제공해주신 예제들도 보고 하니까 비슷하게 따라하면 될것 같다.
(근거 없는 자신감인가)
아무튼.
프로젝트 생각하느라 CS 특강을 듣기만 한 것 같은데, 주말에 다시 공부해봐야겠다.
이건 꼭 해야 할 것들.
그리고 프로젝트 하니까 알고리즘을 안하게 되네.
고작 하루지만...ㅋㅋㅋ 알고리즘 문제 안 풀고 프로젝트에 계속 몰두하나보니까 어쩔수 없었다.
여튼,
이번 프로젝트도 저번 프로젝트처럼 배운거 많고 뿌듯한 프로젝트가 되기를.
'스파르타코딩클럽 내일배움캠프 > TIL' 카테고리의 다른 글
스파르타코딩클럽 내일배움캠프 17일차 (1) | 2022.11.22 |
---|---|
스파르타코딩클럽 내일배움캠프 16일차 (1) | 2022.11.21 |
스파르타코딩클럽 내일배움캠프 14일차 (1) | 2022.11.17 |
스파르타코딩클럽 내일배움캠프 13일차 (1) | 2022.11.16 |
스파르타코딩클럽 내일배움캠프 12일차 (1) | 2022.11.15 |