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 첫 버전의 차이는 크지 않으며, 이름이 바뀐 것은 소유권 변경..
Nginx로 웹서버를 구성한 프로젝트를 진행 중 끔찍한 에러를 만났다. 바로 502 Bad Gateway (nginx/1.8.2) 라는 페이지만 보이고, 아무 화면도 보이지 않았다. 인터넷에는 다양한 해결법이 있어서 여러가지 시도를 해보았는데, 다음 방법들이 있었다. Nginx 502 Bad Gateway가 뜨는 근본적인 문제는 대부분 Nginx가 가리키는 포트에서 서버가 정상적으로 동작하지 않을 때인데, 로그를 반드시 잘 확인해봐야 한다. sudo tail -f /var/log/nginx/error.log 터미널에 위 명령어를 입력해 에러 내역을 확인하고, 자신에게 맞는 해결법을 적용하자. 인터넷 서핑을 하면서 찾아본 해결법들을 정리해보겠다. nginx.conf 파일 수정 (실패) sudo nano /..
프로젝트 생성 및 의존성 추가 Mysql과 연동하여 JPA를 사용할 것이므로 위와 같은 dependencties를 추가한다. 기존 프로젝트에서 MySql과 JPA를 추가하여 사용하고 싶다면 build.gradle에 다음 두 줄을 추가한다. implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'mysql:mysql-connector-java:8.0.32' application.properties를 다음과 같이 작성한다. spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost..
다익스트라 알고리즘이란? 다익스트라 알고리즘은 DP를 활용한 대표적인 최단 경로 탐색 알고리즘이다. 인공위성, GPS 등 현실 세계에서 굉장히 많이 사용되며, 다음과 같은 특징들이 있다. 특정한 하나의 정점에서 다른 모든 정점으로 가는 최단 경로를 알려준다. 음의 간선을 포함할 수 없다 (이 경우 벨만 포드 알고리즘 사용) $O(NlogN)$의 시간 복잡도를 가진다. 동작 단계 1. 출발 노드를 설정한다. 2. 최단 거리 테이블을 초기화한다. 3. 현재 위치한 노드의 인접 노드 중 아직 방문하지 않았고, 거리가 가장 짧은 노드를 선택한다. 4. 선택된 노드를 방문처리한다. 5. 해당 노드를 거쳐 다른 노드로 넘어가는 간선의 가중치를 통해 최단 거리 테이블을 업데이트한다. 6. 3~5 과정을 반복한다. 최..
Spring에서 컨트롤러를 지정해주기 위한 어노테이션은 @Controller와 @RestController가 있다. 두 어노테이션의 주요한 차이점은 HTTP Response Body가 생성되는 방식이다. 두 어노테이션의 자세한 차이점과 사용법을 살펴보자. @Controller란? 전통적인 Spring MVC의 컨트롤러인 @Controller 주로 View를 반환하기 위해 사용한다. 아래 예시와 같은 과정을 통해 Spring MVC Container는 Client의 요청으로부터 View를 반환한다. Client는 URI 형식으로 웹 서비스에 요청을 보낸다. DispatcherServlet이 요청을 처리할 대상을 찾는다. HandlerAdapter을 통해 요청을 Controller로 위임한다. Control..
스프링 프로젝트 초기 설정 도중, 테스트를 돌리자 variable userRepository not initialized in the default constructor 에러가 발생했다. 생성자를 Lombok을 이용하여 만들었는데, variable not initialized in the default constructor라는 에러가 발생했다면, Lomnok이 정상적으로 동작하지 않는다는 뜻으로 다음과 같은 상황을 의심해봐야한다. Gradle 버전 확인 Gradle을 통해서 롬복 의존성 라이브러리를 추가해주었지만 동작하지 않는다면 자신의 Gradle 버전이 5.x 이상인지 확인해야한다. 그 이유는 Gradle 버전이 올라가면서 Lombok 의존성을 추가하는 방법이 바뀌었기 때문이다. Gradle 버전은 ..
상속(Inheritance)이란? 객체지향 프로그래밍, OOP에는 다음과 같은 특징들이 있다. 1. 상속과 인터페이스 (계층성) 2. 다형성, 사용편의성 (모듈화) 3. 캡슐화, 정보은닉 4. 자료 추상화 (모델링) 5. 동적 바인딩 자바에서 상속은 세가지로 구현할 수 있다. extends 부모에서 선언 / 정의를 모두하며 자식은 메소드 / 변수를 그대로 사용할 수 있음 implements (interface 구현) 부모 객체는 선언만 하며 정의(내용)은 자식에서 반드시 오버라이딩 (재정의) 해서 사용해야함 abstract extends와 interface 혼합. extends하되 몇 개는 추상 메소드로 구현되어 있음 extends 상속의 가장 대표적인 형태이다. 부모의 메소드를 그대로 사용할 수 있으며..
Lombok이란? Lombok이란 어노테이션 기반으로 코드를 자동완성 해주는 Java 라이브러리이다. Lombok은 기계적인 코드 작성 ex)생성자, getter, setter등에 대한 코드 작성을 자동화하여 코드 다이어트를 도와준다. Lombok을 이용하면 Getter, Setter, Equlas, ToString 등과 다양한 방면의 코드를 자동완성 시킬 수 있다. Lombok 사용예시 getter, setter 만약 어느 프로젝트를 진행하면서, 변수를 많이 가지고 있는 DTO 혹은 VO 클래스를 만든다고 생각해보자. public class customer extends user { private String name; private String age; private String telephone; ..