분류 전체보기 199

Spring Boot : jar, war 파일의 특성

* JAR (Java Archive) class와 같은 java 리소스와 속성 파일, 라이브러리 및 액세서리 파일이 포함되어 있다. 쉽게 JAVA 어플리케이션이 동작할 수 있도록 자바 프로젝트를 압축한 파일로 플랫폼에 귀속되는 점만 제외하면 WIN ZIP과 동일한 구조이다. * WAR (Web Application Archive) servlet/jsp 컨테이너에 배치할 수 있는 웹 어플리케이션(web application) 압축 파일 포맷이다. web application container는 웹 어플리케이션 자체 api를 제공하기 위해 컨테이너를 로드하는 클래스 로더와 사용자가 추가한 jsp나 war 파일을 다루기 위한 ServletContext Loader를 사용한다. 배포할 때 로컬 실행 프로그램은 ..

Web 2021.08.16

Call By Value / Call By Reference

* Call By Value 인수의 값을 해당 함수의 형식 매개변수에 복사한다. 따라서 해당 함수가 내부에서 매개변수를 이용하여 값을 바꾸더라도 인수에 영향을 미치지 않는다. 매개 변수는 다른 메모리의 주소를 가진다. Call By Value의 예 public class Tester{ public static void main(String[] args){ int a = 30; int b = 45; System.out.println("Before swapping, a = " + a + " and b = " + b); // Invoke the swap method swapFunction(a, b); System.out.println("\n**Now, Before and After swapping values..

JAVA 2021.08.14

로컬(윈도우)에서 AWS로 파일 올리기

1. 윈도우 CMD 창에서 올리고 싶은 파일이 있는 곳으로 이동한다. (사실 이렇게 안하고 파일이 있는 경로를 지정해줘도 된다.) 2. SCP 프로토콜을 사용하여 scp -i "[pem키 위치]" [올리고 싶은 파일 이름] [user id]@[ec2 public IP]:~/[저장할 주소] 명령어를 입력하면 된다. 이 때 openssh 설정이 되어있어야 한다. 앱 및 기능 > 선택적 기능에서 openssh가 설정되어 있는지 확인해보자. * SCP? Secure Copy Protocol의 약자로 로컬 호스트와 원격 호스트 간에 또는 두 원격 호스트 간에 컴퓨터 파일을 안전하게 전송하는 수단이다. SSH 프로토콜을 기반으로 한다. 그러나 보안 취약점이 최근 드러나면서 SCP 보다는 SFTP 또는 rsync와 ..

Web 2021.08.13

객체 복제

* 객체 복제(clone()) 객체 복제는 원본 객체의 필드값과 동일한 값을 가지는 새로운 객체를 생성하는 것을 말한다. 객체를 복제하는 이유는 원본 객체를 안전하게 보호하기 위함이다. 신뢰하지 않는 영역으로 원본 객체를 넘겨 작업할 경우, 원본 객체의 데이터가 훼손될 수 있기 때문에 복제된 객체를 만들어 신뢰하지 않는 영역으로 넘기는 것이 좋다. 복제된 객체의 데이터가 훼손되더라도 원본 객체는 아무런 영향을 받지 않기 때문에 안전하게 데이터를 보호할 수 있게 된다. 객체를 복제하는 방법에는 얕은 복제와 깊은 복제가 있다. * 얕은 복제 (thin clone) 단순히 필드값을 복사해서 객체를 복제하는 것을 말한다. 필드 값만 복제하기 때문에 필드가 기본 타입일 경우 값 복사가 일어나고, 필드가 참조타입일..

JAVA 2021.08.11

[백준 11722] 가장 긴 감소하는 부분 수열

문제 출처 - https://www.acmicpc.net/problem/11722 11722번: 가장 긴 감소하는 부분 수열 수열 A가 주어졌을 때, 가장 긴 감소하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 30, 10, 20, 20, 10} 인 경우에 가장 긴 감소하는 부분 수열은 A = {10, 30, 10, 20, 20, 10} www.acmicpc.net 문제 수열 A가 주어졌을 때, 가장 긴 감소하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 30, 10, 20, 20, 10} 인 경우에 가장 긴 감소하는 부분 수열은 A = {10, 30, 10, 20, 20, 10} 이고, 길이는 3이다. 입력 첫째 줄에 수열 A의 크기 ..

Thread-safe의 의미

* Thread 쓰레드라는 것은 현재 cpu가 어디를 수행하는지를 알려주는 Program Counter를 여러개 두는 것이다. 쓰레드가 없을 때에는 프로세스 하나 당 Program counter도 하나만 있다. 그렇지만 쓰레드가 존재한다면, 프로세스 안에도 Program Counter도 쓰레드의 수만큼 존재하게 된다. 쓰레드의 존재 이유는 경제성에 있다. 쓰레드는 Program Counter를 제외하고 프로세스의 code section, stack space와 같은 다른 영역을 공유하게 되면서 경제성을 추구할 수 있다. 쓰레드를 사용하면 병렬성이 좋아지고, 자원이 절약된다. * Thread-safe Thread-safe란 멀티 스레드 프로그래밍 환경에서 모든 스레드가 올바르게 작동하고 여러 개의 스레드가..

CS/operating system 2021.08.10

Spring Boot : Multipart(멀티파트)

* Multipart 바이너리 데이터 전송을 위해 사용한다. 예전에는 파일 업로드와 같은 기능 구현을 위해 반드시 외부 라이브러리가 필요했지만, 서블릿 3.0 이후 부터는 서블릿 3.0 이후부터는 서블릿 스펙에 'multipart'가 추가되어서 별도의 라이브러리 없이 구현이 가능해졌다. * JSON과 파일을 한 request에 보낼 때 1. User POJO 클래스를 만든다. 2. 컨트롤러레 multipart를 적용한다. JSON과 Multipart를 포스트로 받기 위해서 consume 파트에 content type을 명시해야 한다. consumes = { MediaType.APPLICATION_JSON_VALUE,MediaType.MULTIPART_FORM_DATA_VALUE }) 그리고 컨트롤러 메소..

Web 2021.08.08

백준 11048 이동하기 (JAVA 자바)

문제 출처 - https://www.acmicpc.net/problem/11048 11048번: 이동하기 준규는 N×M 크기의 미로에 갇혀있다. 미로는 1×1크기의 방으로 나누어져 있고, 각 방에는 사탕이 놓여져 있다. 미로의 가장 왼쪽 윗 방은 (1, 1)이고, 가장 오른쪽 아랫 방은 (N, M)이다. 준규는 www.acmicpc.net 문제 준규는 N×M 크기의 미로에 갇혀있다. 미로는 1×1크기의 방으로 나누어져 있고, 각 방에는 사탕이 놓여져 있다. 미로의 가장 왼쪽 윗 방은 (1, 1)이고, 가장 오른쪽 아랫 방은 (N, M)이다. 준규는 현재 (1, 1)에 있고, (N, M)으로 이동하려고 한다. 준규가 (r, c)에 있으면, (r+1, c), (r, c+1), (r+1, c+1)로 이동할 수..

백준 1309 동물원 (JAVA 자바)

문제 출처 - https://www.acmicpc.net/problem/1309 1309번: 동물원 첫째 줄에 우리의 크기 N(1≤N≤100,000)이 주어진다. www.acmicpc.net 문제 어떤 동물원에 가로로 두칸 세로로 N칸인 아래와 같은 우리가 있다. 이 동물원에는 사자들이 살고 있는데 사자들을 우리에 가둘 때, 가로로도 세로로도 붙어 있게 배치할 수는 없다. 이 동물원 조련사는 사자들의 배치 문제 때문에 골머리를 앓고 있다. 동물원 조련사의 머리가 아프지 않도록 우리가 2*N 배열에 사자를 배치하는 경우의 수가 몇 가지인지를 알아내는 프로그램을 작성해 주도록 하자. 사자를 한 마리도 배치하지 않는 경우도 하나의 경우의 수로 친다고 가정한다. 입력 첫째 줄에 우리의 크기 N(1≤N≤100,0..

Coding Convention

* Coding Convention 코드 개발의 품질에는 코드를 작성할 떄 규칙을 준수하는 것이 중요하다. 코딩 컨벤션은 형식 지정 뿐만 아니라 선택한 프로그래밍 언어 및 선택한 개발 프레임워크에 대한 코딩 규칙에 따라 결정되는 많은 요소에도 적용된다. Coding Convention은 다음과 같은 항목에 적용된다. 이름 짓는 방식과 변수 이름 등 식별자에 사용되는 대소문자 Camel 표기법으로 할것인지, Pascal 표기법, snake 표기법 등의 표기법 블록의 들여쓰기 스타일 - 탭을 쓸 것인지, 너비는 어떻게 할 것인지 등 대괄호 배치 방법 - 메소드 바로 옆에 붙일 것인지 한 줄 띄고 붙일 것인지 클래스 및 인터페이스 선언 등.... 그렇다면 coding convention은 왜 사용하여야 할까?..