본문 바로가기

CS 정리

(14)
QueryDSL을 이용한 동적 쿼리 프로젝트를 진행하면서 다양한 조건을 통한 필터링을 구현해야 했다. 이 때 조건이 있을 수도 있고 "전체"로 찾는 경우도 있다. 기존의 방식대로라면 각 조건이 있는지 없는 지 여부에 따라 다양한 API를 구성해야 했다. 이를 한 API로 해결하고자 QueryDSL을 통한 동적 쿼리로 구현하였다. QueryDSL이란?QueryDSL은 정적 타입을 이용해서 SQL과 같은 쿼리를 생성할 수 있도록 해주는 프레임워크이다.  왜 사용하는지 설명하기 위해 다른 쿼리 생성 방식을 설명하겠습니다. Spring Data JPA스프링을 사용하면 기본적인 CRUD는 보통 JPA를 통해 구현한다. 이는 repository.findAllByName(String name) 처럼 Repository에서 정해진 간단한 네이밍 룰을 사..
트랜잭션 정리 트랜잭션의 특징 원자성 (Atomicity) 일관성 (Consistency) 독립성 (Isolation) 지속성 (Durability) 원자성 : 트랜잭션에 해당하는 사항이 데이터베이스에 ALL or Nothing 이어야 한다. 중간만 반영되면 안됨. 일관성 : 트랜잭션를 통해 데이터가 바뀐다면 언제나 일관성 있는 데이터 베이스 상태가 유지돼야 한다. => 성공했을 때 유지시켜줘야 한다. 독립성 : 둘 이상의 트랜잭션이 동시에 실행되고 있을 경우 다른 트랜잭션의 연산에 끼어들 수 없다. 하나의 트랜잭션이 진행하는 동안에는 다른 트랜잭션에 참조 불가능 지속성 : 트랜잭션이 성공하면 그 결과는 영구적으로 지속되어야 한다. DB에 시스템상 문제가 발생하더라도 데이터가 유지된다의 의미가 크다. 트랜잭션은 기본적..
탑싯_1_소프트웨어 개발_11_소프트웨어 요구 관리 1. 요구사항 관리 정의 요구사항 개발(무엇을 할 것인가)과 요구사항 관리(하기로 한것을 제대로 반영하는지 관리)로 나눌 수 있다 목적 고객의 요구를 정확히 파악하여 만족시키며, 제한된 일정과 기간 내에 품질 높은 소프트웨어를 생산 관리 공정 2. 요구사항 명세
탑싯_1_소프트웨어 개발_10_소프트웨어 테스팅과 리팩토링 1. 테스팅의 개념 및 프로세스 개념 결함의 존재성을 밝히는 활동 완벽한 테스팅은 불가능 개발 초기에 시작 테스팅은 정황 오류-부재의 궤변 프로세스 테스트 설계 구성요소 설계 기법 2. 테스팅 유형 및 기법 유형 레벨에 따라 여러 유형이 존재하며 각 유형에서 테스트를 수행하는 주체, 환경등을 고려해야 한다. 기법 1. 화이트박스 테스팅 코드 기반 테스팅 단위 테스팅에서 주로 사용, 테스트가 가능한 소프트웨어 내의 결함을 찾는다 2.블랙박스 테스팅 명세기반 테스트 기능, 비기능 요구사항을 모두 검증해, 성능, 가용성 보안성 등의 비기능적인 테스트를 수행한다 3. 리팩토링 개요 외부에서는 그대로이지만 내부 구조를 개선한다 내부끼리의 관계를 단순화해 소프트웨어의 유지 보수성을 향상시켜 품질을 높이는 활동 절차..
탑싯_1_소프트웨어 개발_9_프로그래밍 언어와 개발환경 1. 프로그래밍 언어 저급언어 기계 중심적인 언어로 실행 속도가 빠르다 기계에 따라 다르게 개발해야 한다. 기계어 / 어셈블리어 고급언어 자연어에 가깝게 만들어져 저급언어에 비해 프로그래밍하기 쉽고 가독성과 생산성이 높다 기계와 관계없이 독립적으로 프로그램 개발 가능 C, C++, 파이썬 인터프리터 원시 프로그램을 직접 저급 언어로 바꾸면서 동시에 실행한다. 장점: 실행을 위해 완전한 기계어 번역을 기다리지 않고(컴파일) 필요시 마다 실행 단점: 재실행 시 매번 원시 프로그램을 디코딩해야 함. 컴파일러 저급 언어인 기계어로 번역하여 객체 모듈을 만들고 링크, 로드시킨다 장점: 컴파일 한 후 바로 재실행이 가능(바이너리 파일을 재실행), 한번 컴파일 한 후에는 바로 재실행 가능 단점: 기계어로 변환하는데 ..
탑싯_1_소프트웨어 개발_8_UI/UX 1. 개요사용자와 시스템이 정보를 주고 받는 상호 작용이 잘 이루어지도록 하는 장치나 소프트웨어 고려해야하는 사항 가. 일관성 필요 개발 이전에 사용자 인터페이스에 대한 표준안을 만들어 일관성을 유지 나. 사용자 중심 설계 사용자를 중심으로 설계되어야 한다. 입력 출력이 사용자 입장에서 쉽게 느껴져야 한다. 다. 피드백 사용자가 잘못 눌렀을 때 잘 못 눌렀다고 인지시켜야 한다 라. 파괴적 행동에 대한 확인 사용자가 심각한 오류를 유발시킬 수 없게 설계. undo 2. UI / UX차이점: ux는 안보이는 것을 연구하는것. 경험에 대한 통계를 중점으로 한 개선 연구. ui는 보이게 만드는 구체와 작업이다. ux에서 진행한 개선 연구를 실제화!! 설계도구 가. make 팀운영 및 관리 와이어프레임 프로토타입..
탑싯_1_소프트웨어 개발_6_소프트웨어 아키텍처 설계 1. 소프트웨어 아키텍처 설계복잡도를 높이는 다양한 요소글을 체계적으로 다루기 의한 개발 대상 소프트웨어의 청사진 절차 요구사항 분석 -> 아키텍처 분석 및 설계 -> 아키텍처 검증 및 승인 절차 요구사항 분석 - 품질요소를 식별하고 이의 우선순위를 결정 아키텍처 분석 - 아키텍처 스타일과 후보 아키텍처를 도출 아키텍처 검증 - 그 중에 하나를 골라 최종 승인 장점 : 기능을 분할하거나 사용자 인터페이스를 분할 할수 있어 쉬운 해결 방법을 찾을 수 있다 2. 소프트웨어 아키텍처 스타일가. 저장소 구조 모든 공유 데이터를 한 곳에 보관해 공유 가능하게! 나. mvc 구조 수정이 단순화되며 재사용이 용이하다 다. 클라이언트 서버 모델 서비스를 요구하는 클라이언트와 서비스를 제공하는 서버다. 분산 시스템으로 ..
탑싯_1_소프트웨어 개발_7_객체 지향 설계 1. 객체 지향 분석과 모델링 개념 객체 지향은 문제영역을 실세계 안에 존재하는 객체의 집합으로 보고 객체들 사이의 상호작용을 나타낸 것 모델링: 대상 시스템의 성능, 동작과정을 표현하는 방식 - 모델링의 3가지 관점 1) 기능 관점: 소프트웨어가 어떠한 기능을 수행하는지의 관점 (입력->출력) 2) 동적 관점: 소프트웨어 동작과 제어에 초점을 맞춘 관점(상태와 상태변화 요인) 3) 정보 관점: 시스템에 사용되는 정보 객체를 찾아 객체들 간의 관계를 규명 유즈케이스 고객과 시스템 개발자 사이에 의사소통을 원활히 해주고, 고객의 요구사항을 알기 위한 기법 각 유즈케이스에 대하여 시나리오를 작성한다. 정보 모델링 유스케이스를 바탕으로 행위자와 시스템이 주고받는 정보를 찾을 수 있다. UML의 클래스 다이어그..