Docker를 이용한 nGrinder 설치하기 nGrinder 란 nGridner는 네이버에서 제공하는 성능 테스트용 오픈 소스이다, The Grinder 라는 오픈 소스를 기반으로 하고 있다. Controller와 Agent로 이루어져 있다 https://github.com/naver/ngrinder/wiki/Architecture https://github.com/naver/ngrinder/wiki/User-Guide controller 성능 테스트를 위한 웹 인터페이스를 제공 테스트 프로세스를 조정 테스트 통계를 수집하고 표시 사용자가 스크립트를 생성하고 수정할 수 있는 기능 지원 Agent Agent Mode가 실행될 때 Target 서버에 프로세스 및 스레드를 실행 시켜 부하 발생 Moniter..
3장 데이터로 작업하기 - JPA 💻 실습 : https://github.com/cusbert/spring-in-action-5th 🎯 이 장에서 배우는 내용 스프링 데이터 (Spring Data) 를 사용해서 JPA 선언하고 사용하기 3.2 JPA 를 사용해서 데이터 저장하고 사용하기 대표적인 스프링 데이터 프로젝트 스프링 데이터 JPA : 관계형 데이터베이스 JPA 퍼시스턴스 스프링 데이터 MongoDB: 몽고 문서형 데이터베이스의 퍼시스턴스 스프링 데이터 Neo4: Neo4j 그래프 데이터베이스의 퍼시스턴스 스프링 데이터 Redis: 레디스 Key-value 스토어 퍼시스턴스 스프링 데이터 cassandra: 카산드라 퍼시스턴스 3.2.1 스프링 데이터 JPA 프로젝트에 추가하기 JPA 스타터는 J..
2.6 멤버 변수에 접근하기 접근 함수 //게터와 세터를 도입하여 변수에 접근 complex c; c.set_r(c.get_r() + 5); class complex { public: double& real() {return r;} } //레퍼런스를 반환하는 함수를 사용 c.real() += 5; //자유함수 선언 inline double& real(complex& c) { return c.real(); } 첨자 연산자 class vector { public: double at(int i) { assert(i >= 0 && i = 0 && i < my_size); ret..
2.4 소멸자 소멸자는 개체를 파괴할 때 마다 호출되는 함수 구현 규칙 소멸자에서 예외를 던지지 말라 noexcept로 암시적 선언되어 C++11이상에서는 항상 실행을 중단하는 런타임 오류로 처리 클래스에 virtual 함수가 있으면 소멸자도 virtual이어야 한다 리소스 제대로 처리하기 개체가 메모리와 같은 리소스를 할당하는 경우 소멸자가 필요 class vector { public: ~vector() { delete[] data; } private: unsigned my_size; double *data; } 리소스 획득은 초기화 Resource Acquisition is Initialization (RAII) 메모리 누수를 막기위해 모든 예외 발생시 마다 리소스를 해제를 수동으로 해야한다. uni..
하이버네이트 자동 키 에러 해결 이슈 java.sql.SQLException: Table 'dbschema.hibernate_sequence' doesn't exist at org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.readErrorPacket(AbstractQueryProtocol.java:1694) ~[mariadb-java-client-2.7.3.jar:na] at org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.readPacket(AbstractQueryProtocol.java:1556) ~[mariadb-java-client-2.7.3.jar:na] 해결 개발용 스키마에 sql 로 직..
2.3 생성자 및 할당 연산자 생성자 class complex { public: //디폴트 생성자 complex(double rnew, double inew) : r(), 1() //컴파일러가 생성 { r = rnew, i = inew; } //멤버 초기화 리스트(Initialization List)를 이용한 생성자 //초기화 순서와 정의 순서가 일치하지 않으면 컴파일러가 경고를 출력 complex(double rnew, double inew) : r(rnew), i(inew) {} private: double r, i; } //생성자를 통한 값 설정 complex c1(2.0, 3.0); class matrix_type { public: matrix_type(int nrows, int ncols) {}..
3장 데이터로 작업하기 - JDBC 💻 실습 : https://github.com/cusbert/spring-in-action-5th 🎯 이 장에서 배우는 내용 스프링 JdbcTemplate 사용하기 SimpleJdbcInsert 사용해서 데이터 추가하기 3.1 JDBC를 사용해서 데이터 읽고 쓰기 관계형 데이터를 사용할 때 선택지는 JDBC, JPA 두 개다 스프링의 JDBC 지원은 JdbcTemplate 템플릿에 기반을 둔다 JdbcTemplate 를 사용해서 데이터베이스 쿼리하기 명령문이나 데이터베이스 연결 객체를 생성하는 코드가 없다. 메서드의 실행이 끝난 후 그런 객체들을 클린업하는 코드 또한 없다. catch 블록에서 올바르게 처리할 수 없는 예외를 처리하는 코드도 없다. @Override p..
2. 클래스 2.2 멤버 멤버 변수 class complex { public: double r, i; } complex z, c; z.r = 3.5; z.i = 2; c.r = 2; c.i = -3.5; //멤버 변수는 도트 연산자 . 를 사용하여 접근 할 수 있다 std::cout
1.9 소프트웨어 프로젝트 구축 주석 //한줄 짜리 주석 //일부 코드를 주석처리 하고 다른 코드를 작성할때 사용 /*로 시작하는 주석은 여러 /*으로 주석을 시작해도 첫번째 */으로 주석이 해제된다 전처리기 지시문 매크로 매크로 이름을 인수와 함께 텍스트 정의로 확장해 코드를 재사용하는 기법 대부분의 매크로는 다른 기법(상수, 템플릿, 인라인 함수)으로 대체할 수 있다 포함 #inclde //표준 include 디렉토리에서 해당파일을 검색 #include "math_function.hpp" //현재 디렉터리에서 먼저 검색후 표준 경로에서 검색 //상위 디렉토리를 검색 경로에 추가하고 지시문세어 상대 경로를 사용 가능 #include "herberts_includes/math_fuction.hpp" #i..
1.8 배열, 포인터, 레퍼런스 배열 int x[10]; // 10개의 int 배열 float v[] = {1.0, 2.0, 3.0}, w[] = {7.0, 8.0, 9.0}; int v2[] = {1.0, 2.0, 3.0};; //C++ 11에서 오류 float A[7][9]; // 7x9 행렬 float q[3][2][3]; //3x2x3 배열 unsigned int size = sizeof x / sizeof x[0]; //배열의 크기 ifstream ifs("some_array.dat"); ifs >> size; float v3[size]; //컴파일 타임에 크기를 알수 없다 포인터 포인터는 메모리 주소를 포함하는 변수 포인터를 사용하면 sizeof 트릭을 사용할 수 없다 int* y = new ..
@ControllerAdvice 를 이용한 예외 처리 이슈 회사에서는 내려줘야 할 Response 에러 포맷이 정해져 있다. 에러를 아름답게 형식화하여 json으로 내려주고 싶다 해결 @ControllerAdvice 로 커스터마이징하여 특정 컨트롤러, 예외 타입에 대해 반환할 응답 JSON 을 정의 할 수 있다. 주요 예외 처리는 다음과 같다. @ControllerAdvice public class CustomRestExceptionHandler { @ExceptionHandler(HttpMessageNotReadableException.class) public ResponseEntity handleHttpMessageNotReadableException( HttpMessageNotReadableExce..
1.7 I / O 표준 출력 표준 출력은 cput 이라는 c++ 스트림을 사용해 접근 cout은 age; int width, height; cin >> width >> height; //위의 코드와 동일하게 동작 공백으로 값을 구분 cin >> width; cin >> height; 파일 입출력 ofstream : 파일에 쓰기 ifstream : 파일로부터 읽기 fstream : 파일 일기 및 쓰기 #include int main() { ofstream square_file; square_file.open("squares.txt"); //다음과 같이 한줄로 축소 가능 ofstream square_file("squares.txt"); for(int i = 0; i < 10; i++) square_file