리버스 프록시란? 클라이언트 요청을 대신 받아 내부 서버로 전달해주는 것을 리버스 프록시(Reverse Proxy) 라고 한다. 그렇다면 프록시란? 프록시란 대리라는 의미로, 정보를 대신 전달해주는 주체라고 생각하면 되는데, 만약 이 프록시 없이 웹 서버를 운영한다고 가정해보자. localhost:3000 라고 하는 웹서버를 열어서 운영했을 때, 사용자가 갑자기 많아지거나, 웹서버가 그대로 노출되어 있기 때문에 보안적으로 위험성이 증가한다. nginx를 사용하면 로드 밸런싱으로 부하를 줄여줄 수 있고, 분산 처리 또한 가능하며 웹서버의 SSL 인증도 적용할 수 있다. (SSL이란?) 따라서 아래와 같이 사용자 -> nginx -> 웹서버로 구성해서 사용자의 요청을 nginx가 대신 웹서버로 전달해주도록 ..
SSL이란? SSL(Secure Sockets Layer)은 암호화 기반 인터넷 보안 프로토콜이다. 인터넷 통신의 개인정보 보호, 인증, 데이터 무결성을 보장하기 위해 출범했고, SSL은 현재 사용 중인 TLS 암호화의 전신이다. TLS와의 차이 또한 의문이 생길 수 있는데, SSL은 TLS(Transport Layer Security)이라는 또 다른 프로토콜의 바로 이전 버전이다. 1999년 IETF(Internet Engineering Task Force)는 SSL에 대한 업데이트를 제안했고, IETF가 이 업데이트를 개발하고 Netscape는 더 이상 참여하지 않게 되면서, 이름이 TLS로 바뀌었다. SSL의 최종 버전(3.0)과 TLS 첫 버전의 차이는 크지 않으며, 이름이 바뀐 것은 소유권 변경..
Spring으로 개발을 하다보면 @Bean과 @Component를 언제 써야할지 헷갈릴때가 있다. 둘다 목적이 명확하지 않은 Bean을 생성할때 사용하는 어노테이션인데, 정확히 차이를 짚고 넘어가보자. @Bean VS @Component (@Bean) (@Component) 위 예시처럼, @Bean의 경우 개발자가 컨트롤이 불가능한 외부 라이브러리들을 Bean으로 등록하고 싶은 경우에 사용된다. (예를 들면 ObjectMapper의 경우 ObjectMapper Class에 @Component를 선언할수는 없으니 ObjectMapper의 인스턴스를 생성하는 메소드를 만들고 해당 메소드에 @Bean을 선언하여 Bean으로 등록한다.) 개발자가 생성한 Class에 @Bean을 선언하는 것 또한 불가능하다. 개..
Java와 Spring으로 개발을 하다 보면 Bean이라는 개념이 자주 등장한다. 자주 사용하는 용어이지만 제대로 정리하고 넘어간 적이 없는 것 같아서, 한번 깔끔하게 정리하고 넘어가야 할 것 같았다. Java Bean 먼저 Java Bean에 대해 알아보자. 결론부터 말하자면 Java Bean은 특정 형태의 클래스를 가르키는 뜻으로 사용된다. DTO 혹은 VO의 형태가 Java Bean이라고 생각하면 쉽다. [백엔드 기술 면접 대비] - 1. DAO, DTO, VO란? 오늘은 데이터 컨트롤의 기초라고 볼 수있는, 데이터 객체들에 대해 한 번 짚고 넘어간다. DAO(Data Access Object)란? 말 그대로, 데이터베이스의 데이터에 접근하기 위한 객체이다. 비즈니스 로직에 kangmanjoo.ti..
오늘은 데이터 컨트롤의 기초라고 볼 수있는, 데이터 객체들에 대해 한 번 짚고 넘어간다. Entity란? Entity는 도메인 모델 객체로서, 실제 테이블과 매핑되어 변경 될 시 다른 여러 Class에 영향을 미치게 된다. Entity는 다음 특징들이 있다. DB의 테이블과 1대 1로 대응된다. DB의 테이블이 가지지 않은 칼럼을 필드로 가져선 안된다. 다른 클래스를 상속받거나 인터페이스의 구현체여서는 안된다. Setter 사용을 지양한다. 여기서 Setter 사용을 지양하는 이유는 , Setter의 사용이 Entity의 일관성을 해칠 수 있기 때문이라고 한다. 따라서 Setter 대신 다른 방법으로 필드에 값을 넣어 주는 것이 좋다. 또한 Entity를 생성할 때는 Builder 패턴을 사용하는 것이 ..
제네릭 메서드(Generic Method)란? 자바(Java)에서 제네릭(Generic)은 클래스 내부에서 사용하는 데이터의 타입(Type)을 클래스의 인스턴스를 생성할 때 결정하는 것을 의미한다. 객체의 타입을 컴파일 시점에 체크하기 때문에 타입 안정성을 높이고 형 변환의 번거로움을 줄일 수 있다. 즉, 제네릭 메서드는 메서드의 선언 부에 적은 제네릭 타입으로 리턴 타입과 파라미터 타입이 모두 정해지는 메서드이다. 우선 제네릭에 대한 여러 예시를 보며 이해해보자. public class Student { static T name; } 위와 같이 작성할 경우, 제네릭을 사용할 수 없다. 왜냐면, static 변수는 Student 클래스가 인스턴스가 되기 이전에 메모리에 올라가는데, 이 때 name의 타입..
자바의 실행 과정 자바를 실행하기 위한 머신 JVM 우선 JDK에 대해 알기 전에, 자바 코드가 컴파일되고 실행되는 과정을 먼저 알아보자. JAVA는 실행시키는 운영체제에 독립적이라는 장점을 가지고 있다. 그리고 JVM은, 이를 위해 필요한 머신이다. java의 경우 JVM,즉 컴퓨터가 이해할 수 있는 형태는 바이트 코드로 이루어진 .class 파일이다. 우리가 java로 작성한 코드는 .java 파일인데, 이를 java 컴파일러가 .java 파일을 .class 라는 자바 바이트 코드로 변환해 주는 것이다. 컴파일을 해주는 Java Compiler java compiler는 자바를 실행하기 위해 필수인 JDK를 설치할 때에, bin 하위의 javac.exe를 말한다. 즉, javac 명령을 통해 .jav..