본문 바로가기

STUDY

(102)
2. Git 기초1 - 레포지토리, 라이프사이클 레포지토리 시작하기 Git는 레포지토리 단위로 버젼관리를 한다. 레포지토리는 2가지 방법으로 쓰기 시작할 수 있다. 첫번째는 로컬 디렉토리 하나를 Git 레포지토리로 설정하여 시작는 것이다. 두번째는 다른곳에 있는 Git 레포지토리를 가져와서 사용하는 것이다. > mkdir my_project > cd my_project > git init my_project라는 폴더를 만들고 해당 폴더로 이동한 후 git init 명령어를 사용하여 해당 폴더를 Git 레포지토리로 만들었다. > git clone https://github.com/libgit2/libgit2 > ls libgit2라는 외부 레포지토리를 가져오는 명령어이다. git clone 이후 libgit2 폴더가 생성된것을 확인할 수 있다. 레포지토..
1. 시작하기 버전관리 버전관리란 프로그램의의 상태변화를 버전으로 기록하면서 변화된 내용을 파악하고 필요할 때 특정 버전으로 되돌리는 것을 말한다. 그리고 이러한 버전관리를 지원하는 시스템을 버전관리시스템이라고 부른다. 버전관리 시스템은 로컬 버전 관리으로 시작하여 중앙집중식 버전 관리, 분산 버전 관리로 발달하였다. GIT의 역사 GIT는 가장 널리 사용하는 버전관리시스템이다. 과거 리눅스 커널 개발팀은 BitKeeper 이라는 상용 버전관리시스템을 사용하였으나, BitKeeper에서 무료 사용을 금지한 이후 리눅스 커널 개발팀은 자체적으로 사용할 버전관리시스템인 GIT를 개발하였다. GIt 시작하기 > sudo apt install git-all > git --version Ubuntu에서 git를 설치하려면 ap..
15. 도커 배포 프로세스: AWS ECS 활용2 다중 컨테이너 서비스 여기 2개의 컨테이너로 goals 서비스의 docker-compose 파일이 있다. 이 서비스는 backend와 mongodb 컨테이너가 각각 동작하면서 사용자로부터 정보를 입력받아서 저장하고 보여준다. 이렇게 다중 컨테이너로 동작하는 서비스를 ECS로 올려보고자 한다. // backend의 app.js 파일 ... mongoose.connect( `mongodb://${process.env.MONGODB_USERNAME}:${process.env.MONGODB_PASSWORD}@mongodb:27017/course-goals?authSource=admin`, { ... ECS로 컨테이너들을 올리기 전에 수정해야하는 부분이 있다. 위의 코드는 backend에서 mongodb에 접속하..
9-11) 최적화는 신중히 하라 빠른 프로그램보다 좋은 프로그램을 작성하라 최적화를 할 때는 다음 두 규칙을 따르라. 첫 번째, 하지마라. 두 번째, (전문가 한정) 아직 하지 마라. 다시 말해, 완전히 명백하고 최적화되지 않은 해법을 찾을 때까지는 하지 마라. - M.A 잭슨 (Jackson75) 위의 격언은 최적화의 어두운 진실을 이야기해준다. 최적화는 섣불리 진행하면 오히려 안좋은 결과를 불러올 수 있다. 성능보다 중요한 것은 견고한 구조를 가진 좋은 프로그램을 작성하는 것이다. 프로그램의 구성요소들이 각각 독립된 책임을 가지고 동작해야 한다. 그러면 나머지 시스템에 영향을 주지 않고 각 요소를 다시 수정할 수 있을 것이다. 그렇다고 성능을 무시하라는 것은 아니다. 다만 지엽적인 구현상의 최적화에 신경쓰기 보다는 설계상의 성능에 ..
AWS: EC2(Elastic Compute Cloud) EC2(Elastic Compute Cloud) 과거에는 웹 서비스를 위해 물리적인 서버를 구매하고 그 안에서 서비스를 운영하였다. 물리적인 서버는 트래픽의 증가와 감소에 유연하게 대응할 수 없었고, 그 결과 고점의 트래픽을 기준으로 물리적인 서버를 운영할 수 밖에 없었다. 하지만 지금은 다수의 서비스들이 클라우드 서버를 사용한다. 클라우드 서버는 빠르게 가상 머신을 추가하거나 제거할 수 있어서 트래픽에따라 유연하게 대응할 수 있다. EC2는 AWS에서 제공하는 클라우드 머신 서비스이다. 사용자는 다양한 종류의 가상 머신을 사용할 수 있고 이에따라 비용이 발생 한다. EC2 인스턴스 생성 ec2-study라는 이름의 EC2 인스턴스를 생성하려고 한다. EC2 생성시에는 OS 유형, 인스턴스 타입, 키페어..
AWS: IAM(Identity and Access Managemen) IAM(Identity and Access Managemen) IAM은 AWS 리소스에 대한 액세스를 안전하게 제어할 수 있는 서비스이다. IAM을 사용하여 리소스를 사용하도록 인증 및 권한 부여된 대상을 제어합니다. 리소스에 접근할 사용자(User), 그룹(Group), 역할(Role), 그리고 소스 접근 정책(Policy)를 생성하고 관리한다. 이들은 모두 루트 사용자(Root Account)로부터 관리된다. 루트 사용자는 기본적으로 생성되는 것으로 모든 AWS 리소스에 접근 권한이 있지만, 일상적인 접근은 IAM을 통해 생성한 사용자를 이용한다. 유저(User)와 그룹(Group) 유저는 조직의 사용자이며 그룹은 유저들을 묶은 단위이다. 유저는 반드시 그룹에 속해야하는 것은 아니고, 그룹은 다른 그..
9-10) 네이티브 메소드는 신중히 사용하라 자바 네이티브 인터페이스(JNI) 자바 네이티브 인터페이스는 자바 프로그램이 C/C++ 같은 네이티브 언어로 작성된 프로그램을 호출하는 기술이다. JNI는 플랫폼 특화 기술을 활용 하거나, 네이티브 언어로 작성된 기존 라이브러리를 사용하거나, 성능 개선을 하고 싶을때 사용한다. 하지만 자바가 성숙해가면서 플랫폼의 기능들을 점차 흡수하고 있고, 자바로 작성된 라이브러리의 수도 상당히 늘어났다. 또 JVM이 발전하면서 자바의 성능도 상당부분 개선이 되었기 때문에 네이티브 메소드를 사용해야하는 상황은 흔치않다. JNI 실습 // JNI.java public class JNI { static { System.loadLibrary("JNI"); } private native void printHelloWorld(..
9-9) 리플렉션보다는 인터페이스를 사용하라 자바 리플렉션 // effectivejava 패키지에 선언된 Person 클래스 package effectivejava; public class Person { private int age; private String name; public Person(int age, String name) { super(); this.age = age; this.name = name; } @Override public String toString() { return "Person [age=" + age + ", name=" + name + "]"; } } // 다른 .java 파일의 main 코드 Class personClass = Class.forName("effectivejava.Person"); for(Field..