개발의변화
서버프로그램 구현 본문
빌드도구: 작성한 코드의 빌드 및 배포를 수행하는 도구, 각각의 구성요소와 모듈에 대한 의존성 관리를 지원하는 도구
Ant, Maven,Gradle
구현 도구: 코드의 작성과 디버깅, 수정 등과 같은 작업 시 사용되는 도구, 프로그램을 개발할 때 가장 많이 사용되는 경우
Eclipse, IntelliJ, Spring Tool Suite, NetBeans, Visual Studio
테스트 도구: 코드의 기능 검증과 전체의 품질을 높이기 위해 사용되는 도구
xUnit, PMD, Findbugs, Cppcheck, SonarQube
형상 관리 도구: 개발자들이 작성한 코드와 리소스 등 산출물에 대한 버전 관리를 위한 도구, 프로젝트 진행 시 필수로 포함되는 도구
CVS, SVN, Git
웹 서버: 웹 브라우저의 요청을 받아 HTTP를 통해 웹 브라우저에서 요청하는 HTML 문서나 오브젝트를 전송해주는 서버
Apache HTTP Server, Microsoft Internet Information Service, Google Web Server
웹 애플리케이션 서버: 사용자에게 동적 서비스를 제공하기 위해 웹 서버로부터 요청을 받아 데이터 처리를 수행하거나, 웹 서버와 데이터 베이스 서버 또는 웹 서버와 파일 서버 사이에서 인터페이스 역할을 수행하는 서버
Oracle WEbLogic, Apache Tomcat, IBM WebSphere
데이터베이스 서버: 데이터베이스와 이를 관리하는 DBMS를 운영하는 서버
MySql Server, Oracle Server, MS-SQL Server
파일서버: 파일 저장 하드웨어로 물리 저장 장치를 활용한 서버
AWS S3
-> 웹 서버, JVM과 같은 개발환경의 구성요소로 활용, 웹 서비스는 웹 서버를 설치하여 사용자 요구사항에 적합한 웹 서비스 제공
프레임워크의 개념
프레임워크는 소프트웨어의 구체적인 부분에 해당하는 설계와 구현을 재사용이 가능하게끔 일련의 협업화된 형태로 클래스를 제공하는 틀
재사용이 가능하도록 소프트웨어 구성에 필요한 기본을 제공
모듈화 : 프레임워크는 구현을 인터페이스 뒤에 감춰 모듈화를 강화, 설계와 구현 변경에 따르는 영향을 최소화
재사용성: 인터페이스를 통해 여러 애플리케이션에서 반복적으로 사용하는 일반적 컴포넌트를 정의하여 재사용성을 높임
확장성: 다형성을 통해 애플리케이션이 프레임워크의 인터페이스를 확장
제어의 역행: 프레임워크 코드가 전체 애플리케이션의 처리 흐름을 제어, 외부의 이벤트에 대해 애플리케이션이 어떤 메서드를 수행해야할지 결정
보안 취약성 식별: 정보시스템에 불법적인 사용자의 접근, 정상적인 서비스를 방해, 위협
침투테스트
정찰-> 탐색-> 접근 권한 취득 -> 액세스 유지 -> 추적 방지
취약성 공격: 공격자가 원하는 결과를 얻기 위해서 악성 코드, 악성 프로글맫 ㅡㅇ을 이용하여 보안 버그나 잘못된 설정 등의 결함에 대한 공격이다. 취약성 공격의 목표는 대상 시스템을 장악하여 정보를 빼내거나 혹은 다른 용도로 악용하기 위함이다
취약성에 따른 공격 기법
1.익스플로잇(Exploit): 컴퓨터의 소프트웨어나 하드웨어 및 컴퓨터 관련 전자 제품의 버그 등 설계상 결함을 이용해 공격자의 의도된 동작 수행하도록
2. DoS: 무의미한 서비스 요청 등의 반복을 통해 특정 시스템의 가용자원을 소모시켜 서비스 가용성 저하
3. 코드실행: 응용 프로그램이 적절한 입력 유효성 검사 없이 쉘(Shell) 명령을 실행하는 취약점을 이용하여 공격자가 원하는 임의 코드가 실행하도록 하는 공격기법
4. 버퍼 오버플로우: 정해진 메모리의 범위를 넘치게 해서 원래의 리턴 주소를 변경시켜 임의의 프로그램이나 함수를ㄹ 실행시키는 시스템 해킹 기법
5. 정보 수집: 공격 전 서버 또는 시스템의 취약점, 네트워크 경로, 방화벽 설치 유무를 알아내고 정보를 수집하는 공격기법
6. 권한 상승: 악성프로그램 설치 후 데이터 조회, 변경, 삭제 등을 통한 권한 상승-> 루트권한을 획득하는 기법
7. SQL 삽입: 데이터베이스아 연동된 웹 애플리케이션에서 SQL문을 삽입하여 DB로부터 정보를 열람할 수 있는 공격기법
8. XSS(크로스 사이트 스크립팅): 게시판에 악성 스크립트를 작성, 사용자가 그것을 보았을 때 사용자의 쿠키정보, 개인정보 등을 특정 사이트로 전송하는 공격기법
9. CSRF(사이트 간 요청 위조 공격): 웹 사이트 취약점 공격의 하나로, 사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위를 특정 웹 사이트에 요청하게 하는 기법
10. 디렉터리 접근: HTTP 기반의 공격으로 액세스가 제한된 디렉터리에 접근
11. FTP 바운스 공격: FTP 서버가 데이터 전송할 떄 목적지가 어디인지 검사하지 않는 설계상의 문제점을 이용한 공격기법
시큐어 코딩: 개발자의 실수, 논리적 오류 등으로 인해 SW 보안 취약점 최소화 ,안전한 소프트웨어
배치 프로그램: 사용자와의 상호작용 없이 일련의 작업들을 작업 단위로 묵어 정기적으로 반복 수행하거나 정해진 규칙에 따라 일괄 처리하는 방법이다.
필수 요소 : 자동화(사용장의 개입X), 안정성(어떤 문제인지 추적), 대용량 데이터(대용량의 데이터를 처리할 수 있어야함), 견고성(유효하지 않은 데이터의 경우도 처리해서 비정상적인 동작 중단이 발생하지 않음), 성능(주어진 시간 내에 처리를 완료할 수 있어야 하고, 동시에 동작하고 있는 다른 애플리케이션을 방해하지 말아야 함)
유형: 이벤트 배치(사전에 정의해 둔 조건 충족 시 자동으로 실행), 온디맨드 배치(사용자의 명시적 요구가 있을 때마다 실행), 정기 배치(정해진 시점에 정기적으로 실행)
스프링 배치(Spring Batch) 스프링 프레임워크의 AOP,DI,서비스 추상화 등 스프링 프레임워크의 3대 요소를 모두 사용할 수 있는 대용량 처리를 제공하는 스케줄러
쿼츠 스케줄러: 스프링 프레임워크에 플러그인 되어 수행하는 작업(Job)과 실행 스케쥴을 정의하는 트리거(Trigger)를 분리하여 유연성을 제공하는 오픈소스 기반 스케쥴러
배치 프로그램 구현 절차: 배치 프로그램 확인(애플리케이션 설계를 기반으로 한 프로그램 관리 대장을 확인), 배치 설계서 확인(프로그램 간리 대장의 ID와 일치하는 배치 설계를 확인
연산자 우선 순위
증감 연산자 ++x, x++, --x,x-- (++,--)
산술 연산자 (+,-,*,/,%(나머지계산))
시프트 연산자 << (왼쪽 값을 오른쪽 값만큼 비트를 왼쪽으로 이동(2의x승 곱하기)), >> (왼쪽 값에 오른쪽 값만큼의 부호 비트를 채우는 것(2의x승 나누기))
관계 연산자 >,<,>=,<=,==,!=
비트 연산자 &,|,^,~
논리 연산자 &&, ||, !
삼항 연산자 ?a:b
대입 연산자 =, += , -= , *=, /=, %=
증산시 관비 논삼대!
절차적 프로그램 언어: 프로시저 호출의 개념을 바탕으로 하고 있는 프로그래밍 언어, 명령형 프로그래밍
언어 특징: 유지보수나 코드의 수정이 어렵다, 복사해서 붙이지 않고도 같은 코드를 다른 콧에서 다시 사용, 순차적으로 진행되기 때문에 프로그램의 흐름을 파악하기 쉽다, 모듈화를 하거나 구조화를 할 수 있다
언어 종류: 알골, C언어, 포트란
객체지향 프로그래밍 언어: 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위인 "객체" 중심의 프로그래밍 언어
라이브러리: 효율적인 프로그램 개발을 위해 필요한 프로그램을 모아 놓은 집합체(모듈+패키지), 모듈이 개별 파일, 패키지는 파일들을 모아 놓은 폴더
도움말, 설치파일, 샘플 코드
표준 라이브러리(입출력,문자열,시간 처리, 수학), 외부 라이브러리(별도로 설치)
문자열 라이브러리 함수:
strcat(a,b)=>a는a+b
strcpy(a,b): a=b
strcmp(a,b): a< b -1, a>b 1, a=b 0
strlen: 길이
strrev: 문자열을 거꾸로 뒤집는 함수
strchr: 문자열 내에 일치하는 문자가 있는지 검사하는 함수
표준 라이브러리 (a to i), (a to f), (i to a), ceil올림, floor내림
예외처리에는 문ㅂ적 오류 들어갈 수 없음