오늘할일
1. LeetCode
2. KMOOC강의 수강(2/3)
3. 오픽공부
오늘한일
1. LeetCode
private Boolean isSameList(List<Boolean> result, List<Boolean> answer){
result.forEach(System.out::print);
System.out.print(", ");
result.forEach(System.out::print);
System.out.print("의 비교결과: ");
if(result.size()!= answer.size()) {
System.out.println("fail");
return false;
}
for(int i=0; i<result.size(); i++) {
if (!result.get(i).equals(answer.get(i))) {
System.out.println("fail");
return false;
}
}
System.out.println("passed");
return true;
}
public static void main(String[] args) {
/*
* 사탕을 가지고 있는 n명의 아이들.
* 정수배열 candies[i]에는 i번째 아이가 가지고 있는 사탕의 개수를 표현한다.
* extraCandies인자는 자신이 가지고 있는 여분의 사탕을 의미한다.
*
* 길이가 n인 부울배열을 반환한다.
* extraCandues를 i번째 아이에게 주고나면 result[i]를 true로 세팅한다.
* 그들은 가장 많은 사탕을 모든 아이들에게 주려고하며 나머지는 false이다
* 여러 아이들에게 가장 큰 수의 사탕을 가질 수 있다.
*
* n==candies.length
* 2<=n<=100
* 1<=candies[i]<=100
* 1<=extraCandies<=50
* */
Solution solution=new Solution();
//case1
solution.isSameList(
solution.kidsWithCandies(new int[]{2, 3, 5, 1, 3},3)
, Arrays.asList(true, true, true, false, true)
);
//case2
solution.isSameList(
solution.kidsWithCandies(new int[]{4,2,1,1,2},1)
, Arrays.asList(true, false, false, false, false)
);
//case3
solution.isSameList(
solution.kidsWithCandies(new int[]{12,1,12},10)
, Arrays.asList(true, false, true)
);
}
그 후 문제풀이를 간소화 하기 위해 한 아이의 사탕이 가장 큰지를 확인하는 작업을 별도의 함수로 작성하여 전반적인 처리 과정을 간소화시켰다.
public List<Boolean> kidsWithCandies(int[] candies, int extraCandies) {
List<Boolean> result=new ArrayList<>(candies.length);
for(int i=0; i<candies.length; i++){
if(this.isGreatestNumber(candies, candies[i]+extraCandies)){
result.add(true);
} else{
result.add(false);
}
}
return result;
}
private Boolean isGreatestNumber(int[] candies, int number){
for(int i=0; i<candies.length; i++)
if(candies[i]>number)
return false;
return true;
}
지난번에 정말 오래걸렸던 것과 달리 이번 문제는 바로 패스하였다. 이러한 접근 방식을 고수하는 것이 좋아보인다.
2. KMOOC강의 수강
오픈소스를 활용한 DevOps의 이해 1주차
- DevOps는 기술과 시장의 빠른 변화에 대응하기 위한 최신 소프트웨어 개발/운영 트렌드로 Development+Operations(+Quality Assurance)의 합성어이다.
- DevOps는 Saas(Software as a Service)를 위한 것이다.
- 애자일개발: 계획->개발(무상태 프로세스, 동시성, 보안 포트바인딩 등)
- 지속적 통합: 애자일개발+빌드X테스트(완벽한 빌드 후 테스트)
- 지속적 전달배포: 지속적 통합+릴리즈X배포(병목과 지연을 대응. UI와 부하 및 통합 테스트를 수행하며, 스테이징 환경까지 배포한다.
- 지속적 서비스 전달/개선 서비스 수준관리: 지속적 전달배포+운영X모니터링
- 도메인 주도 설계: 업무 담당자와 개발자 간의 공통의 언어와 개념을 맞추고 설계 및 개발을 진행하는 방식.
- 역공학을 이용하여 클래스를 모델링한 뒤 해당 모델로 논의하며 코드와 설계의 갭을 줄인다.
- 오픈소스 DevOps 도구사슬
- Jenkins는 웹 인터페이스로 간편하게 지속적 통합(빌드->테스트->배포)을 자동화해준다.
- SonarQube는 소스코드 정적분석으로 품질 대시버드를 제공한다.
클라우드 인프라 아키텍처 양성과정 1주차
- 공용인터넷을 통해 제공되는 퍼블릭 클라우드와, 사설 내부 네트워크 혹은 인터넷을 통해 제공되는 프라이빗 클라우드, 둘을 결합한 하이브리드 클라우드로 분류된다.
- IaaS(Infrastructure as a Service)는 임대하여 종량제 형태의 IT 인프라. 가장 유연한 클라우드 서비스
- PaaS(Platform as a Service)는 기본 인프라 관리보다 빌드, 테스트, 배포에 집중. 아파치, 인프라는 공급자가 처리
- SaaS(Software as a Service)는 전자메일같은 클라우드 기반 앱에 연곃하여 사용. 구독 모델에서 사용하는 소프트웨어에 대한 비용을 지불
- 온-프레미스는 프라이빗 클라우드로 네트워킹부터의 모든 과정을 고객이 관리하는 방식.
- Microsoft Azure IaaS기반 다중 지역 부하분산 아키텍처 예제
- 하나의 리전에 장애가 발생했을 때 다른 리전을 사용하여 사용자가 장애발생여부 자체를 알 수 없게 한다.
- VMSS(Virtual Machine Scale Set)은 여러 서버를 하나의 동일한 시스템으로 구현할 때 사용하는 것으로, VM크기를 동적으로 조절한다
- Azure Active Directory는 계정관리를 수행한다