전체 글 146

chapter 11. 응용 SW 기초 기술 활용 (1)

리눅스/유닉스 계열의 기본 명령어 리눅스/유닉스 운영체제의 파일 접근 권한 관리 [2020년 2회] ① 리눅스/유닉스 운영체제의 파일 접근제어 개요 리눅스/유닉스 시스템에서 사용자 혹은 프로세스가 파일을 읽거나 실행하면 open(), read(), write()와 같은 시스템 호출이 수행되고, 각 파일의 정보가 저장된 i-node 값을 읽게 된다. i-node에는 각 파일의 물리적 위치, 생성/수정/사용 날짜 등의 정보와 더불어 파일 소유자/그룹, 접근 권한 등의 파일 접근제어와 관련된 정보가 수록되며, 해당 정보를 이용하여 DAC 기반 접근제어를 수행한다. ② 리눅스/유닉스 파일 접근제어 매커니즘 접근 권한 설명 User 파일을 사용하고 있는 사용자(Owner) Group 소유자를 제외하고 파일과 같은..

chapter 10. 애플리케이션 테스트 관리 (2)

통합 테스트 상향식 통합 [2021년 3회] ① 상향식 통합(Bottom Up) 개념 애플리케이션 구조에서 최하위 레벨의 모듈 또는 컴포넌트로부터 위쪽 방향으로 제어의 경로를 따라 이동하면서 구축과 테스트를 수행한다. ② 상향식 통합 수행 단계 단계 설명 1단계 하위 레벨의 모듈 또는 컴포넌트들이 하위 모듈의 기능을 수행하는 클러스터로 결합 2단계 상위의 모듈에서 데이터의 입력과 출력을 확인하기 위한 더미 모듈인 드라이버 작성 3단계 각 통합된 클러스터 단위 테스트 4단계 테스트가 완료되면 각 클러스터들은 프로그램의 위쪽으로 결합되며, 드라이버는 실제 모듈 또는 컴포넌트로 대체 테스트 자동화 도구 테스트 자동화 도구 유형 [2020년 2회] ① 정적 분석 도구(Static Analysis Tools) 정..

chapter 10. 애플리케이션 테스트 관리 (1)

소프트웨어 테스트 원리 소프트웨어 테스트 원리 [2020년 1회] 원리 설명 결함 존재 증명 - 결함이 존재함을 밝히는 활동 - 결함이 없다는 것을 증명할 수는 없음 - 결함을 줄이는 활동 완벽 테스팅은 불가능 - 완벽하게 테스팅하려는 시도는 불필요한 시간과 자원낭비 - 무한경로(한 프로그램 내의 내부 조건은 무수히 많을 수 있음), 무한 입력값(입력이 가질 수 있는 모든 값의 조합이 무수히 많음)으로 인한 테스트 어려움 초기 집중 - 조기 테스트 설계 시 장점: 테스트 결과를 단시간에 알 수 있고, 테스팅 기간 단축, 재작업을 줄여 개발 기간 단축 및 결함 예방 - SW 개발 초기 체계적인 분석 및 설계가 수행되지 못하면 그 결과가 프로젝트 후반에 영향을 미치게 되어 비용이 커진다는 요르돈의 법칙 적용..

chapter 09. 소프트웨어 개발 보안 구축

SW 개발 보안의 구성요소 정보보안의 세 가지 요소인 기밀성, 무결성, 가용성을 지키고 서버 취약점을 사전에 방지하여 위협으로부터 위험을 최소화하는 구축 방법을 말하다. SW 개발 보안의 3대 요소 [2020년 4회] 3대 요소 설명 기밀성 (Confidentiality) 인가되지 않은 개인 혹은 시스템 접근에 따른 정보 공개 및 노출을 차단하는 특성 무결성 (Integrity) 정당한 방법을 따르지 않고서는 데이터가 변경될 수 없으며, 데이터의 정확성 및 완전성과 고의/악의로 변경되거나 훼손 또는 파괴되지 않음을 보장하는 특성 가용성 (Availability) 권한을 가진 사용자나 애플리케이션이 원하는 서비스를 지속해서 사용할 수 있도록 보장하는 특성 SW 개발 보안을 위한 공격 기법의 이해 DoS 공..

chapter 08. 서버 프로그램 구현

형상관리(Configuration Management) [2020년 3회] ① 형상 관리의 개념 형상 관리는 소프트웨어 개발을 위한 전체 과정에서 발생하는 모든 항목의 변경 사항을 관리하기 위한 활동이다. SW 생명 주기 동안 형상 관리를 통해 산출물을 체계적으로 관리하여 SW의 가시성, 추적성, 무결성 등의 품질 보증을 보장할 수 있다. ② 형상 관리의 목적 프로젝트 생명주기 동안 제품의 무결성과 변경에 대한 추적성을 확보할 수 있다. 프로젝트 변경이 발생 되었을 때 처리하는 메커니즘을 제공한다. 대표적인 메커니즘으로 형성 관리대상 파악, 베이스라인 지정, 형상 관리, 접근제어 등이 있다. ③ 형상 관리의 절차 형상 관리는 다음과 같은 절차를 통해 품질 보증의 목적으로 수행된다. 절차 설명 형상 식별 ..

Chapter 09. 코드가 푸시되면 자동으로 배포해 보자 - Travis CI 배포 자동화 (4)

9.5 배포 자동화 구성 앞의 과정으로 Travis CI, S3, CodeDeploy연동까지 구현되었다. 이제 이 것을 기반으로 실제 Jar를 배포하여 실행까지 해보겠다. deploy.sh파일 추가 먼저 step2 환경에서 실행될 deploy.sh를 생성한다. .scripts 디렉토리를 생성해서 여기에 스크립트를 생성한다. #!/bin/bash REPOSITORY=/home/ec2-user/app/step2 PROJECT_NAME=springboot-study-webserivce echo "> Build 파일 복사" cp $REPOSITORY/$PROJECT_NAME/build/libs/*.jar $REPOSITORY/ echo "> 현재 구동 중인 애플리케이션 pid 확인" CURRENT_PID=$(p..

Chapter 09. 코드가 푸시되면 자동으로 배포해 보자 - Travis CI 배포 자동화 (3)

9.4 Travis CI와 AWS S3, CodeDeploy 연동하기 AWS의 배포 시스템인 CodeDeploy를 이용하기 전에 배포 대상인 EC2가 CodeDeploy를 연동 받을 수 있게 IAM 역할을 하나 생성한다. EC2에 IAM 역할 추가하기 S3와 마찬가지로 IAM을 검색하고, 이번에는 [역할] 탭을 클릭해서 이동한다. [역할 -> 역할 만들기] 버튼을 차례로 클릭한다. 앞에서 만들었던 IAM의 사용자와 역할은 어떤 차이가 있을까? 역할 AWS 서비스에만 할당할 수 있는 권한 EC2, CodeDeploy, SQS등 사용자 AWS 서비스 외에 사용할 수 있는 권한 로컬 PC, IDC 서버 등 지금 만들 권한은 EC2에서 사용할 것이기 때문에 사용자가 아닌 역할로 처리한다. 서비스 선택에서는 [A..

Chapter 09. 코드가 푸시되면 자동으로 배포해 보자 - Travis CI 배포 자동화 (2)

9.3 Travis CI와 AWS S3연동하기 S3랑 AWS에서 제공하는 일종의 파일 서버이다. 이미지 파일을 비롯한 정적 파일들을 관리하거나 지금 진행하는 것처럼 배포 파일들을 관리하는 등의 기능을 지원한다. 보통 이미지 업로드를 구현한다면 이 S3을 이용하여 구현하는 경우가 많다. S3를 비롯한 AWS 서비스와 Travis CI를 연동하게 되면 전체 구조는 다음과 같다. 첫 번째 단계로 Tavis CI와 S3을 연동한다. 실제 배포는 AWS CodeDeploy라는 서비스를 이용한다. 하지만, S3 연동이 먼저 필요한 이유는 Jar 파일을 전달하기 위해서이다. CodeDeploy는 저장 기능이 없다. 그래서 Travis CI가 빌드한 결과물을 받아서 CodeDeploy가 가져갈 수 있도록 보관할 수 있..

Chapter 09. 코드가 푸시되면 자동으로 배포해 보자 - Travis CI 배포 자동화 (1)

9.1 CI & CD 소개 8장에서 스프링 부트 프로젝트를 간단하게 EC2에 배포해 보았다. 스크립트를 개발자가 직접 실행함으로써 발생하는 불편을 경험했다. 그래서 CI, CD환경을 구축하여 이 과정을 개선하려고 한다. 근데 CI, CD 이랑 무엇일까? 코드 버전 관리를 하는 VCS 시스템(Git, SVN 등)에 PUSH가 되면 자동으로 테스트와 빌드가 수행되어 안정적인 배포 파일을 만드는 과정을 CI(Continuous Integration - 지속적 통합)라고 하며, 이 빌드 결과를 자동으로 운영 서버에 무중단 배포까지 진행되는 과정을 CD(Continuous Deployment - 지속적인 배포)라고 한다. 일반적으로 CI만 구축되어 있지는 않고, CD도 함께 구축된 경우가 대부분이다. 왜 이렇게 ..

Chapter 08. EC2 서버에 프로젝트를 배포해 보자 (3)

8.3 외부 Security 파일 등록하기 이유는 다음과 같다. ClientRegistrationRepository를 생성하려면 clientId와 clientSecret가 필수이다. 로컬 PC에서 실행할 때는 application-oauth.properties가 있어 문제가 없었다. 하지만 이 파일은 .gitignore로 git에서 제외 대상이라 깃허브에는 올라지 있지 않다. 애플리케이션을 실행하기 위해 공개된 저장소에 ClientId와 ClientSecret을 올릴 수 없으니 서버에서 직접 이 설정들을 가지고 있게 해 준다. 먼저 step1이 아닌 app디렉터리에 properties파일을 생성한다. vim /home/ec2-user/app/application-oauth.properties 그리고 로컬..