• AWS 기반 대규모 아키텍트 설계
  • 코드를 통한 인프라 관리
    • terraform
    • ansible
    • packer
  • Docker와 Kubernetes를 활용한 운영
  • Kubernetes on AWS EKS
  • CI/CD 구현
    • terraform CI/Cd 파이프라인
    • Jenkins CI/CD 파이프라인
    • CodePipeline, CodeBuild, CodeDeploy CI/CD 파이프라인
    • Github Action CI/CD
    • Circle CI CI/CD
    • ArgoCD EKS배포
  • 모니터링 서비스 구축 및 운영
    • AWS CloudWatch 모니터링 구축
    • Prometheus & Grafana 모니터링 구축
    • ELK stack을 활용한 웹서비스 로그 확인
    • AWS VPC Flow 로그 수집
  • AWS 기반 보안
    • AWS IAM 관련

'Computer Science > DevOps' 카테고리의 다른 글

[Jenkins] Jenkins 다뤄보기  (0) 2023.06.27
[OS] OS 모음집  (0) 2021.08.12
[CI/CD] Tool  (0) 2021.08.11
[CI/CD] 정의  (0) 2021.08.11
[배경] DevOps?  (0) 2021.08.11

DevOps

  • Development + Operations
  • 소프트웨어 개발자와 정보기술 전문가 간의 소통, 협업 및 통합을 강조하는 개발 환경이나 문화
  • 애플리케이션과 서비스를 빠른 속도로 제공할 수 있도록 조직의 역량을 향상시키는 문화 철학, 방식 및 도구의 조합
  • 조직이 소프트웨어 제품과 서비스를 빠른 시간에 개발 및 배포하는 것을 목적으로 함 → "프로세스 자동화"
  • 이점 (AWS기준)
    • 속도 : 작업 속도가 빨라진다, 업데이트를 좀 더 빠르게 릴리스할 수 있다
    • 신속한 제공 : 릴리스의 빈도와 속도를 개선, 고객의 요구에 더 빠르게 대응
    • 안정성 : 변경사항이 제대로 작동하며 안전한지 테스트
    • 확장 : 규모에 따라 인프라와 개발 프로세스를 운영 및 관리(자동화와 일관성 지원)
    • 협업 강화 : 개발자와 운영팀 
    • 보안 : 제어를 유지하고 규정을 준수하면서 신속하게 진행 가능
  • 방식 (AWS기준)
    • 지속적 통합(CI, Continuous Integration) : 자동화된 빌드 및 테스트가 수행된 후, 개발자가 코드 변경 사항을 중앙 리포지토리에 정기적으로 병합하는 소프트웨어 개발 방식
    • 지속적 전달(CD, Continuous Delivery) : 프로덕션에 릴리스 하기 위한 코드 변경이 자동으로 빌드, 테스트 및 준비되는 소프트웨어 개발 방식
    • 마이크로 서비스 : 단일 애플리케이션을 작은 서비스의 집합으로 구축하는 설계 접근 방식
    • 코드형 인프라 : 버전 관리 및 지속적 통합과 같은 코드와 소프트웨어 개발 기술을 사용하여 인프라를 프로비저닝하고 관리하는 방식
    • 모니터링 및 로깅 : 지표와 로그를 모니터링하여 애플리케이션 및 인프라 성능이 제품의 사용자 경험에 어떤 영향을 미치는지 확인
    • 커뮤니케이션 및 협업 : 개발 및 운영의 워크플로와 책임을 물리적으로 합침

CI/CD

 

DevOps 사례

https://chloe-codes1.gitbook.io/til/aws/aws_builders/06_devops_-_-_-_-_-_ : AWS DevOps

https://m.blog.naver.com/infopub/222059275874 : facebook DevOps

 

DevOps 엔지니어

DevOps Manager sw개발의 일부로 프로젝트의 효과적인 계획 및 인프라 자원을 제공하고 클라우드 기반의 숙련된 지식을 가지고 리드하는 역할(sw개발 프로세스 수립, 운영 / 품질과 효율성, 생산성, 적기 릴리즈)
Principal DevOps Engineer 숙련된 클라우드 기술 경험을 바탕으로 프로젝트 관리에 뛰어난 통찰력과 다양한 인프라에 대한 기술을 갖추고 리딩하는 역할(sw릴리스 및 인프라 자동화를 위해 CI/CD 파이프 라인을 자동화 / 클라우드 네트워킹 구성요소의 아키텍처 설계 및 운영)
DevOps Engineer 완전 자동화 된 CI/CD 프로세스 구축을 위해 sw 개발 및 인프라 지원팀과 긴밀히 협력할 수 있는 역할(sw개발 전체흐름 파악 / 배포, 테스트 및 프로덕션 시스템의 유지 관리 시간 및 품질을 향상)
  • 업무 영역
DevOps Manager - 지속적인 개선에 중점을 둔 운영 및 지침을 제공하는 DevOps 팀을 리드/관리
- sw개발 운영의 로드맵 / 비전 수립 및 계획
- CI/CD 자동화 시스템 구축 및 배포에 대한 가이드, 모범 사례 발굴 및 전개
- 운영 절차와 실무를 정의하고 문서화하여 일관성있게 적용되도록 보장
- 새로운 서비스를 제공할 수 있도록 팀 내에서 변경 사항을 정리하고 의사결정
- 모든 절차 및 개발 인프라 계약에 대해 최신의 문서가 있는지 확인
- 고객 에스컬레이션에 대한 책임을 지고 필요에 따라 즉각적인 대응 및 계획 수립
Principal DevOps Engineer - sw 개발 인프라 아키텍처 설계 및 cost 산정
- DevOps 솔루션을 정의, 설계 및 구현에 있어 주도적인 관리
- CI/CD 환경 구현, 유지 보수 및 개선을 총괄하고 이를 고객에게 presentation
- 고객, 서비스 엔지니어링 팀 및 지원 간의 기술 연락 역할
- 기술 문서 및 절차 작성
- 클라우드 환경에 대한 VPN 및 연결 구현, 네트워크와 통합
- sw개발, 인프라 지원팀과 문제를 해결하는 역할
DevOps Engineer - CI/CD 프로세스 및 자동화 시스템을 구축하기 위한 개발 업무
- sw 개발 흐름을 이해하고 배포, 테스트 및 시스템의 유지 관리 및 개선활동
  • 필요한 기술들
DevOps Manager - 엔지니어링 리더 경험 10년 이상
- 다양한 클라우드 환경의 devops 프로젝트에서 5년 이상의 경험
- 클라우드 및 Linux 숙련자
- DevOps, 테스트 및 개발에 대한 전문 지식
- 클라우드 플랫폼 기술 관리자 / 아키텍트
- 프로젝트 및 개발 리소스 관리 경험
-네트워크 및 IT 인프라에 대한 이해
- 고급 스크립트 언어 스킬(Python, Bash, JavaScript, Perl)
- Jenkins, Ansible 및 Artifactory와 같은 도구를 사용한 CI/CD 시스템을 개발하고 테스트 및 구성하여 DevOps 환경을 개발한 경험
- 효율성, 비용 절감 및 지속적인 개선 기회를 주도하고 기획
Principal DevOps Engineer - DevOps 엔지니어 또는 설계자로서 최소 5년 이상의 경험
- 성과 평가 책임을 가진 팀 리딩 역할 능력
- Linux 기반 환경에서 sw개발 및 sw 테스트 방법론과 변경 및 구성 관리 실무에 대한 이해
- 클라우드 환경에 대한 AWS, Azure 및 Google Cloud 및 오케스트레이션 도구에 대한 구축 경험 및 이해
- CI/CD 환경 구축 및 운영 경험
- 컨테이너 기반 환경에 대한 전문 지식(Docker)
- 인프라 자동화 도구에 대한 전문 지식(Puppet, Chef, Ansible)
- 고급 스크립트 언어 스킬(Python, Ruby, Perl)
- 디자인 패턴 및 리팩토링 개념의 이해
- VPN, CIDR, 서브넷, 인증서 관련 사운드 네트워크 지식
DevOps Engineer - 개발 및 생산을 위한 CI/CD 파이프 라인 구축에 대한 이해 및 경험
- 클라우드 서비스에 대한 이해 및 경험
- Docker와 같은 컨테이너 기반 기술 이해 및 경험
- 리눅스 환경에 대한 전문 지식
- 기본 스크립트 언어 능력 : Pyhton/Bash/Perl 등
- Ansible과 같은 구성 관리 도구 사용 경험
- Jenkins 이해 및 경험
- 소스제어(Bitbucket, Gerrit, Gitlab 등)에 대한 깊은 이해
- 모니터링(Grafana, Prometheus) 서비스 구축 경험

 

DevOps가 나온 이유가 사용자의 피드백을 받아서 빠르게 릴리스를 하기 위해 나온듯하다...? 개인적인 생각일 뿐.. 막 새로운 테스트에 대해 고민하고 하다 보니 여러 테스트 방법들이 나왔고 이 과정을 자동화하면 더 빠르게 서비스를 업데이트할 수 있다..! ❗

개발을 하면서 어떻게 하면 효율적, 반복적인 일을 줄일까? 인프라 담당자, CI/CD를 주로 하는 형상관리업무, 개발 프로세스를 담당하는 위치에 있는 사람들이 조금씩 확장시켜 나가면 DevOps 엔지니어의 길로 갈듯..?

'Computer Science > DevOps' 카테고리의 다른 글

[Jenkins] Jenkins 다뤄보기  (0) 2023.06.27
[OS] OS 모음집  (0) 2021.08.12
[CI/CD] Tool  (0) 2021.08.11
[CI/CD] 정의  (0) 2021.08.11
[배경] DevOps 공부  (0) 2021.08.11

내가 설정해둔 spring의 암호화 방법은 bCrypt이다.

 //MvcConfig
 @Bean(name = "bCryptPasswordEncoder")
  public BCryptPasswordEncoder passwordEncoder() {
    return new BCryptPasswordEncoder();
  }

 

초기 admin 계정을 넣을 때 비밀번호를 어떻게 찾을까?

https://www.devglan.com/online-tools/bcrypt-hash-generator

위의 사이트에서 text를 넣고 rounds를 선택해 Hash를 누르면 저절로 암호화된다.

이 암호문을 data.sql에 알맞은 위치에 넣고 실행시키면 admin 계정 비밀번호가 잘 저장되어 있을 것이다.

 

더 자세한 내용은

https://jusths.tistory.com/158

 

비밀번호 안전보관: bcrypt 를 알아보자

개요 사용자의 비밀번호를 그대로 보관하는 것은 위험하다. 비밀번호 보관에 특화된 bcrypt 를 알아보자. 참고링크 - 링크: https://auth0.com/blog/hashing-in-action-understanding-bcrypt/ - 링크: https://d2...

jusths.tistory.com

 

spring을 처음 실행시킬 때 초기 데이터를 넣어주기 위함이다.

 

  • application.yml 또는 application-local.yml
spring:
	datasource:
    	initialization-mode: always

처음에 이 상태로 실행시킨다.

 

  • data.sql

 위와 같이 data.sql 파일을 만들고 초기 데이터에 대한 SQL문을 넣는다.

 

위의 두개 설정을 마치고 실행시키면 DB에 초기값이 들어간다.

이후에 yml파일의 initialization-mode의 속성을 never로 바꾸어준다!

Intelli J에서 실행은 되지만 크롬 브라우저에서 들어가려고 하니.. 오류가 뜬다!

 

해결방법!

  • 주소를 https:// 에서 http://로 바꿔서 접속한다

 

❗ 너무 간단해서 오히려 화가난다.. ❗

❗ http와 https 사용법도 나중에 정리해야지.. ❗

'Web > Spring' 카테고리의 다른 글

[bcrypt] password 암호화  (0) 2021.08.10
[DB] 초기 데이터 삽입  (0) 2021.08.10
[Login구현] 권한부여(Role)  (0) 2021.08.10
[Login구현] 사용자 등록하기(Register)  (0) 2021.08.10
[Login구현] login-logout구현(setting)  (0) 2021.08.10

Role 사용을 해보자

내 프로젝트의 경우 ADD버튼이 admin으로 로그인했을 때만 나타나야 한다.

 

  • Role
@Getter
@AllArgsConstructor
public enum Role {
  ROLE_ADMIN("관리자", RoleBase.ADMINISTRATOR),
  ROLE_USER("사용자", RoleBase.USER);

  private String text;
  private RoleBase roleBase;

  public static List<Role> findByRoleBase(RoleBase roleBase) {
    return Arrays.stream(Role.values()).filter(p -> p.getRoleBase().equals(roleBase))
        .collect(Collectors.toList());
  }
}

일단 role은 ROLE_ADMIN과 ROLE_USER로 설정

DB에 admin 계정을 하나 넣어준다.(이를 처음 실행할 때 자동으로 넣어주도록 data.sql 파일을 생성해 넣어줘야 하는데 아직 구현하지 않았다.. 현재는 수동으로..!)

뒤에 User에 맞춰서 수동으로 넣어준다.

 

  • add버튼 관련
<html lang="ko" xmlns:th="http://www.thymeleaf.org" xmlns:sec="http://www.thymeleaf.org/extras/spring-security">
<!--      admin-->
      <a class="addButton" th:text="|ADD|" th:href="|@{/project/edit}|" sec:authorize="hasRole('ROLE_ADMIN')"></a>

저렇게 설정하면 admin계정으로 로그인하면 add버튼이 보이고 logout 하면 보이지 않는다.

 

❗ 추가적으로 아예 관리자 대시보드를 만들려면 Controller에 어노테이션을 넣어준다. ❗

@Secured("ROLE_ADMIN")

그러면 해당 controller가 작동할 때는 admin계정으로 로그인했을 때이다.

+ Recent posts