내부 설정 문제로 생기는 보안 문제가 더 많다
자체 네트워킹 서비스를 사용, dc운영시 안정적으로 운영
순 탄소 배출량 0 달성 환경 친화적
인증을 통해서 권한이 생성된다.
+) MS 클라우드 보안
AzureAD와 WSAD가 다르다는 것 정도로 알아두기
Tenant 기준이 되는 환경! 회사 또는 조직을 의미
>> 사용자 또는 서비스, 구독, 리소스 그룹, 리소스 모든 게 Tenant 내에 존재
계정이 만들어지면 default Tenant가 생성됨.
try-catch문
int num = 10;
int result;
for (int i=10;i>=0;i--) {
try {
result = num / i;
System.out.println(result);
} catch (Exception e) {
System.out.println("Exception 발생: "+e.getMessage());
}finally {
System.out.println("항상 실행되는 finally 구문");
}
}
try-with-resource문
try (FileOutputStream out = new FileOutputStream("test.txt")) {
out.write("Hello Sparta".getBytes());
out.flush();
} catch (IOException e) {
System.out.println("IOException 발생: " + e.getMessage());
e.printStackTrace();
}throws
public static void main(String[] args) throws IOException {
FileOutputStream out = new FileOutputStream("test.txt");
try {
out.write("Hello Sparta".getBytes());
out.flush();
} catch (IOException e) {
System.out.println("IOException 발생: " + e.getMessage());
e.printStackTrace();
}
out.close();
}LocalDate 날짜LocalTime 시간LocalDateTime 날짜+시간Period 기간Formatter 지정 포맷다수의 데이터를 다루기 위한 자료 구조를 표현하고 사용하는 클래스의 집합!
크기는 size()
List 중복 허용
+: add(e) | -: remove(idx) | 조회: get(idx)
Set 순서 유지x 중복 허용x
+: add(e) | -: remove(e) | 포함/boolean: contains(e)
Map {키:값}
+: put(key:value) | -: remove(e) | 조회: get(key)
| 포함/boolean: containsKey(key) containsValue(value) | 비우기: clear()
Stack LIFO (프링글스, 뒤로 가기)
+: push(e) | -: pop(e) | 포함: contains(e)
| 조회: peek() | 확인: empty() | 비우기: clear()
Queue FIFO (파이프)
+: add(e) | -: poll(e) | 조회: peek()
ArrayDeque
기본 스택이나 큐의 기능을 다 포함
컴파일 시의 타입 체크를 해주는 기능
List<String> list = new ArrayList();
list.add("string");
Collection<String> collection = list;
List<Exception> exceptionList = new ArrayList<>();
Collection<Exception> exceptionCollection = new ArrayList<>();
List<IllegalAccessException> exceptions = new ArrayList<>();
exceptionCollection.addAll(exceptions); //addAll(Collection<? extends E> c);
// 컬렉션 인터페이스 List이면서 꺽쇠 안의 Exception의 자식 클래스인 exceptions는 addAll 가능
// list는 Exception의 자식 클래스가 아니기 때문에 불가능
람다
함수의 명세 없이도 실행 가능!
함수를 정의하는 건 아니므로 코드 중복으로 인해 지저분해질 수 있다.
스트림
하나의 데이터의 흐름
대표적으로 컬렉션 이용
데이터 소스를 변경하지 않음
한 번 쓰면 끝나게 됨
네트워크
두 대 이상의 컴퓨터가 연결된 것을 의미
물리적일 수도 있고 무선 네트워크 등을 통해 그렇지 않을 수도 있다.
IP주소
컴퓨터를 구별하는데 사용되는 고유한 위치값
URL
컴퓨터의 방에 들어간다는 뜻!
API
요청과 응답의 데이터 형식에 대한 약속
강의에서는 Retrofit 라이브러리를 사용하여 복잡한 구현들을 감소시킴.
url 주소에 ?는 쿼리스트링(Query String)을 작성하겠다는 신호
>> 이게 쿼리 스트링인 걸 처음 알았다...ㅎㅎ
public interface RetrofitService {
@GET("/api/users/")
Call<Object> retrofitTest(@Query("page") int page);
}
//@Query는 Retrofit 라이브러리를 이용할 때 쿼리스트링을 입력하는 방법입니다.(어노테이션)
//이렇게 파라미터 변수로 작성해놓으면 함수를 호출할 때 파라미터를 바꿔가며 원하는 페이지를 조회할 수 있습니다.
public class RetrofitClient {
private static final String BASE_URL = "https://reqres.in/";
//BASE_URL에는 변하지 않는 URL주소를 입력해 주면 됩니다. 데이터의 위치에 따라 변하지 않는 주소를 말이죠.
public static RetrofitService getApi() {
return getInstance().create(RetrofitService.class);
}//getInstance 메소드를 통해 인스턴스를 반환하게됩니다.
private static Retrofit getInstance() {
Gson gson = new GsonBuilder()
.setLenient()
.create();//통신을 할 때 JSON 사용 및 해당 객체로의 파싱을 위해 생성합니다.
return new Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create(gson))
.build();//서버에서는 JSON으로 응답하므로 우리는 build.gradle에 설정한 gson을 이용합니다.
}
}
public class Main {
public static void main(String[] args) {
Call<Object> retrofitTest = RetrofitClient.getApi().retrofitTest(2);//우리는 2페이지를 확인할 것이기 때문에 2를 삽입하겠습니다.
//Call은 retrofit라이브러리의 인터페이스이며 서버에서 응답하는 값을 담는 역할을 합니다.
try {
System.out.println(retrofitTest.execute().body());//서버에서 받은 데이터를 확인해보겠습니다. execute()해줘야 실제 요청이 된다.
} catch (IOException e) {
e.printStackTrace();
}
}
}
이건 진짜 이해가 아니라 ajax처럼 형태를 알고 써야 할 것 같다...뭐라고 하는지😵
SAVE 💾
클라우드 프로젝트로 VM에 1차 프로젝트를 배포해서 링크를 제출해야 했다. 그냥 VM으로 배포하면 됐는데 나는 VMSS에 해야하는 줄 알고 한참을 헤맸다... 결국 하긴 했는데 다른 팀원분께도 시간을 쓰게 만들어서 죄송했다ㅠㅠ 아무튼 되긴 됐는데 포트 열어준 건 다를 바 없는데 왜 안 되다가 된 건지... 도통 알 수 없는 포트의 세계다;;; 인바운드 NAT으로 백 엔드 풀에 SSH 포트를 따로 열어줘서 VMSS 내의 인스턴스에 파일을 올리고 보안 그룹에서 http와 80번 포트를 열어 접속되도록 했다. 클라우드도 기본 틀은 비슷해서 프로그래밍 언어처럼 하나를 제대로 익혀두면 큰 시행 착오 없이 사용할 수 있을 듯하다. 특히 MS 클라우드는 AWS보다 사용설명서?가 더 잘 되어있는 느낌을 받았다.