본문 바로가기

Back-end

(90)
[Java] Compiler VS Interpreter 자바 언어에서 컴파일 방식과 인터프리터 방식 1. 컴파일 방식 고급 언어로 작성된 프로그램을 목적 프로그램으로 번역 후 링킹 작업을 통해 실행 프로그램을 생성함 고레벨 언어를 바로 기계어로 변환 자바는 javac로 컴파일하고 java 실행 시 중간 언어(클래스 파일)을 한줄씩 자바 인터프리터가 번역하기에 컴파일 언어 이면서 인터프리터 언어임 2. 인터프리터 방식 고급 언어로 작성된 프로그램을 한줄씩 번역해서 OS에서 인식하는 기계어로 번역하는 역할 고레벨 언어를 바로 기계어로 번역하지 않고 중간 형태로 변환 시킨 후 실행 참고: https://velog.io/@jaeyunn_15/OS-Compiler-vs-Interpreter
대용량 트래픽 처리 방법 - Scale Up VS Scale Out Scale Up 서버에 CPU나 RAM 등을 추가하여 서버의 하드웨어 스펙을 향상시키는 방법 수직 확장이며, 성능 확장에 한계가 있음 Scale out 서버를 여러 대 추가하여 시스템을 증가시키는 방법 하나의 장비에서 처리하던 일을 여러 장비에 나눠서 처리함 수평 확장이며, 지속적 확장 가능 참고: https://tech.gluesys.com/blog/2020/02/17/storage_3_intro.html 번외) https://www.youtube.com/watch?v=5oTlFJ0llNw 1. 미리 준비할 수 있는 것들 HTTP 요청이 왔을 때 connection을 매번 요청할 때마다 쓰는게 아니라 keep-alive라는 설정을 써서 connection을 한번 맺어 놓고 계속 쓰는 방법 keep-al..
[Spring] pointCut 적용 - controller, restController pointcut 지정 어노테이션 @Pointcut AOP 안에 pointcut class 생성 @Aspect @Componet public class HobiPointCut { @Before("execution(* kr.hobi.controller.*RestController.*(..))") public void checkRestController(JoinPoint joinPoint) { HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest(); ....... if (체크 진행) { throw new HobiAuthenticationException(..
성능, 부하, 스트레스 테스트 성능 테스트란 시스템의 병목 지점을 찾기 위한 목적 특정 부하에서 응답성 및 안정성 측면에서, 시스템이 어떻게 동작하는지 측정하기 위한 비기능 테스트 확장성, 신뢰성 및 리소스 사용과 같은 시스템의 다른 품질 속성을 조사, 측정, 검증할 수 있음 성능 테스트 종류 부하 테스트, 스트레스 테스트, 내구성 테스트 (Endurance/Soak Testing), 최고점 부하 테스트 (Spike Testing) 서비스의 속도를 결정하는 기준은 Throughput과 Latency를 보면 알 수 있음 Throughput이란 시간당 처리량을 의미하며, TPS(Transaction Per Second), RPS(Request Per Second) 등으로 불리며, '1초에 처리하는 단위 작업의 수' 혹은 '1초에 처리하는..
[JPA] MapStruct DTO <-> Entity MapStruct는 Entity와 Dto 간에 변환할 때 자동으로 매핑시켜 변환되도록 도와주는 라이브러리입니다. MapStruct는 구성 접근법에 대한 규약에 근거하여 Java Bean 종류 간의 매핑 구현을 크게 단순화한 code generator 입니다. Entity와 Dto 간의 매핑을 위해 getter / setter 를 남발하며 직접 구현하는 것을 지원하는 라이브러리는 크게 ModelMapper와 MapStruct가 있습니다. MapStruct는 컴파일 시 미리 생성된 구현체를 통해 Mapping 하기 때문에 속도적인 측면에서 이점이 있어 채택하게 되었습니다. MapStruct가 ModelMapper 보다 장점이라고 생각되는 것 매핑 속도가 빠름 명시적임 (변수들이 어떻게 매핑되는지 확인 가능)..
[JPA] 복합 기본키 설정 복합 기본 키 JPA에서 복합 기본 키를 사용하려면 별도의 식별자 클래스를 만들어야 한다. 그리고 엔티티에 @IdClass를 사용해서 식별자 클래스를 지정하면 된다. 복합 키는 별도의 식별자 클래스로 만들어야 한다. Serializable을 구현해야 한다. equals와 hashCode 메소드를 구현해야 한다. 기본 생성자가 있어야 한다. 식별자 클래스는 public이어야 한다. @IdClass를 사용하는 방법 외에 @EmbeddedId를 사용하는 방법도 있다 IDClassScheduleAttendanceTransaction.java 파일 생성 @Builder @NoArgsConstructor public class IDClassScheduleAttendanceTransaction implements S..
[JPA] 더티 체킹(Dirty Checking) 이란? 더티 체킹(Dirty Checking) 이란? 더티 체킹은 Transaction 안에서 엔티티의 변경이 일어나면, 변경 내용을 자동으로 데이터베이스에 반영하는 JPA 특징입니다. Dirty Checking의 뜻은 변경 감지 정도로 생각할 수 있습니다. 변경을 감지해서 DB에 반영합니다. 데이터베이스에 변경 데이터를 저장하는 시점 1. Transaction Commit 2. EntityManager Flush 3. JPQL 사용 JPA에서는 트랜잭션이 끝나는 시점에서 변화가 있는 모든 엔티티 객체를 데이터베이스에 자동으로 반영해줍니다. 변화의 기준은 최초 조회 상태 JPA에서는 엔티티를 조회하면 해당 엔티티의 조회 상태 그대로 스냅샷을 만듭니다. 트랜잭션이 끝나는 시점에 스냅샷과 현재의 상태를 비교해 다른..
[Java] String이 불변인 이유 Java에 String은 불변(Immutable) 객체입니다. 불변 객체(Immutable)란, 객체가 생성된 후 내부의 상태가 변하지 않고 계속 유지되는 객체를 말합니다. 즉, 변수에 객체가 한 번 할당되면, 해당 객체의 참조를 변경할 수도, 내부의 상태를 수정할 수도 없습니다. String이 불변인 이유? 1. String Pool String이 불변이기 때문에 String Pool도 존재할 수 있습니다. Java에서는 String Pool이라는 공간에 String을 포함시켜서, 매번 String 객체를 새로 생성하기보다 값이 같은 String이라면 String Pool에 있는 객체를 재사용할 수 있도록 구현함 -> String 리터럴 변수 저장 즉, 값이 같은 String은 String Pool 내..