목록분류 전체보기 (163)
DevGang
nGrinder으로 저희 스프링 부트 프로젝트에서 부하 테스트를 진행했습니다. 가상 사용자 9000명으로 테스트 결과 오류가 많이 발생해서 프로젝트를 개선하고 기록하기 위해 포스팅합니다. 아래는 부하 테스트 결과와 프로젝트 깃허브 주소입니다. 프로젝트 부하 테스트 결과 프로젝트 Github 테스트 환경 AWS Elastic Beanstalk - t2.micro AWS RDS (MySQL) - db.t2.micro Spring Boot 2.5.7 nGrinder EC2 - t2.large 1. AWS EB의 인스턴스 증가 기존의 AWS EB에서 Auto Scaling으로 인스턴스를 늘려주면 부하가 분산되어 오류가 줄어들지 않을까?라는 생각으로 인스턴스를 2대로 늘려보았습니다. 하지만 단순히 인스턴스를 늘려..
처음으로 서버 사이드 랜더링이 아닌 클라이언트 사이드 랜더링 즉 프런트와 백엔드를 분리하여 룰루랄라 프로젝트를 진행하던 중 야생의 오류가 나타났다..! 바로 CORS와 Preflight⭐⭐⭐ 클라이언트 측에서 보안상의 이유로 다른 출처, 즉 URL이 다른 리소스를 참고하는 것을 기본적으로 막고 있다. 따라서 클라이언트(http://lcoalhost:63342)에서 API 서버(http://localhost:8080)의 리소스를 참고하면 오류가 나온다. 해당 오류를 해결하려면 API 서버 측에서 해당 클라이언트의 URL에 대해 리소스 참고를 허용하도록 헤더(Access-Control-Allow-Origin)에 값을 넣어서 응답 요청을 보내주어야 한다. 스프링에서는 해당 기능을 아래와 같이 간단하게 지원하고..
인증 (Authentication): 사용자 신원을 확인하는 행위 인가 (Authorization): 사용자 권한을 확인하는 행위 예를 들면, 인증: 회사 출입을 위한 출입증 확인 혹은 생체정보 (지문, 홍채) 인식 인가: 회사 건물 내 접근 권한 관리 방문자 → 회의실만 접근 가능 직원 → 회의실, 사무실 접근 가능 관리자 → 회의실, 사무실, 서버실, 물품보관실 접근 가능 웹에서의 인증 및 인가 인증: 로그인을 통해 본인임을 확인 (주로, 아이디와 패스워드 이용) 인가: 주로 역할에 따른 사용 권한 관리 예) 웹 카페 사이트에서 회원 랭킹 별 가능한 첨부파일 크기를 다르게 부여 [스파르타 코딩 클럽] Spring 심화반
Array VS Linked List Array 각 원소에 인덱스로 즉시 접근할 수 있다. -> 시간 복잡도 O(1) 원소를 중간에 삽입/삭제를 하려면 모든 원소를 다 옮겨야 한다. -> 시간 복잡도 O(N) Linked List 특정 원소에 접근하려면 연결 고리를 따라 탐색해야 한다. -> 시간 복잡도 O(N) 원소를 중간에 삽입/삭제하기 위해서는 앞 뒤의 포인터만 변경하면 된다. -> 시간 복잡도 O(1) 결론 조회가 자주 발생한다면? Array 수정이 자주 발생한다면? LinkedList Linked List 구현 LinkedList는 데이터(data)를 가지고 있고 다음 Node를 가리킬 pointer(next)가 있는 Node가 필요하다. class Node: def __init__(self, ..
가상화(Virtualization) 물리적인 컴퓨터 리소스를 다른 시스템이나 애플리케이션에서 사용할 수 있도록 제공 플랫폼 가상화, 리소스 가상화가 있다. 하이퍼바이저(Hypervisor) Virtual Machine Manager(VMM) 다수의 운영체제를 동시에 실행하기 위한 논리적 플랫폼 Type 1 : Native or bare-metal, Type 2 : Hosted OS Virtualization Host OS 위에 Guset Os 전체를 가상화 자유도가 높으나, 시스템에 부하가 많고 느려짐 VMware, VirtualBox 등이 있다. Container Virtualization Host OS가 가진 리소스를 적게 사용하며, 필요한 프로세스를 실행 최소한의 라이브러리와 도구만 포함 Conat..
서블릿 서블릿은 웹 서버 내에서 실행되는 작은 Java 프로그램입니다. 서블릿은 일반적으로 HTTP(HyperText Transfer Protocol)를 통해 웹 클라이언트의 요청을 수신하고 응답합니다. 서블릿은 개발자들이 비즈니스 로직에 집중할 수 있도록 도와준다. 서블릿 특징 urlPatterns(/hello)의 URL이 호출되면 서블릿 코드가 실행(service 메서드) HTTP 요청 정보를 편리하게 사용할 수 있는 HttpServletRequest HTTP 응답 정보를 편리하게 제공할 수 있는 HttpServletResponse 개발자는 HTTP 스펙을 매우 편리하게 사용 HTTP 요청 시 응답 과정 클라이언트의 HTTP 요청 발생(localhost:8080/hello) WAS 서버에서 HTTP ..
WS(Web Server) HTTP 기반으로 동작 정적 리소스 제공, 기타 부가기능 정적(파일) HTML, CSS, JS 이미지, 영상 예) NGINX, Apache WAS(Web Application Server) HTTP 기반으로 동작 웹 서버 기능 포함(정적 리소스 제공 가능) 프로그램 코드를 실행해서 애플리케이션 로직 수행 동적 HTML, HTTP API(JSON) 제공 서블릿, JSP, 스프링 MVC 동작 예) Tomcat, Jetty, Undertow WS, WAS 차이 WS는 정적 리소스(파일), WAS는 애플리케이션 로직 사실은 둘의 용어도 경계도 모호하다 WS도 프로그램을 실행하는 기능을 포함하기도 함 WAS도 WS의 기능을 제공함 자바는 서블릿 컨테이너 기능을 제공하면 WAS 서블릿 없..
1. 컨테이너(Container) 조회 $ sudo docker ps 중지 중인 컨테이너까지 모든 컨테이너 조회 $ sudo docker ps -a 2. 컨테이너 중지 (Stop) $ sudo docker stop 3. 컨테이너 시작(start) 및 재시작(restart) $ sudo docker start $ sudo docker restart 4. 컨테이너 접속(attach) $ sudo docker attach Docker 사용법 더 보기
HTTP(HyperText Transfer Protocol) 역사 HTTP/0.9 1991년: GET 메서드만 지원, HTTP 헤더 x HTTP/1.0 1996년: 메서드, 헤더 추가 HTTP/1.1 1997년: 가장 많이 사용 / RFC2068(97) > RFC2616(99) > RFC7230~7235(14) HTTP/2 2015년: 성능 개선 HTTP/3 진행 중: TCP 대신에 UDP 사용, 성능 개선 기반 프로토콜 TCP : HTTP/1.1, HTTP/2 UDP : HTTP/3 HTTP 특징 1. 클라이언트 서버 구조 Request Response 구조 클라이언트는 서버에 요청을 보내고, 응답을 대기 서버가 요청에 대한 결과를 만들어서 응답 2. 무상태(Stateless) 서버가 클라이언트의 상태..
SOLID 클린 코드로 유명한 로버트 마틴이 정리한 좋은 객체 지향 설계의 5가지 원칙 SRP(Single Responsibility Principle) : 단일 책임 원칙 OCP(Open/Closed Principle) : 개방-폐쇄 원칙 LSP(Liskov Substitution Principle) : 리스 코프 치환 원칙 ISP(Interface Segregation Principle) : 인터페이스 분리 원칙 DIP(Dependency Inversion Prinicple) : 의존관계 역전 원칙 SRP(Single Responsibility Principle) - 단일 책임 원칙 한 클래스는 하나의 책임만 가져야 한다. 하나의 책임이라는 것은 모호하다. 클 수 있고, 작을 수 있다. 문맥과 상황에..