전체 글 (35) 썸네일형 리스트형 에프랩(F-Lab) Java Backend 멘토링 코스 수료 후기 멘토링을 시작하게 된 계기F-Lab은 인스타그램 광고를 통해 알게되었습니다. 비싼 가격때문에 많이 고민했지만 아직 내 기술적 역량이 많이 부족하기도 했고, 학부생 4학년임에도 불구하고 취업 준비는 하나도 준비되어 있지 않았기 때문에 F-Lab을 통해 멘토의 도움을 받아 취업 준비를 본격적으로 시작해보자는 마음을 먹고 멘토링을 하기로 결정하였습니다.멘토링은 어떻게 진행되는가?사실 F-Lab 멘토링은 대략적인 가이드라인이 있지만 멘토님께서 멘티의 역량이나 부족한 점에 맞게 최적화하는 것으로 보이는데요, 크게 멘토링은 이력서 첨삭개인 프로젝트 진행Kotlin + Spring 기반의 공연 좌석 예매 프로젝트Redis, kotest, Mail, Cache, Actuator, AOP 등 이전 까지 못써본 새로운 기.. 스프링의 핵심, IoC/DI, AOP, PSA - PSA편 PSA란?스프링의 핵심 3가지 요소 중 마지막은 PSA입니다.PSA는 Portable Service Abstraction의 줄임말로, 특정 도메인에 대해 일관성 있는 서비스 추상화를 제공함으로써 특정 모듈에 대한 의존도를 낮추어 변경이 용이하도록 하는 장점이 있습니다.대표적인 예시Spring PSA의 대표적으로는 Spring Web, JDBC, TrasactionManager 등이 있는데요.Spring Web: Servlet 의존적인 코드가 아닌 @Controller나 @GetMapping 과 같은 어노테이션 기반의 컨트롤러를 작성할 수 있습니다.JDBC : MySQLJdbcConnection, OracleJdbcConnector등의 구현체가 아닌 JdbcConnector를 통해 DB의 종류에 관계없는 .. 스프링의 핵심, IoC/DI, AOP, PSA - AOP편 Spring AOP란?AOP(ASpect-Oriented Programming)는 횡단 관심사(e.g. 로깅, 트랜잭션, 보안)등 여러 모듈에서 공통적으로 사용하는 기능을 분리하여 관리하는 기법입니다.Spring에서는 Proxy Pattern을 이용하여 AOP를 지원합니다. Proxy Pattern이란?Proxy Pattern은 특정 객체에 대해 접근을 제어하며. 특정 객체로 요청을 보낼 때 Proxy가 이를 가로채 특정 작업을 수행할 수 있도록 하는 기법입니다.(참고)구조를 간단하게 설명드리자면, 실제 객체(이하 Service)의 인터페이스를 구현한 Proxy를 만들어, Proxy가 Service를 참조로 가지고 있어 Client가 operation을 호출하면 Proxy의 operation이 실행되고,.. 스프링의 핵심, IoC/DI, AOP, PSA - IoC/DI 편 제어의 역전, IoC개발자가 개발한 코드가 제어 흐름을 가지고 있지 않고, 외부 제어로부터 호출되어 자신의 일을 하는 것. 즉 프로그램 전체의 제어 권한이 프로그래머에게 있지 않은 것을 Inversion of Control(제어의 역전)이라고 합니다.전통적인 프로그래밍 방식은 개발자의 코드가 라이브러리를 호출하는 방식입니다.제어의 역전이 적용되면 외부 라이브러리 코드가 개발자의 코드를 호출합니다.의존 관계 주입, DI정의프로그램에 속한 객체들은 의존 객체들의 구현체를 직접 생성하지 않고 외부로 부터 주입받아 사용하는 것을 의미합니다.Java에서는 인터페이스를 통해 실제 구현체를 몰라도 실행이 가능하기 때문에 모듈 결합도를 낮추고 변경에 유리합니다.class NoDIClass{ private final B.. 스레드와 스케줄러, 스레드의 종류 프로세스와 스레드프로세스는 실행된 프로그램을 의미하며, 프로그램이 실행되면 프로그램의 코드가 메모리에 적재되어 CPU가 코드를 한줄씩 실행합니다.프로세스는 메모리를 크게 4가지(Stack, Code, Data, Heap)영역으로 나누어 관리하는데(관련 글), 이 때 Stack영역은 Thread마다 가지게 되고, 나머지 3개의 영역은 프로세스 내의 스레드 끼리 공유합니다.스레드는 프로세스 내의 실행 단위로, Stack 영역과 PC 값(다음 명령어의 주소)을 별도로 가지고 있어 Context Switching 시에 Stack과 PC Register만 Context Swtiching하면 되서 적은 비용이 듭니다. PCB와 TCBPCB는 Process Control Block의 약자로, 커널이 프로세스를 관리.. 아키텍처 최적화, 비동기 로깅을 통한 공연 정보 조회 API 최적화 하기 개요마지막 글에서 측정 결과 System CPU와 Nginx CPU가 과도하게 사용되는 것을 확인할 수 있었고, 그에 대해 NGINX가 정말로 필요할까? 라는 의문을 내렸고, Disk I/O가 과도하게 발생해 이에 대한 CPU 자원이 많이 사용되는 것이 아닐까? 하는 가설을 세웠습니다.그에 따라 NGINX를 제거하고, 로그 저장 방식을 바꾸어 성능 테스트를 다시 해보기로 결정했습니다.현재 보고 계신 글은 공연 조회 API 최적화 시리즈 입니다!1편 :공연 정보 조회 API 쿼리 분석하고 개선하기2편 :공연 조회 API 성능 측정 및 개선 사안 찾아보기3편 :공연 조회 API에 캐싱을 적용하고 성능 테스트하기4편 :아키텍처 최적화, 로그 방식 변경을 통한 공연 정보 조회 API 최적화 하기그럼 어떤 것이 .. 공연 조회 API에 캐싱을 적용하고 성능 테스트하기 개요이번에는 저번 글에서 병목지점이 Connection Pool의 커넥션 갯수 부족일 것이라 가설을 세웠었는데, 이를 해결하기 위해 API에 캐시를 도입하였습니다.캐시는 이 글에서 이미 개발을 했었는데요, 총 3개의 CacheManager(Local, Global, Composite)을 빈으로 등록했었는데요, 저는 지금은 Spring 인스턴스가 하나이기 때문에 Local Cache만을 적용하여 테스트 하였습니다.@Caching( cacheable = [ Cacheable( cacheManager = CacheConfig.LOCAL_CACHE_MANAGER_NAME, cacheNames = [CacheType.PRODUCT_CACHE_NAME], .. 공연 조회 API 성능 측정 및 개선 사안 찾아보기 개요이번에는 저번 글에서 개선한 API에 대해 RPS가 얼마나 찍히는지, 병목지점은 어디인지 확인해 보는 시간을 갖기로 했습니다.API는 공연의 리스트를 조회하는 페이지로, 테스트는 1~10페이지를 조회하는 것으로 결정하였습니다.성능 테스트는 어떠한 특정 목표를 갖기 보다는, 성능 측정 → 개선 과정을 거치면서 제가 할 수 있는한 최대한의 처리량과 최소한의 응답시간을 갖는 것을 목표로 정했습니다.서버 구조일단 저희가 테스트할 서버의 구조 중, 현재 API에서 사용하는 구조는 다음과 같습니다.여기서 nginx와 Spring은 같은 서버내에 위치하고 있으며 Docker로 구분되어 있습니다. User - Nginx간의 접속은 Https로 연결되며, Nginx - Spring 간의 연결은 http로 변환되어 연.. 이전 1 2 3 4 5 다음