분류 전체보기 44

No Silver Bullet - Essence and Accident in Software Engineering 논문 요약

[SE.A.01] “No Silver Bullet —Essence and Accident in  Software Engineering 에 대한 요약 [Summary of No Silver Bullet —Essence  and Accident in Software Engineering]”  1. 서론 “한 번에 완벽한 해결책은 없다.” 늑대인간은 친숙한 모습에서 무서운 모습으로 예상치 못하게 변하는 특징이 있다. 은총알은 늑대인간을 한 번에 무너뜨릴 수 있는 무기이다. 친숙한 소프트웨어 프로젝트도 간단해보이지만 일정이 어긋나고, 예산이 부족하고, 결함이 생기면 공포스러운 괴물의 모습으로 변하는 특징을 가진다. 그래서 은총알처럼 소프트웨어의 비용을 빠르게 낮춰줄 하드웨어가 필요하다. 하지만 저자는 향후 10..

PyTorch Basics

1. view와 reshape- view와 reshape은 contiguity 보장의 차이a = torch.zeros(3, 2)b = a.view(2, 3)a.fill_(1)a = torch.zeros(3, 2)b = a.t().reshape(6)a.fill_(1)  2. squeeze와 unsqueeze- squeeze: 차원의 개수가 1인 차원을 삭제 - unsqueeze: 차원의 개수가 1인 차원을 추가 3. mm- 행벡터 * 열벡터 연산(내적)은 dot을 사용- 단, 행렬*행렬 연산(행렬곱셈)은 mm을 사용한다는 차이가 존재 - mm: 벡터 간 연산을 지원하지 X  4. matmul의 브로드캐스트a = torch.rand(5, 2, 3)b = torch.rand(5)a.mm(b)- mm은 위 ma..

Tech/PyTorch 2024.07.03

[소프트웨어공학] Use Case Diagram - Generalization, Include, Extend Relation

1. Use Case 2. Relation - Generalization 화살표 방향: 구체적인 actor or use case -> 추상적인 actor or use case (1) actor간 Generalization - 자식 actor는 부모 actor의 동작과 모든 use case를 상속 받는다. - 하위 actor는 특정한 하나 이상의 use case가 있다.(상위 actor한테 상속 받은 use case가 있을 테니까) (2) use case간 Generalization - base use case는 구현되지 않는다. (-> 대신 구체화된, 파생된 use case가 있음) - Substituability(대체 가능성): runtime에서 base use case는 파생된 use case 중 하..

[소프트웨어공학] Chapter 02 - Software Process Models

1. The Software Process - 소프트웨어 프로세스는 소프트웨어 시스템을 개발하는데 필요한 구조화된 활동. == 즉, 소프트웨어를 개발하려면 무엇을 해야하는가? - 명세 Specification: 시스템이 해야할 일을 명확하게 정의 - 설계 및 개발 Design and implementation: 시스템의 구성 조직을 정의하고 구현 - 검증 Validation: 고객이 원하는대로 잘 만들어졌는지 - 발전 Evolution: 고객의 요구사항 변화에 맞춰 소프트웨어를 수정 => 소프트웨어 프로세스 모델은 원하는 기능을 만들어내기 위한 일련의 흐름이다. => 소프트웨어 프로세스 모델은 추상적이다. 왜? -> 시간의 한계, 계획서의 복잡도 증가로 인해 모든 것을 표현할 수는 없음 2. Softwa..

[DB] 데이터 추상화 레벨, 3단계 스키마 구조, 데이터 독립성

* 추상화란? Computer Science에서 추상화란 세세한 instance에서 중요한 개념, 핵심만 분리하는 프로세스를 의미한다. 즉 instance를 사용자에게 보여주는 방법, 표현이라고 할 수 있을 것 같다. 추상화는 추상화 레벨에 따라 사용자에게 보이는 detail 정도가 달라진다. 1. 데이터 추상화 레벨 - 3단계 추상화 물리적 레벨 Physical Level에서의 추상화 실제 데이터 레코드(record)가 어떻게 저장되는지 기술한다. 데이터 필드 길이, 필드 간격, 레코드의 전체 길이 등을 포함한다. 논리적 레벨 Logical Level에서의 추상화 데이터베이스에 저장되어 있는 데이터들 간의 관계를 논리적 관점에서 추상화한 것이다. 예를 들어 Type Professor = record I..

CS/Database 2024.04.06

[DB] 인스턴스(Instance)와 스키마(Schema)

1. 스키마란? 데이터베이스의 논리적, 물리적 구조를 의미한다. 쉽게 말해서, 뼈대, 데이터를 저장하는 틀이나 구조체, 변수의 타입에 대응되는 개념 정도로 이해하면 된다. 각 데이터베이스마다 구체적으로 어떤 구조인지 기술하는 방법은 데이터베이스의 모델이나 데이터베이스를 보는 level에 따라 달라진다. 하지만 구조를 기술하는 방법은 다르더라도 데이터베이스의 스키마가 데이터가 저장되는 공간 구조를 기술한다는 점은 동일하다. 2. 인스턴스란? 데이터베이스의 스키마가 겨정되면 실제 데이터 값이 스키마 형태로 저장되고 관리된다. 이 때 데이터의 실제값을 인스턴스라고 한다. (변수의 값에 대응되는 개념 ) 시간이 흐르면서 인스턴스(=실제 데이터 값)은 변경이 자주 발생하지만(데이터 추가, 삭제, 변경 등), 스키..

CS/Database 2024.04.06

[소프트웨어공학] Chapter 01 - Introduction to SE

1. 소프트웨어란? - 실행 시 원하는 기능, 함수, 성능을 제공하는 명령어 - 프로그램이 정보를 조작할 수 있도록 하는 데이터 구조 - 프로그램의 작동 및 사용법에 관한 문서 - 소프트웨어는 제조(manufacture) 되는 게 아님. 개발(develop), engineer 된다. - 소프트웨어는 마모(wear out) 되는 게 아니라 악화(deteriorate)된다. - 업계는 component 기반 구축으로 변화하고 있지만 대부분의 소프트웨어는 고객 맞춤형으로 개발된다. => custom 해서 사용 2. Legacy Software 소프트웨어는 왜 변화해야만 하는가? - 새로운 컴퓨팅 환경이나 기술의 변화에 맞춰 변경되어야 함. - 새로운 비즈니스 요구사항을 충족해야 함. - 소프트웨어는 나만 쓰는..

[DB] Super key, Candidate key, Primary key란

1. Super key Super key는 데이터에 관계에서 tuple을 유일하게 식별할 수 있는 속성의 집합이다. 2. Candidate key Candidate key는 Super key 중 minimal한 집합을 의미한다. 여기서 minimal이란 속성의 개수가 적다는 것을 의미하는 것이 아니다. minimal은 key의 unique를 유지하면서 가장 적은 속성을 의미한다. 예를 들어 아래와 같은 예시가 있다고 하자. MyStudent(student-id, name, national-id, address, phone) 여기에서 student-id와 national-id는 학생들을 구별할 수 있는 unique한 키다. 이 때 나올 수 있는 Super key는 - (student-id), (studen..

CS/Database 2024.03.31

TCP flow control이란?

0. 배경 송신자가 전송한 데이터를 수신자가 받아서 버퍼에 저장한다. 이 때, 송신자가 데이터를 전송하는 속도와 수신자가 데이터를 수신하는 속도가 다를 수 있다. 만약 송신지의 데이터 전송속도가 수신자의 데이터 수신속도보다 빠르다면 수신자의 버퍼는 들어오는 데이터의 속도를 이기지 못하고 결국 버퍼가 넘칠 것이다. 이 과정에서 데이터가 유실될 가능성이 있다. 송신자와 수신자 간 데이터 전송 속도차로 인한 데이터 유실이 발생하는 것이다. TCP는 데이터 유실을 방지하기 위해 송신자의 전송 속도를 조절하는 방법을 택했다. 이것이 flow control이다. 1. flow control 과정 TCP는 flow control을 위해 receive window(=rwnd)라는 변수를 사용한다. 이 변수를 사용하여 ..

CS/Network 2024.03.18

스프링부트 슬랙봇 연동 - 메시지 전송

크롤링 하는 슬랙봇을 만들고 있었고 크롤링 코드를 파이썬으로 짰기 때문에 당연히 파이썬으로 슬랙에 연동하고 요청 날려야겠다고 생각하고 공부했다. 그런데 크롤링 결과를 DB에 저장하고 CDC로 새로운 글을 감지해야겠다고 정리하니까 DB에서 데이터를 가져오는 부분은 스프링으로 해도 될 것 같았다. 그래서 크롤링해서 DB에 저장하는 부분만 파이썬으로 짜보고 나머지는 스프링으로 하려고 슬랙봇을 다시 연동했다.  1. 슬랙봇 연동하기먼저 스프링 프로젝트를 만들고 슬랙봇 의존성을 주입해야 한다. https://slack.dev/java-slack-sdk/guides/getting-started-with-bolt#gradle Getting Started with Bolt | Slack SDK for JavaSLACK..

심심해서 2024.03.11