본문 바로가기

Server Development

(64)
Apache Jmeter 여러 서버 성능 테스터 중 Apache Jmeter에 대해서 정리해보고자 한다. Apache Jmeter 특징 - 서버의 성능 및 부하를 측정 가능하다. - 순수 자바 어플리케이션 오픈 소스 - 다양한 프로토콜/서버를 테스팅 가능하다. (HTTP, SOAP, FTP, DB, MAIL) - CLI를 지원 (CI, CD와 연결시 편리) 주요 기능 - Thread Group : Thread 관련 조정 - Sampler : 유저의 동작 (프로토콜 등 설정) - Listener : 서버의 응답에 대한 동작 (결과 리포트 등) - Configurtion : 서버에 요청을 보내고 응답을 받기 위해 필요한 설정 (JDBC Connection, 쿠키 등) - Assertion : 서버의 응답 결과가 특정 조건이 맞는지 ..
JPA - Query DSL Method Query DSL의 메서드를 정리해보고자 한다. Entity Mangager를 사용하기에 메서드가 동일하다 1. Basic Structure QUser user = QUser.user; User result = queryFactory // Select .select(user) .from(user) .where(user.userName.eq("name")) .fetchOne(); // Update .update(user) .set(user.name, "name_changed") .where(user.userName.eq("name")) .execute(); // Delete .delete(user) .where(user.userName.eq("name")) .execute(); - Delete Join은 ..
JPA - Query DSL Query DSL - SQL(관계형 DB 언어, 테이블을 대상으로 함.), JPQL(Spring과 DB를 매핑하는 Spring형 관계형 DB 언어, 객체를 대상으로 함.) 를 대신하여 JPA를 코드로 작성하는 방법 - Spring내의 객체와 매핑되는 QClass라는 객체를 생성하여 이를 기반으로 쿼리를 실행. (쉽게 생각하면 QClass는 @Entity의 복사본, 컴파일시 만들어진다.) 장점 - 컴파일시 오류를 발견 가능 (Native Query를 사용하는 경우와 JPA를 사용하는 경우는 결과적으로 SQL문을 직접 작성하는 경우가 생기거나 적어도 칼럼명 등 개발자가 작성하는 부분이 생기는데 컴파일 시 오류가 나는지 알 수 없어서 나중에 오류가 발생할 경우가 크다. 하지만 Query DSL은 오류를 컴파일..
JPA - Join 이번에는 Spring JPA에서 테이블을 조인하는 방법과 이 후 데이터를 조회하는 방법에 대해서 정리해보고자한다. 현재, 만들고 있는 API를 예시로 들어 작성해보고자 한다. 먼저, 조인을 위해서는 두 테이블의 관계를 고려하는 것이 중요하다. 단방향 : 한쪽 테이블은 한쪽 테이블을 알지만 다른 쪽 테이블은 모르는 것. 양방향 : 서로 아는 구조 양방향의 문제점 ToString, hashcode, equals 등 사용시 무한 루프로 인한 StackOverFlow의 가능성 데이터 정합성 문제 : 업데이트시 양쪽 모두 업데이트 해야한다. -> 이러한 문제를 해결하기 위해 양방향 설정시 MappedBy를 통해 관계의 주인을 설정하고 일련의 규칙을 만들어준다. 객체의 두 관계 중 하나를 연관관계의 주인으로 지정합..
Object to Network and vise versa 직렬화 - 직렬화는 기본적으로 객체를 저장하거나 전송하기 위해 객체를 바이트 스트림으로 변환하는 과정을 의미한다. - 자바에서 주로 사용된다. - 자바에서는 ObjectOutputStream 클래스를 이용해 객체를 직렬화하여 네트워크로 전송가능하다. - 직렬화된 객체를(바이트 스트림을) 다시 객체로 바꾸는 과정을 역직렬화라고 한다. 직렬화 및 역직렬화의 조건 1. 클래스는 Serializable 인터페이스를 구현해야한다. 이는 직렬화 가능한 객체임을 명시해준다. 2. 클래스의 필드들은 직렬화 가능해야 한다. 직렬화 가능한 필드란 기본 자료형과 해당 클래스도 Serializable 인터페이스를 구현한 경우를 의미한다. 또한 필드들은 public, protected 둘 중 하나여야 한다. 3. Json 데이..
Spring - @Transactional Spring에서 Transaction 처리 - ACID에 대한 설정 - 설정은 config 파일, xml, 애너테이션 등으로 가능하다. - 일반적으로 애너테이션을 많이 사용하는데, @Transactional 사용시 프록시 객체를 생성하고 적용된 부분에 사용된다. PlatformTransactionManager 를 사용하여 트랜잭션을 시작하고 정상 여부에 따라 커밋/롤백이 수행된다. (AOP 구조와 같음 -> 설정된 메서드나 클래스 전/후에 동작) - private, protected는 무시한다. 설정 Propagation Type : propagation(동작 도중 다른 트랜잭션 호출시 처리할 내용) Isolation Level : isolation(일관성없는 데이터 허용 수준) Timeout : tim..
Spring - Spring Security 이번에는 로그인 등 인증/인가, API에 대한 접근 제한에 사용되는 Spring Sequrity에 대해서 정리해보고자 한다. 인증 - 해당 API를 접근 가능한지 인증 인가 - 특정 리소스에 접근 가능한지 인증 Security의 기본 원리 이해 기본적으로는 Servlet Context(tomcat)와 Spirng Dispatcher Servlet 사이에 Filter를 이용해 Sequrity를 적용한다. 하지만 이런식으로 Filter에 구현하게 되면, Filter는 Spring Bean을 인식하지 못하기에 문제가 발생한다. 예를들어, API 접근에 대한 권한을 부여할 때, 로그인 후 접근이 가능한 API가 있다고 가정하자. 이 때, FIlter에서 접근 제한을 한다면, 여러가지 Bean들에 대한 접근이 불..
Cloud - IaaS vs PaaS vs SaaS 우선, 위의 세가지 개념에 대해 알아보기 전에 Cloud가 뭔지부터 알아봐야한다. 클라우드 나의 컴퓨터 장비를 사용하지 않고 컴퓨터 장비를 대신 구축해주며 해야할 작업이 온라인에 분산되어 존재하는 데이터 센터를 의미한다. 서버 구축시 전력, 위치 서버 세팅, 확정성 등을 고려할 필요가 없어지고 서비스 운영에만 신경쓰면 된다. 1. Without Cloud (On-Premise 방식) 특징 (모든것을 자체 제작) - 어플리케이션 제작해야 한다. - 서버 구성을 위한 하드웨어 장치(CPU 등) 고려 - 컴퓨터 냉각 장치 등 고려 - 냉각을 위한 위치 고려 - 네트워크 연결 장치 고려 - 방화벽 고려 고려할 것 정리 "Application, Data, Runtime, Middleware, O/S, Virtua..