전체 글58 [Web] HTML -> Servlet, JSP -> Spring 🎈 Servlet이란? 위와 같은 HTTP 규약에 맞는 요청과 응답을 개발자가 직접 작성하지 않고 메서드 호출로 편리하게 사용할 수 있도록 해주는 프로그램. Servlet Container: 서블릿들을 담고 있는 컨테이너. 서블릿의 생성, 호출, 소멸의 생명주기를 관리. ex) Apache Tomcat 클라이언트가 요청을 하면 서블릿 컨테이너는 서블릿 객체를 생성하고, 초기화하고, 요청에 대한 처리를 반복한다. 생성과 초기화는 한 번만 한다. dynamic web project 생성하고 maven 프로젝트로 변경 서블릿 생성. 서블릿과 매핑할 디폴트 url은 클래스 명이고 url을 변경할 수 있다. BoardController BoardController com.test.board.controller.B.. 2024. 3. 20. AWS CodeDeploy, Docker 이용한 무중단 배포 🎈 배포 구조 기능과 관련된 부가적인 외부 API 등은 제외하고 대략적인 구조는 다음 그림과 같게 된다. 배포는 Github Actions, Codedeploy를 통해서 하고, 요청이 왔을 때는 AWS ALB에서 SSL 처리를 하고, NginX에서는 blue, green 중 작동 중인 포트로 요청을 보내는 방식으로 무중단 배포가 구현된다. 배포 흐름 1. 깃허브 디폴트 브랜치에 변경 내용 커밋 2. Github workflow가 java 프로젝트를 빌드 3. Codedeploy, S3 접근이 가능한 IAM 키를 알고 있는 Github workflow가 S3에 빌드 파일을 업로드하고, Codedeploy로 배포 요청 4. Codedeploy가 appspec.yml에 따라 지정한 hook 시점에 script.. 2024. 2. 28. Spring Filter & Interceptor 핵심 로직: 관심 사항을 분리함으로써 코드를 간결하게 작성할 수 있음. 관심 사항을 분리하기 위해 스프링 AOP를 사용할 수도 있지만 웹과 관련된 관심사항은 필터나 인터셉터를 이용하는 것이 좋다. 🎈 서블릿 필터 J2EE 표준 스펙으로 Servlet API 2.3부터 등장하였고 Dispatcher Servlet에 요청이 전달되기 전, 후에 부가작업을 처리하는 객체. - 요청이 들어올 때는 서블릿 전에 필터가 실행, 응답을 보낼 때는 서블릿이 실행된 다음에 필터가 동작함. 즉, 스프링 컨테이너가 아닌 톰캣과 같은 웹 컨테이너(서블릿 컨테이너)에 의해 관리되는 것(스프링 빈으로 등록은 된다). Filter의 역할 Filter는 클라이언트의 요청과 서버의 응답을 중간에서 가로채는 역할을 합니다. 요청이 서블릿.. 2024. 2. 28. Spring RestTemplate vs WebClient 🎈 RestTemplate vs Webclient RestTemplate thread-per-request 모델에 기반하는 Java Servlet API를 사용함.-> Synchronous & Blocking 클라이언트가 응답을 받을 때까지 thread가 블럭 상테임. 메모리와 CPU cycle을 소모하는 것으로 인한 block code의 단점이 발생함. 결과적으로 애플리케이션이 많은 스레드를 생성하고, 이것은 사용 가능한 메모리를 모두 점유하거나 스레드 풀을 소모할 수 있음. WebClient Spring Reactive 프레임워크가 제공하는 Asynchronous, non-blocking 방식을 사용함. RestTemplate은 각 HTTP 요청마다 thread를 호출하고, WebClient는 HTT.. 2024. 2. 27. SQL의 개념과 SQL 기본 문법 SQL 뜻 - Structured Query Language - 현업에서 쓰이는 relational DBMS의 표준 언어 - 종합적인 database 언어: DDL + DML + VDL SQL에서 relation이란? - multiset(= bag) of tuples @SQL - 중복된 tuple을 허용한다 SQL & RDBMS SQL은 RDBMS의 표준 언어이지만 실제 구현에 강제가 없기 때문에 RDBMS마다 제공하는 SQL의 스펙이 조금씩 다름. 🎈 예제를 통해 SQL로 DB 정의하기 - 부서, 사원, 프로젝트 관련 정보들을 저장할 수 있는 관계형 데이터베이스를 만들자 - 사용할 RDBMS는 MySQL(InnoDB) database 정의하기 CREATE DATABASE company; USE comp.. 2024. 2. 23. 관계형 데이터베이스 Set - 서로 다른 elements를 가지는 collection - 하나의 set에서 elements의 순서는 중요하지 않다 - e.g. {1, 3, 11, 4, 7} 수학에서 relation이란? - subset of Cartesian product - set of tuples 🎈 Relational Data Model 예시) domain of student relation 동일한 도메인이 같은 릴레이션 두 번 이상 사용될 때 사용되는 목적이 다를 수 있기 때문에 각 도메인마다 attribute를 지정해줌. Relation Schema - relation의 구조를 나타낸다 - relation 이름과 attributes 리스트로 표기된다 - e.g. STUDENT(id, name, grade, majo.. 2024. 2. 22. Java에서 불변 객체 🎈 불변(immutable) 객체란? 객체 생성 이후에는 객체의 상태가 바뀌지 않는 객체 🎈 불변 객체의 장점 1. 이해하기 쉽고 안정적인 서비스 개발에 도움이 된다 2. map, set, cache에 쓰기에 적절하다. 예를 들어 아래와 같은 문제가 발생했을 때 Set myRGBs = new HashSet(); RGB green = new RGB(0, 128, 0); myRGBs.add(green); RGB invertedGreen = green.invert(); System.out.println(myRGBs.contains(invertedGreen)); //예상: false, 결과: false System.out.println(myRGBs.contains(green)); //예상: true, 결과: f.. 2024. 2. 21. 셋(Set), 해시 셋(Hash Set) Set - 데이터를 저장하는 추상자료형(ADT) - 순서를 보장하지 않음 - 데이터 중복을 허용하지 않음 - 데이터 조회(search)가 List보다 빠름 Set은 언제 쓰면 좋을까? 1. 중복된 데이터를 제거해야 할 때 2. 데이터의 존재 여부를 확인해야 할 때 list보다 데이터 조회가 빠르기 때문에 Set의 구현체 - Hash Set - Linked Hash Set(java) - Tree Set(java) Hash Set - 해시 테이블을 사용하여 구현 - 해시 테이블: 일반적으로 테이블의 크기에 상관없이 key를 통해 상수 시간에 빠르게 데이터에 접근 가능 - 해시 테이블을 사용해 구현하기 때문에 크기 상관없이 데이터 조회가 빠름 Java에서 hash set 구현체: HashSet java에서 H.. 2024. 2. 20. 맵과 해시 테이블(해시 맵) Map - key-value pair들을 저장하는 ADT(Abstract Data Type) - 같은 key를 가지는 pair는 최대 한 개만 존재 - associative array, dictionary라고 불리기도 함 Map 구현체 - hash table - tree-based Hash table(hash map) - 배열과 해시 함수(hash function)를 사용하여 map을 구현한 자료 구조 - (일반적으로) 상수 시간으로 데이터에 접근하기 때문에 빠름 🎈 Hash function - 임의의 크기를 가지는 type의 데이터를 고정된 크기를 가지는 type의 데이터로 변환하는 함수 - 특정한 규칙을 이용해 입력받은 키 값으로 그 키값이 얼마나 큰지에 상관없이 동일한 해시 코드를 만듦. - (ha.. 2024. 2. 18. 이전 1 2 3 4 ··· 7 다음