전체 글

개발은 좋은데 뭘로 개발할까
팀 프로젝트/[2024] GDSC 프로젝트 트랙

[GDSC 프로젝트 트랙] 2. 맡기 CRUD API 구현 & 배포

API 명세 논의 24년 1월 8일, 사당 스타벅스에 모여 회의를 진행했다. 내가 작성한 명세서를 토대로 더 추가해야할 API 가 있는지, API 에서는 어떤 형식의 데이터를 주고 받아야 하는지를 논의하였다. 논의 결과 아래와 같은 형태로 데이터를 주고 받게 되었다. { "start_time": 1100, "date": "20240115", "child_age": 2013, "rating": 4.2, "address": "서울시 마포구 와우산로 70 홍익대학교 T동 702", "end_time": 2000, "email": "test2@example.com", "status": "waiting", "gender": "f", "id": "test2@example.com" } 이걸 논의하면서 프로젝트 기획의..

Tool & Language/Git

[Git] (맨 처음 커밋을 포함한) 특정 커밋들만 삭제해서 새 레포지토리로 옮기기

현재 상황 1. 학교 개발 동아리에서 팀 프로젝트를 하기 위해 레포지토리를 만들었는데, 처음에 만들 때 프론트와 백 레포지토리를 분리하지 않고, 하나의 레포지토리에서 모두 작업하며 만들었다. (프론트는 리액트 네이티브, 백엔드는 장고였는데, 이를 하나의 레포지토리에 통합해서 진행했다. 왜 처음부터 분리를 안했는지 묻는다면.. 동아리 활동 운영 정책상 분리를 하면 안되는 줄 알았기 때문이다.) 2. 그 상태에서 프론트도 커밋을 올렸고, 백엔드도 커밋을 올렸다. 3. 그런데 동아리 운영공지로 백엔드와 프론트 레포지토리를 분리해서 만들라는 공지를 받았다. 4. 단순히 백엔드 소스코드만 복사해서 새 레포지토리에 커밋을 할 수도 있겠으나, 그렇게 하면 지금까지 작업한 커밋들이 모두 사라지는게 아쉽다. 그래서 지금..

팀 프로젝트/[2024] GDSC 프로젝트 트랙

[GDSC 프로젝트 트랙] 1. 팀 빌딩 & 아이디어 수집 & 화면 설계

23년 10월, GDSC Hongik 에서 진행한 프로젝트 트랙에 참가하였다. 2달간의 Django 온라인 학습을 마치고 23년 12월 중순부터 본격적으로 '프로젝트' 활동을 시작하였다. 23년 12월 15일에는 같이 프로젝트를 진행할 팀 빌딩이 진행되었다. 백엔드 2명, 프론트 2명으로 이루어진 팀이었고, 나는 백엔드로 참여하였다. 프로젝트는 구글 솔루션 챌린지와 연계되어 진행하는 방향으로 기획되었다. 구글 솔루션 챌린지는 UN이 정한 인류 발전을 위해 해결해야 하는 17가지 문제를 위한 사회적 서비스를 2달 동안 만드는 챌린지이다. 처음에는 가볍게 학교나 일상 속 불편함을 해결할 수 있는 주제로 기획하면 될 줄 알았는데, 구글 솔루션 챌린지 조건에 맞는 주제로 고민을 하려고 하니 아이디어가 잘 떠오르..

자기계발/생각 정리

2023년 회고 (+ 2023년 12월 회고)

벌써 2023년이 끝났다. 2022 회고를 쓴 지 얼마 안된 느낌..은 사실 없고 딱 1년이 지난 느낌이다 ㅋㅋ 2022년에 세웠던 목표 돌아보기 먼저 작년에 썼던 내년 계획을 한번 보면서 얼마나 지켰는지 돌이켜보았다. 1. 리액트를 다루는 기술 정독 사실 이 책은 전역하고 펼쳐보지 않았다..ㅎㅎ 그런데 리액트 하니 문득 생각난 게 작년까지는 프론트 할까 백엔드 할까 고민이 정말 많았는데, 요즘은 백엔드를 하고 싶다는 생각으로 많이 치우치게 되었다. 그렇게 생각한 이유는 다음과 같다. - 자바스크립트라는 언어가 별로 마음에 안든다. (타입스크립트는 그나마 괜찮은 것 같기도) - 리액트도 처음 겉핥기는 재밌는데, 파고 들고 싶다는 생각은 별로 안 들었다. - 리액트로는 '웹' 밖에 못한다. 물론 웹앱도 있..

CS/자료구조

[자료구조 및 프로그래밍] 17. 정렬의 최소 시간 복잡도

정렬의 종류별 알고리즘에 대해 정리할 때, 기수 정렬의 시간복잡도는 O(N)이 나왔었다. 그런데 일반적으로 정렬의 시간 복잡도는 O(N log N) 으로 알려져있다. 어떻게 기수 정렬은 O(N) 시간에 정렬을 할 수 있었을까? 그리고 왜 일반적으로 정렬의 시간 복잡도는 O(N log N) 으로 알려져 있는 걸까? 한번 O(n log n) 시간으로 고정되어있는 merge sort 의 comparison 과정을 tree로 표현해보자. a, b, c, d 라는 4개의 데이터에 대해 merge sort 를 수행하면, 반씩 쪼개다가 merge 하는 과정에서 비교를 수행한다. 이때 비교를 통해 정렬을 수행하는 모든 경우의 수를 comparison tree 로 그려보자. 제일 먼저 비교가 일어나는 부분은 a, b 이..

CS/자료구조

[자료구조 및 프로그래밍] 16. O(N log N)정렬 방법 별 비교 횟수, 쓰기 횟수 비교

방식의 비교횟수와 쓰기 횟수를 비교해보고자 한다. 병합 정렬 merge_sort() 함수의 호출시, 기존 배열을 복사해서 넣어놓고, 카운팅할 비교횟수와 데이터 쓰기 횟수를 초기화한다. mergeSort() 라는 재귀용 함수를 호출한다. 받은 배열을 반씩 나눠서 재귀적으로 mergeSort 를 호출하며, mergeSort 로 반씩 정렬된 결과를 다시 합쳐서 정렬할 merge 함수도 호출한다. 실질적인 정렬이 수행되는 merge 함수다. 먼저 반씩 정렬된 배열을 다른 배열에 복사해서 옮겨둔다. merge sort 를 배열롤 구현할 때 반드시 수행해야 하는 작업이기에, 이는 데이터 쓰기 횟수에 포함시켜서 카운팅했다. 그리고 기존 입력된 배열을 복사한 배열을 반씩 나눠 탐색하면서 작은값부터 채워나간다. 이 과정..

CS/자료구조

[자료구조 및 프로그래밍] 15. O(N²)정렬 방법 별 비교 횟수, 쓰기 횟수 비교

그림과 같이 100만개의 랜덤 성생된 정수가 있다. 이 정수를 각 정렬 방법으로 정렬해보려고 한다. (100만개를 N^2 시간에 정렬하면 시간이 오래 걸려서, 실제로는 100, 200, ..., 900 단위로만 정렬해 볼 것이다.) 정렬을 수행하면서, 비교는 몇번 일어나는지, 정렬을 하기 위해, 기존 배열에 (또는 새로 생성한 배열에) 데이터를 쓰는 행위를 몇번이나 하는지 횟수를 세보고자 한다. 이를 위해 먼저 100만개의 정수가 담긴 데이터를 ' ' 기준으로 끊어 배열에 저장한다. 그리고 각 정렬을 수행한다. 정렬은 사이즈가 100, 200, 300, ..., 900 인 상황을 매번 수행해보면서, 그 때의 비교횟수와 데이터 쓰기 횟수를 카운팅한다. 차례대로 정렬을 구현하고, 횟수를 카운팅한 결과를 출력..

CS/자료구조

[자료구조 및 프로그래밍] 14. 정렬 (선택정렬, 삽입정렬, 퀵소트, 머지소트, 기수정렬)

정렬은 큰 사이즈의 작업에 대해 컴퓨터가 자주 수행하는 동작 중 하나다. 이번 글에서는 5가지 정렬 방법에 대해 간단하게 정리하고자 한다. 선택 정렬 (Selection Sort) 선택 정렬 (Selection Sort) 은 말 그대로 정렬 기준에 맞는 값을 선택해서 정렬하는 알고리즘이다. 선택 정렬은 In-Place 방식으로, O(n^2) 시간에 수행된다. 알고리즘은 다음과 같다. 1. 정렬된 결과의 0번째 원소를 결정하려고 한다. 2. 0번째원소를 1번째 원소부터 N-1번째 원소까지 하나하나 비교해보면서 그 중 제일 작은 원소와 swap 한다. 3. 이번엔 1번째 원소를 결정하려고 한다. 4. 1번째 원소를 2번째 원소부터 N-1 번째 원소까지 하나하나 비교해보면서 그 중 제일 작은 원소와 swap ..

CS/어셈블리

[SPARC] 40. 기말고사 대비 정리

용어 Memory : stores a programs instructions and data size of an instrcution : 4 byte size of data : Byte(1 byte), Half word(2 byte), Word(4 byte), Double (8 byte) => memory read/write size Register : memory place in a processor (CPU), store intermediate results during calculation, or values often used size of register : 4 byte Text Section : save the program instructions, save read-only data (glo..

CS/어셈블리

[SPARC] 39. FPU Instructions 사용 예제 (배정밀도, 매개변수)

지난 글에서는 단점일도 FPU 명령어 사용 예제를 살펴보았다. 이번 글에서는 배정밀도 FPU 명령어 사용 예제를 살펴보고자 한다. Double-Precision Floating Point Computation 배정밀도 연산자는 기존 연산자 끝에 s 대신 d 가 붙는 것만 다르다. faddd fsubd fmuld fsmuld (single * single = double, 피연산자는 single 이다.) fdivd fsqrtd double 연산자의 피연산자 레지스터는 반드시 짝수번째 레지스터가 들어가야 한다. %fi 와 %f(i+1) 의 2개 레지스터로 하나의 소수를 표현하기 때문이다. 연산 결과도 double 로 나오므로 짝수번째 레지스터를 사용한다. 데이터 형변환 명령어도 종류가 늘어났다. fitod ..

에버듀
Blog. 에버듀