본문 바로가기

전체 글66

Java 멀티 스레딩 및 성능 최적화(1) 개요와 운영 체제 기초 Why we need Threads Responsiveness 높은 응답성은 애플리케이션에 꼭 필요한 가치이다. 동영상 플레이어에서 재생을 하며 동시에 마우스 커서를 움직이는 것이 멀티 스레드의 예이다. Concurrency = Multitasking CPU가 여러 스레드를 순회하며 멀티 테스킹을 하는 것을 Concurrency라고 한다. 이를 통해 여러 작업을 동시에 수행하는 것 같은 착각을 일으킨다. Concurrency를 위해 많은 코어가 필요하지 않다. 싱글 코어로도 멀티 스레드가 가능하다. Preformance 멀티 코어로 일을 하면 당연히 더 많은 일을 할 수 있지만, 멀티 스레드를 이용하면 필요한 코어의 개수(혹은 컴퓨터의 개수)를 줄일 수 있다. What thread.. 2023. 8. 28.
API 요청 통제 기술 API Gateway API Client와 Server 사이 구간에 위치하여 다양한 목적으로 사용되는 역할을 한다. API Gateway 도입 이점 인증 및 권한 부여 서비스 검색 통합 응답 캐싱 정책, 회로 차단기 및 QoS 다시 시도 속도 제한 부하 분산 로깅, 추적, 상관 관계 헤더, 쿼리 문자열 및 청구 변환 IP 허용 목록에 추가 API Throttling API 요청에 속도와 횟수를 제한하는 것을 말한다. DoS(Denial of Service)와 같은 공격에 방어하기 위해서 필요하다. Scale Out을 통해 서버 자원을 확장하는 비용이 API 제공으로 얻는 금액보다 클 경우, API Throttling 도입을 통해 SLA(Service Level Agreement)에서 협의 대상으로 삼을수.. 2023. 8. 24.
Spring Boot에서 Logback(+ CloudWatch에 기록하기) 로깅 로그를 사용하는 목적에는 에러나 장애가 발생할 때 해당 내용을 파악하기 위함과 사용자 로그를 분석 데이터로 활용하기 위함이 있다. 콘솔에서 출력되는 로그는 로그 수준을 높이거나 낮추는데 그 목적이 있고, 에러나 장애 혹은 로그 분석을 위해선 로그를 파일에 저장한다. 스프링에서 로깅 초기 스프링은 JCL(Jakarta Commons Logging)을 사용해서 로깅을 구현했다. 요즘에는 대표적으로 Log4j와 Logback으로 스프링 부트의 로그 구현체를 사용한다. Logback은 log4j 이후에 출시된 Java 기반 Logging Framework 중 하나로 가장 널리 사용되고 있다. slf4j의 구현체이며 Spring Boot 환경이라면 spring-boot-starter-web 안에 spring.. 2023. 8. 23.
한 장으로 보는 GO 기초 GO 처음 설치하면 /(local)user/go 폴더를 생성한다. go 프로젝트는 무조건 이 디렉터리 안에만 넣을 수 있다. 다운받는 패키지들도 npm 같은 패키지 관리자를 쓰는 것이 아니다. 따라서 다운받은 경로에 따라 go/src 폴더 안에 정리해서 패키지를 관리한다. github.com, golang.org, google.golang.org 등 Package Main Package 컴파일이 필요한 경우, main package가 필요하다. 컴파일이 필요없는 경우(라이브러리 생성하는 등)에는 Main Package가 필요하지 않을 수 있다. 컴파일러는 main 패키지 먼저 찾아서 컴파일한다. Import 패키지 내에서 대문자로 시작하는 메서드들은 public, 즉 export된 메서드로 볼 수 있다... 2023. 8. 22.