분류 전체보기 86

무중단 배포란?

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

2022.06.04

영속성이란? JDBC란? ORM이란? JPA란?

1. 영속성(persistence)이란? 데이터를 생성한 프로그램이 종료되더라도 사라지지 않는 데이터의 특성을 말한다. 영속성을 갖지 않는 데이터는 단지 메모리에서만 존재하기 때문에 프로그램을 종료하면 모두 사라진다. 우리는 데이터들에 영속성을 부여하기 위해서 데이터베이스를 활용하는 것이다. 2. Persistence Framework JDBC 프로그래밍의 복잡함이나 번거로움 없이 간단한 작업만으로 데이터베이스와 연동되는 시스템을 빠르게 개발할 수 있으며 안정적인 구동을 보장하는 프레임워크이다. Persistence Framework는 SQL Mapper와 ORM으로 나눌 수 있다. Ex) JPA, Hibernate, Mybatis 등 2-1 SQL Mapper SQL Mapper는 직접 SQL문을 작성..

자바 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

JVM이란? JVM 구조 및 작동원리

1. JVM이란? JVM은 'Java Virtual Machine'의 준말로 자바를 실행하기 위한 가상 기계이다. 자바로 작성된 애플리케이션은 모두 이 JVM(가상 기계(컴퓨터))에서만 실행되기 때문에 JVM이 없으면 자바 프로그램을 실행할 수 없다. JVM을 통해서 일반 애플리케이션과 자바 애플리케이션에 차이가 생긴다. 일반 애플리케이션은 OS만 거쳐 하드웨어로 전달되지만 자바 애플리케이션은 JVM을 먼저 거치고 OS와 하드웨어로 도달된다. 따라서 일반 애플리케이션은 OS에 종속적이기 때문에 다른 OS에서 실행하기 위해서는 애플리케이션을 그 OS에 맞게 변경해야한다. 하지만 자바 애플리케이션은 JVM하고만 상호작용을 하기 때문에 OS로부터 독립적일 수 있고 이는 프로그램 변경 없이 다른 OS에서도 실행..

자바 2022.05.24

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

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

2022.05.24

추상클래스, 인터페이스, 추상메서드 정리

확실한 것들만 정리해보았다. 1. 추상 메서드는 반드시 자식 클래스에서 오버라이딩 해야한다. 2. 클래스에 추상 메서드를 만들려면 그 클래스는 반드시 추상 클래스여야 한다. 3. extends가 가능한 경우는 클래스 extends 클래스, 인터페이스 extends 인터페이스만 존재한다. 4. implements가 가능한 경우는 클래스 implements 인터페이스만 존재한다. 5. 인터페이스는 다중상속이 가능하다 6. 클래스는 다중상속이 안된다 7. implements로 상속받으면 무조건 상속받은 인터페이스의 메서드들을 전부 오버라이딩 해야한다. 왜냐하면 인터페이스의 메서드들은 전부 컴파일시에 자동으로 추상 메서드가 되기 때문이다. 하지만 추상 클래스는 추상 메서드뿐만 아니라 일반 메서드가 존재할 수 있..

자바 2022.04.25

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