분류 전체보기

CS/소프트웨어공학

[소프트웨어공학] 3. Software Process

지난 글에서 소프트웨어 공학의 중요성을 정리하면서 소프트웨어 개발 프로세스에 대한 내용을 가볍게 정리했다.각각의 소프트웨어 개발 방법론마다 디테일한 부분의 차이는 있을지 몰라도, 요구사항 분석, 소프트웨어 설계, 구현, 테스트, 유지보수라는 5가지 단계는 모든 개발 방법에서 공통적으로 수행되는 단계이다. 이번 글에서는 이 각각의 단계를 구체적으로 알아보기에 앞서소프트웨어 개발 방법론마다 어떤 형태의 Software Process 를 가지고 있는지 하나씩 정리해본다. Software Process소프트웨어 프로세스는 소프트웨어를 개발하는데 필요한 activity들의 구조화된 집합을 말한다.소프트웨어 프로세스의 종류는 다양하지만 모든 프로세스에는 공통적으로 스펙 분석, 설계및 구현, 테스트, 유지보수 단계가..

CS/기계학습심화

[기계학습심화] 4. 경사하강법의 확장 & SGD

경사하강법의 확장지난 글에서 본 예제는 입력도 1차원이고 출력도 1차원인 간단한 예제였다.그래서 그래프를 그려볼 때도 2차원 좌표평면에 점을 찍고, 해당 점들을 잘 나타내는 직선을 그었다. 하지만 실제로 주어지는 데이터는 이보다 고차원의 데이터가 많이 들어온다.이제 경사하강법을 고차원 데이터에서 어떻게 활용할 수 있을지 확장해보자.  기존에 살펴본 경사하강법의 W, b 값 수정 공식은 위와 같았다.선형회귀에서는 W, b 값 2개만 결정하면 되기 때문에 이를 다음과 같이 행렬로 표현할 수 있다.   위 식에서는 learing rate 를 W, b 에서 서로 다르게 잡았지만, 위 행렬식에서는 같은 learning rate 를 가진다고 가정하였다.이때 learing rate 오른쪽에 곱해진 행렬을 보면 Los..

CS/소프트웨어공학

[소프트웨어공학] 2. 소프트웨어 공학의 의미

소프트웨어소프트웨어라고 하면 제일 먼저 생각나는 것은 소스 코드일 것이다.하지만 소프트웨어는 바이너리 코드 외에도 다양한 요소를 포함하고 있다.소프트웨어는 다음 요소를 포함한다. - computer program바이너리 코드 자체 - configuration files.env 파일에 따라 동작이 달라지는 스프링 앱, 프로그램의 설정 값 등 - system documentation소프트웨어를 개발하는 과정에서 나오는 결과물들요구사항 분석 후 나온 스펙 문서, 설계하면서 나온 디자인 문서, 구현, 테스팅 관련 문서들(테스트를 어떻게 할 지 세운 계획, 테스트 케이스에 대한 문서, 버그 수정 리포트 등)이처럼 소프트웨어를 개발할 때는 소스코드 뿐만 아니라 다양한 문서들도 함께 나오며, 이것들도 소프트웨어에 포..

CS/소프트웨어공학

[소프트웨어공학] 1. 소프트웨어 공학의 목적

소프트웨어 공학을 공부하는 이유소프트웨어 공학은 어떻게하면 좋은 소프트웨어를 빠르게 만들 수 있을지 고민하는 과정에서 등장했다.그리고 소프트웨어 엔지니어링 자체로 많은 사람들이 연구하고 있는 하나의 분야가 되었다. 그런데 하드웨어는 '하드웨어 공학' 이라는 말이 없다.하드웨어도 '좋은 하드웨어를 빠르게 만드는 방법' 과 같은 고민점이 있을 것 같은데, 왜 '하드웨어 공학'이라는 말이 없을까? 그건 소프트웨어와 하드웨어의 로직의 복잡도 차이 때문이다.규모가 매우 큰 소프트웨어는 코드 라인 숫자가 1~200만 줄이 넘어간다.그리고 그렇게 수많은 코드가 모여 동작하면서 아무런 문제가 없어야 한다.이건 엄청난 일이다. 반면 하드웨어는 정해진 공간 안에 회로를 설계해서 넣어야하다보니 논리적인 복잡도가 증가하는 한..

CS/기계학습심화

[기계학습심화] 3. 선형 회귀 & 경사하강법 구현

지금까지 정리한 내용을 다시 정리해보면, 기계학습은 주어진 데이터들을 잘 설명하는 함수(모델)를 찾는 것인데, 함수를 그냥 찾는 것이 쉽지 않아 그 형태를 정해주고, 해당 형태를 결정하는데 필요한 계수를 찾는 문제로 바꾸어 해결한다고 정리할 수 있다.이때, n차원 공간에 존재하는 데이터를 가장 잘 나타내는 n-1 차원의 직선 또는 하이퍼플레인을 찾는 것이 선형 회귀이다. 이때 '데이터를 가장 잘 나타내는 선형 모델'을 판단하는 기준은 주어진 데이터와 모델 사이의 오차의 합 (=Loss) 이 최소가 되는 모델이고, 선형 모델을 결정하는 변수 (W, b) 에 대한 Loss 값을 나타내는 Loss 함수에 대해 최소값을 찾는 문제로 바꾸어 생각할 수 있다.최소값을 찾는 제일 간단한 방법은 미분값이 0인 극소값을..

CS/기계학습심화

[기계학습심화] 2. 선형 회귀 & 경사하강법

지난 글에서 기계학습의 개요를 정리하면서, 기계학습은 입력 데이터의 분포를 잘 설명하는 함수(모델)를 찾는 과정이라고 정리하였다.이번 글에서는 가장 간단한 모델인 선형 회귀와 해당 모델을 학습시키는 경사 하강법에 대해서 정리해본다.  지난 글에서 본 것처럼 컴퓨터가 인식하는 '데이터'는 숫자의 묶음이다.이미지의 경우에는 RGB 3개 숫자 데이터의 2차원 묶음 (따라서 결과적으로는 3차원 배열) 이다.만약 이 이미지의 크기가 50 픽셀 x 50픽셀 이라면, 50 x 50 x 3 = 7500 개 숫자들의 배열이 된다.그리고 이 숫자들을 7500 x 1 크기의 행렬로도 표현할 수 있다. 이 행렬은 수학적으로 7500차원 좌표계 위에 있는 하나의 점으로 생각할 수 있다.또 다른 50픽셀 x 50픽셀 이미지들을 ..

CS/기계학습심화

[기계학습심화] 1. 기계학습 개요

“Machine learning is a branch of artificial intelligence (AI) and computer science which focuses on the use of data and algorithms to imitate the way that humans learn, gradually improving its accuracy.” 기계학습은 AI, 사람이 학습하는 방식을 모방하는 알고리즘과 대량의 데이터를 사용하여 정확도를 개선하는 컴퓨터 과학 분야의 한 갈래이다. 강의록에 나와있는 이 문장이 지금까지 배운 기계학습의 전부를 담고있다고 생각한다.3년전만해도 손글씨를 인식하는 모델은 새롭고 신기한 모델이었다. 실제로 대학교 2학년 때 주변에서 들었던 아이디어 중에 사람 손글..

Tool & Language/Java

[Java] synchronized 키워드와 Monitor

Java EnumSet 을 파헤차다가 다시 마주치게 된 synchronized 키워드운영체제 수업시간에도 잠깐 등장했었는데, 이렇게 다시 만나게 된 김에 제대로 공부해보려고 한다. 참고) 이 글의 내용은 자바의 synchronized 공식 문서에 대한 번역에 가까워질 것 같다. 문제 상황프로세스의 실행 흐름 중 하나인 스레드는 주로 필드와 필드가 참조하고 있는 객체 참조 (object reference) 에 대한 접근 권한을 공유하며 서로 상호작용한다.이와 같은 상호작용 방법은 매우 효율적이지만, 2가지 에러를 발생시킬 가능성이 있다. 1. Thread Interference (스레드 간섭)2. Memory Consistency Errors (메모리 일관성 문제) 그리고 Synchronization(동기..

Tool & Language/Java

[Java] EnumSet 파헤치기 (feat. Thread-Safe)

프로젝트를 하다보면 다중 선택 구조를 구현해야 할 때가 있다.예를 들어, 일자리 중개 서비스를 만들 때 근무 가능 요일을 월화수목금토일 중에서 자유롭게 선택하는 구조가 될 수 있다.이때는 하나만 선택 가능한 것이 아니라, 여러 개를 중복으로 선택할 수 있기 때문에, 사용자의 선택값을 어떻게 데이터베이스에 저장할 지 고민이 필요했다.JPA로 테이블을 구현하면서 이 데이터를 어떻게 저장할 지 찾아보다가 EnumSet 이라는 컬렉션을 알게 되었다.말그대로 Enum 타입 데이터를 갖는 Set 으로 다른 Set에 비해 더 빠르게 읽고 쓰기를 할 수 있다고 한다. A specialized Set implementation for use with enum types. All of the elements in an e..

자기계발/생각 정리

2025년 3월 회고

3월 31일에 쓰면 좋겠지만 월요일이라서 바쁘다는 핑계로 쓰지 못 할까봐 미리 쓰는 3월 회고3월에는 개강하고 역시 많은 일들이 있었다.너무 일을 많이 벌렸나 싶으면서도 또 다 하고 싶었던 일들이니까.. 잘 수습?해봐야겠다 진로와 관련된 목표전공1. 졸업 프로젝트졸업프로젝트로 '한글 SQL 데이터베이스' 만들기 프로젝트를 본격적으로 시작했다.유튜브 알고리즘 추천으로 우연히 '코딩스키스키' 라는 버튜버 채널을 발견했다.엔비디아에 다니는 개발자가 버추얼 캐릭터를 만들어 운영하던 유튜브 채널로, 이력서 작성하는 방법, 대학생 때 해두면 좋은 것 등의 영상이 있었는데, 해당 영상에서 오픈 소스를 읽어보면 좋다고 추천한 것 중에 SQLite 가 있었다.1.0 버전은 소스코드가 1만줄 밖에(?) 안된다고 읽어보기 ..

에버듀
'분류 전체보기' 카테고리의 글 목록 (4 Page)