본문 바로가기

분류 전체보기

(92)
가상메모리? 메모리란? 메모리란 프로그램과 프로그램 수행에 필요한 데이터 및 코드를 저장하는 장치 메모리는 크게 내부 기억장치인 주기억장치와 외부 기억장치인 보조 기억장치로 분류 가상메모리(Virtual Memory) 초창기 컴퓨터에서는 사용 가능한 RAM의 용량이, 가장 큰 실행 애플리케이션의 주소 공간보다 커야 했다. 그렇지 않을 경우 "메모리 부족" 오류에 의해 해당 애플리케이션을 실행할 수 없었다. 위와 같은 물리 메모리 크기의 한계를 극복하기 위해 나온 기술이다. 가상 메모리 기법은 애플리케이션을 실행하는 데 얼마나 많은 메모리가 필요한지에 집중하지 않고, 대신 애플리케이션을 실행하는 데 최소한 얼마만큼의 메모리가 필요한가에 집중하여 문제를 해결하고자 했다. 메모리 접근은 순차적이고 지역화되어 있기 때문에 ..
프로세스와 스레드 선행지식CPU : 중앙처리장치 초기의 컴퓨터는 멀티 태스킹이 불가능했다. 그러나 CPU 성능이 개선됨에 따라 Context Switching을 통해서 동시성을 구현하는 것이 가능해졌다. 동시성(Concurrency) : 동시에 실행되는 것 같이 보이는 것 2000년대 초반, 한계치 이상까지 CPU의 쿨럭을 끌어올리던 CPU 제조회사들은 2002년에 3Ghz 쿨럭을 돌파했다. 그러나 이로 인해 발생하는 발열, 엄청난 전력 소모로 인해 CPU의 작업 속도를 높이는데에 한계가 있음을 발견한다. 이에 쿨럭을 올리는 방향이 아닌, 코어의 면적을 넓히는 방향, 즉 멀티 코어 프로세서의 방향으로 나아가기 시작한다. 즉 코어 하나를 극한까지 끌어올리는 것이 아닌, 하게 된 것이다. 코어의 수를 늘려서 더 쉽게 CPU ..
인덱스를 사용하는 이유 DB를 사용하면서 데이터 양에 따라 실행 결과의 속도가 차이가 나는 것을 알고 있었다. 데이터의 양이 증가할 수록 실행 속도는 느려지고 WHERE 조건에서 필요한 데이터만 추출 후 사용하는 것이 좋다고 들었는데 보다 쿼리의 성능을 높이는 중요한 것은 인덱스를 활용한다는 것을 알게되었다. 인덱스란? 인덱스란 추가적인 쓰기 작업과 저장 공간을 활용하여 데이터베이스 테이블의 검색 속도를 향상시키기 위한 자료구조이다. 만약 우리가 책에서 원하는 내용을 찾는다고 하면, 책의 모든 페이지를 찾아 보는것은 오랜 시간이 걸린다. 그렇기 때문에 책의 저자들은 책의 맨 앞 또는 맨 뒤에 색인을 추가하는데, 데이터베이스의 index는 책의 색인과 같다. 데이터베이스에서도 테이블의 모든 데이터를 검색하면 시간이 오래 걸리기 ..
OSI 7계층 모델과 TCP/IP 모델 프로토콜 컴퓨터 등 클라이언트에서 발생한 데이터가 상대방 컴퓨터 혹은 서버로 전달되기 위해 표준화된 어떠한 약속이나 절차를 따라야한다. 전송은 데이터를 안전,정확하고 신속하게 규격화된 방법이 필요하고 받는 입장에서는 해당 데이터를 안전,정확하고 신속하게 해석하는 방법이 필요하다. 그런 기술적 약속을 프로토콜 이라고 한다. 계층구조 네트워크 상에서 여러 대의 컴퓨터가 데이터를 주고 받으려면 이들을 서로 연동할 수 있도록 표준화된 인터페이스를 지원해야한다. OSI 7모델과 TPC/IP 모델 모두 계층 구조를 갖고 있기 때문에, 자세히 알아보기 전에 먼저 계층 구조가 어떤 것인지, 적용하면 어떤 점이 좋은지를 알 필요가 있다. 계층 구조(Layered)는 네트워크 뿐만 아니라 운영체제 등 다양한 분야에서 적용..
HTTPS를 적용해보자!(Nginx, Let's Encrypt 인증서 활용) 우리의 프로젝트에 클라이언트와 서버간에 데이터 암호화를 위해 HTTPS를 적용해보았다. HTTPS 적용을 위해 필요한 것! EC2 서버(해당 작성 글은 ubuntu 18.04 프리티어 버전을 사용했다.) 도메인(해당 글은 가비아 도메인을 사용했으나 어느 도메인이든 상관없지만 필수) EC2 설정 EC2 서버 생성은 생략하겠다. 생성이 완료 되었다면 포트를 열어줘야 하는데 인바운드 규칙 편집으로 가자 도메인 연결 생성한 EC2 인스턴스 주소를 소유하고 있는 도메인 주소에 연결해준다. Nginx 서버에서 Certbot을 통해 Let’s Encrypt 인증서 발급 우분투 서버 접속 이젠 잘 따라와야 한다. 터미널에서 아래 명령어들을 입력하자. 2. sudo apt update -> 운영체제에서 사용 가능한 패키..
예외 처리 항해 78일차 멘토링에서 조언해주신 대로 예외처리를 해봤다. 프로그램에서 예외는 발생할 수 밖에 없고 특히 예외로 인해 서버 프로그램이 작동을 멈출수도 있다는 피드백이 있었다. 예외가 발생하면 어떤 예외이고 이것이 무시해도 될 수준인지, 반드시 처리를 해야하는지, 시스템 자체를 종료시켜야 하는지에 대해 생각해봐야 한다. 시스템에서 물론 기능도 중요하지만 손쉬운 보완이라고 한다. 프로그램을 설계하고 구축하는 첫 단계에서 많은 예외상황에 대해 생각하고 고민해야한다. 에러와 예외의 차이 Error : 시스템 단계에서 발생하며 시스템의 비정상적인 상황이므로 예외처리가 아닌 시스템 환경을 개선해야 한다. Exeption : 프로그램 로직에서 발생하며 개발자가 작성한 로직에서 예외를 예상하여 구분하고 처리해야 한다..
Travis CI로 application.properties 암호화 항해 76일차 EC2, S3 관련 비밀 키를 포함하는 application.properties 파일을 깃허브에 그대로 올릴 수 없는 문제가 있어 처음에는 외부에 빼두고 외부파일을 읽는 방법으로 했지만 서버가 털리면 모든 정보를 잃을수도 있다는 조언으로 급하게 암호화 하는 방법을 찾아보았다. 여러 방법이 있었는데 Travis에서 파일을 암호화를 하여 깃허브에 올리고 travis에서 사용할 때는 파일을 복호화 해서 사용하게 만들 수 있다. Mac이 아닌 Window환경해서 하면 안된다는 팀원들이 많았다. Travis 설치 sudo gem install travis Travis 로그인 travis login --pro --github-token [본인 계정 토큰] 암호화 인텔리제이 터미널에서 암호화 하고자하는..
Nginx 무중단 배포 항해 75일차 Travis CI와 CodeDeploy로 CI/CD 구성을 하였다. 배포 자동화까지 되었으니 무중단 배포까지 진행했다. 긴 시간은 아니지만, 새로운 Jar가 실행되기 전까진 기존 Jar를 종료시켜 놓기 때문에 서비스가 종료된다. 서비스를 정지하지 않고 배포하는 것을 무중단 배포라고 한다. Nginx가 가지고 있는 여러 기능 중 리버스 프록시가 있다. 리버스 프록시란 Nginx가 외부의 요청을 받아 백엔드 서버로 요청을 전달하는 행위를 이야기 한다. 리버스 프록시 서버(엔진엑스)는 요청을 전달하고, 실제 요청에 대한 처리는 뒷단의 웹 애플리케이션들이 처리한다. 우리는 이 리버스 프록시를 통해 무중단 배포 환경을 구축해 볼 예정이며 Nginx를 이용한 무중단 배포를 하는 이유는 가장 저렴하고 ..
Travis CI와 AWS S3, CodeDeploy 연동 (3) 항해 74일차 Travis CI와 AWS S3, CodeDeploy 연동 앞에서 S3연동까지 되었다. AWS의 배포 시스템인 CodeDeploy를 이용하기 전에 배포 대상인 EC2가 CodeDeploy를 연동 받을 수 있게 설정해보자. EC2에 IAM 역할 추가 S3 버킷을 생성하면서 IAM에서 사용자 추가를 하였다. 이번에는 사용자 추가가 아닌 역할 추가를 해야한다. IAM의 사용자와 역할의 차이 역할 AWS 서비스에서만 할당할 수 있는 권한 EC2, CodeDeploy, SQS 등 사용자 AWS 서비스 외에 사용할 수 있는 권한 로컬 PC, IDC 서버 등 이번에 만들 권한은 EC2에서 사용해야 하기 때문에 사용자가 아닌 역할을 설정해준다. IAM에서 [역할]탭에서 역할 만들기 클릭 AWS서비스 / ..
Travis CI와 AWS S3 연동 (2) 항해 73일차 Travis CI와 AWS S3 연동 배포하기전에 Travis CI를 통해 빌드된 결과물을 보관할 수 있는 공간이 필요하다. AWS S3에 저장한다. S3 버킷 생성 파일들을 저장하고 접근 권한을 관리, 검색 등을 지원하는 파일 서버의 역할을 한다. 팀 프로젝트에서 S3를 사용하고 있는데 기존에는 게시글 작성 시 첨부되는 파일을 저장하는 용도로 사용하고 있다. 버킷 생성은 https://velog.io/@kyungwoon/TIL-%ED%95%AD%ED%95%B499-Day-50 참고하면 된다.(1번,2번,4번 과정 참고) 단, 2번 과정에서 모든 퍼블릭 액세스 차단에 체크해준다. 현재 프로젝트야 이미 깃허브에 오픈소스로 풀려있으니 문제없지만, 실제 서비스에서 할 때는 Jar 파일이 퍼블릭일..