2월, 2019의 게시물 표시

[Web] 쿠키 & 세션 & 캐시

이미지
[Web] 쿠키 & 세션 & 캐시 HTTP 프로토콜의 특징이자 약점을 보완하기 위해서 사용 HTTP 프로토콜의 특징 1. 비연결지향(Connectionless) HTTP는 먼저 클라이언트가 request를 서버에 보내면, 서버는 클라이언트에게 요청에 맞는 response를 보내고 접속을 끊는 특성이 있다. 헤더에 keep-alive라는 값을 줘서 커넥션을 재활용하는데 HTTP1.1에서는 이것이 default이다. HTTP가 tcp위에서 구현되기 때문에( tcp는 연결지향, udp는 비연결지향 ) 연결지향이라고 할 수도 있다는 얘기도 있고 논란도 있으나 아직까지는 네트워크 관점에서 keep-alive는 옵션으로 두고 connectionless의 연결비용을 줄이는 것이 명확한 장점이기 때문에 비 연결지향이라고 알아둔다. 2. 상태정보유지안함(Stateless) 연결을 끊는 순간 클라이언트와 서버의 통신이 끝나며 상태 정보는 유지하는 않는 특성이 있다. HTTP의 이 두가지 특성을 보완하기 위해서 쿠키와 세션을 사용하게 되었다. 비연결지향이라는 특성 덕분에 계속해서 통신 연결을 유지하지 않아서 리소스 낭비가 줄어드는 것은 아주 큰 장점이지만, 통신할 때마다 새로 커넥션을 열기 때문에 클라이언트는 내가 누구인지 인증을 계속해야하는 단점이 생긴다. 만약 쿠키와 세션이 없다면 어떤 페이지에서 옮겨 다닐때마다 로그인을 다시 해야 한다. 쿠키 쿠키는 클라이언트 로컬 에 저장되는 키와 값이 들어있는 작은 데이터 파일이다. 쿠키에는 이름, 값, 만료날짜(쿠키 저장기간), 경로 정보가 들어있다. 쿠키는 일정시간동안 데이터를 저장할 수 있다.(로그인 상태 유지에 활용) 쿠키는 사용자가 웹사이트에 접속할 때 생성되는 파일이다. 쿠키는 클라이언트의 상태 정보를 로컬에 저장했다가 참조한다. 쿠키는 웹사이트가 생성하고 웹브라우저에 저장된다. 쿠키 프로세스 브라우저에서 웹 페이지 접속 클라이언

[How to] Visual studio code에서 tab size 조절 방법

이미지
[How to] Visual studio code에서 tab size 조절 방법 (Mac) ","+ command 누르면 세팅 화면으로 넘어감 위의 화면에서 왼쪽은 수정할수 없으므로 오른쪽에 editor.tabsize:2 로 넣자 (넣고 싶은 탭 사이즈를 넣으면 됨)

[Vue] 캘린더 만들기

[Vue] 캘린더 만들기 Vue를 사용하다보면 캘린더를 만들어야 할 때가 있다. Vue에서 캘린더를 Datepicker라고 부른다 install 및 사용 방법은 밑에 참고문서 확인하면 된다. Data  선언 data () { return { state: { highlighted : { dates:[ ], }, disabledDates:{ }}, 특정 요일 higlight하기 methods: { setScenarioDatesList(){ var list =[] for(var i =0;i<this.scenario_dates.objectList.length;i++){ var today_year = this.scenario_dates.objectList[i].substring(0,4); var today_month = this.scenario_dates.objectList[i].substring(4,6); if(today_month.substring(0,1)==="0"){ today_month=today_month.substring(1,2) } var today_date = this.scenario_dates.objectList[i].substring(6); this.state.highlighted.dates.push(new Date(today_year,today_month-1,today_date)) list.push(new Date(today_year,today_month-1,today_date)) } 특정 요일 제외 disabled하기 this.state.disabledDates.customPredictor= function(date){

[Qwiklab] Entity and Sentiment Analysis with the Natural Language API

[Qwiklab] Entity and Sentiment Analysis with the Natural Language API 클라우드 스터디 잼2를 진행하면서 네번째 랩으로 Entity and Sentiment Analysis with the Natural Language API를 진행하였다. 요약 Cloud Natural Language API를 사용하면 텍스트에서 엔티티를 추출하고 정서 및 구문 분석을 수행하고 텍스트를 카테고리로 분류 할 수 있다. 순서 API키 만들기 entity 분석 요청 만들기 Natural Language API 콜(call)하기 Natural Language API로 감정 분석하기 구문 및 품사 분석하기 다양한 언어로 해보기 출처 퀵랩

[Qwiklab] Speech to Text Transcription with the Cloud Speech API

[Qwiklab] Speech to Text Transcription with the Cloud Speech API 클라우드 스터디 잼2를 진행하면서 세번째 랩으로 Speech to Text Transcription with the Cloud Speech API를 진행했다. 요약 [Qwiklab] Google Cloud Speech API: Qwik Start 와 거의 비슷하고 마지막에 다양한 언어(ex 프랑스어)로 바꿀수 있는거만 다르다 출처 퀵랩

[Qwiklab] Cloud Natural Language API: Qwik Start

[Qwiklab] Cloud Natural Language API: Qwik Start 클라우드 스터디 잼2를 진행하면서 두번째 랩으로 Cloud Natural Language API: Qwik Start을 진행하게 되었다. 요약 Google Cloud Natural Language API를 사용하면 텍스트 문서, 뉴스 기사 또는 블로그 게시물에 언급 된 사람, 장소 이벤트 등의 정보를 추출할 수 있다. 또한 소셜 미디어에서 제품에 대한 정서를 파악하거나 콜센터 또는 메시징 응용 프로그램에서 발생하는 고객 대화의 의도를 분석할 수 있다. 분석을 위해 텍스트 문서를 업로드 할 수도 있다 Cloud Natural Language API의 특징 구문 분석 토큰 및 문장을 추출하고, 품사 (PoS)를 식별하고 각 문장에 대한 종속성 구문 분석트리를 작성합니다. 엔티티 인식 엔티티를 식별하고 사람, 조직, 위치, 이벤트, 제품 및 미디어와 같은 유형별로 레이블을 지정한다. 감정 분석 텍스트 블록에서 표현 된 전반적인 감정을 이해합니다. 콘텐츠 분류 사전 정의 된 700개 이상의 카테고리로 문서를 분류합니다. 다중 언어 영어, 스페인어, 일본어, 중국어, 프랑스어, 독일어, 이탈리아어, 한국어 및 포르투칼어를 포함한 여러 언어의 텍스트를 쉽게 분석 할 수 있습니다. 통합 REST API REST API를 통한 엑세스, 텍스트는 요청에 업로드되거나 Google Cloud Storage와 통합 될 수 있습니다. 순서 API키 만들기 entity 분석 요청 만들기 및 확인 출처 퀵랩

[Qwiklab] Google Cloud Speech API: Qwik Start

 Google Cloud Speech API: Qwik Start  구글 클라우드 스터디잼2를 진행하면서 첫번째 퀵랩으로 Google Cloud Speech API: Qwik Start 을 진행했다 요약 Google Cloud Speech API를 사용하면 Google 음성 인식 기술을 개발자 애플리케이션에 쉽게 통합할 수 있다. Speech API를 사용하면 오디오를 전송하고 서비스에서 텍스트 사본을 받을 수 있다. 순서 API KEY 만들기 Speech API 리퀘스트(request) 만들기 Speech API 콜(call)한 후 결과 확인 출처 https://www.qwiklabs.com

[JAVA] Iterator란?

[JAVA] Iterator란? Iterator란? 자바의 컬렌션 프로엠워크에서 컬렌션에 저장되어 있는 요소들을 읽어오는 방법을 표준화하였는데 그 중 하나가 Iterator이다 public interface Iterator{ boolean hasNext(); //true와 false를 반환 Object next(); // 다음 요소를 반환 void remove(); //next로 읽어온 요소를 삭제한다. next()를 호출한 다음에 remove를 호출해야 한다. } Iterator는 다시 말해 인터페이스이다. 그렇다면 저 메소드들은 어떻게 정의되어 있을까? List 혹은 Set인터페이스를 구현하는 컬렉션은 iterator()가 컬렉션의 특징에 맞게 설계가 되어 있다. Iterator 사용법 ArrayList list = new ArrayList (); for( Iterator itr = list.iterator(); itr.hasNext(); ) { list.get(itr.next()); } ArrayList list = new ArrayList (); Iterator itr = list.iterator(); while(it.hasNext()){ list.get(itr.next()); } Iterator를 활용해서 list의 모든 값을 가져온다. 출처 https://hipercube.tistory.com/entry/JAVA-Iterator-%ED%95%A8%EC%88%98

[System] 특정 포트를 사용중인 프로세스 확인/종료

이미지
[System] 특정 포트를 사용중인 프로세스 확인/종료 sudo lsof -i :"포트 번호" //해당 포트를 사용하고 있는 프로세스를 찾는다 sudo kill -9 "프로세스 번호" //깔끔하게 프로세스가 사라진다.

[Jenkins] 젠킨스 Port바꾸기

[Jenkins] 젠킨스 Port바꾸기 젠킨스를 기본으로 설치하고 나면 젠킨스의 Port가 8080으로 되어있다. 8080포트는 기본 서버에서 자주 사용하는 포트이므로 젠킨스가 8080을 사용하면 다른 웹 서버가 사용하지 못한다. 그러므로 젠킨스의 포트를 바꿔주는것을 추천한다 바꾸는 방법(Mac) sudo defaults write /Library/Preferences/org.jenkins-ci httpPort 7070 //default write [도메인] 키 [타입] [값] : 지정한 키를 지정한 값으로 바꾼다. sudo launchctl unload /Library/LaunchDaemons/org.jenkins-ci.plist // 서비스를 등록 해제 sudo launchctl load /Library/LaunchDaemons/org.jenkins-ci.plist // 서비스를 등록 출처 https://stackoverflow.com/questions/7139338/change-jenkins-port-on-macos

[Jenkins] Jenkins란?

이미지
[Jenkins] Jenkins란? 젠킨스는 지속적인 통합 및 배포를 위한 방법을 제공합니다. 즉, 프로젝트 빌드, 테스트 실행 배포 등의 통합을 자동화합니다. 젠킨스는 Maven, Ant, Gradle, Junit, Nuxus와 잘 작동하며, Git, SVN과 같은 형상 관리 툴을 지원합니다. 더 놀라운 것은 Java뿐만 아니라, WAS가 없는 Python, Node.js도 플러그인을 통해 젠킨스로 CI가 가능하다는 점입니다. CI(Continuous Integration) 젠킨스가 빌드, 테스트, 배포 등을 자동화 해준다고 하는데.... 구체적으로 지속적인 통합(CI)란 무엇일까요? 지속적인 통합은 애자일 개발 방법론에서 필요성이 드러납니다. 예를 들어, 프로젝트 중반 쯤 고객이 프로젝트 진행 상황을 알고 싶다고 합니다. 그래서 여러 개발자가 자신의 코드를 통합을 하는데, 이 때 다음과 같은 문제점들이 발생합니다. 1. 다른 개발자의 코드들을 합치니 실행이 안된다. 2. 내 PC에서는 됐는데 통합하니 실행이 안된다. 3. 통합되기 전에는 자신이 갖고 있는 소스가 최근 통합된 코드가 아닐 수 있다. 즉 지속적으로 여러 개발자들이 통합을 하지 않은 상태에서는, 개발 중간 과정을 직접 눈으로 확인하기가 어렵습니다. 젠킨스를 통해 코드를 지속적으로 통합하면, 고객에게 프로젝트 진행 상황을 직접 눈으로 확인시켜 줄 수 있는 장점이 있습니다. 고객이 이를 바로 확인하여, 원하는 요구사항이 아니였다면 바로 다음 날에 개발자들은 이를 수정할 수 있기 때문에 프로젝트의 성공 가능성이 높아집니다. 이와 같이 개발하는 기법을 애자일 개발 방법론이라고 합니다. 따라서 젠킨스에서 가장 중요한 것은 고객이 수시로 확인할 수 있도록 항상 빌드가 유지되어야 한다는 것입니다. CI가 이루어지기 까지 그렇다면 젠킨스는 어떤 과정을 통해 CI를 할까요? 1. 각 개발자들은 깃헙에서 코드를 공유합니다.

[Vue] v-bind, v-on 정리

[Vue] v-bind, v-on 정리 v-bind 약어 v-bind:href='url'을 줄여서 :href='url'이라고 표기 가능 <!-- 전체 문법 --> <a v-bind:href="url"> ... </a> <!-- 약어 --> <a :href="url"> ... </a> html속성에 Vue내의 값을 사용할 수 있도록 도와주는 v-bind <a href="{{ link }}">링크</a> // (x) 이렇게 사용할 수 없음 <script src="https://cdn.jsdelivr.net/npm/vue"></script> <div id="app"> <a v-bind:href="link">링크</a> </div> //이렇게 사용해야 함 v-on 약어 v-on:click='doSomething'을 줄여서 @click='doSomething'이라고 표기 가능 <!-- 전체 문법 --> <a v-on:click="doSomething"> ... </a> <!-- 약어 --> <a @click="doSomething"> ... </a> 출처 https://medium.com/@hozacho/맨땅에-vuejs-003-vuejs-directive-v-bind-a4844574e6ae

[Spring] RequestParm 어노테이션

[Spring] RequestParm 어노테이션 Spring에서 Controller의 전달인자 spring을 사용하다보면 Controller단에서 클라이언트에서 URL에 파라미터를 같이 전달하는 경우가 있다. 주로 사용하는 형태는 아래의 두 가지가 대표적인 케이스 Type 1 =>  http://127.0.0.1?index=1&page=2 Type 2 =>  http://127.0.0.1/index/1 Type 1의 경우 파라미터의 값과 이름을 함께 전달하는 방식으로 게시판 등에서 페이지 및 검색 정보를 함께 전달하는 방식을 사용할 때 많이 사용한다. Type 2의 경우 Rest api에서 값을 호출할 때 주로 많이 사용한다. Spring에서는 이러한 전달인자를 처리하는데 두 가지 방법을 제공한다. @RequestParam 사용하기 Type 1 의 URL을 처리할 때  @RequestParam 을 사용하게 됩니다. 아래의 예제와 같이 Controller 단에서 사용합니다. 1 2 3 4 5 @GetMapping ( "read" ) public ModelAndView getFactoryRead (@RequestParam( "no" ) int factroyId, SearchCriteria criteria) { //... } 위의 경우  /read ?no=1 와 같이 url이 전달될 때 no 파라메터를 받아오게 됩니다. @RequestParam 어노테이션의 괄호 안의 경우 전달인자 이름(실제 값을 표시)입니다. 이렇게  @RequestParam 의 경우 url 뒤에 붙는 파라메터의 값을 가져올 때 사용을 합니다. @PathVariable 사용하기 Type 2 의 URL을 처리할 때는  @PathVariable 을 사용하게 됩니다. 1 2 3 4 5 @PostMapping ( "delete/{

[Database] MySQL join 정리

이미지
[Database] MySQL join 정리 일반적인 join =inner join left join : 왼쪽 테이블이 기준이 되면서 겹치는 것들 출력 =left outer join right join : 오른쪽 테이블이 기준이 되면서 겹치는 것들 출력 =right outer join 출처 http://rapapa.net/?p=311

[HTML] 유용한 태그 모음

이미지
[HTML] 유용한 태그 모음 hr태그 <hr> 닫는 태그는 없다. hr 태그 자세한 내용 https://aboooks.tistory.com/256 label태그 <label> label태그는 양식 입력 창(form control)을 설명하는 이름표이다. label 요소로 묶인 텍스트를 클릭하면, form control(양식 입력 창)이 선택 된다. (다시 클릭하면 선택 해제 됨) form control이란 -> input, textarea, button, select 요소로 생선된 입력 제어 장치 label로 묶는 방법은 두 가지가 있는데, 1. for 속성을 사용하거나 2. <label>요소 안에 form control을 두는 것 label태그 자세한 내용 https://aboooks.tistory.com/298

[Google] Flutter란?

이미지
[Google] Flutter란? Flutter란 Mobile UI SDK로, "디자인 협업을 위한 프레임워크"가 주요 슬로건이다. 기존의 UI 개발 방식은 디자이너가 새 디자인의 prototype을 만들어 제공하고, 개발자가 새 디자인을 build해서 다시 보여주고 수정 사항에 대해 또 다시 반복하는 식으로 진행했다. 이렇게 디자이너와 개발자 간에 hand-over를 하는 과정에서 소모되는 시간과 노력을 최소화하고 좋은 product를 만들 수 있는 협업 workflow를 제공하는 것이 Flutter이다. Flutter의 주요 특징은 다음과 같다. 현재 구글에서 모바일 UI를 만드는데 활용 중이며, 알리바바, 텐센트 등 다양한 기업에서 Flutter를 이용한 모바일 앱 개발이 진행되고 있다. Flutte 사용 후, 모바일 UI 개발 프로세스의 시간 절약을 나타낸 그래프 출처 https://flutter.io/ https://medium.com/fm-stories/how-developers-and-designers-can-collaborate-using-flutter-35b3e49046ca

[Vue] Vue시작하기

이미지
[Vue] Vue시작하기 Vue.JS는 빠른 Vue.JS프로젝트 생성을 지원하기 위해 공식 CLI(Commnad Line Interface)를 제공한다. # vue-cli 설치 npm install -g vue-cli # "webpack" 템플릿을 이용해서 새 프로젝트 생성 vue init webpack my-project 위의 두 줄의 명령어만 실행하면 Vue.Js 프로젝트가 생성 됨 Vue CLI를 설치하면 CLI설치후, CLI를 사용하여 Vue.JS 프로젝트를 생성 할 수 있다. 위의 명령어를 실행하면 webpack을 사용한 Vue.JS 프로젝트가 생성된다. 프로젝트 설정 위의 그림과 같이 vue-cli를 통해 프로젝트를 설정하고 프로젝트를 생성한다. 터미널을 켜고 생성된 프로젝트의 디렉토리로 이동하여, npm start  를 shell에 입력하면 default는 8080포트지만, 지금 8080포트를 다른곳에서 사용중이라 8081로 됐다. 위의 그림과 같이 Vue 어플리케이션이 실행된다. 브라우저에 https://localhost:8080 을 통해서 접근하면 위의 그림과 같이 실행화면을 볼 수 있다. npm start 로 실행된 어플리케이션은 개발용이다 배포버전으로 빌드하기 위해서는 npm run build 명령어를 사용하면 배포버전의 파일이 dist 디렉토리 밑에 생성된다. 또는 http://www.daleseo.com/vue-cli3/ 여기 가볼것 출처 https://beomy.tistory.com/40

[Database] 데이터베이스 설계 순서(개념 & 논리 & 물리적 설계)

이미지
[Database] 데이터베이스 설계 순서(개념 & 논리 & 물리적 설계)데이터 베이스 설계 순서 요구분석 - 개념적 설계 - 논리적 설계 - 물리적 설계 - 구현 순으로 이루어진다. 1. 요구조건 분석 / 명세 데이터베이스의 사용자, 사용목적, 사용범위, 제약조건 등에 대한 내용을 정리하고 명세서를 작성한다. 2. 개념적 설계(E-R모델) 정보를 구조화 하기 위해 추상적 개념으로 표현하는 과정으로 개념 스키마 모델리오가 트랜잭션 모델링을 병행하고, 요구조건 분석을 통해 DBMS 독립적인 E-R 다이어그램을 작성 DBMS 독립적 개념 스키마 설계, 트랜잭션 모델링 3. 논리적 설계(데이터 모델링) 자료를 컴퓨터가 이해할 수 있도록 특정 DBMS의 논리적 자료 구조로 변환하는 과정 관계형 DB인 경우 이 단계에서 테이블을 설계하고 정규화 과정 을 거치게 된다. 목표 DBMS에 맞는 스키마 설계, 트랜잭션 인터페이스 설계 4. 물리적 설계(데이터 구조화) 논리적 구조로 표현된 데이터를 물리적 구조의 데이터로 변화하는 과정 데이터베이스 파일의 저장 구조 및 액세스 경로, 인덱스의 구조 와 저장 레코드의 크기,순서, 접근 경로 등을 결정하며, 반응시간, 공간활용도, 트랜잭션 처리량 을 고려하여 설계를 하여야 함 목표 DBMS에 맞는 물리적 구조 설계, 트랜잭션 세부 설계 5. 데이터베이스 구현 앞선 설계  단계에서 도출된 데이터베이스 스키마를 설제 파일로 생성하는 단계 특정 DBMS에서 데이터베이스 스키마를 생성한 후 데이터를 입력하며, 응요 출처 https://gomcine.tistory.com/entry/Database-6-데이터베이스 -설계-순서

[how to] visual-studio-code 미니맵 제거 방법

이미지
[how to] visual-studio-code 미니맵 제거 방법 비쥬일 스튜디오 코드를 보다보면 위와같이 미니맵이 뜬다  이거를 제거하기 위해서는  Shift + Command + P 를 누른 후 위와 같은 것을 클릭한다

[Spring] RequestBody 어노테이션

[Spring] RequestBody 어노테이션 Spring에서 RESTful API 구현시 주로 사용되는 @RequestBody, @ResponseBody 어노테이션의 개념에 대해 알아보자 웹 서비스와 REST 방식이 시스템을 구성하는 주요 요소로 자리 잡으면서 웹 시스템간에 XML이나 JSON드의 형식으로 데이터를 주고 받는 경우가 증가하고 있다. 이에 따라 Spring MVC도 클라이언트에서 전송한 XML 데이터나 JSON 또는 기타 데이터를 컨트롤러에서 DOM 객체나 자바 객체로 변환해서 받을 수 있는 기능(수신)을 제공하고 있다. 비슷하게 자바 객체를 XML이나 JSON또는 기타 형식으로 변환해서 전송할 수 있는 기능을 제공하고 있다. @RequestBody 에노테이션 HTTP 요청의 body 내용을 자바 객체로 매핑하는 역할 @ResponseBody 어노테이션 자바 객체를 HTTP 요청의 body 내용으로 매핑하는 역할 @RestController public class LoginWebController { // HTTP 요청의 내용을 Member 객체에 매핑하기위해 @RequestBody 애너테이션을 설정한다. @RequestMapping(value="/member/login", method = RequestMethod.POST) public MemberResultDto login(@RequestBody Member member) { MemberResultDto memberResultDto = memberService.login(member); return memberResultDto; } } 위의 예제 소스에서는 HTTP 요청의 body안에 Member 데이터를 파라미터로 받기 위해, @RequestBody를 사용 함 @ResponseBody를 사용하지 않은 이유는 @RestController를 사용하였기 때문

[Google] GCS 버켓 이름 변경 방법

[Google] GCS 버켓 이름 변경 방법 버킷과 관련된 저장소 등급을 변경(region변경 등)할 수 있지만, 버킷 생성 후에 버킷 생성 후에 버킷 이름이나 위치를 직접 변경할 수는 없음 버킷에 데이터가 없으면 버킷을 삭제하고 새 이름으로 또는 새 위치에 버킷을 다시 만들면 됨 버킷에 데이터가 있으면 다른 위치에 새 버킷을 만든 후 이전 버킷의 데이터를 새 버킷에 복사 중요: 소스 버킷과 대상 버킷이 서로 다른 위치에 있는 경우, 버킷 간에 데이터를 이동하면 버킷 간 네트워크 사용 비용이 발생할 수 있음. 또한 이동하는 객체가 Nearline Storage 또는 Coldline Storage객체인 경우, 버킷 간에 데이터를 이동하면 검색 및 조기 삭제 수수료가 발생할 수 있음 Nearline Storage, Coldline Storage : 백업, 보관처리, 재해 복구에 적합한 고가용성, 저비용 솔루션 출처 https://cloud.google.com/storage/docs/moving-buckets?hl=ko

[용어 정리] 파라미터, 아규먼트 차이

[용어 정리] 파라미터, 아규먼트 차이 아규먼트(argument)와 파라미터(parameter)를 흔히들 구분하지 않고 사용한다. 하지만 이 둘은 분명한 차이가 있다. PARAMETER란? 한글 그대로 번역하면 '매개변수'라는 뜻 함수를 정의 할 때 외부로부터 받아들이는 임의의 값을 의미 function f(x,y){ return x+y; }; 위의 코드에서 x,y가 파리미터라고 볼 수 있음 ARGUMENT란? 한글 그대로 번여하면 '인수'라는 뜻 함수를 호출 할 때 이 때 사용 하게 되는 일련의 값들을 아규먼트라고 부름 f(3,4)에서 3,4는 아규먼트 즉, 파라미터의 값으로 아규먼트(3,4 등)를 대입하는 것 출처 https://enarastudent.tistory.com/entry/함수의-아규먼트와-파라미터의-차이 [Coding Story]

[용어 정리] 객체지향(OOP)란?

[용어 정리] 객체지향(OOP)란? 객체 지향 프로그램(Object-Oriented Programming)이란? 객체 지향 프로그래밍은 컴퓨터 프로그래밍의 패러다임의 하나 객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 것 각각의 객체는 메시지를 주고받고, 데이터를 처리할 수 있다. 객체 지향 프로그래밍은 프로그램을 유연하고 변경이 용이하게 만들기 때문에 대규모 소프트웨어 개발에 많이 사용된다. 또한 프로그래밍을 더 배우기 쉽게 하고 소프트웨어 개발과 보수를 간편하게 한다 보다 직관적인 코드 분석을 가능하게 하는 장점도 있다. 그러나 지나친 프로그램의 객체화 경향은 실제 세계의 모습을 그대로 반영하지 못한다는 비판도 있다. 프로그램은 특수한 목적을 가지고 데이터를 처리하기 위하여 만들어진다. 그런데 복잡한 데이터를 수많은 함수로만 처리하다 보면 여러가지 에러와 버그가 발생하는 문제점이 나타난다. 클래스는 이러한 문제를 해결하고 복잡한 데이터를 조금 더 쉽게 처리하게 도와준다. 주의점 일반적으로 프로그램을 만들때 항상 염두에 둬야 할 중요 포인트 2개 같은 코드를 반복하지 않는다. 코드는 항상 바뀔 수 있다는 것을 기억한다. 또한 클래스를 사용하면 사전이나 리스트가 지원하지 않는 상속과 같은 클래스의 기능도 사용 가능 출처 http://schoolofweb.net/blog/posts/

[용어 정리] 애자일(Agile) & 스크럼(Scrum)

[용어 정리] 애자일(Agile) & 스크럼(Scrum) Agile : 날렵하,민첩한, (생각이)재빠른, 기민한 문서보다는 가볍게 소통(사용자 <-> 개발자, 개발자 <-> 개발자) => 협력 극대화 프로세스와 도구 중심이 아닌 개발 과정의 소통 을 중요하게 생각하는 소프트웨어 개발 방법론으로 반복적인 개발을 통한 잦은 출시를 목표 로 한다. 출시 주기를 짧게 하여 다양한 요구 변화에 대응한다. 인간의 수행 능력을 높이기 위한 현실적인 방법을 제시한다. 가볍고 실용적인 소프트웨어 개발 방법론이다. 일정한 주기를 가지고 끊임없이 프로토 타입을 만들어내며 그때 그때 필요한 요구를 더하고 수정하며 하나의 커다란 소프트웨어를 개발해 나가는 adaptive style 애자일 개발 프로세스는 계획을 통해서 주도해 나갔던 과거의 방법론과는 다르게 앞을 예측하며 개발을 하지 않음 애자일 모형의 선언문 개인과 상호 작용을 프로세스와 도구보다 중시한다. 동작하는 소프트웨어를 포괄적인 문서보다 중시한다. 고객과의 협력을 계약의 협상보다 중시한다. 변화의 대응을 계획의 수행보다 중시한다. 스크럼(Scrum) 애자일 소프트웨어 공학 중의 하나로 프로젝트 관리를 위한 상호 점진적 개발 방법론이다. 소프트웨어 유지보수 팀이나 일반적인 프로젝트 관리에서도 적용될 수 있다. 추정 및 조정 기반의 경험적 관리 기법 이다. 이러한 애자일 개발 프로세스로 불리는 개발 방법론 중 하나가 스크럼 회의 (스크럼은 원래 럭비 경기에서 사용되는 용어) 출처 https://zeddios.tistory.com/24

[Database] 데이터 독립성

이미지
[Database] 데이터 독립성 1. 데이터 독립성에 대한 정의 데이터 독립성의 개요 DBMS의 궁극적 목적 하위 단계의 데이터 구조가 변경되더라도 상위 단계에 영향을 미치지 않는 속성 파일시스템의 경우 응용 프로그램과 데이터가 상호 밀접하게 연관되어 있어 데이터의 종속성과 중복성이 발생 데이터 종속성 : 데이터가 변경되면 응용 프로그램이 수정되어야 한다. 데이터 중복성 : 데이터의 일관성 문제 발생 ->이러한 배경으로 DBMS의 탄생 데이터 독립성의 종류 논리적 데이터 독립성 응용 프로그램에 영향을 주지 않고 데이터베이스 논리적 구조를 변경할 수 있는 능력 DBMS가 하나의 논리적 데이터 구조를 가지고 많은 응용 프로그램이 제각각 요구하는 다양한 형태의 논리적 구조로 mapping시킬 수 있는 능력이 있을 때 가능 데이터베이스를 확장(새로운 레코드 타입이나 데이터 항목 추가)히거나 데이터베이스를 축소(기존의 레코드 타입이나 데이터 항목 삭제)하면서 개념 스키마를 변경할 수 있으며, 후자의 경우 남아있는 데이터만 참조하는 외부 스키마들이 영향을 받으면 안됨 즉, 개념 스키마가 변경되어도 외부 스키마에는 영향을 미치지 않도록 지원 외부스키마에 영향을 미치지 않으면서 개념스카마에 적용되는 제약조건들을 변경가능 물리적 데이터 독립성 응용 프로그램이나 데이터베이스의 논리적 구조에 영향을 미치지 않고 데이터의 물리적 구조를 변경할 수 있는 능력 하나의 논리적 구조로부터 여러 가지의 상이한 물리적 구조를 지원할 수 있는 mapping 능력이 있을 때 가능 내부 스키마가 변경되어도 외부/개념 스키마가 영향을 받지 않도록 지원 데이터 독립성의 기대효과 데이터베이스 관리자는 데이터베이스를 사용하는 응용 프로그램을 수정하지 않고도 데이터의 구성, 표기방법, 저장위치를 변경 가능 데이터를 접근하는 응용프로그램에 영향을 미치지 않고도 데이터를 처리하는 하드웨어나 소

[Database] 병행 제어(Concurrency Control)

이미지
[Database] 병행 제어(Concurrency Control) 1. 병행 제어(Concurrency Control)의 개념 동시에 여러개의 트랜잭션을 병행 수행할 때, 트랜잭션들이 DB의 일관성을 파괴하지 않도록 트랜잭션간의 상호작용을 제어하는 것 병행성 : 트렌잭션들이 동시에 인터리빙(Interleaving)하게 실행되는 것 인터리빙 : 트랜잭션이 번갈아가며 조금씩 처리를 수행하는 것 2. 병행 제어의 목적 DB의 공유도 최대화 시스템 활용도 최대화 응답 시간 최소화 단위 시간당 트랜잭션 처리 건수 최대화 DB의 일관성 유지 3. 병행 제어의 필요성 트랜잭션이 병행제어 없이 DB에 동시에 접근할 경우, 다음과 같은 문제점이 발생 4. 잠금(lock) 하나의 트랜잭션이 사용중인 데이터를 다른 트렌젝션이 접근하지 못하게 하는 것 데이터를 갱신할 때 순서 잠금(lock) -> 실행(Execute) -> 해제(Unlock) 교착 상태 : 데이터를 사용중인 트랜잭션이 잠가놓은 자원을 사용하기 위해 다른 트랜잭션들이 무한정 대기하는 현상 5. 병행 제어 기법의 종류 2단계 잠금 규약 기법 트랜잭션 스케쥴의 직렬성을 보장하는 대표적인 기법 2단계는 다음과 같다 확장 단계 : 잠금만 수행할 수 있음(해제 불가) 축소 단계 : 해제만 수행할 수 있음(잠금 불가) 장점: 직렬성 보장/ 단점 : 교착 상태 예방 불가능 타임 스탬프 기법 동시성 제어를 위한 직렬화 기법으로 트랜잭션 간의 순서를 미리 정함. 시스템에 도착한 순서대로 타임 스탬프를 부여하여, 순서대로 실행하도록 한다. 교착 상태가 발생하지 않는다. 락킹 하나의 트랜잭션이 데이터를 액세스하는 동안 다른 트랜잭션은 그 데이터를 액세스 할 수 없게 하는 방법 트랜잭션은 데이터를 액세스하기 전에 Lock을 요청하고 액세

[Database] 키의 종류와 기능

이미지
[Database] 키의 종류와 기능 DB를 공부하다 보면 테이블과 레코드, 필드 다음으로 많이 접하는 단어는 아마도 기본 키, 왜래 키와 같은 키(key)일것이다. 이러한 종류의 키들은 DB에서 데이터의 무결성 을 유지하기 위한 중요한 수단 DBMS에서 이용하는 키(key)에는 여러 종류가 있으며 다음과 같다. 1. 슈퍼 키(Super Key) 테이블에 존재하는 필드들의 부분집합으로써 즉, 하나 이상의 속성들의 집합으로 이루어진 것 유일성 은 만족하지만 최소성 은 만족하지 않아도 됨 유일성 : 하나의 키로 어떠한 행을 바로 찾아낼 수 있는 능력 후보키 나, 기본키 가 만족하는 것들 최소성 : 꼭 필요한 속성들로만 구성해야 하는 것 슈퍼키를 보면 예를들어서, 학번 + 주민등록번호 이렇게 굳이 합쳐서 사용하므로 공간낭비가 나오므로 최소성은 만족하지 않음 슈퍼키안에 후보키가 있고, 후보키를 보면 기본키와 대체키로 나뉘어짐 2. 후보 키(Candidate key) 기본 키가 될 수 있는 후보 후보키는 테이블에 존재하는 전체 필드의 부분집합 유일성 과 최소성 을 만족해야 함 3. 기본 키(Primary key) 테이블에서 특정 레코드를 구별하기 위해 후보 키중에서 선택된 고유한 식별자 유일성 과 최소성 의 속성을 가져야 하며, NULL값을 가질 수 없다 . 기본키를 설정할 때 아래와 같은 두 가지 사항을 고려하는 것이 좋다 값이 자주 변경되지 않는 것을 선택 기본키의 값이 변경될때 마다 해당 값이 유일한지, NULL값이 아닌지를 검사해야 하므로 자주 변경되지 않는것이 좋음 값이 단순한 것을 선택 짧고 단순한 데이터를 저장하는 필드를 기본키로 설정하는것이 DBMS의 성능에 유리 4. 대체 키(Alternate key) 후보 키 중에서 기본 키로 선택된 것들을 제외한 모든 키 5. 복합 키(Composite key) 한 개 이상의 필드를 포함하는 키를 복

[Database] 데이터의 무결성

이미지
[Database] 데이터의 무결성 데이터의 무결성 : 데이터의 정확성, 일관성, 유효성 이 유지되는 것 즉, 데이터가 인가되지 않은 방법으로 변경할 수 없도록 보호하는 성질 데이터의무결성을 유지하는 것은 데이터베이스 관리 시스템(DBMS)에서 중요한 기능 주로 데이터에 적용되는 연산에 제한 을 두어 데이터의 무결성을 유지 데이터베이스에서 말하는 무결성에는 다음과 같은 4가지 종류가 있음 1. 개체 무결성(Entity integrity) 모든 테이블은 기본 키(primary key)로 선택된 필드(column)를 가져야 함 기본 키를 구성하는 어떠한 속성 값도 널(Null) 값이나 중복 값을 가질 수 없음을 의미 2. 참조 무결성(Referential integrity) 관계형 데이터베이스 모델에서 참조 무결성은 참조 관계에 있는 두 테이블의 데이터가 항상 일관된 값을 갖도록 유지되는 것 아래의 그림에서 관계형 데이터베이스 모델에서 참조 무결성이 깨지는 경우를 보여 준다. department 테이블을 참조하는 student 테이블을 보여주고 있다. 이러한 참조 관계에서 만약 departmetn테이블에서 id 값이 310인 레코드가 삭제되면 student테이블의 3번째 레코드는 더 이상 존재하지 않는 데이터를 참조함 3. 도메인 무결성(Domain integrity) 도메인 무결성은 테이블에 존재하는 필드의 무결성을 보장하기 위한 것 필드의 타입, NULL값의 허용 등에 대한 사항을 정의하고, 올바른 데이터의 입력이 되는지 확인하는 것 ex) 주민등록 필드에 알파벳이 입력되는 경우는 도메인 무결성이 깨지는 경우 ex) DBMS의 기본값 설정, NOT NULL 옵션 등의 제약 사항으로 도메인 무결성을 보장할 수 있음 4. 키 무결성 규칙(Key integrity) 한 릴레이션(테이블)에는 최소한 하나의 키가 존재해야 하는 제약조건 5. 무결성 규칙