본문 바로가기

전체 글97

nginx nginxNginx(엔진 x라 읽는다)는 웹 서버 소프트웨어로, 가벼움과 높은 성능을 목표로 한다. 웹 서버, 리버스 프록시 및 메일 프록시 기능을 가진다.2017년 10월 기준으로 실질적으로 작동하는 웹 사이트(active site)들에서 쓰이는 웹 서버 소프트웨어 순위아파치(44.89%)엔진엑스(20.65%)구글 웹 서버(7.86%)마이크로소프트 IIS(7.32%)2017년 6월 현재 Nginx는 한국 전체 등록 도메인 중 24.73%가 사용Nginx는 요청에 응답하기 위해 비동기 이벤트 기반 구조를 가진다이것은 아파치 HTTP 서버의 스레드/프로세스 기반 구조를 가지는 것과는 대조적이다.이러한 구조는 서버에 많은 부하가 생길 경우의 성능을 예측하기 쉽게 해준다.HTTP 프록시와 웹 서버 기능정적 파.. 2019. 1. 12.
C# 언어의 기본 C#개요2000년 7월 마이크로소프트가 C#, VB.NET 등 모든 닷넷 프레임워크 기반 언어를 Windows, Linux, Mac 기반에서 돌아가도록 만든 오픈소스 프레임워크이다.에서 개발된 객체 지향 프로그래밍 언어. '씨샵' 또는 '씨샾'이라고 읽는다. 1983년에 등장한 C++와 1995년에 등장한 Java에서 강한 영향을 받았다.Java라는 언어 자체가 매력적인 언어이고 MS 역시 이를 생각하여, .NET Framework에서 C#이라는 이름으로 새로운 언어를 발표한다.Java가 Java Virtual Machine이 필요하듯이 C#은 .NET Framework가 필요하다.호환성 및 범용성언어적으로는 Java와 유사하지만, MS라는 특정 플랫폼에 강하게 묶여있다는 특성으로 애플의 Objectiv.. 2019. 1. 11.
Ruby 언어의 기본 Ruby루비는 인터프리터 형식으로 실행되는 고기능 스크립트 언어이자 뛰어난 객체 지향적 언어이다.모든 것은 객체마츠모토 유키히로가 개발한 동적 객체 지향 스크립트 프로그래밍 언어이다. 루비는 순수 객체 지향 언어라, 정수나 문자열 등을 포함한 데이터 형식 등 모든 것이 객체이다.루비에서는 모든 것이 객체입니다. 따라서 루비에서 모든 것은 자신만의 속성과 액션을 갖습니다. 객체지향 프로그래밍에서 이런 속성을 인스턴스 변수라고 하고, 액션을 메서드라고 합니다.루비는 모든 형태의 것에 메서드와 인스턴스 변수를 부여합니다. 이는 모든 곳에서 일관되게 적용되므로 루비 사용법을 쉽게 해줍니다.루비의 유연함개발자가 루비의 어떤 부분이든 자유롭게 바꿀 수 있기 때문에 매우 유연한 언어라고 할 수 있습니다. 원한다면 루.. 2019. 1. 11.
React 란 무엇인가? ReactReact는 페이스북에서 개발한 유저인터페이스 라이브러리로서 개발자로 하여금 재사용 가능한 UI를 생성 할 수 있게 해줍니다. 이 라이브러리는 현재 페이스북, 인스타그램, 야후, 넷플릭스를 포함한 많은 큰 서비스에서 사용되고 있습니다.이 라이브러리는 Virtual DOM 이라는 개념을 사용하여 상태의 변함에 따라 선택적으로 유저인터페이스를 렌더링합니다.따라서, 최소한의 DOM 처리로 컴포넌트들을 업데이트 할 수 있게 해줍니다.Virtual DOM 은 어떻게 작동하는가?DOMDocument Object Model객체를 통하여 구조화된 문서를 표현하는 방법으로, XML 혹은 HTML로 작성웹 브라우저는 이 DOM을 활용하여 객체에 Javascript와 CSS를 적용 DOM은 트리 형태로 되어있어서,.. 2019. 1. 9.
Amazon EC2 (Elastic Computed Cloud) 란 무엇인가? EC2 (Elastic Computed Cloud)인스턴스 타입 AMI(Amazon Machine Image) 선택 임대한 컴퓨터의 운영체제 선택 인스턴스 타입 선택 임대할 컴퓨터의 사양을 선택 가격 정책 온 디맨드 인스턴스 켜고 끄고 할 수 있는 인스턴스(주문형) t2.micro 시간당 20원, 월 14,400원 개발용으로 t2.nano를 사용하면 월 7,200원 예약 인스턴스 할인권 구매 스팟 인스턴스 수요와 공급에 따라 스팟 가격이 적용됨 인스턴스 장치 설정 인스턴스 구성 Shutdown behavior 인스턴스의 운영체제를 셧다운 할 때, 인스턴스를 ‘stop’ 할 지, ‘terminate’ 할 지 지정 stop 인스턴스를 지우지 않고 일시로 얼려 놓는다. 저장 장치에 해당하는 요금만 발생 ter.. 2019. 1. 9.
Swift Memory Management Swift Memory Management스위프트는 ARC로 메모리 관리를 한다.ARC자동 참조 계수(Automatic Reference Counting)인스턴스가 더 이상 필요없을 때 사용된 메모리를 자동으로 해제해준다.강한 순환 참조ARC로 메모리를 관리할 때 발생할 수 있는 문제이다.두 개의 객체가 서로 강한 참조를 하는 경우 발생할 수 있다.해결법서로 강한 참조를 하는 경우 발생한다면, 둘 중 하나의 강한 참조를 변경해주면 된다.강한 참조를 약한(weak) 참조 혹은 미소유(unowned) 참조로 변경하면 강한 순환 참조 문제를 해결할 수 있다.약한 참조는 옵셔널일 때 사용하고, 미소유 참조는 옵셔널이 아닐 때 사용한다.클로저에서의 강한 순환 참조클래스처럼 클로저는 참조 타입이기 때문에 강한 순환.. 2018. 12. 30.
Delegate vs Block vs Notification vs KVO Delegate vs Block vs Notification vs KVO하나의 객체가 다른 객체와 소통은 하지만 묶이기(coupled)는 싫을 때DelegateDelegate는 보통 Protocol을 정의하여 사용한다.Protocol이란 일종의 기능 명세서 같은 것으로 Delegate로 지정된 객체가 해야 하는 메소드들의 원형을 적어 놓는다.Delegate 역할을 하려는 객체는 이 Protocol을 따르며 원형만 있던 메소드들의 구현을 한다.이렇게 세팅 후 이전 객체는 어떤 이벤트가 일어났을 시 delegate로 지정한 객체에 알려줄 수 있다.장점매우 엄격한 Syntax로 인해 프로토콜에 필요한 메소드들이 명확하게 명시됨.컴파일 시 경고나 에러가 떠서 프로토콜의 구현되지 않은 메소드를 알려줌.로직의 흐름.. 2018. 12. 30.
obj-c 블럭과 swift 클로저의 차이 obj-c 블럭과 swift 클로저의 차이값 타입 변수를 캡쳐(블럭/클로저 내부에서 사용)하면 클로저에서는 기본적으로 참조타입으로 사용되고 블럭에서는 값 타입으로 사용된다.참조 타입 변수는 둘 다 같다. 2018. 12. 30.
Class와 Struct의 차이 Class와 Struct의 차이같은 점값을 저장하기 위해 프로퍼티를 정의할 수 있습니다.기능 실행을 위해 메서드를 정의할 수 있습니다.서브스크립트 문법을 통해 구조체 또는 클래스가 갖는 값(프로퍼티)에 접근하도록 서브스크립트를 정의할 수 있습니다.초기화될 때의 상태를 지정하기 위해 이니셜라이저를 정의할 수 있습니다.초기구현과 더불어 새로운 기능 추가를 위해 익스텐션을 통해 확장할 수 있습니다.특정 기능을 실행하기 위해 특정 프로토콜을 준수할 수 있습니다.다른 점구조체는 상속할 수 없습니다.타입캐스팅은 클래스의 인스턴스에만 허용됩니다.디이니셜라이저는 클래스의 인스턴스에만 활용할 수 있습니다.참조 횟수 계산은 클래스의 인스턴스에만 적용됩니다. 2018. 12. 30.
map과 flatmap의 차이 map과 flatmap의 차이flatmap은 내부의 값을 알아서 더 추출해 준다.내부에 포장된 값도 추출해낼 수 있다.map은 Array 내부에 값이 있으면 그 값을 그저 클로저의 코드에서만 실행하고 결과를 다시 Array 컨테이너에 담기만 합니다.flatmap은 내부의 옵셔널값을 전부 추출해 준다. 2018. 12. 30.
Swift로 함수형 프로그래밍 시작하기 Swift로 함수형 프로그래밍 시작하기 링크: http://programmers.co.kr/learn/courses/4806 파트1. 함수형 프로그래밍 소개 현재의 프로그래밍 패러다임은 "동시성"이라는 관점으로 옮겨지고 있다. OOP에 가려서 주목을 받지 못하던 FP(함수형 프로그래밍)이 다시 주목을 받는 이유 프로그램 외부 효과를 주지 않는 방법으로 동시성 문제를 해결할 수 있기 때문 FP에 대한 오해들 프로그래밍 기법들 != FP Immutable Data Higher Order Function Currying Map Filter Reduce Side-Effect Free Programming == FP FP가 OOP를 대체할 수 있을까? OOP와 FP에 대해 잘 이해하고 현재 내가 당면한 문제를 해.. 2018. 12. 30.
앱 스토어에 iOS 앱 등록을 위한 준비와 제출하기 1. iOS 배포 인증서 검증하기앱 스토어에 앱을 제출하려면 배포 인증서를 이용해야 한다.Xcode => Preference… => 애플 ID => View Details => iOS Distribution 서명 식별자 필요 2. 앱 아이콘 추가하기앱 유효성 검사 단계를 통과하려면 최소한 40 * 40, 76 * 76, 120 * 120, 152 * 152 크기의 PNG 아이콘 파일들이 추가되어야 한다. 3. 시작화면 설계하기LaunchScreen.storyboard 인터페이스 파일을 필요에 따라 수정한다.레이아웃은 UIKit 클래스로 한정, UIWebView 객체는 포함할 수 없다. 4. 프로젝트를 팀에 할당하기프로젝트 네비게이터 패널 => 프로젝트 이름 선택 => General 탭 => Team 선택.. 2018. 9. 15.
아이폰 ECommerce+SNS 앱 목요스터디세미나 5주차 5주차 9/13프레임워크를 가져다 쓸 때의 단계설정 맞추기중개 관리자 객체를 잡아주어야 한다.중간 관리자의 인터페이스를 열어서 사용한다.과제지난 과제 완성파베 스토리지 써서 프로필사진 앨범에서 가져오기카메라로 직접 찍어서 프로필 올리기 기능 추가OO씨 과제 : FSCalendar-master (swift 달력 라이브러리) 2018. 9. 14.
Process와 Thread의 차이 Process와 Thread의 차이둘은 거의 유사하다.단지 Thread는 컴퓨터의 자원, 예를 들면 메모리와 IO장치들을 Thread끼리 공유하고, Process는 독립적으로 OS로부터 할당받아 사용한다.일반적으로 Process는 여러 Thread를 Invoking(발동) 시키고 관리한다.앱이 실행될 때 한개의 Process가 발생을 하고 그 Process가 어떠한 일을 할 때 컴퓨터의 자원을 최대로 활용하기 위해서는 병렬적으로 일을 하게 만들어야 한다.Thread를 이용해서 컴퓨터의 놀고 있는 자원들을 최대한으로 사용하게 만드는 것이 Multi-Thead Programming의 영역이다. 참고 http://rapapa.net/?p=2704 http://rapapa.net/?p=2704 http://ra.. 2018. 9. 7.
아이폰 ECommerce+SNS 앱 목요스터디세미나 4주차 4주차 9/6오늘 세미나중 주요핵심 : 잘나가는 프레임워크인 파이어베이스의 문제점프로그래머를 바보로 만든다.수정하기가 힘들다.속도나 자원에서의 손해가 심하다.중요한 것과 중요하지 않은 것의 구별이 힘들다.파이어베이스는 서버설계, 디비설계에 대한 고민을 필요없는 것처럼 보이게 한다.하지만 꼭 필요하다.앱설계자원낭비가 심해도 실시간 응답대기가 필요한 부분에는 그렇게하고 아닌 부분은 일회성 불러오기를 한다.통신설계데이터를 불러오는 타이밍을 잘 생각해야 한다.엔진내가 직접 만든 라이브러리이며 프레임워크처럼 쉽게 갖다 쓸 수 있다.프레임워크의 단점 4가지가 전부 없다.자기가 만든 것이기 때문에자원 최소화, 속도 빠르게 할 수 있게 해준다.과제10분이상 우리의 목표와 관련된 고민을 하고 와서 그에 대한 이야기를 하.. 2018. 9. 7.
네비게이션 컨트롤러에서 Large Title 나오게 하는 법 네비게이션 컨트롤러에서 large title 켜기navigationController?.navigationBar.prefersLargeTitles = true 네비게이션 컨트롤러 하위의 뷰에서는 large title 비활성화 하기navigationItem.largeTitleDisplayMode = .never 2018. 8. 31.
내비게이션 컨트롤러를 사용하여 화면 전환하기 내비게이션 컨트롤러를 사용하여 화면 전환하기if let view = self.storyboard?.instantiateViewController(withIdentifier: "NewWorkViewController") { self.navigationController?.pushViewController(view, animated: true) } 2018. 8. 31.
아이폰 ECommerce+SNS 앱 목요스터디세미나 3주차 3주차 8/30팁과제를 작게 쪼개라단순명확한 주제를 잡아라시퀀스를 고민한 후에 시작해야 함.ios 뷰컨트롤러 == android xmlios 스토리보드 == android xml 다모아놓은 것안드로이드는 자바(상속이나 클래스나 비동기를 매우 많이 씀)에 웹스러운 xml화면구성을 합한 코딩 스타일이다.아이폰은 쓰레드를 많이 쓰지 않음. 멀티 쓰레드 작업은 아이폰 앱에는 부하가 큰 작업.언어선택objc는 당분간 X첫 뷰인 로그인뷰는 항상 바닥에 남기고 그 위에 뷰를 올리고 바꿔치기한다위기관리차원아이폰은 앱댈리게이트가 화면을 넘기고 안드로이드는 그렇지않고 상위뷰가 직접 한다.앞으로 정공법으로 아이폰 만의 개발 방식을 프레임워크 스럽지 않은 방식을 배울 것이다.대부분의 앱이 첫 로그인뷰와 그다음 메인뷰를 남겨놓.. 2018. 8. 31.
git 커밋 되돌리기 커밋 되돌리기git reset HEAD^ 4개 커밋 되돌리기git reset HEAD~4 +를 붙여주면 정보 손실 있어도 무시하고 푸쉬한다.git push origin +master 2018. 8. 24.
git에 이미 커밋된 로그 메시지를 수정하는 방법 git에 이미 커밋된 로그 메시지 중 맨 마지막에 커밋한 메시지를 수정하는 방법이다.$ git commit --amend 하지만 그 이전에 작성한 커밋메시지를 수정하고 싶다면 rebase 해야한다.맨 마지막 커밋에서부터 몇번째까지 거슬러 올라갈지 결정해서 아래와 같이 rebase를 실행한다.$ git rebase -i HEAD~2 최근 2개의 커밋 메시지가 에디터에 표시되는데 이중에 변경을 원하는 메시지들을 골라서 pick라고 되어있는 부분을 edit로 바꿔주고 저장한다.pick fe12c20 17.06.06에 학습한 강의 'MoneyConverter' pick d6babd4 no message ​ # Rebase dd5da1b..d6babd4 onto dd5da1b (2 commands) # # Com.. 2018. 8. 24.