본문 바로가기

Develop17

[보안] SSL (Secure Socket Layer) 동작방식 HTTPS는 HTTP와 통신하는 소켓을 SSL로 대체한 것이다. SSL프로토콜은 보안 프로토콜로 대칭키/비대칭키 기반으로 데이터를 암호화한다. 실제 전송되는 데이터의 암호화에는 대칭키 암호화 방식을 사용하고, 키 교환 시에는 비대칭키 암호화 방식을 사용한다. 그럼 먼저 이 두개의 개념을 알아보자. 대칭키 암복호화에 사용되는 키가 동일한 암호화 방식 비대칭키보다 빠른속도로 암복호화하는 하는 장점을 가짐 다른 사람들에게 내가 정한 비밀키가 무엇인지 알려줘야하는 키교환 문제 존재 비밀키를 알려주다보면 키가 노출되어 보안문제 가능성 존재 비대칭키 암복호화에 사용되는 키가 다른 암호화 방식 공개키로 암호화하고 공개키와 매칭되는 개인키로만 복호화 가능 공개키는 누구든지 알아도 상관없고 개인키는 복호화해야 하는 대상.. 2021. 11. 6.
[웹서버] Apache vs Nginx (Event-driven 구조란?) Apache와 Nginx 모두 웹개발의 필수적인 웹서버이다. Apache 국내는 물론 전세계적으로 부동의 1위를 지키고 있는 웹서버 Process 기반 방식으로 클라이언트의 요청을 처리 요청에 따라 프로세스 또는 쓰레드를 생성하는 구조이므로 클라이언트의 요청이 많아질수록 Context Switching이 많아지면서 오버헤드 문제 발생 다양한 모듈 제공 (MPM : Multi Processing Module) 보안성 & 확장성 좋음 Nginx 웹의 발전에 따라 트래픽이 많아지면서 Apache의 한계를 극복하기 위해 탄생한 웹서버 Event-driven 구조로 클라이언트 요청 병렬 처리를 진행 → 동시 커넥션 양 & 속도 대폭 향상 Master Process가 있고 설정에 맞게 Worker process를 .. 2021. 11. 6.
객체지향 프로그래밍이란? 객체지향 프로그래밍(OOP : Object-Oriented Programming) 프로그래밍에서 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고, 객체들 간의 상호작용을 통해 프로그램을 설계하고 개발하는 것 객체지향 언어의 특징 캡슐화 다형성 상속 추상화 : 여러 객체들의 공통적 특징을 묶는 것 객체지향 언어의 장/단점 장점 상속을 통해 코드의 재사용성을 높임 독립적인 객체들을 사용하므로 개발의 생산성을 향상 시킴 절차 지향 프로그래밍은 코드 수정시 일일히 찾아서 변경해야하지만, 객체 지향 프로그래밍은 클래스 내부의 메서드나 멤버변수만 수정하면 되므로 코드 수정이 용이 클래스 단위로 모듈화 시켜서 개발이 가능하므로 대형 프로젝트에 적합 단점 절차 지향 프로그래밍은 컴퓨터 처리 구조와 비슷해 .. 2021. 10. 31.
[JAVA] 오버로딩 VS 오버라이딩 오버로딩 메서드의 이름은 같고 매개변수의 갯수나 타입이 다른 함수를 정의하는 것 오버라이딩 상위 클래스의 메서드를 하위 클래스에서 재정의 하는 것 메서드 이름은 물론 매개변수의 갯수, 타입이 완전히 일치해야함 상위 클래스의 동작을 상속받은 하위 클래스에서 변경하기 위해 사용 오버로딩은 상속과 관련이 없지만 오버라이딩은 상속과 관련이 있다 2021. 10. 31.
[JAVA] 캡슐화 & 다형성 & 상속 캡슐화란? 관련있는 변수나 메서드를 하나의 클래스로 묶어서 외부에서 쉽게 접근하지 못하도록 하는 것 정보 은닉이 목적 객체에 직접적인 접근을 막고 객체가 제공하는 필드나 메소드를 통해서만 접근이 가능 다형성이란? 하나의 객체가 여러 가지 타입을 가질 수 있는 것 자바에서는 부모 클래스 타입의 참조 변수로 자식 클래스 타입의 인스턴스를 참조할 수 있도록 하여 구현 큰 객체 안에 작은 객체를 넣어서 여러 형태로 변환해 사용하는 것 부모 타입의 자식 객체 class Parent { void call() { System.out.println("부모") } } class Child extends Parent { void call() { System.out.println("자식") } } ... Parent pa .. 2021. 10. 31.
[JAVA] 코딩테스트 자주 사용하는 함수 int[] arr = {1,8,6} static int [] dx = {1, -1 , 0, 0}; static int [] dy = {0, 0, 1, -1}; ArrayList[][] a = new ArrayList[N+1][N+1] //2차원 ArrayList Arrays.sort(arr); // 오름차순 정렬 Arrays.sort(arr,Collections.reverseOrder()); // 내림차순 정렬 Arrays.sort(int[][] jobs, ((o1,o2)->o1[0]-o2[0]) // 0번째 원소를 기준 오름차순 Arrays.sort(int[][] jobs, ((o1,o2)->o2[0]-o1[0]) // 0번째 원소를 기준 내림차순 Arrays.copyOfRange(arr,2,4) //.. 2021. 10. 16.