13

웹이란? 웹 작동과정? WS vs WAS

1. 웹이란? 월드 와이드 웹(World Wide Web)이란 인터넷에 연결된 사용자들이 서로의 정보를 공유할 수 있는 공간을 의미합니다. 간단히 줄여서 WWW나 W3라고도 부르며, 간단히 웹(Web)이라고 가장 많이 불립니다. 인터넷과 같은 의미로 많이 사용되고 있지만, 정확히 말해 웹은 인터넷상의 인기 있는 하나의 서비스일 뿐입니다. 하지만 현재에는 인터넷과 웹이라는 단어가 서로 혼용되어 사용될 만큼 인터넷의 가장 큰 부분을 차지하고 있습니다. 2. 웹의 특징 웹은 인터넷 상에서 텍스트나 그림, 소리, 영상 등과 같은 멀티미디어 정보를 하이퍼텍스트 방식으로 연결하여 제공합니다. 하이퍼텍스트(hypertext)란 문서 내부에 또 다른 문서로 연결되는 참조를 집어 넣음으로써 웹 상에 존재하는 여러 문서끼..

2022.06.15

무중단 배포란?

1. 무중단 배포란? 애플리케이션의 중단 없이 배포를 하는 것을 말한다. 이런 문제를 해결하기위해 무중단 배포라는 개념이 나왔고 크게 3가지 방법이 있다. 2. 무중단 배포 기법 2-1. Rolling 배포 롤링 배포는 사용 중인 인스턴스 내에서 새 버전을 점진적으로 교체하는 것으로 무중단 배포의 가장 기본적인 방식이다. 서비스 중인 인스턴스 하나를 로드밸런서에서 라우팅하지 않도록 한 뒤, 새 버전을 적용하여 다시 라우팅하도록 한다. 이를 반복하여 모든 인스턴스에 새 버전의 애플리케이션을 배포한다. 장점 인스턴스마다 차례로 배포를 진행하기에 상황에 따라 손쉽게 롤백이 가능하다. 추가적인 인스턴스를 늘리지 않아도 된다. 간편한 관리 단점 새 버전을 배포할때 인스턴스의 수가 감소하기 때문에 사용중인 인스턴스..

2022.06.04

AOP란? 프록시 패턴이란? 스프링 AOP란? @Transactional 원리

1. AOP란? AOP는 Aspect Oriented Programming의 약자로 관점 지향 프로그래밍이라고 불린다. 관점 지향은 쉽게 말해 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 각각 모듈화하겠다는 것이다. 여기서 모듈화란 어떤 공통된 로직이나 기능을 하나의 단위로 묶는 것을 말한다. 예로들어 핵심적인 관점은 결국 우리가 적용하고자 하는 핵심 비즈니스 로직이 된다. 또한 부가적인 관점은 핵심 로직을 실행하기 위해서 행해지는 데이터베이스 연결, 로깅, 파일 입출력 등을 예로 들 수 있다. AOP에서 각 관점을 기준으로 로직을 모듈화한다는 것은 코드들을 부분적으로 나누어서 모듈화하겠다는 의미다. 이때, 소스 코드상에서 다른 부분에 계속 반복해서 쓰는 코드..

웹/스프링 2022.06.03

IOC란? IOC 컨테이너란? DI란? DI 방법

1. IOC란? IoC란 Inversion of Control의 줄임말이며, 제어의 역전이라고 한다. 스프링 애플리케이션에서는 객체(빈)의 생성과 의존 관계 설정, 사용, 제거 등의 작업을 개발자 대신 스프링 컨테이너가 담당한다. 이를 스프링 컨테이너가 코드 대신 오브젝트에 대한 제어권을 갖고 있다고 해서 IoC라고 부른다. 따라서, 스프링 컨테이너를 IoC 컨테이너라고도 부른다. 2. IoC 컨테이너란? 스프링에서는 IoC를 담당하는 컨테이너를 빈 팩토리, DI 컨테이너, 애플리케이션 컨텍스트라고 부른다. 스프링 컨테이너는 단순한 DI 작업보다 더 많은 일을 하는데, DI를 위한 빈 팩토리에 여러 가지 기능을 추가한 것을 애플리케이션 컨텍스트라고 한다. 정리하자면, 애플리케이션 컨텍스트는 그 자체로 I..

웹/스프링 2022.06.02

Spring MVC란?

1. MVC란? MVC는 디자인 패턴이다. 디자인 패턴이란 과거의 소프트웨어 개발 과정에서 발견된 설계의 노하우를 축적하여 그 방법에 이름을 붙여서 이후에 재사용하기 좋은 형태로 특정 규약을 만들어서 정리한 것을 의미합니다. 즉 과거의 노하우를 통해 발견해낸 "효율적인 코드를 만들기 위한 방법론"을 의미합니다. Model은 데이터와 관련된 일(데이터를 가져오고 설정하는 등)을 처리합니다. 데이터베이스가 아니라 프로세스가 동작중일 때 메모리 안에 데이터가 있는 상태를 의미합니다. Controller는 Model과 View의 중개자 역할을 한다. 뷰와 모델을 변경시키는 로직들이 들어갑니다. View는 사용자한테 보여지는 부분(HTML, CSS 등)을 담당합니다. 이처럼 기능 별로 코드를 분리하여, 하나의 파..

웹/스프링 2022.05.31

WebRTC란? Socket.IO를 활용하여 Signaling Server를 구현하기

1. WebRTC란? WebRTC(Web Real-Time Communication)는 웹 브라우저 간에 플러그인의 도움 없이 서로 통신할 수 있도록 설계된 API이다. 비디오, 음성 및 일반 데이터를 P2P로 실시간으로 전송 가능하게 해주는 오픈 프레임워크이다. 여기서 중요한 점은 WebRTC는 P2P로 전송이 가능하다는 것이지, 서버의 도움 없이 상대방 Peer를 발견할 수는 없다. 또한 더 나아가 WebRTC를 통해 통신하고자 하는 유저의 숫자가 많아진다면 서버의 도움 영역은 더욱 커질 것이다. 하지만 그럼에도 최대한 서버를 거치지 않고 P2P연결로 바로 브라우저간에 데이터를 주고받는다면 속도가 굉장히 빠르다는 장점이 있다. 2. 웹 실시간 통신 기술에는 여러가지가 있는데 그 중에서도 webRTC를..

2022.05.24

RedisTemplate 사용해서 Redis 이용하기

아직 공부중이기 때문에 더 추가하거나 수정이 있을 예정입니다. 1. Redis란 무엇인가? 레디스는 모든 데이터를 메모리에 저장하고 조회합니다. 즉, 인메모리 데이터베이스 입니다. 또한 NoSQL로서 Key-Value 타입의 저장소입니다. 여기서 NoSQL은 비관계형 데이터베이스를 지칭합니다. 즉, 관계형 데이터 모델을 지양 하며 대량의 분산된 데이터를 저장하고 조회하는 데 특화되었으며 스키마 없이 사용 가능하거나 느슨한 스키마를 제공하는 저장소를 말한다. 다른 인메모리 디비들과의 가장 큰 차이점은 레디스의 다양한 자료구조 입니다. Redis는 영속성을 지원하긴하지만 영속성의 목적으로 Redis를 잘 사용하지는 않는다. 왜냐하면 레디스의 데이터를 파일로 보관하기 위한 persistence 기능(RDB, ..

웹/스프링 2022.04.18

Spring Boot에서 통합 테스트코드 구현하기(JUnit5 + Mockito)

아래 코드만으로 부족한 경우 깃허브를 참고해주세요: https://github.com/HangHae99Zzz/RoomEscape_BE/tree/main/src/test/java/com/project/roomescape GitHub - HangHae99Zzz/RoomEscape_BE Contribute to HangHae99Zzz/RoomEscape_BE development by creating an account on GitHub. github.com 1. JUnit5란 자바 개발자들이 국내에서 가장 많이 사용하는 테스트 프레임워크이다. Junit5는 3가지로 구성되어 있다. - JUnit Platform : 테스트를 실행해주는 런처와 TestEngine API를 제공함. - JUnit Jupiter ..

웹/스프링 2022.04.17

CORS란 무엇인가? SOP란 무엇인가?

웹 생태계에는 다른 출처로의 리소스 요청을 제한하는 것과 관련된 두 가지 정책이 존재한다. 한 가지는 이 포스팅의 주제인 CORS, 그리고 또 한 가지는 SOP(Same-Origin Policy)이다. 1. CORS란? CORS는 Cross-Origin Resource Sharing의 줄임말로, 한국어로 직역하면 교차 출처 리소스 공유라고 해석할 수 있다. 여기서 “교차 출처”라고 하는 것은 “다른 출처”를 의미한다. 2. SOP란? SOP는 “같은 출처에서만 리소스를 공유할 수 있다”라는 규칙을 가진 정책이다. 그러나 웹이라는 오픈스페이스 환경에서 다른 출처에 있는 리소스를 가져와서 사용하는 일은 굉장히 흔한 일이라 무작정 막을 수도 없는 노릇이니 몇 가지 예외 조항을 두고 이 조항에 해당하는 리소스 ..

2022.02.13

SQL이란? MVC란?

1. SQL은 관계형 데이터베이스의 데이터를 관리하기 위한 프로그래밍 언어로 크게 3가지 종류가 있다. DDL(데이터 정의 언어), DML(데이터 조작 언어), DCL(데이터 제어 언어)로 구분된다. DDL은 각 릴레이션(테이블)을 정의하기 위한 언어로 CREATE, DROP, ALTER등이 존재한다. DML은 데이터를 관리하기 위한 언어로 SELECT, UPDATE, INSERT등이 있다. 마지막으로 DCL은 데이터의 관리, 접근권한을 다루는 언어로 GRANT, REVOKE 등이 있다. SQL을 예를 들어보자면 SELECT * FROM EMP WHERE NAME = "wonjae"; 이런 식으로 사용하는 프로그래밍 언어다. 하지만 스프링의 JPA를 사용한다면 이런 SQL언어를 통해 직접 DB를 제어하지..

웹/스프링 2022.02.06